Linux
如何向 iptables 原始表添加規則?
我正在研究 Linux Mint 18.1 和 GNU/Linux Debian 9 Stretch(測試)。
我只有 IPv4 可用。我想提高我的網路的安全性,我閱讀了以下內容:阻止眾所周知的 TCP 攻擊。假設儘管有此評論,我還是想嘗試一下。
問題是,我不知道如何將這些規則添加到
iptables
’raw
表?
在 的幫助下
iptables-save
,我發現了正確的格式,將其保存到:/etc/iptables/rules.v4
問題中連結上的規則範例如下:
*raw :PREROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A PREROUTING -p icmp -m u32 ! --u32 "0x4&0x3fff=0x0" -j DROP -A PREROUTING -p icmp -m length --length 1492:65535 -j DROP -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP -A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN -j DROP -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP COMMIT
在這裡,我假設您不關心 IPv6。所以你要編輯的文件是:
/etc/sysconfig/iptables
把它放在你的 iptables 文件的頂部。它是 RAW 表的骨架實現,在任何與路由關聯的表(如 FILTER)之前使用。請注意,每個表在其定義的底部都有自己的 COMMIT 命令:
*raw :TCPFLAGS - [0:0] # the two rules below assure that only TCP packets get examined. All others continue into the *filter table. -A PREROUTING -p tcp -j TCPFLAGS -A PREROUTING -j ACCEPT # quickly accept standard handshakes # ALLOW ACK or ACK/SYN #-A TCPFLAGS -j ACCEPT -A TCPFLAGS -p tcp --tcp-flags FIN,ACK,URG,PSH,RST ACK -j ACCEPT # allow ACK/FIN with either URG or PSH, or both, or neither # but SYN and RST can't be set -A TCPFLAGS -p tcp --tcp-flags FIN,SYN,ACK,RST ACK,FIN -j ACCEPT # allow SYN or ACK/SYN -A TCPFLAGS -p tcp --tcp-flags FIN,SYN,URG,PSH,RST SYN -j ACCEPT # allow RST or ACK/RST -A TCPFLAGS -p tcp --tcp-flags FIN,SYN,URG,PSH,RST RST -j ACCEPT # this rule catches xmas-tree and fin attacks -A TCPFLAGS -p tcp --tcp-flags FIN FIN -j DROP # this rule catches xmas-tree and syn/rst attacks -A TCPFLAGS -p tcp --tcp-flags SYN SYN -j DROP # this rule catches null attacks -A TCPFLAGS -p tcp --tcp-flags ALL NONE -j DROP #-A TCPFLAGS -p tcp -ecn-tcp-cwr -j DROP # these rules catch bad ack combinations #-A TCPFLAGS -p tcp --tcp-flags ACK ACK -j ACC -A TCPFLAGS -j ACCEPT # so, what do we accept for tcp? # handshakes (ACK/FIN), (ACK/SYN), (SYN), (ACK), (RST), (ACK/RST), and data packets with # PSH or URG or FIN or ACK COMMIT
以上位於 *filter 定義之上。我對規則的正確性不做任何聲明。請注意,我已經註釋掉了一些對我不起作用的規則。如果您發現我的規則有任何問題,請在下方提出。