必须在本机层面阻断ICMP时间戳请求(Type 13)与回复(Type 14)响应,firewalld方式执行firewall-cmd --add-icmp-block=timestamp-request --permanent和--add-icmp-block=timestamp-reply --permanent后重载并验证;iptables方式需分别在INPUT/OUTPUT链丢弃对应报文,IPv6需用ip6tables补充;内核参数方式仅部分定制系统支持。

局域网内设备若响应ICMP时间戳请求(Type 13/14),会暴露系统启动时间、时钟偏差等信息,攻击者可据此推测内核版本、服务运行时长甚至辅助侧信道攻击;必须在本机层面阻断响应行为,而非仅依赖交换机或上层防火墙。
用firewalld永久封禁时间戳请求与回复
此方法适用于使用firewalld作为默认防火墙的发行版(如CentOS/RHEL/Fedora),规则写入持久化配置,重启不失效。
执行以下两条命令依次添加拦截规则:
firewall-cmd --add-icmp-block=timestamp-request --permanent
firewall-cmd --add-icmp-block=timestamp-reply --permanent
重载防火墙使规则生效:
firewall-cmd --reload
验证是否已加入黑名单:
firewall-cmd --list-icmp-blocks | grep -E "timestamp-(request|reply)"
输出应同时包含 timestamp-request 和 timestamp-reply。若只出现其一,说明某条命令执行失败,需重新输入。
用iptables直接丢弃时间戳报文
该方法绕过firewalld抽象层,直操作netfilter INPUT/OUTPUT链,兼容所有Linux发行版,且对IPv4/IPv6分别控制更明确。
方法一:仅拦截入站时间戳请求(防探测)
sudo iptables -A INPUT -p icmp --icmp-type timestamp-request -j DROP
方法二:同时拦截出站时间戳回复(防信息泄露)
sudo iptables -A OUTPUT -p icmp --icmp-type timestamp-reply -j DROP
方法三:IPv6环境必须补充(否则IPv6仍可被探测)
sudo ip6tables -A INPUT -p icmpv6 --icmpv6-type 136 -j DROP
sudo ip6tables -A OUTPUT -p icmpv6 --icmpv6-type 137 -j DROP
【重要前提】iptables规则默认不持久化,重启即丢失。Ubuntu/Debian系需执行:
sudo iptables-save > /etc/iptables/rules.v4
RHEL/CentOS系需执行:
sudo service iptables save 或 sudo iptables-save > /etc/sysconfig/iptables
通过内核参数彻底禁用时间戳处理能力
这是最底层的防护方式——让内核根本不解析ICMP Type 13/14报文,连协议栈都不进,零日志、零匹配开销。但注意:该参数并非标准内核接口,仅部分定制内核或打过补丁的发行版支持;主流发行版中不可用,误配将无任何效果。
第一步:确认当前内核是否支持该参数
sysctl -a 2>/dev/null | grep -i "timestamp" | grep -v "net.ipv4.icmp"
第二步:若上一步有输出且含 icmp_timestamp_ignore 类似字段,则临时启用:
echo 1 | sudo tee /proc/sys/net/ipv4/icmp_timestamp_ignore
第三步:永久生效需写入配置文件
echo "net.ipv4.icmp_timestamp_ignore = 1" | sudo tee -a /etc/sysctl.conf && sudo sysctl -p


















