操作系统:CentOS 7.0
根据安全扫描的结果,建议我们使用防火墙阻止 ICMP 时间戳和时间戳回复消息(CVE-1999-0524)。我已经使用firewalld为SSH设置了一些基本的IP过滤以及允许HTTPS,但是对这一点却束手无策。
我唯一能想到的是firewall-cmd --add-icmp-block
,但我找不到icmptype
似乎与时间戳或时间戳回复相关的。
可用的类型(firewall-cmd --get-icmptypes
)如下:
destination-unreachable echo-reply echo-request parameter-problem redirect router-advertisement router-solicitation source-quench time-exceeded
。
如何使用 阻止 ICMP 时间戳请求firewalld
?
答案1
firewalld
附带一组默认的预定义 ICMP 类型,您可以立即使用:
# firewall-cmd --get-icmptypes
destination-unreachable echo-reply echo-request parameter-problem redirect router-advertisement router-solicitation source-quench time-exceeded timestamp-reply timestamp-request
然而,解析器(/usr/lib/python2.7/site-packages/firewall/core/io/icmptype.py
)并不局限于这些类型,并且允许进行扩展:
首先,按照man iptables-extensions(8)
,部分icmp
:
icmp(IPv4 专用)如果指定了 `--protocol icmp',则可以使用此扩展。它提供以下选项:
[!] --icmp-type {type[/code]|typename} This allows specification of the ICMP type, which can be a numeric ICMP type, type/code pair, or one of the ICMP type names shown by the command iptables -p icmp -h
icmp6 (IPv6 专用) 如果
--protocol ipv6-icmp' or
指定了 --protocol icmpv6',则可以使用此扩展。它提供以下选项:[!] --icmpv6-type type[/code]|typename This allows specification of the ICMPv6 type, which can be a numeric ICMPv6 type, type and code, or one of the ICMPv6 type names shown by the command ip6tables -p ipv6-icmp -h
您所提到的两种类型是 IPv4 特有的,因此您应该使用以下内容来找出 所识别的适当名称iptables
:
# iptables -p icmp -h | grep timestamp
timestamp-request
timestamp-reply
现在,如果你检查包的内容firewalld
,你会发现预定义的 ICMP 类型的存储位置:
# rpm -ql firewalld | grep icmptype
/etc/firewalld/icmptypes
/usr/lib/firewalld/icmptypes/destination-unreachable.xml
/usr/lib/firewalld/icmptypes/echo-reply.xml
/usr/lib/firewalld/icmptypes/echo-request.xml
/usr/lib/firewalld/icmptypes/parameter-problem.xml
/usr/lib/firewalld/icmptypes/redirect.xml
/usr/lib/firewalld/icmptypes/router-advertisement.xml
/usr/lib/firewalld/icmptypes/router-solicitation.xml
/usr/lib/firewalld/icmptypes/source-quench.xml
/usr/lib/firewalld/icmptypes/time-exceeded.xml
/usr/lib/firewalld/xmlschema/icmptype.xsd
/usr/share/man/man5/firewalld.icmptype.5.gz
如果您检查上面引用的解析器,您会发现它在与 对话时使用 XML 文件名作为 ICMP 类型iptables
,因此您需要使用上面找到的 ICMP 类型为要使用的 ICMP 类型编写两个新文件。用户创建的 ICMP 类型应存储在 中/etc/firewalld/icmptypes
。
# cat timestamp-request.xml
<?xml version="1.0" encoding="utf-8"?>
<icmptype>
<short>Timestamp Request</short>
<description>This message is used for time synchronization.</description>
<destination ipv4="yes"/>
<destination ipv6="no"/>
</icmptype>
# cat timestamp-reply.xml
<?xml version="1.0" encoding="utf-8"?>
<icmptype>
<short>Timestamp Reply</short>
<description>This message is used to reply to a timestamp message.</description>
<destination ipv4="yes"/>
<destination ipv6="no"/>
</icmptype>
你最终会得到:
# ll -Z /etc/firewalld/icmptypes
-rw-r--r--. root root system_u:object_r:firewalld_etc_rw_t:s0 timestamp-reply.xml
-rw-r--r--. root root system_u:object_r:firewalld_etc_rw_t:s0 timestamp-request.xml
使用提供的 XSD 验证它们:
# xmllint --schema /usr/lib/firewalld/xmlschema/icmptype.xsd timestamp-request.xml
timestamp-request.xml validates
# xmllint --noout --schema /usr/lib/firewalld/xmlschema/icmptype.xsd timestamp-reply.xml
timestamp-reply.xml validates
重新加载防火墙:
# firewall-cmd --reload
最后添加它们:
# firewall-cmd --add-icmp-block=timestamp-request
# firewall-cmd --add-icmp-block=timestamp-reply
# firewall-cmd --list-icmp-blocks
timestamp-reply timestamp-request
您可以直接查看iptables
规则来检查它们是否已被添加:
iptables -nvL | grep icmp
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
0 0 REJECT all -- * virbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 REJECT all -- virbr0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
0 0 REJECT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 13 reject-with icmp-host-prohibited
0 0 REJECT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 14 reject-with icmp-host-prohibited
0 0 REJECT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 13 reject-with icmp-host-prohibited
0 0 REJECT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 14 reject-with icmp-host-prohibited
第 13 和第 14 类是新增的ICMP 类型。
作为参考,您可以阅读firewalld.icmptypes(5)
手册页。
这些 ICMP 类型已包括在内上游。
答案2
即使没有完成,这也许也会有所帮助firewalld
:
回显“net.ipv4.tcp_timestamps = 0”>> /etc/sysctl.conf 系统控制-p