{
  "title": "How to Configure NTP and Chrony on Windows and Linux to Meet NIST SP 800-171 REV.2 / CMMC 2.0 Level 2 - Control - AU.L2-3.3.7",
  "date": "2026-04-16",
  "author": "Lakeridge Technologies",
  "featured_image": "/assets/images/blog/2026/4/how-to-configure-ntp-and-chrony-on-windows-and-linux-to-meet-nist-sp-800-171-rev2-cmmc-20-level-2-control-aul2-337.jpg",
  "content": {
    "full_html": "<p>Accurate, auditable timestamps are required by NIST SP 800-171 Rev.2 and CMMC 2.0 Level 2 (control AU.L2-3.3.7) to ensure log integrity, event correlation, and reliable incident investigations—this post gives you practical, step-by-step instructions to configure NTP (Chrony on Linux) and Windows Time so you can meet the control, collect evidence, and reduce the risk of failed audits.</p>\n\n<h2>Why time synchronization matters for AU.L2-3.3.7</h2>\n<p>NIST/CMMC requires that timestamps are consistent and trustworthy because disparate or drifting clocks break log correlation, invalidate forensic timelines, cause authentication failures (Kerberos), and complicate incident response. A single second of drift across systems can make it impossible to trace an attack path in logs; auditors expect documented architecture, configuration baselines, and verification evidence showing that systems synchronize to authoritative, secure time sources.</p>\n\n<h2>High-level implementation approach (Compliance Framework)</h2>\n<p>Your compliance approach should include an architecture diagram, designated authoritative time sources, device groupings (domain controllers, servers, endpoints, network devices), secure configuration baselines, and monitoring/alerting. For small businesses this often means: (1) choose reliable external upstream servers (NTP Pool, NIST, Cloudflare), (2) run an internal authoritative server (PDC emulator in AD or a Chrony server) that clients sync to, (3) enforce UDP/123 firewall rules, and (4) document settings and evidence for the assessment package.</p>\n\n<h2>Configure Chrony on Linux</h2>\n<p>Install and configure Chrony as the recommended NTP client/server for modern Linux distributions. Example steps: on Debian/Ubuntu use <code>apt-get install chrony</code>, on RHEL/CentOS use <code>yum install chrony</code>. Edit <code>/etc/chrony/chrony.conf</code> (or <code>/etc/chrony.conf</code>) and set upstream servers and local options, for example: <code>server 0.pool.ntp.org iburst</code>, <code>server 1.pool.ntp.org iburst</code>, and allow LAN clients with <code>allow 192.168.0.0/24</code>. Enable step corrections for large drifts with <code>makestep 1.0 3</code> and enable kernel RTC sync with <code>rtcsync</code>. Then run <code>systemctl enable --now chronyd</code> and verify with <code>chronyc tracking</code> and <code>chronyc sources -v</code>.</p>\n\n<h3>Chrony: security, authentication, and firewall</h3>\n<p>For compliance, prefer an internal chrony server that authenticates to upstream public sources and serves authenticated or restricted service to internal hosts. Chrony supports NTP symmetric key authentication—create a keyfile <code>/etc/chrony.keys</code> with MD5 keys and reference it in <code>chrony.conf</code> using <code>keyfile /etc/chrony.keys</code> and per-server <code>server 198.51.100.1 key 1</code>. Ensure UDP 123 is allowed between clients and your internal NTP server; block inbound NTP from untrusted networks. Document firewall rules (e.g., allow UDP/123 only to your NTP server IPs) as part of your control evidence.</p>\n\n<h2>Configure Windows Time Service (w32time)</h2>\n<p>Domain-joined environments: ensure the PDC Emulator (FSMO role) on the domain controller is configured as the authoritative time source and syncs to external authoritative servers. On the PDC run: <code>w32tm /config /manualpeerlist:\"time.windows.com,0x9 time.cloudflare.com,0x9\" /syncfromflags:MANUAL /reliable:yes /update</code>, then <code>net stop w32time &amp;&amp; net start w32time</code> and verify with <code>w32tm /query /status</code> and <code>w32tm /query /peers</code>. For standalone Windows servers or workstations, configure <code>manualpeerlist</code> and use <code>w32tm /resync</code>—include <code>,0x9</code> to use special poll flags (use reliable, prefer NTP). Keep UDP/123 open to the internal NTP server and collect <code>System</code> event log entries for the Windows Time service as evidence.</p>\n\n<h2>Monitoring, verification, and audit evidence</h2>\n<p>Collect and retain outputs to prove compliance: on Linux capture <code>chronyc tracking</code>, <code>chronyc sources -v</code>, and <code>systemctl status chronyd</code>; on Windows capture <code>w32tm /query /status</code>, <code>w32tm /query /peers</code>, and Time service event IDs (Event Viewer: System, source = Time-Service). Maintain configuration files (<code>/etc/chrony.conf</code>, <code>/etc/chrony.keys</code>, Windows registry/export of time settings) and change control records. Create a scheduled compliance report that flags lost synchronization, high offset (>1 second), or unreachable upstream servers—these alerts are important evidence for AU.L2-3.3.7.</p>\n\n<h2>Best practices and small-business scenarios</h2>\n<p>Small business example 1: single-site shop with AD—configure the PDC emulator to sync to two reliable public NTP servers (one pool and one government/NIST) and point all clients to the domain controllers; document the setup and capture <code>w32tm</code> outputs. Example 2: remote or disconnected sites—deploy a Raspberry Pi with a GPS HAT running Chrony as a local stratum-1 server, restrict NTP access to the LAN, and include GPS logs with your evidence. Best practices: use at least two upstream sources, use an internal hierarchy, restrict NTP via ACLs, monitor offsets and jitter (alert if offset > 1s), and record standard operating procedures and baseline configurations for audits.</p>\n\n<h2>Risk of non-implementation and final compliance tips</h2>\n<p>Failing to implement consistent, secure time synchronization results in unanalyzable logs, failed forensics, Kerberos authentication errors, and audit findings that can block contract awards. For AU.L2-3.3.7 you must demonstrate architecture, secure configurations, monitoring, and retained evidence: include diagrams, configuration files, command outputs, event logs, and change records in your assessment package. During assessments, be ready to show how your internal NTP hierarchy works, firewall rules for UDP/123, and how you responded to any time-service incidents.</p>\n\n<p>In summary, meet AU.L2-3.3.7 by deploying a documented NTP architecture (internal authoritative servers + secure upstreams), configuring Chrony on Linux and w32time on Windows according to the examples above, enforcing UDP/123 controls, and collecting verification outputs and logs as audit evidence—these practical steps will reduce risk and demonstrate compliance to NIST SP 800-171 Rev.2 and CMMC 2.0 Level 2 assessors.</p>",
    "plain_text": "Accurate, auditable timestamps are required by NIST SP 800-171 Rev.2 and CMMC 2.0 Level 2 (control AU.L2-3.3.7) to ensure log integrity, event correlation, and reliable incident investigations—this post gives you practical, step-by-step instructions to configure NTP (Chrony on Linux) and Windows Time so you can meet the control, collect evidence, and reduce the risk of failed audits.\n\nWhy time synchronization matters for AU.L2-3.3.7\nNIST/CMMC requires that timestamps are consistent and trustworthy because disparate or drifting clocks break log correlation, invalidate forensic timelines, cause authentication failures (Kerberos), and complicate incident response. A single second of drift across systems can make it impossible to trace an attack path in logs; auditors expect documented architecture, configuration baselines, and verification evidence showing that systems synchronize to authoritative, secure time sources.\n\nHigh-level implementation approach (Compliance Framework)\nYour compliance approach should include an architecture diagram, designated authoritative time sources, device groupings (domain controllers, servers, endpoints, network devices), secure configuration baselines, and monitoring/alerting. For small businesses this often means: (1) choose reliable external upstream servers (NTP Pool, NIST, Cloudflare), (2) run an internal authoritative server (PDC emulator in AD or a Chrony server) that clients sync to, (3) enforce UDP/123 firewall rules, and (4) document settings and evidence for the assessment package.\n\nConfigure Chrony on Linux\nInstall and configure Chrony as the recommended NTP client/server for modern Linux distributions. Example steps: on Debian/Ubuntu use apt-get install chrony, on RHEL/CentOS use yum install chrony. Edit /etc/chrony/chrony.conf (or /etc/chrony.conf) and set upstream servers and local options, for example: server 0.pool.ntp.org iburst, server 1.pool.ntp.org iburst, and allow LAN clients with allow 192.168.0.0/24. Enable step corrections for large drifts with makestep 1.0 3 and enable kernel RTC sync with rtcsync. Then run systemctl enable --now chronyd and verify with chronyc tracking and chronyc sources -v.\n\nChrony: security, authentication, and firewall\nFor compliance, prefer an internal chrony server that authenticates to upstream public sources and serves authenticated or restricted service to internal hosts. Chrony supports NTP symmetric key authentication—create a keyfile /etc/chrony.keys with MD5 keys and reference it in chrony.conf using keyfile /etc/chrony.keys and per-server server 198.51.100.1 key 1. Ensure UDP 123 is allowed between clients and your internal NTP server; block inbound NTP from untrusted networks. Document firewall rules (e.g., allow UDP/123 only to your NTP server IPs) as part of your control evidence.\n\nConfigure Windows Time Service (w32time)\nDomain-joined environments: ensure the PDC Emulator (FSMO role) on the domain controller is configured as the authoritative time source and syncs to external authoritative servers. On the PDC run: w32tm /config /manualpeerlist:\"time.windows.com,0x9 time.cloudflare.com,0x9\" /syncfromflags:MANUAL /reliable:yes /update, then net stop w32time &amp;&amp; net start w32time and verify with w32tm /query /status and w32tm /query /peers. For standalone Windows servers or workstations, configure manualpeerlist and use w32tm /resync—include ,0x9 to use special poll flags (use reliable, prefer NTP). Keep UDP/123 open to the internal NTP server and collect System event log entries for the Windows Time service as evidence.\n\nMonitoring, verification, and audit evidence\nCollect and retain outputs to prove compliance: on Linux capture chronyc tracking, chronyc sources -v, and systemctl status chronyd; on Windows capture w32tm /query /status, w32tm /query /peers, and Time service event IDs (Event Viewer: System, source = Time-Service). Maintain configuration files (/etc/chrony.conf, /etc/chrony.keys, Windows registry/export of time settings) and change control records. Create a scheduled compliance report that flags lost synchronization, high offset (>1 second), or unreachable upstream servers—these alerts are important evidence for AU.L2-3.3.7.\n\nBest practices and small-business scenarios\nSmall business example 1: single-site shop with AD—configure the PDC emulator to sync to two reliable public NTP servers (one pool and one government/NIST) and point all clients to the domain controllers; document the setup and capture w32tm outputs. Example 2: remote or disconnected sites—deploy a Raspberry Pi with a GPS HAT running Chrony as a local stratum-1 server, restrict NTP access to the LAN, and include GPS logs with your evidence. Best practices: use at least two upstream sources, use an internal hierarchy, restrict NTP via ACLs, monitor offsets and jitter (alert if offset > 1s), and record standard operating procedures and baseline configurations for audits.\n\nRisk of non-implementation and final compliance tips\nFailing to implement consistent, secure time synchronization results in unanalyzable logs, failed forensics, Kerberos authentication errors, and audit findings that can block contract awards. For AU.L2-3.3.7 you must demonstrate architecture, secure configurations, monitoring, and retained evidence: include diagrams, configuration files, command outputs, event logs, and change records in your assessment package. During assessments, be ready to show how your internal NTP hierarchy works, firewall rules for UDP/123, and how you responded to any time-service incidents.\n\nIn summary, meet AU.L2-3.3.7 by deploying a documented NTP architecture (internal authoritative servers + secure upstreams), configuring Chrony on Linux and w32time on Windows according to the examples above, enforcing UDP/123 controls, and collecting verification outputs and logs as audit evidence—these practical steps will reduce risk and demonstrate compliance to NIST SP 800-171 Rev.2 and CMMC 2.0 Level 2 assessors."
  },
  "metadata": {
    "description": "Step-by-step guidance to configure reliable, auditable, and secure time synchronization (NTP/Chrony and Windows Time) to satisfy NIST SP 800-171 Rev.2 / CMMC 2.0 Level 2 AU.L2-3.3.7 requirements.",
    "permalink": "/how-to-configure-ntp-and-chrony-on-windows-and-linux-to-meet-nist-sp-800-171-rev2-cmmc-20-level-2-control-aul2-337.json",
    "categories": [],
    "tags": []
  }
}