Intro Linux iptables iptables是Linux上常用的防火牆軟件,iptables用來過濾網路封包, 正確的設定 iptables 規則可以有效提升 Linux 網路安全,網管人員設定開放哪些 IP 與哪些 Port,來阻擋駭客攻擊。
iptables 的設計結構可以分三層, Table -> Chains -> Rules , iptables 中可以包含多個 Table ,而一個 Table 又可以包含多個 Chain ,一個 Chain 也可以包含多個 Rule 。
Table :防火牆規則群組。 Chain:防火牆規則鏈。 Rule:防火牆規則。
Chains & Tables 1 iptables 內建有五個 Tables,分別是 Filter Table, NAT Table, Mangle Table, Raw Table, Security Table。
Filter Table 1 2 3 4 5 6 7 Filter Table 是 iptables 中預設的 table,如果你沒有新增自訂的 Table ,那麼 iptable 會使用 Filter Table 裡的設定來處理網路封包。 Filter Table 預設有三個 Chain : INPUT, OUTPUT, FORWARD, 分別用來處理三種不同的網路封包。 INPUT chain:處理由外部機器傳過來的封包。 OUTPUT Chain:處理本機傳出去給別台機器的封包。 FORWARD Chain:處理外部機器透過本機,要傳給第三方機器的封包,如果你的機器是一台 Router or Proxy,才會存在這種封包。
NAT Table : Network Address Translation 1 2 3 4 NAT Table 預設有二個 Chain : PREROUTING, POSTROUTING 。 PREROUTING chain : 再 Routing 之前轉換封包來源 IP 資訊,例如。 POSTROUTING chain : 再 Routing 之後轉換封包本機 IP 資訊,例如本機 IP 會寫成 127.0.0.1 ,但是傳送出去後,會轉換回對外開放的 IP 如 10.99.82.1。
Rule & Target 1 2 3 4 5 iptables 預設有三種 Target ,分別是 ACCEPT, REJECT, LOG 。 ACCEPT:接受這個封包 REJECT:拒絕這個封包 LOG: 記錄下這個封包, Log 寫入檔案 /var/log/message
如何使用 iptables 1 2 3 4 5 6 7 8 使用 iptables 前,前先確定你的系統有安裝以下兩個套件。 iptables iptables-services CentOS 安裝方式如下: sudo yum install iptables-services iptables
清除已有iptables規則 1 2 3 使用 -F 參數可以清除 iptables 所有的 rule 。 sudo iptables -F
開放指定的端口 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT iptables -A INPUT -m state -state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -j ACCEPT iptables -A INPUT -p tcp -dport 22 -j ACCEPT iptables -A INPUT -p tcp -dport 80 -j ACCEPT iptables -A INPUT -p tcp -dport 21 -j ACCEPT iptables -A INPUT -p tcp -dport 20 -j ACCEPT 1).用DROP方法 iptables -A INPUT -p tcp -j DROP 2).用REJECT方法 iptables -A INPUT -j REJECT iptables -A FORWARD -j REJECT
過濾IP 1 2 3 4 5 6 7 8 iptables -I INPUT -s 123.45.6.7 -j DROP iptables -I INPUT -s 123.0.0.0/8 -j DROP iptables -I INPUT -s 124.45.0.0/16 -j DROP iptables -I INPUT -s 123.45.6.0/24 -j DROP
查看已建立的iptables規則 1 2 3 4 iptables -L -n v:顯示詳細信息,包括每條規則的匹配包數量和匹配字節數 x:在 v 的基礎上,禁止自動單位換算(K、M) vps偵探 n:只顯示IP地址和端口號,不將ip解析為域名
刪除已添加的iptables規則 1 2 3 4 5 6 7 8 9 將所有iptables以序號標記顯示,執行: iptables -L -n -line-numbers 上面指令在 centOS 上測試結果: Bad argument `-line-numbers' Try `iptables -h' or 'iptables --help' for more information.刪除INPUT裡序號為8的規則,執行: iptables -D INPUT 8
iptables的開機啟動及規則保存 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 CentOS上可能會存在安裝好iptables後,iptables並不開機自啟動,可以執行一下: chkconfig -level 345 iptables on 將其加入開機啟動。 CentOS上可以執行下列指令來儲存規則: service iptables save Debian/Ubuntu上iptables是不會保存規則的,請使用 iptables-save 指令可以儲存所有的 chain & rule 。 sudo iptables-save > /etc/iptables.rules 為了重啟服務器後,規則自動載入,我們建立以下文件: sudo vim /etc/network/if-pre-up.d/iptables iptables-save > /etc/iptables.rules 設定執行權限: chmod +x /etc/network/if-pre-up.d/iptables在 CentOS: The /etc/sysconfig/iptables-config file stores information used by the kernel to set up packet filtering services at boot time or whenever the service is started.