3、NTP服务器搭建:在Linux上搭建NTP服务器(ntpd vs chrony),配置文件详解,安全加固

时间同步这事儿,看着不起眼,但真出问题的时候,能把人折腾得够呛。我记得有一次线上排查故障,日志时间差了整整8分钟,几个团队互相甩锅,最后发现是NTP服务挂了。从那以后,我对时间同步就特别上心。

今天咱们聊聊在Linux上怎么搭NTP服务器。说白了,就是让局域网里的机器都能对上表。你想想看,如果服务器集群里时间都不一致,那日志分析、证书验证、分布式事务全得乱套。

3.1 ntpd vs chrony:到底选哪个?

Linux上主流的NTP实现就两个:老牌的ntpd和新秀chrony。我个人的习惯是,新部署的系统直接用chrony,除非有特殊兼容性要求。

为什么会这样?咱们看个对比就明白了。

特性 ntpd chrony
启动同步速度 较慢,需要多次轮询 快,几秒内完成初始同步
网络波动适应性 一般 优秀,能处理不对称延迟
配置复杂度 中等 简单直观
资源占用 较高 较低
日志管理 syslog 自带轮转和统计

嗯,这里要注意:如果你用的是RHEL/CentOS 7及以上,或者Ubuntu 16.04以上,chrony已经是默认安装了。我在项目中遇到过一台跑了5年的老机器,ntpd死活同步不上,换成chrony后问题秒解。

3.2 实战:用chrony搭建NTP服务器

咱们直接上手。假设你要搭建一台内网NTP服务器,让它从公网NTP池同步,然后给内网其他机器提供服务。

3.2.1 安装chrony

# CentOS/RHEL
yum install -y chrony

# Ubuntu/Debian
apt install -y chrony

安装完先别急着启动,咱们得改配置文件。

3.2.2 配置文件详解

chrony的主配置文件是 /etc/chrony.conf。我习惯先备份原文件,再从头写一份干净的。

# 使用阿里云的NTP服务器(国内速度快)
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst

# 允许内网客户端同步(根据你的网段调整)
allow 192.168.1.0/24

# 禁止所有其他来源
deny all

# 本地时钟作为备用(当公网不可用时)
local stratum 10

# 日志和统计
logdir /var/log/chrony
log measurements statistics tracking

# 让chrony作为时间服务器
# 默认就是开启的,不需要额外配置

这里有几个关键点:

  • iburst:加速初始同步,我建议所有server行都加上
  • allow/deny:访问控制,安全的第一道防线
  • local stratum:当公网断了,这台机器还能作为次级时间源
注意:stratum值不要设得太小。我曾经图省事设成5,结果内网其他机器优先同步到这台不准确的本地时钟,整个网络的时间全偏了。教训啊!

3.2.3 启动和验证

# 启动服务
systemctl start chronyd
systemctl enable chronyd

# 查看同步状态
chronyc sources -v

# 查看详细统计
chronyc tracking

看到 ^* 标记的源,就说明同步成功了。如果全是 ^?,那得检查网络和防火墙。

3.3 安全加固:别让NTP成为突破口

NTP服务如果裸奔,很容易被利用做DDoS放大攻击。我见过不少案例,就是因为NTP没加固,服务器成了肉鸡。

3.3.1 访问控制

刚才配置文件里的 allow 和 deny 就是第一层。但还不够,我建议再加一层:

# 只允许特定客户端
allow 192.168.1.100
allow 192.168.1.101

# 或者用子网
allow 192.168.1.0/24

# 拒绝所有其他
deny all

3.3.2 限制查询命令

chrony默认允许客户端查询状态,这有信息泄露风险。可以这样限制:

# 在chrony.conf中添加
cmdallow 127.0.0.1
cmddeny all

这样只有本机才能执行 chronyc 命令。

3.3.3 使用非特权端口

默认NTP用123端口,容易被扫描。我习惯改成高端口,然后配合iptables做转发:

# chrony.conf
port 12345

# iptables规则
iptables -t nat -A PREROUTING -p udp --dport 123 -j REDIRECT --to-port 12345
小技巧:改端口后别忘了放行防火墙。我曾经改完端口忘了开,结果整个内网时间停了半天才被发现。

3.4 监控和告警

服务搭好了,不代表万事大吉。我建议加个定时任务,检查时间偏差:

#!/bin/bash
# 检查时间偏差,超过1秒就告警
OFFSET=$(chronyc tracking | grep "RMS offset" | awk '{print $4}')
THRESHOLD=1.0

if (( $(echo "$OFFSET > $THRESHOLD" | bc -l) )); then
    echo "时间偏差过大: ${OFFSET}秒" | mail -s "NTP告警" admin@example.com
fi

把这个脚本加到crontab里,每5分钟跑一次,基本就能覆盖大部分异常场景。

3.5 本章小结

搭建NTP服务器其实不难,难的是考虑周全。我总结几个要点:

  • 新系统用chrony,老系统看情况
  • 配置文件要精细,别偷懒用默认
  • 安全加固不能省,访问控制、端口限制都要做
  • 监控告警要跟上,别等问题爆发才知道

嗯,关于NTP服务器搭建,核心内容就这些。下一章咱们聊聊更深入的时间同步优化策略。

NTP服务器搭建知识体系 选择NTP实现 ntpd(传统方案) chrony(推荐方案) 搭建NTP服务器 安装与配置 启动与验证 安全加固 监控与告警

核心要点:

  • chrony是当前推荐方案,启动快、适应性强
  • 配置文件要精细控制访问权限
  • 安全加固是必修课,不是可选项
  • 监控告警能帮你提前发现问题

可可精品资料库