我想禁止接收和发送所有大小超过512字节的数据包,并且TTL字段大于30
我是否正确理解了 TTL 看起来是这样的:
iptables -t mangle -A input -j TTL --ttl-set 30
?
但是我还需要在这个规则里指定数据包不超过512字节,我该怎么做?
答案1
我是否正确理解了 TTL 看起来是这样的:
iptables -t mangle -A input -j TTL --ttl-set 30 ?
不。-j TTL
目标用于修改IPv4 TTL头字段。
您不想这样做,您想匹配 TTL 值(和数据包大小 512),然后使用目标-j REJECT
来禁止它。
您需要使用匹配的模块:
iptables
可以使用扩展数据包匹配模块。它们以两种方式加载:隐式加载,当指定-p
或时--protocol
,或使用-m
或--match
选项,后跟匹配的模块名称;此后,根据特定模块,各种额外的命令行选项变为可用。
来源:man iptables
只需激活ttl
配套模块:
生存时间
此模块匹配 IP 标头中的生存时间字段。
--ttl-eq ttl
匹配给定的 TTL 值。
--ttl-gt ttl
如果 TTL 大于给定的 TTL 值,则匹配。
--ttl-lt ttl
如果 TTL 小于给定的 TTL 值,则匹配。
来源:man iptables
和length
配套模块:
长度
此模块将数据包的长度与特定值或值范围进行匹配。
--length [!] length[:length]
来源:man iptables
综合起来,你会得到如下规则:
iptables -A INPUT --match length 513:65535 --match ttl --ttl-gt 30 -j REJECT
或者
iptables -A INPUT --match length ! 1:512 --match ttl --ttl-gt 30 -j REJECT