由於Linux主機本身除了自己的網路訊息的輸入(INPUT)與輸出(OUTPUT)以外,還可以幫下面的主機轉傳(FORWARD)網路封包。所以說,iptables最基本功能是單一主機的filter table:
- INPUT:管理網路封包輸入
- OUTPUT:管理網路封包輸出
- FORWARD:管理網路封包轉傳
觀察filter table
# iptables -t filter -nL什麼都不管的iptable的樣子
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
以上就是什麼東西都不設定,列出來INPUT, FORWARD與OUTPUT,詳細的說明請參考鳥哥的文章。當網路封包進出的時候,會先根據各種設定的規則(Rule)依序執行,如果所有規則都不符合,那就會參考預設的policy。所以上述policy ACCEPT的意思就是預設通通都可以通過; 如果是policy DROP的話就是預設所有網路封包都擋下。
列出Rules先後次序的編號
# iptables -t filter -nL --line-number
這些規則可以分別派給不同的網卡,這指令會顯示網卡的編號
# iptables-save -t filter
設定Policy,也就是預設的規則
iptables是用列表的方式來寫規則(Rules),網路封包會依序按照規則比對來決定封包的處理方式。如果封包都不符合所有規則,那就是用預設的規則叫Policy
1. 預設封鎖所有進入的封包
# iptables -P INPUT DROP
2. 預設接受所有流出的封包
# iptables -P OUTPUT ACCEPT
添加規則
1. 接受所有進入lo介面卡的封包。(lo是主機一定有的虛擬介面卡)# iptables -A INPUT -i lo -j ACCEPT
2. 接受或是拒絕所有來自某個IP的封包。(eth0是單一主機對外的網路卡)
# iptables -A INPUT -i eth0 -s good_IP_address -j ACCEPT
# iptables -A INPUT -i eth0 -s bad_IP_address -j DROP
3. 拒絕所有進入port 23的封包。(port 23是telnet預設的埠)
# iptables -A INPUT -i eth0 -p tcp --dport 23 -j DROP
4. 拒絕所有外面機器來自port 1~1023主動連線的封包。
# iptables -A INPUT -i eth0 -p tcp --sport 1:1023 --dport 1:1023 --syn -j DROP
要注意條規則會造成主動連線FTP的問題
5. 添加的規則優先順序放到第三,參考了张映的博客
# iptables -I INPUT 3 -p tcp -m tcp --dport 20 -j ACCEPT
修改規則
將INPUT的規則3設定成DROP# iptables -R INPUT 3 -j DROP
刪除規則
1. 將INPUT的規則3刪除# iptables -D INPUT 3
2. 清除所有關於INPUT的規則
# iptables -F INPUT
3. 清除本機所有防火牆的規則,依序是清除規則、殺掉所有的chain、chain的計數歸零
# iptables -F
# iptables -X
# iptables -Z
這方法只有清除規則,不會改變Policy
儲存規則
1. 儲存規則到檔案# iptables-save > /etc/firewall.rules
2. 從某規則檔案導入
# iptables-restore < /etc/firewall.rules
上面兩個方法都只是暫時的,所以參考了gslin的Debian 重開機後維持 iptables 設定值的作法,安裝iptables-persistent
# apt-get install iptables-persistent
# iptables-save > /etc/iptables/rules
重開機後就會直接根據設定好的rules去執行了
沒有留言:
張貼留言