在随机的一天,我在谷歌上搜索iptables
规则以强化我的桌面,并发现了这篇文章[1]。在某些时候,指南提到使用 tcp 模块和这些规则来阻止无效的 TCP 数据包;
iptables -A INPUT -p tcp -m tcp --tcp-flags ALL FIN,PSH,URG -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -j DROP
我在上述命令上按了回车键,规则已成功应用。然后我尝试将tcp
每个命令的部分替换为udp
例如,如果我执行第三个命令,
iptables -A INPUT -p udp -m conntrack --ctstate NEW -m udp ! --udp-flags FIN,SYN,RST,ACK SYN -j DROP
这返回了一个错误,指出这些规则对于 udp 数据包无效。我使用的是 Debian 操作系统,内核版本 4.9.x
我在网上读到的文章
答案1
TCP 是有状态协议,UDP 是无状态的,因此不能使用ctstate
它。
您要么允许特定端口的 UDP 流量,要么不允许。
也--udp-flags FIN,SYN,RST,ACK SYN
只是纯粹的废话。
简而言之,在急于设置 iptables 之前先熟悉一下 TCP/IP 和 UDP。