From 5b209a8e337f03683c45d0eb6029e2321cc3e82b Mon Sep 17 00:00:00 2001 From: Guilhem Moulin Date: Sun, 8 Dec 2013 00:12:01 +0100 Subject: Configure NTP. We use a "master" NTP server, which synchronizes against stratum 1 servers (hence is a stratum 2 itself); all other clients synchronize to this master server through IPSec. --- group_vars/all.yml | 1 + roles/common/handlers/main.yml | 3 ++ roles/common/tasks/main.yml | 1 + roles/common/tasks/ntp.yml | 17 +++++++ roles/common/templates/etc/iptables/services.j2 | 6 ++- roles/common/templates/etc/ntp.conf.j2 | 59 +++++++++++++++++++++++++ 6 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 roles/common/tasks/ntp.yml create mode 100644 roles/common/templates/etc/ntp.conf.j2 diff --git a/group_vars/all.yml b/group_vars/all.yml index b9e025f..26448c4 100644 --- a/group_vars/all.yml +++ b/group_vars/all.yml @@ -12,3 +12,4 @@ MTA_out: { IPv4: outgoing.fripost.org, port: 2525 } LDA: { IPv4: lda.fripost.org, port: 2526 } LDAP_provider: host1.libvirt.guilhem.org +NTP_master: host1.libvirt.guilhem.org diff --git a/roles/common/handlers/main.yml b/roles/common/handlers/main.yml index 54643ed..2f4f900 100644 --- a/roles/common/handlers/main.yml +++ b/roles/common/handlers/main.yml @@ -29,6 +29,9 @@ # pattern=init as a dummy assumption. service: name=networking pattern=init state=reloaded +- name: Restart ntp + service: name=ntp state=restarted + # TODO: should be in a separate file, since it's used by other roles - name: Restart Postfix service: name=postfix state=restarted diff --git a/roles/common/tasks/main.yml b/roles/common/tasks/main.yml index 355b2df..76967e6 100644 --- a/roles/common/tasks/main.yml +++ b/roles/common/tasks/main.yml @@ -8,4 +8,5 @@ - include: fail2ban.yml tags=fail2ban - include: ipsec.yml tags=strongswan,ipsec - include: logging.yml tags=logging +- include: ntp.yml tags=ntp - include: mail.yml tags=mail,postfix diff --git a/roles/common/tasks/ntp.yml b/roles/common/tasks/ntp.yml new file mode 100644 index 0000000..94d7696 --- /dev/null +++ b/roles/common/tasks/ntp.yml @@ -0,0 +1,17 @@ +- name: Install ntp + apt: pkg=ntp + +- name: Configure ntp + template: src=etc/ntp.conf.j2 + dest=/etc/ntp.conf + owner=root group=root + mode=0644 + register: r + notify: + - Restart ntp + +- name: Start ntp + service: name=ntp state=started + when: not r.changed + +- meta: flush_handlers diff --git a/roles/common/templates/etc/iptables/services.j2 b/roles/common/templates/etc/iptables/services.j2 index 5243ae1..2a36932 100644 --- a/roles/common/templates/etc/iptables/services.j2 +++ b/roles/common/templates/etc/iptables/services.j2 @@ -4,13 +4,17 @@ # direction protocol destination port source port # (in|out|inout)[46]? (tcp|udp|..) (port|port:port|port,port) (port|port:port|port,port) -inout udp 500 500 # ISAKMP +inout udp 500 500 # ISAKMP #inout udp 4500 4500 # IPSec NAT Traversal out tcp 80,443 # HTTP/HTTPS out udp 53 # DNS out udp 67 # DHCP +{% if 'NTP-master' in group_names %} +out udp 123 123 # NTP +{% endif %} + in tcp {{ ansible_ssh_port|default('22') }} # SSH {% if 'MX' in group_names %} in tcp 25 # SMTP diff --git a/roles/common/templates/etc/ntp.conf.j2 b/roles/common/templates/etc/ntp.conf.j2 new file mode 100644 index 0000000..2f70cef --- /dev/null +++ b/roles/common/templates/etc/ntp.conf.j2 @@ -0,0 +1,59 @@ +# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help + +driftfile /var/lib/ntp/ntp.drift + + +# Enable this if you want statistics to be logged. +#statsdir /var/log/ntpstats/ + +statistics loopstats peerstats clockstats +filegen loopstats file loopstats type day enable +filegen peerstats file peerstats type day enable +filegen clockstats file clockstats type day enable + + +# You do need to talk to an NTP server or two (or three). +{% if 'NTP-master' in group_names %} +# Use Stratum One Time Servers: +# http://support.ntp.org/bin/view/Servers/StratumOneTimeServers +server ntp1.sp.se iburst +server ntp2.sp.se iburst +server ntp2.gbg.netnod.se iburst +server ntp1.sth.netnod.se iburst +server ntp2.sth.netnod.se iburst +{% else %} +# Sychronize to our (stratum 2) NTP server through IPSec, to ensure our +# network has a consistent time. +server {{ NTP_master }} iburst +{% endif %} + + +# Access control configuration; see /usr/share/doc/ntp-doc/html/accopt.html for +# details. The web page +# might also be helpful. +# +# Note that "restrict" applies to both servers and clients, so a configuration +# that might be intended to block requests from certain clients could also end +# up blocking replies from your own upstream servers. + +# By default, exchange time with everybody, but don't allow configuration. +restrict -4 default kod notrap nomodify nopeer noquery +restrict -6 default kod notrap nomodify nopeer noquery + +# Local users may interrogate the ntp server more closely. +restrict 127.0.0.1 +restrict ::1 + +# Clients from this (example!) subnet have unlimited access, but only if +# cryptographically authenticated. +#restrict 192.168.123.0 mask 255.255.255.0 notrust + + +# If you want to provide time to your local subnet, change the next line. +# (Again, the address is an example only.) +#broadcast 192.168.123.255 + +# If you want to listen to time broadcasts on your local subnet, de-comment the +# next lines. Please do this only if you trust everybody on the network! +#disable auth +#broadcastclient -- cgit v1.2.3