辛星解讀Linux下iptables的配置
查看與清除儲存規則:
查看本機iptables設定: iptables -L -n
清除預設表filter中的所有規則連的規則: iptables -F
清除預設表filter中使用者自定鏈中的規則: iptables -X
把當前配置儲存: /etc/rc.d/init.d/iptables save
重啟iptables功能: service iptables restart
設定預設規則:
iptables -p INPUT DROP
iptables -p OUTPUT ACCEPT
iptables -p FORWARD DROP
上面的意思是超出了iptables裡的filter表中的兩個鏈規則(INPUT、FORWARD)時,不在這兩個規則包裡的資料包直接DROP,也就是放棄。這樣的配置還是很安全的,我們要控制流程入資料包。而對於OUTPUT鏈,也就是流出的包,我們不用做太多限制,而是採用ACCEPT,也就是說,不在這個規則裡的包也可以通過。
也就是說INPUT、FORWARD這兩個鏈採用的是允許什麼包通過,而OUTPUT鏈採用的是不允許什麼包通過。當然我們也可以三個鏈都使用DROP,但是這樣要寫的規則就會增加。如果我們只想要有限的幾個規則,比如只作為web伺服器,那麼我們還是推薦這三個鏈都是DROP。
INPUT鏈:
INPUT鏈的預設規則是DROP,我們就需要寫ACCEPT(通過)的鏈:
為了能遠程登入,我們要開啟22連接埠,操作為:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT (注意,如果我們把OUTPUT設定為DROP的時候要寫上它,如果我們忘了寫它,那麼會出現始終無法ssh的情況)
如果我們做了web伺服器,我們需要開啟80連接埠,操作為:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
當然如果我們的WEB伺服器把OUTPUT也設定為了DROP,那麼還需要加上:
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
如果我們做了郵件伺服器,通常需要開啟25和110連接埠:
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
如果我們做了DNS伺服器,那麼通常開啟53連接埠:
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
允許loopback,不然會導致DNS無法正常關閉等問題:
iptables -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)
iptables -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)
OUTPUT鏈:
由於OUTPUT鏈預設規則是ACCEPT,所以我們需要些DORP(放棄)的鏈。
我們可以減少不安全的連接埠串連,比如31337,如下:
iptables -A OUTPUT -p tcp --sport 31337 -j DROP
iptables -A OUTPUT -p tcp --dport 31337 -j DROP
比如我們只允許192.168.0.101的機器進行SSH串連,如下:
iptables -A INPUT -s 192.168.0.101 -p tcp --dport 22 -j ACCEPT
如果要允許或者限制一段IP可以用192.168.0.0/24表示192.168.0.1-255之間的所有IP,這裡的24是子網路遮罩數。
如果我們允許所有IP都可以進行SSH串連,如下:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
儲存配置:
因為對於命令的方式,都是即時生效的,如果想要重啟後也生效,就要寫入到/etc/sysconfig/iptables裡面。
我們可以使用/etc/rc.d/init.d/iptables save來儲存當前配置到設定檔中
FORWARD鏈:
FORWARD鏈的預設規則也是DROP,所以我們就寫需要ACCEPT的鏈,對正在轉寄鏈的監控。
首先我們需要開啟轉寄功能,在做NAT時,FORWARD預設規則是DROP時,必須做:
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
我們丟棄壞的TCP包:
iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP
我們處理IP片段數量,防止攻擊,允許每秒100個:
iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
設定ICMP包過濾,允許每秒1個包,限制觸發條件是10個包:
iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT