Iptables

為什麼修改TCP數據包可以阻止無效數據包,但不能阻止UDP數據包

  • September 22, 2020

在隨機的一天,我正在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

我在網上看到的文章

  1. https://www.booleanworld.com/depth-guide-iptables-linux-firewall/

TCP 是有狀態的協議,UDP 是無狀態的,所以你不能使用ctstate它。

要麼讓特定埠的流量用於 UDP,要麼不讓流量。

--udp-flags FIN,SYN,RST,ACK SYN只是純粹的胡說八道。

簡而言之,在急於設置 iptables 之前先熟悉一下 TCP/IP 和 UDP。

引用自:https://unix.stackexchange.com/questions/610839