一:IPTABLES語法入門:
iptables 是建立在 netfilter 架構基礎上的一個包過濾管理工具
用戶通過 /sbin/iptables 命令來管理 iptables,和 route 命令相同,iptables 命令的效果在重新啟動以后就不再有效。
可以使用 /etc/rc.d/init.d/iptables save 將當前 iptables 規則寫到 /etc/sysconfig/iptables 文件中,那么每次開機時/etc/rc.d/init.d/iptables start 命令會使 /etc/sysconfig/iptables 中的規則生效。
iptables 可以操縱3 個表:filter 表,nat 表,mangle 表。NAT 和一般的 mangle 用 -t 參數指定要操作哪個表。filter 是默認的表,如果沒有 -t 參數,就默認對 filter 表操作。
Rule 規則:過濾規則,端口轉發規則等,例如:禁止任何機器 ping 我們的服務器,可以在服務器上設置一條規則:
bash> iptables -A INPUT -s ! 127.0.0.1 -p icmp -j DROP
從 –s 開始即是一條規則,-j 前面是規則的條件,-j 開始是規則的行為(目的)。整條命令解釋為,在filter 表中的 INPUT 規則鏈中插入一條規則,所有源地址不為 127.0.0.1 的 icmp 包都被拋棄。
Chain 規則鏈:由一系列規則組成,每個包順序經過 chain 中的每一條規則。chain 又分為系統 chain
和用戶創建的 chain。下面先敘述系統 chain。
filter 表的系統 chain: INPUT,FORWAD,OUTPUT
nat 表的系統 chain: PREROUTING,POSTROUTING,OUTPUT
mangle 表的系統 chain: PREROUTING,OUTPUT
每條系統 chain 在確定的位置被檢查。比如在包過濾中,所有的目的地址為本地的包,則會進入INPUT 規則鏈,而從本地出去的包會進入 OUTPUT 規則鏈。
所有的 table 和 chain 開機時都為空,設置 iptables 的方法就是在合適的 table 和系統 chain 中添加相應的規則。
用戶可以創建新的chain。用戶 chain 只有作為某個系統 chain 的目的才有作用。比如創建一個名叫AAA 的規則鏈,想讓 icmp 包通過它的檢驗。
bash> iptables -A INPUT -p icmp -j AAA
上述命令將用戶創建的規則鏈 AAA 作為了一條系統 chain(INPUT)中的規則 “-p icmp” 的目的。
對每條 chain 有一個默認策略,也就是對包的默認的行為??梢栽O為拋棄(DROP)或接受(ACCEPT)。系統啟動的時候所有的默認策略都是 ACCEPT。當包通過了 chain 所有的規則(不符合所有的規則的條件)的時候,系統按默認策略處理這個包。
iptables 命令
針對表的操作
查看:iptables -t table_name -L
刷新:
1、清除所有的規則和用戶創建的chain
iptables -t table_name -F
2、清除所有的記數(符合規則的包的數目)
iptables -t table_name -Z
針對鏈的操作(注意以下都省略了 -t table_name)
查看:iptables -L chain_name
刷新:iptables -F chain_name
清除記數:iptables -Z chain_name
創建新鏈:iptables -N chain_name
刪除鏈:iptables -X chain_name
重命名:iptables -E chain_old_name chain_new_name
設置策略:iptables -P chain_name policy
針對規則的操作
添加一條規則:iptables -A chain_name rule-spec
插入一條規則:iptables -I chain_name 規則號 new_rule_spec (插入后的規則號為命令中指定的
號,原來存在的規則號順延)。
刪除一條規則:有兩種方法刪除規則:通過指定規則號刪除一條規則或通過指定規則的內容來刪除一
條規則。每個規則鏈中的規則號從1 開始記數。
iptables -D chain_name 規則號
iptables -D chain_name 規則內容
修改一條規則:iptables -R chain_name 規則號 new_rule_spec
----------------------------------------------------------------------------------
二,IPTABLES舉例:
1,鏈的基本操作:
清除預設表filter中所有規則鏈中的規則:
iptables -F
清除預設表filter中使用者自定鏈中的規則:
iptables -X
將指定鏈中所有規則的包字節計數器清零:
iptables -Z
--------------------------------
2,設置鏈的默認規則:
首先允許所有包的規則:
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
首先禁止所有包的規則:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
--------------------------------
3,列出表/鏈中的規則:
列出表/鏈中的所有規則
iptables -L
若顯示較慢可以使用
iptables -L -n
--------------------------------
4,向鏈中添加規則:
如:
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A OUTPUT -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -j ACCEPT
iptables -A FORWARD -o eth0 -j ACCEPT
注:由于本地進程不會經過FORWARD鏈,因此lo環回接口只在INPUT和OUTPUT兩個鏈上工作。
--------------------------------
5,使用用戶自定義鏈:
iptables -N brus
iptables -A brus -s 0/0 -d 0/0 -p icmp -j DROP
iptables -A INPUT -s 0/0 -d 0/0 -j brus
此例子的意思是:
第一句建立了一個叫做brus的用戶自定義鏈;
第二句用-A參數添加了一條用戶自定義的封堵規則;
第三句向默認的INPUT鏈添加一條新規則,使所有的包都由brus自定義鏈處理。
---------------------------------
6,設置默認的匹配規則:
匹配指定的協議:
iptables -A INPUT -p tcp
匹配指定協議之外的所有協議:
iptables -A INPUT -p ! tcp
-------------
指定地址匹配:
指定匹配的主機
iptables -A INPUT -s 192.168.1.1
指定匹配的網絡
iptables -A INPUT -s 192.168.1.0/24
指定匹配主機之外的地址
iptables -A FORWARD -s ! 192.168.0.1
指定匹配網絡之外的網絡
iptables -A FORWARD -s ! 192.168.0.0/24
-----------------
指定網絡接口匹配:
指定單一的網絡接口匹配
iptables -A INPUT -i eth0
iptables -A FORWARD -o eth0
指定同類型的網絡接口
iptables -A FORWARD -o eth+
-------------
指定端口匹配:
指定單一端口匹配
iptables -A INPUT -p tcp --sport www
iptables -A INPUT -p tcp --sport 80
iptables -A INPUT -p udp --sport 53
iptables -A INPUT -p udp --dport 53
匹配指定端口以外的端口
iptables -A INPUT -p tcp --sport ! 22
匹配指定的端口范圍
iptables -A INPUT -p tcp --sport 22:80
匹配ICMP端口和ICMP類型
iptables -A INPUT -p icmp --icmp-type 8