防火牆和iptables
iptables的基本語法格式
iptables [-t 表名] 命令選項 [鏈名] [條件匹配] [-j 目標動作或跳轉]
說明:表名、鏈名用於指定 iptables命令所操作的表和鏈,命令選項用於指定管理iptables規則的方式(比如:插入、增加、刪除、檢視等;條件匹配用於指定對符合什麼樣 條件的資料包進行處理;目標動作或跳轉用於指定資料包的處理方式(比如允許通過、拒絕、丟棄、跳轉(Jump)給其它鏈處理。
注意:-t 表名 不指定的話 預設為filter表。
iptables命令選項
-A 在指定鏈的末尾新增(append)一條新的規則
-D 刪除(delete)指定鏈中的某一條規則,可以按規則序號和內容刪除
-I
-i指定資料包流入介面,若介面名後加"+",表示匹配該介面開頭的所有介面
-R 修改、替換(replace)指定鏈中的某一條規則,可以按規則序號和內容替換
-L 列出(list)指定鏈中所有的規則進行檢視
-E 重新命名使用者定義的鏈,不改變鏈本身
-F 清空(flush)
-N 新建(new-chain)一條使用者自己定義的規則鏈
-X 刪除指定表中使用者自定義的規則鏈(delete-chain)
-P 設定指定鏈的預設策略(policy)
-Z 將所有表的所有鏈的位元組和資料包計數器清零
-n 使用數字形式(numeric)顯示輸出結果
-v 檢視規則表詳細資訊(verbose)的資訊
-V 檢視版本(version)
-h 獲取幫助(help)
Options: [!] --proto -p proto 指定要檢查哪個協議的資料包:可以是協議程式碼也可以是協議名稱, 如tcp,udp,icmp等。協議名和程式碼對應關係存放在/etc/protocols中 省略該選項時預設檢查所有協議的資料包,等價於all和協議程式碼0 [!] --source -s address[/mask][...] 指定檢查資料包的源地址,或者使用"--src" [!] --destination -daddress[/mask][...] 指定檢查資料包的目標地址,或者使用"--dst" [!] --in-interface -i input name[+] 指定資料包流入介面,若介面名後加"+",表示匹配該介面開頭的所有介面 [!] --out-interface -o output name[+] 指定資料包流出介面,若介面名後加"+",表示匹配該介面開頭的所有介面 --jump -j target 為規則指定要做的target動作,例如資料包匹配上規則時將要如何處理 --goto -g chain 直接跳轉到自定義鏈上 --match -m match 指定擴充套件模組 --numeric -n 輸出數值格式的ip地址和埠號。預設會嘗試反解為主機名和埠號對應的服務名 --table -t table 指定要操作的table,預設table為filter --verbose -v 輸出更詳細的資訊 --line-numbers 當list規則時,同時輸出行號 --exact -x 預設統計流量時是以1000為單位的,使用此選項則使用1024為單位
防火牆處理資料包的四種方式
ACCEPT 允許資料包通過
DROP 直接丟棄資料包,不給任何迴應資訊
REJECT 拒絕資料包通過,必要時會給資料傳送端一個響應的資訊。
LOG在/var/log/messages檔案中記錄日誌資訊,然後將資料包傳遞給下一條規則
新增規則
#iptables -I INPUT -p icmp -j REJECT //向鏈中插入一條規則(預設插入在第一條),對流入的所有icmp資料包,進行拒絕通過。
#iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP //向鏈的尾部插入一條規則,對流入eth1網絡卡的所有源地址為192.168.0.0/16的資料包,進行丟棄。
封堵網段
#iptables -I INPUT -s 10.20.30.0/24 -j DROP //對流入的 源地址屬於10.20.30.0/24網段的所有資料包,進行丟棄。
#iptables -I FORWARD -s 10.20.30.0/24 -j DROP //對轉發鏈 源地址屬於10.20.30.0/24網段的所有資料包,進行丟棄。
#iptables -I INPUT -s 192.168.1.3 -j DROP //丟棄指定IP的資料包。
#iptables -A INPUT -i eth2 -s 192.168.1.2 -j
限制ssh遠端登入
#iptables -A INPUT -p tcp --dport 22 -s 202.13.0.0/16 -j ACCEPT //入方向,對屬於202.13.0.0/16網段的SSH資料包,允許通過。
#iptables-A INPUT -p tcp --dport 22 -j DROP //入方向,拒絕所有ssh資料包通過。
限制埠開放
#iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT //入方向,允許TCP開啟20到1024提供服務。
#iptables-A OUTPUT -p tcp --sport 20:1024 -j ACCEP //出方向,允許TCP開啟20到1024提供服務。
#iptables -A INPUT -i eth1 -p tcp --dport 21 -j DROP //丟棄所有通過 tcp 協議訪問本機 21 埠的資料包
#iptables -A INPUT -i eth1 -p tcp -s 192.168.1.0/24 --sport 1024:65535 --dport ssh -j DROP //丟棄來自192.168.1.0/24網段的1024:65535 埠的訪問本機 ssh 埠的資料包
允許轉發來自192.168.0.0/24區域網段的DNS解析請求資料包
#iptables -A FORWARD -s 192.168.0.0/24 -p udp --dport 53 -j ACCEPT
#iptables-A FORWARD -d 192.168.0.0/24 -p udp --sport 53 -j ACCEPT
限制ping
iptables -I INPUT -p icmp --icmp-type Echo-Request -j DROP //禁止所有主機ping本機
iptables-I INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT
iptables-I INPUT -p icmp --icmp-type destination-Unreachable -j ACCEPT //允許本機ping其他主機
檢視iptables的鏈和規則
#iptables -L //列出filter表中所有鏈的規則(預設為filter表)
#iptables -L INPUT //列出filter表中INPUT鏈的規則
#iptables -L -V //檢視更詳細的資訊
紅框中的內容為鏈的名稱及其預設策略,filter 表中所有鏈的預設策略都是 ACCEPT。紅框下面的行代表什麼呢?
target:代表進行的動作,ACCEPT 是放行,REJECT 是拒絕,DROP 則是丟棄資料包。
port:代表使用的協議,主要有 tcp、udp 和 icmp 三種。
opt:額外的選項說明。
source:規則針對的來源 IP。
destination:規則針對的目標 IP。
因為預設情況下沒有新增自定義的規則,所以上圖中這些行下面都是空的。
清除本機防火牆規則
#iptables -F //清空所有制定的規則
#iptables -X //刪除指定表中使用者自定義的規則鏈(delete-chain)
#iptables -Z //將所有表的所有鏈的位元組和資料包計數器清零
儲存iptables規則
#iptables-save > /etc/sysconfig/iptables
或者
#service iptables save
參考資料: