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