iptables(二)匹配方式和常用擴(kuò)展模塊

iptables(一)中已經(jīng)介紹了 iptables 的表凛膏、鏈的概念和關(guān)系朽基,以及表的基本操作定罢。
本次 iptables(二)中將介紹iptables 的匹配方式和常用的擴(kuò)展模塊芍殖。

一掷伙、基本匹配

基本匹配條件:原地址 Source IP 和 目標(biāo)地址 Destination IP

1. 使用-s參數(shù)時(shí)批量添加 ip

示例:

root@kvm:~# iptables -t filter -I INPUT -s 10.1.1.2,10.1.1.3 -j DROP
root@kvm:~# iptables -nvL INPUT
Chain INPUT (policy ACCEPT 29 packets, 2202 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       all  --  *      *       10.1.1.3             0.0.0.0/0
    0     0 DROP       all  --  *      *       10.1.1.2             0.0.0.0/0
    5   420 DROP       all  --  *      *       192.168.55.132       0.0.0.0/0

-s添加多個 IP 時(shí)中間使用逗號","分割即可

2. 使用-s參數(shù)添加網(wǎng)段

示例:

root@kvm:~# iptables -t filter -I INPUT -s 10.1.2.0/10 -j ACCEPT
root@kvm:~# iptables -nvL INPUT
Chain INPUT (policy ACCEPT 9 packets, 636 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  *      *       10.0.0.0/10          0.0.0.0/0
    0     0 DROP       all  --  *      *       10.1.1.3             0.0.0.0/0
    0     0 DROP       all  --  *      *       10.1.1.2             0.0.0.0/0
    5   420 DROP       all  --  *      *       192.168.55.132       0.0.0.0/0

3. 使用-s時(shí)可以對條件取反嘿期,在-s前添加嘆號"!"即可

示例:

root@kvm:~# iptables -t filter -I INPUT ! -s 10.1.1.2 -j ACCEPT
root@kvm:~# iptables -nvL INPUT
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
   13   932 ACCEPT     all  --  *      *      !10.1.1.2             0.0.0.0/0

  • 規(guī)則解釋:
    規(guī)則的意思只要報(bào)文原地址不是10.1.1.2都接受疚膊。

現(xiàn)在使用10.1.1.2去 ping iptables測試機(jī)發(fā)現(xiàn)是可以 ping 通的忽舟。

因?yàn)闆]有規(guī)則說明當(dāng) ip 地址是10.1.1.2的時(shí)候去做什么動作随闺,所以當(dāng)10.1.1.2通過 INPUT 鏈時(shí)日川,是找不到相應(yīng)規(guī)則的,它執(zhí)行的是filter 表 INPUT 鏈默認(rèn)ACCEPT規(guī)則矩乐。

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

也就是說當(dāng)你的filter 表 INPUT 鏈默認(rèn)是 DROP 時(shí)龄句,10.1.1.2的機(jī)器將不能 ping 通本機(jī)。

  • 錯誤理解:
    只要報(bào)文原地址是10.1.1.2就不接受散罕。這樣理解是不對的

4. 使用-d參數(shù)定制目標(biāo) IP 地址規(guī)則

示例:

iptables 測試機(jī) ip 信息

root@kvm:~# ifconfig | awk '/inet addr/{print $1,$2}'
inet addr:192.168.55.128
inet addr:192.168.55.129
inet addr:192.168.55.130
inet addr:127.0.0.1
inet addr:10.0.80.1

添加禁止192.168.55.132地址到192.168.55.128地址的數(shù)據(jù)請求

root@kvm:~# iptables -t filter -I INPUT -s 192.168.55.132 -d 192.168.55.128 -j DROP
root@kvm:~# iptables -vnL INPUT
Chain INPUT (policy ACCEPT 82 packets, 6368 bytes)
 pkts bytes target     prot opt in     out     source               destination
    2   168 DROP       all  --  *      *       192.168.55.132       192.168.55.128

-s-d是與的關(guān)系分歇,如下例:
只有從192.168.55.132地址到192.168.55.128地址的數(shù)據(jù)才被接受

root@kvm:~# iptables -t filter -I INPUT -s 192.168.55.132 -d 192.168.55.128 -j ACCEPT

5. 使用-p參數(shù)定制協(xié)議類型規(guī)則

示例:
添加禁止192.168.55.132地址到192.168.55.128地址 tcp 數(shù)據(jù)請求

root@kvm:~# iptables -t filter -I INPUT -s 192.168.55.128 -d 192.168.55.129 -p tcp -j REJECT
root@kvm:~# iptables -vnL INPUT
Chain INPUT (policy ACCEPT 7 packets, 488 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 REJECT     tcp  --  *      *       192.168.55.128       192.168.55.129       reject-with icmp-port-unreachable

6. 使用-i參數(shù)定制網(wǎng)卡接口規(guī)則

  • -i只能用于 PREROUTING、 INPUT欧漱、 FORWARD 這三個鏈职抡,因?yàn)橹挥羞@三個鏈可以判斷數(shù)據(jù)從那個網(wǎng)卡流入
iptables -t filter -I INPUT -i eth2 -p icmp -j DROP
  • -o只能用于 FORWARD、 OUTPUT硫椰、 POSTROUTING這三個鏈繁调,因?yàn)橹挥羞@三個鏈可以判斷數(shù)據(jù)從那個網(wǎng)卡流出
iptables -t filter -I INPUT -o eth2 -p icmp -j DROP

二、 擴(kuò)展匹配

擴(kuò)展條件是netfilter 中的一部分靶草,只是以模塊的形式存在蹄胰,要使用這個,則需要指定依賴模塊奕翔。

iptables 指定模塊參數(shù):

參數(shù) 說明 示例
--match -m match 指定擴(kuò)展模塊 iptables -t filter -I INPUT -s 192.168.55.132 -p tcp -m tcp --dport 22 -j REJECT

示例:禁止這個 ip 使用tcp 22端口訪問裕寨,-m tcp:是加載 tcp 擴(kuò)展模塊;

1. TCP模塊端口規(guī)則

參數(shù)說明

參數(shù) 說明 示例
--dport tcp擴(kuò)展模塊中的-目標(biāo)端口 --dport 22;
--dport 22:50
--sport 擴(kuò)展模塊中的-源端口 --sport 22宾袜;
--sport 22:50
--tcp-flags 匹配TCP報(bào)文頭標(biāo)志位 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN

參數(shù) --tcp-flags
示例:

# iptables -f filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT
# iptables -f filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags ALL  SYN -j REJECT

--tcp-flags中有兩部分:

  1. “SYN,ACK,FIN,RST,URG,PSH ”: 需要匹配的標(biāo)志位列表
  2. “SYN”:在第一部分 “SYN,ACK,FIN,RST,URG,PSH ”中 SYN 值必須是1捻艳,其他標(biāo)志位必須是0

上面兩種寫法是一樣的。

2. multiport模塊

指定一個連續(xù)不到的的端口

參數(shù)說明

參數(shù) 說明 示例
--dports 同時(shí)定義多個不同的不連續(xù)的源端口 iptables -t filter -I INPUT -s 10.0.1.2 -p tcp -m multiport --dport 22,36,80 -j DROP
--sports 同時(shí)定義多個不同的不連續(xù)(也可以指定連續(xù)的)的目標(biāo)端口 iptables -t filter -I INPUT -s 10.0.1.2 -p tcp -m multiport --sport 22,80:88 -j DROP

80:88指的是80到88的所有端口

3. iprange 模塊

指定一個連續(xù)的IP地址范圍

參數(shù)說明

參數(shù) 說明 示例
--src-range 指定連續(xù)的原地址范圍 iptables -t filter -I INPUT -m iprange --src-range 10.1.1.2-10.1.1.10 -j DROP
--dst-range 指定連續(xù)的目標(biāo)地址范圍 iptables -t filter -I INPUT -m iprange --dst-range 10.1.1.2-10.1.1.10 -j DROP

--src-range--dst-range這個前面加"!"可以取反

4. stging 模塊

可以指定要匹配的字符串庆猫,如果報(bào)文中包含對應(yīng)的字符串认轨,則復(fù)合匹配條件。

參數(shù)說明:

參數(shù) 說明 示例
--algo bm 指定對應(yīng)的算法
bm月培、kmp
iptables -t filter -I INPUT -m string --algo bm --string "xxx" -j DROP
--string xxx 指定要匹配的字符串 iptables -t filter -I INPUT -m string --algo bm --string "xxx" -j DROP

5. time模塊

可以根據(jù)時(shí)間段去匹配報(bào)文嘁字,如果報(bào)文到達(dá)的時(shí)間在指定的時(shí)間范圍以內(nèi),則符合匹配條件

參數(shù)說明:

參數(shù) 說明 示例
--timestart time 開始時(shí)間 iptables -t filter -I INPUT -m time --timestart 09:00:00 --time stop 10:00:00 -j DROP
--timestop time 結(jié)束時(shí)間 iptables -t filter -I INPUT -m time --timestart 09:00:00 --time stop 10:00:00 -j DROP
--weekdays week 指定每周的周幾杉畜,指定多個用逗號分開纪蜒。 iptables -t filter -I INPUT -p tcp --dport 80 -m time --weekdays 6,7 -j ACCEPT

示例中只允許每周的周6日進(jìn)行 tcp 80端口訪問
--monthdays day 指定每個月的第幾天,指定多天用逗號分開此叠。 iptables -t filter -I INPUT -p tcp --dport 80 -m time --monthdays 20,25 -j ACCEPT

示例中只允許每月的20日和25日進(jìn)行 tcp 80端口訪問
--datestart date 指定開始日期 iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --datestart 2017-12-24 --datestop 2019-01-27 -j REJECT
--datestop date 指定結(jié)束日期 iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --datestart 2017-12-24 --datestop 2019-12-27 -j REJECT
  • --weekdays--monthdays聯(lián)合使用
#iptables -t filter -I INPUT -p tcp --doprt 80 -m time --weekdays 5 --monthdays 10,11,12,13,14,15,16 -j DREP

表示只有在周五是10~16號時(shí)拒絕訪問

  • --weekdays--monthdays 也可以使用"!"取反纯续。

6. connlimit模塊

可以限制每個IP 地址同時(shí)連接到 server 端的連接數(shù)量。
不指定 IP 則表示灭袁,是針對每個請求 IP進(jìn)行限制

參數(shù)說明:

參數(shù) 說明 示例
--connlimit-above number 限制IP 的連接數(shù)量上限 iptables -f filter -I INPUT -p tcp -dport 22 -m connlimit --connlimit-above 2 -j REJECT

示例:只允許每個 IP 有兩個 ssh 連接到服務(wù)器
--connlimit-mask 限制某類網(wǎng)段的連接數(shù)量 iptables -f filter -I INPUT -p tcp -dport 22 -m connlimit --connlimit-above 2 --connlimit-mask 24 -j REJECT

示例:限制 C 類網(wǎng)段的連接次數(shù)猬错,24轉(zhuǎn)換就是255.255.255.0, 也就是254個 ip 有2個可以訪問

7. limit模塊

可以限制單位時(shí)間內(nèi)流入包的數(shù)量
可以用秒、分简卧、小時(shí)兔魂、天作為單位進(jìn)行限制

參數(shù)說明:

參數(shù) 說明 示例
--limit number/type 顯示單位時(shí)間內(nèi)流入包的數(shù)量
/second;
/minute;
/hour;
/day
下面--limit示例
--limit-burst 空閑時(shí)可放行包的數(shù)量,默認(rèn)5(類似一個連接池举娩,里面默認(rèn)有5個連接析校,所以當(dāng)請求來的時(shí)候先去池里面找,如果有就拿去用铜涉,當(dāng)5個都用完時(shí)智玻,每過一段時(shí)間會再次生成一個。

如:
--limit 3/second 表示每3秒產(chǎn)生一個連接芙代。

--limit 30/minute 每分鐘產(chǎn)生30個)
  • --limit示例

首先添加一個每分鐘只允許10次 ping 的規(guī)則吊奢。也就是每6秒放行一個包。

root@kvm:~# iptables -t filter -I INPUT -p icmp -m limit --limit 10/minute -j ACCEPT
root@kvm:~# iptables -vnL NIPUT
Chain INPUT (policy ACCEPT 14 packets, 1057 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            limit: avg 10/min burst 5

然后在一臺機(jī)器上 ping 這個 iptables 測試機(jī)纹烹。會發(fā)現(xiàn) ping 這個完全不受影響页滚。

實(shí)際上被放行的規(guī)則已經(jīng)和定義的規(guī)則匹配上,為什么不應(yīng)該放行的規(guī)則被放行了呢铺呵?因?yàn)楸槐淼哪J(rèn)規(guī)則匹配到了裹驰,且默認(rèn)規(guī)則正好是 ACCEPT,所以相當(dāng)于所有的 ping 都被放行了片挂。

解決辦法幻林,修改表中鏈的默認(rèn)規(guī)則贞盯,或者添加一個新的規(guī)則來匹配其他 ping;

root@kvm:~# iptables -t filter -A INPUT -p icmp -j REJECT
root@kvm:~# iptables -vnL
Chain INPUT (policy ACCEPT 11 packets, 784 bytes)
 pkts bytes target     prot opt in     out     source               destination
    8   672 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            limit: avg 10/min burst 5
    0     0 REJECT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

再次 ping iptables 測試機(jī)是發(fā)現(xiàn)前5個ping 沒有被控制沪饺,因?yàn)閰?shù)--limit-burst默認(rèn)值是5躏敢,提前保留了5個可放行的包數(shù),所以前5個 ping 并不受影響整葡。

8. udp模塊

用戶匹配 upd 報(bào)文的源端口與目標(biāo)端口

參數(shù)說明:

參數(shù) 說明 示例
--sport 源端口(可以設(shè)置連續(xù)端口) iptables -t filter -I INPUT -p udp -m udp --dport 13 -j ACCEPT
--dporr 目標(biāo)端口(可以設(shè)置連續(xù)端口) iptables -t filter -I INPUT -p udp -m udp --dport 80:88 -j ACCEPT 件余、、

8. icmp模塊

icmp 報(bào)文類型: (百度百科)

類型 類型代碼 說明
0 0 Echo Reply——回顯應(yīng)答(Ping應(yīng)答)
3 0 Network Unreachable——網(wǎng)絡(luò)不可達(dá)
3 1 Host Unreachable——主機(jī)不可達(dá)
3 2 Protocol Unreachable——協(xié)議不可達(dá)
3 3 Port Unreachable——端口不可達(dá)
3 4 Fragmentation needed but no frag. bit set——需要進(jìn)行分片但設(shè)置不分片比特
3 5 Source routing failed——源站選路失敗
3 6 Destination network unknown——目的網(wǎng)絡(luò)未知
3 7 Destination host unknown——目的主機(jī)未知
3 8 Source host isolated (obsolete)——源主機(jī)被隔離(作廢不用)
3 9 Destination network administratively prohibited——目的網(wǎng)絡(luò)被強(qiáng)制禁止
3 10 Destination host administratively prohibited——目的主機(jī)被強(qiáng)制禁止
3 11 Network unreachable for TOS——由于服務(wù)類型TOS掘宪,網(wǎng)絡(luò)不可達(dá)
3 12 Host unreachable for TOS——由于服務(wù)類型TOS蛾扇,主機(jī)不可達(dá)
3 13 Communication administratively prohibited by filtering——由于過濾攘烛,通信被強(qiáng)制禁止
3 14 Host precedence violation——主機(jī)越權(quán)
3 15 Precedence cutoff in effect——優(yōu)先中止生效
4 0 Source quench——源端被關(guān)閉(基本流控制)
5 0 Redirect for network——對網(wǎng)絡(luò)重定向
5 1 Redirect for host——對主機(jī)重定向
5 2 Redirect for TOS and network——對服務(wù)類型和網(wǎng)絡(luò)重定向
5 3 Redirect for TOS and host——對服務(wù)類型和主機(jī)重定向
8 0 Echo request——回顯請求(Ping請求)
9 0 Router advertisement——路由器通告
10 0 Route solicitation——路由器請求
11 0 TTL equals 0 during transit——傳輸期間生存時(shí)間為0
11 1 TTL equals 0 during reassembly——在數(shù)據(jù)報(bào)組裝期間生存時(shí)間為0
12 0 IP header bad (catchall error)——壞的IP首部(包括各種差錯)
12 1 Required options missing——缺少必需的選項(xiàng)
13 0 Timestamp request (obsolete)——時(shí)間戳請求(作廢不用)
14 0 Timestamp reply (obsolete)——時(shí)間戳應(yīng)答(作廢不用)
15 0 Information request (obsolete)——信息請求(作廢不用)
16 0 Information reply (obsolete)——信息應(yīng)答(作廢不用)
17 0 Address mask request——地址掩碼請求
18 0 Address mask reply——地址掩碼應(yīng)答

參數(shù)說明:

參數(shù) 說明 示例
--icmp-type 匹配 icmp 報(bào)文的具體類型 iptables -t filter -I INPUT -p icmp -m icmp --icmp-type 8/0 -j REJECT
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末魏滚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子坟漱,更是在濱河造成了極大的恐慌鼠次,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芋齿,死亡現(xiàn)場離奇詭異腥寇,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)觅捆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門赦役,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人栅炒,你說我怎么就攤上這事掂摔。” “怎么了赢赊?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵乙漓,是天一觀的道長。 經(jīng)常有香客問我释移,道長叭披,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任玩讳,我火速辦了婚禮涩蜘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘熏纯。我一直安慰自己同诫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布豆巨。 她就那樣靜靜地躺著剩辟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贩猎,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天熊户,我揣著相機(jī)與錄音,去河邊找鬼吭服。 笑死嚷堡,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的艇棕。 我是一名探鬼主播蝌戒,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼沼琉!你這毒婦竟也來了北苟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤打瘪,失蹤者是張志新(化名)和其女友劉穎友鼻,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體闺骚,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡彩扔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了僻爽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虫碉。...
    茶點(diǎn)故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖胸梆,靈堂內(nèi)的尸體忽然破棺而出敦捧,到底是詐尸還是另有隱情,我是刑警寧澤乳绕,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布绞惦,位于F島的核電站,受9級特大地震影響洋措,放射性物質(zhì)發(fā)生泄漏济蝉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一菠发、第九天 我趴在偏房一處隱蔽的房頂上張望王滤。 院中可真熱鬧,春花似錦滓鸠、人聲如沸雁乡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽踱稍。三九已至曲饱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間珠月,已是汗流浹背扩淀。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留啤挎,地道東北人驻谆。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像庆聘,于是被迫代替她去往敵國和親胜臊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容