NTPD's binding behavior isn't arbitrary - it serves specific technical purposes in time synchronization architecture:
// Typical NTPD configuration showing interface binding # /etc/ntp.conf example interface ignore wildcard interface listen 192.168.1.100 interface listen 127.0.0.1 interface listen ::1
1. Protocol Requirements: NTP (RFC 5905) must handle:
- Unicast client requests
- Broadcast/multicast time announcements
- IPv4 and IPv6 dual-stack operation
2. Security Isolation: Separate sockets allow different security policies:
# Example: Different restrictions per interface restrict 127.0.0.1 nomodify notrap restrict ::1 nomodify notrap restrict 192.168.1.0 mask 255.255.255.0
The multiple bindings enable:
// Checking active NTP associations shows different sources $ ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== *LOCAL(0) .LOCL. 5 l 12 64 377 0.000 0.000 0.000 +ntp1.example.com 192.53.103.108 2 u 25 64 377 12.345 1.234 0.567
For systems where this is undesirable:
# Minimal NTPD configuration interface ignore wildcard interface listen 127.0.0.1 interface listen ::1
The interface ignore wildcard
directive prevents the 0.0.0.0 binding while maintaining essential functionality.
Inspect actual socket usage with:
$ ss -ulpn | grep ntpd UNCONN 0 0 127.0.0.1:123 0.0.0.0:* users:(("ntpd",pid=1234,fd=12)) UNCONN 0 0 [::1]:123 [::]:* users:(("ntpd",pid=1234,fd=13))
When examining NTPd's network behavior (netstat -tuln
or ss -ulnp
), we observe it binds to:
# IPv4
udp 0.0.0.0:123 # Wildcard binding
udp 127.0.0.1:123 # Localhost
udp 192.168.1.10:123 # LAN interface
udp X.X.X.X:123 # Public IPv4
# IPv6
udp6 :::123 # Wildcard
udp6 ::1:123 # Localhost
udp6 fe80::1%eth0:123 # Link-local
udp6 2001:db8::1:123 # Global IPv6
NTPd implements these bindings for specific technical requirements:
- 0.0.0.0/::: Responds to NTP broadcasts/multicasts (RFC 5905 Section 7.5)
- 127.0.0.1/::1: Local service synchronization (critical for systemd-timesyncd handoff)
- Specific interfaces: For multi-homed servers with policy-based time serving
To modify this behavior in /etc/ntp.conf
:
# Restrict to specific interfaces
interface ignore wildcard
interface listen 192.168.1.10
interface listen 2001:db8::1
# Disable IPv6 completely (if needed)
disable ipv6
The default configuration follows the principle of maximum compatibility. For hardened setups:
# Example UFW rules for NTP
ufw allow proto udp from 192.168.1.0/24 to any port 123
ufw allow proto udp from 203.0.113.5 to any port 123
ufw deny 123/udp
To verify NTPd's actual network exposure:
# Show bound interfaces
ntpq -c "ifstats"
# Check active connections
ntpdc -c monlist
# Alternative to netstat
ss -ulnp | grep ntp