Linux Iptables 語(yǔ)法大全
Linux Iptables 語(yǔ)法還是比較重要的,讓我們來(lái)看看有些值得我們關(guān)注。
1. 對(duì)鏈的操作
建立一個(gè)新鏈 (-N)。
刪除一個(gè)空鏈 (-X)。
改變一個(gè)內(nèi)建鏈的原則 (-P)。
列出一個(gè)鏈中的規(guī)則 (-L)。
清除一個(gè)鏈中的所有規(guī)則 (-F)。
歸零(zero) 一個(gè)鏈中所有規(guī)則的封包字節(jié)(byte) 記數(shù)器 (-Z)。
2. 對(duì)規(guī)則的操作
加入(append) 一個(gè)新規(guī)則到一個(gè)鏈 (-A)的最后。
在鏈內(nèi)某個(gè)位置插入(insert) 一個(gè)新規(guī)則(-I),通常是插在最前面。
在鏈內(nèi)某個(gè)位置替換(replace) 一條規(guī)則 (-R)。
在鏈內(nèi)某個(gè)位置刪除(delete) 一條規(guī)則 (-D)。
刪除(delete) 鏈內(nèi)第一條規(guī)則 (-D)。
3. 指定源地址和目的地址
通過--source/--src/-s來(lái)指定源地址(這里的/表示或者的意思,下同),通過--destination/--dst/-s來(lái)指定目的地址??梢允褂靡韵滤闹蟹椒▉?lái)指定ip地址:
a. 使用完整的域名,如“www.linuxaid.com.cn”;
b. 使用ip地址,如“192.168.1.1”;
c. 用x.x.x.x/x.x.x.x指定一個(gè)網(wǎng)絡(luò)地址,如“192.168.1.0/255.255.255.0”;
d.
用x.x.x.x/x指定一個(gè)網(wǎng)絡(luò)地址,如“192.168.1.0/24”這里的24表明了子網(wǎng)掩碼的有效位數(shù),這是
UNIX環(huán)境中通常使用的表示方法。
缺省的子網(wǎng)掩碼數(shù)是32,也就是說指定192.168.1.1等效于192.168.1.1/32。
4. 指定協(xié)議
可以通過--protocol/-p選項(xiàng)來(lái)指定協(xié)議,比如-p tcp。
5. 指定網(wǎng)絡(luò)接口將
可以使用--in-interface/-i或--out-interface/-o來(lái)指定網(wǎng)絡(luò)接口。需要注意的是,對(duì)于INPUT鏈來(lái)說,只可能有-i,也即只會(huì)有進(jìn)入的包;通理,對(duì)于OUTPUT鏈來(lái)說,只可能有-o,也即只會(huì)有出去的包。只有FORWARD鏈既可以有-i的網(wǎng)絡(luò)接口,也可以有-o的網(wǎng)絡(luò)接口。我們也可以指定一個(gè)當(dāng)前并不存在的網(wǎng)絡(luò)接口,比如ppp0,這時(shí)只有撥號(hào)成功后該規(guī)則才有效。
6. 指定ip碎片
在TCP/IP通訊過程中,每一個(gè)網(wǎng)絡(luò)接口都有一個(gè)最大傳輸單元(MTU),這個(gè)參數(shù)定義了可以通過的數(shù)據(jù)包的最大尺寸。如果一個(gè)數(shù)據(jù)包大于這個(gè)參數(shù)值時(shí),系統(tǒng)會(huì)將其劃分成更小的數(shù)個(gè)數(shù)據(jù)包(稱之為ip碎片)來(lái)傳輸,而接收方則對(duì)這些ip碎片再進(jìn)行重組以還原整個(gè)包。
但是再進(jìn)行包過濾的時(shí)候,ip碎片會(huì)導(dǎo)致這樣一個(gè)問題:當(dāng)系統(tǒng)將大數(shù)據(jù)包劃分成ip碎片傳送時(shí),第一個(gè)碎片含有完整的包頭信息,但是后續(xù)的碎片只有包頭的部分信息,比如源地址,目的地址。因此假如我們有這樣一條規(guī)則:
iptables -A FORWARD -p tcp -s 192.168.1.0/24 -d 192.168.2.100 --dport 80 -j
ACCEPT
并且這時(shí)的FORWARD的策略(policy)為DROP時(shí),系統(tǒng)只會(huì)讓第一個(gè)ip碎片通過,而丟掉其余的ip碎片,因?yàn)榈谝粋€(gè)碎片含有完整的包頭信息,可以滿足該規(guī)則的條件,而余下的碎片因?yàn)榘^信息不完整而無(wú)法滿足規(guī)則定義的條件,因而無(wú)法通過。
我們可以通過--fragment/-f選項(xiàng)來(lái)指定第二個(gè)及其以后的ip碎片,比如以上面的例子為例,我們可以再加上這樣一條規(guī)則來(lái)解決這個(gè)問題:
iptables -A FORWARD -f -s 192.168.1.0/24 -d 192.168.2.100 -j ACCEPT
但是需要注意的是,現(xiàn)在已經(jīng)有好多進(jìn)行ip碎片攻擊的實(shí)例(比如向Win98 NT4/SP5,6
Win2K發(fā)送大量的ip碎片進(jìn)行DoS攻擊),因此允許ip碎片通過是有安全隱患的,對(duì)于這一點(diǎn)我們可以采用iptables的匹配擴(kuò)展來(lái)進(jìn)行限制,但是這又會(huì)影響服務(wù)質(zhì)量,我們將在下面討論這個(gè)問題。
7. 指定非
可以在某些選項(xiàng)前加上!來(lái)表示非指定值,比如“-s -!
192.168.1.1/32”表示除了192.168.1.1以外的ip地址,“-p -!
tcp”表示除了tcp以外的協(xié)議。
#p#
8. TCP匹配擴(kuò)展
通過使用--tcp-flags選項(xiàng)可以根據(jù)tcp包的標(biāo)志位進(jìn)行過濾,該選項(xiàng)后接兩個(gè)參數(shù):第一個(gè)參數(shù)為要檢查的標(biāo)志位,可以是SYN,ACK,F(xiàn)IN,RST,URG,PSH的組合,可以用ALL指定所有標(biāo)志位;第二個(gè)參數(shù)是標(biāo)志位值為1的標(biāo)志。比如你要過濾掉所有SYN標(biāo)志位為1的tcp包,可以使用以下規(guī)則:
iptables -A FORWARD -p tcp --tcp-flags ALL SYN -j DROP
選項(xiàng)--syn是以上的一種特殊情況,相當(dāng)于“--tcp-flags SYN,RST,ACK SYN”的簡(jiǎn)寫。
9. mac匹配擴(kuò)展
可以使用-m選項(xiàng)來(lái)擴(kuò)展匹配內(nèi)容。使用--match mac/-m
mac匹配擴(kuò)展可以用來(lái)檢查ip數(shù)據(jù)包的源mac地址。只要在--mac-source后面跟上mac地址就可以了。比如:
iptables -A FORWARD -m mac --mac-source 00:00:BA:A5:7D:12 -j DROP
需要注意的是一個(gè)ip包在經(jīng)過路由器轉(zhuǎn)發(fā)后,其源mac地址已經(jīng)變成了路由器的mac地址。
10. limit匹配擴(kuò)展
limit擴(kuò)展是一個(gè)非常有用的匹配擴(kuò)展。使用-m nat 來(lái)指定,其后可以有兩個(gè)選項(xiàng):
--limit avg:
指定單位時(shí)間內(nèi)允許通過的數(shù)據(jù)包的個(gè)數(shù)。單位時(shí)間可以是/second、/minute、/hour、/day或使用第一個(gè)字母,比如5/second和5/s是一樣的,都是表示每秒可以通過5個(gè)數(shù)據(jù)包,缺省值是3/hour。
--limit-burst number:指定觸發(fā)事件的閥值,缺省值是5。
看起來(lái)好像有點(diǎn)復(fù)雜,就讓我們來(lái)看一個(gè)例子:
假設(shè)又如下的規(guī)則:
iptables -A INPUT -p icmp -m limit --limit 6/m --limit-burst 5 -j ACCEPT
iptables -P INPUT DROP
然后從另一部主機(jī)上ping這部主機(jī),就會(huì)發(fā)生如下的現(xiàn)象:
首先我們可以看到前四個(gè)包的回應(yīng)都很正常,然后從第五個(gè)包開始,我們每10秒可以收到一個(gè)正常的回應(yīng)。這是因?yàn)槲覀冊(cè)O(shè)定了單位時(shí)間(在這里是每分鐘)內(nèi)允許通過的數(shù)據(jù)包的個(gè)數(shù)是每分鐘6個(gè),也即每10秒鐘一個(gè);其次我們又設(shè)定了事件觸發(fā)閥值為5,所以我們的前四個(gè)包都是正常的,只是從第五個(gè)包開始,限制規(guī)則開始生效,故只能每10秒收到一個(gè)正?;貞?yīng)。
假設(shè)我們停止ping,30秒后又開始ping,這時(shí)的現(xiàn)象是:
前兩個(gè)包是正常的,從第三個(gè)包開始丟包,這是因?yàn)樵谶@里我的允許一個(gè)包通過的周期是10秒,如果在一個(gè)周期內(nèi)系統(tǒng)沒有收到符合條件的包,系統(tǒng)的觸發(fā)值就會(huì)恢復(fù)1,所以假如我們30秒內(nèi)沒有符合條件的包通過,系統(tǒng)的觸發(fā)值就會(huì)恢復(fù)到3,假如5個(gè)周期內(nèi)都沒有符合條件的包通過,系統(tǒng)都觸發(fā)值就會(huì)完全恢復(fù)。不知道你明白了沒有,歡迎你來(lái)信討論。
11. LOG目標(biāo)擴(kuò)展
netfilter缺省的目標(biāo)(也就是一旦滿足規(guī)則所定義以后系統(tǒng)對(duì)數(shù)據(jù)包的處理方法)有:
ACEEPT:接收并轉(zhuǎn)發(fā)數(shù)據(jù)包
DORP:丟掉數(shù)據(jù)包
目標(biāo)擴(kuò)展模塊提供了擴(kuò)展的目標(biāo)。LOG目標(biāo)提供了記錄數(shù)據(jù)包的功能。該目標(biāo)擴(kuò)展有以下幾個(gè)參數(shù):
--log-level:指定記錄信息的級(jí)別,級(jí)別有debug、info、notice、warning、err、crit、alert、emerg分別對(duì)應(yīng)7到0的數(shù)字。其含義請(qǐng)參看syslog.conf的man手冊(cè)。
--log-prefix:后接一個(gè)最長(zhǎng)為30個(gè)字符的字符串,該字符串將出現(xiàn)在每一條日志的前面。
12. REJECT目標(biāo)擴(kuò)展
該目標(biāo)擴(kuò)展完全和DORP標(biāo)準(zhǔn)目標(biāo)一樣,除了向發(fā)送方返回一個(gè)“port
unreachable”的icmp信息外。
還有其他一些擴(kuò)展是常用的,如果你想了解可以參考Packet-Filtering-HOWTO。當(dāng)然,最直接獲得幫助的辦法是查看iptables的在線幫助,比如想得到關(guān)于mac匹配擴(kuò)展的幫助可以執(zhí)行“iptables
-m mac -help”命令,想得到LOG目標(biāo)擴(kuò)展的幫助可以執(zhí)行“iptables -j LOG
-help”命令。
通過文章,我們知道了十二條有用的Linux Iptables 語(yǔ)法,希望對(duì)大家有所幫助!
【編輯推薦】
- 用iptables做IP的靜態(tài)映射
- 如何把iptables外網(wǎng)端口全部映射到內(nèi)網(wǎng)一臺(tái)主機(jī)上
- 配置Linux 內(nèi)核并利用iptables 做端口映射
- iptables映射端口具體操作
- 用iptables做地址映射
- linux下清空所有iptables規(guī)則
- 如何清空其中一條iptables規(guī)則