iptables簡單教程
【概述】
netfilter/iptables是linux系統自帶的免費防火牆,能夠實現防火牆、NAT(網絡地址翻譯)和數據包分割功能
netfilter工作在內核層,iptables工作在用戶層,可以方便用戶定義規則集的表結構。
【iptables選項介紹】
netfilter的用戶控制命令是iptables,通過iptables建立適當的規則添加到內核中實現信息數據包的過濾。
iptables的一般語法如下:
iptalbes [-t table] command [match] [target]
一條iptables規則包含4個基本元素,
1)表(table)
[-t table] 選項允許使用標准表之外的任何表。有三種可以使用的表選項:filter、nat和mangle。
2)命令(command)
command部分是iptables命令的最重要部分,它告訴iptables命令要做什麼,例如,插入規則、將規則添加到
鏈的末尾或刪除規則。主要有如表1所示的命令。
表1 iptables常用命令
-A或--append 該命令將一條規則附加到鏈的末尾
-D或--delete 通過用-D指定要匹配的規則或者指定規則在鏈中的位置編號,該命令從鏈中刪除該規則
-P或--policy 該命令設置鏈的默認目標,即策略。所有與鏈中任何規則都不匹配的信息包都將被強制使
用此鏈的策略
-N或--new-chain 用命令中所指定的名稱創建一個新鏈
-F或--flush 如果指定鏈名,該命令刪除鏈中的所有規則,如果未指定鏈名,該命令刪除所有鏈中的所
有規則。此參數用於快速清除
-L或--list 列出指定鏈中的所有規則
-R或--replace 替換指定鏈中一條匹配的規則
-X或--delete-chain 刪除指定用戶的的定義鏈,若沒有指定鏈,則刪除所有的用戶鏈
-C或--check 檢查數據包是否與指定鏈的規則相匹配
-Z或--zero 將指定鏈中所有規則的byte計數器清零
3)匹配(match)
iptables命令的可選match部分指定信息包與規則匹配所應具有的特征(如源和目的地地址、協議等)。匹配分為
兩大類:通用匹配和特定於協議的匹配。這裡,將研究可用於采用任何協議的信息包的通用匹配。下面是一些重
要的且常用的通用匹配及其說明,如表2所示。
表2 通用匹配說明
通用匹配 說 明
-p或--protocol 該通用協議匹配用於檢查某些特定協議。協議示例有TCP、UDP、ICMP、用逗號分隔的任何這三
種協議的組合列表以及ALL(用於所有協議)ALL是默認匹配。可以使用!符號表示不與該項匹配
-s 或 --source 該源匹配用於根據信息包的源IP地址來與它們匹配。該匹配還允許對某一范圍內的IP地址進行匹
配,可以使用!符號,表示不與該項匹配。默認源匹配與所有IP地址匹配
-d 或 --destination 該目的地匹配用於根據信息包的目的地IP地址來與它們匹配。該匹配還允許對某一范圍內IP
地址進行匹配,可以使用!符號表示不與該項匹配
--sport 指定匹配規則的源端口或端口范圍
--dport 指定匹配規則的目的端口或端口范圍
-i 匹配單獨的網絡接口或某種類型的接口設置過濾規則
4)目標(target)
前面已經講過,目標是由規則指定的操作,對與那些規則匹配的信息包執行這些操作。除了允許用戶定義的目標之
外,還有許多可用的目標選項。下面是常用的一些目標及其示例和說明,如表3所示。
表3 目標項說明
目 標 項 說 明
ACCEPT 當信息包與具有ACCEPT目標的規則完全匹配時,會被接受(允許它前往目的地)
DROP 當信息包與具有DROP目標的規則完全匹配時,會阻塞該信息包,並且不對它做進一步處理。該目標被
指定為-j DROP
REJECT 該目標的工作方式與DROP目標相同,但它比DROP好。和DROP不同,REJECT不會在服務器和客戶機上
留下死套接字。另外,REJECT將錯誤消息發回給信息包的發送方。該目標被指定為-j REJECT
RETURN 在規則中設置的RETURN目標讓與該規則匹配的信息包停止遍歷包含該規則的鏈。如果鏈是如INPUT之
類的主鏈,則使用該鏈的默認策略處理信息包。它被指定為-jump RETURN
LOG 表示將包的有關信息記錄入日志
TOS 表示改寫數據包的TOS值
【iptables使用實例】
實際使用規則如下:
只允許某個ip訪問某個端口
#iptables -A INPUT -p tcp -s 61.145.251.36 --dport 16322 -j ACCEPT
-A 在INPUT鏈中增加,
-p 表示協議
-s 表示源地址
--dport 表示目的端口
-j 目標操作
其他的ip都拒絕
#iptables -A INPUT -p tcp --dport 16322 -j REJECT
刪除一條規則(刪除INPUT鏈中第一條規則,具體可以man iptables)
#iptalbes -D INPUT 1
插入一條規則(插入到INPUT鏈中第二條規則)
#iptables -I INPUT 2 -p tcp -s 61.145.251.63 --dport 16322 -j ACCEPT
限制某個網口的訪問(eth0 的端口訪問插入一條規則)
#iptables -I INPUT 3 -p tcp -s 61.145.251.66 -i eth0 --dport 16322 -j ACCEPT
#iptables -I INPUT 4 -p udp -s 61.145.251.66 -i eth0 --dport 16322 -j ACCEPT
限制某個網段的訪問
#iptables -I INPUT 5 -p tcp -s 192.168.0.0/16 -i eth1 --dport 3306 -j REJECT
對於iptables的一些其他選項可以查看使用手冊:man iptables
和iptables並行的還有iptables-save和iptables-restore命令,分別用來保存和恢復規則
保存規則到iptables-save.txt
#iptables-save > iptables-save.txt
從保存文件中恢復
#iptables-restore < iptables-save.txt
對於已經含有規則的表格,可以先iptables-save,然後做修改,最後再iptables-restore。