Iptables
為什麼修改TCP數據包可以阻止無效數據包,但不能阻止UDP數據包
在隨機的一天,我正在Google搜尋
iptables
規則以強化我的桌面,並遇到了這篇文章$$ 1 $$. 在某些時候,該指南提到使用具有這些規則的 tcp-modules 阻止無效的 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
我在上述命令上按了返回,並且成功應用了規則。然後我嘗試用 for 替換
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
我在網上看到的文章
TCP 是有狀態的協議,UDP 是無狀態的,所以你不能使用
ctstate
它。要麼讓特定埠的流量用於 UDP,要麼不讓流量。
也
--udp-flags FIN,SYN,RST,ACK SYN
只是純粹的胡說八道。簡而言之,在急於設置 iptables 之前先熟悉一下 TCP/IP 和 UDP。