iptables詳解(4):iptables匹配條件總結之一


基本匹配條件

-s  匹配條件 源地址

①  一次性指定多個ip源地址,用“逗號”隔開,多個特定ip地址

iptables -t filter -I INPUT -s 192.168.23.242,192.168.23.47 -j DROP

   

 

②  指定特定網段

 iptables -I INPUT -s 192.168.23.0/24 -J DROP

  

 

③  匹配取反條件

iptables -t filter -A INPUT ! -s 192.168.23.246 -j ACCEPT

意思為不是23.246的包就可以接受 但是沒有指明23.246的包如何處理

所以23.246的包應該是沒有匹配規則之后就會執行默認的規則也就是accpet規則所以取反規則相當於無效。

 

-d 匹配條件目標地址

我們可以用如下規則去查看我們當前機器的地址總共有多少

ifconfig | awk '/inet addr/{print $1,$2}'

比如當前機器有多個網絡出口,當前我只對某個接口進行接口的生效作用,當我個更換機器的的網絡出口的時

該網絡協議包還是可以正常運作,以路由器為例

當前路由器有蜂窩LTE出口ip、wlan出口ip、wan口出口ip、lan口出口ip等等

 


①指定不接收某個指定 ip 地址,指定不接收wan口請求相關的ping包等

 

 

iptables -I INPUT -s 192.168.23.46 -d 192.168.23.44 -j DROP

則當前規則生效

②一次性指定多個ip地址和-s一樣

 

-p 協議類型

①只想拒絕 tcp請求  

 iptables -t filter -I INPUT -s 192.168.23.246 -d 192.168.23.44 -p tcp -j DROP  

當前ping還是可以ping通 但是ssh失敗了失去響應 說明當前的防火牆規則生效

 

 

在centos6中,-p支持的協議類型有

tcp、udp、udplite、icmp、esp、ah、sctp

centos7中除了上面的協議外 還支持 icmpv6、mh

當不適用-p則默表示所有類型的協議都會被匹配到,與使用-p all的效果相同

 

-i  網卡接口

-i 用於匹配報文流入的網卡, 從網卡出去的報文是不會用到-i選項的

 

 

 

 -i  一般用於PREROUTING、INPUT鏈、FORWARD鏈

當主機有多塊網卡時,可以使用-o選項,匹配報文將由哪塊網卡流出,-o和-i是相對的,-i用於匹配報文從哪個網卡流入。-o 匹配從哪個網卡流出

-o  一般只能是POSTROUTING鏈、OUTPUT鏈、 FORWARD鏈

 

擴展匹配條件

--dport(--sport)源端口目的端口

基本匹配條件如源地址、目的地址可以直接用 然而擴展匹配條件的使用 需要依賴相應的擴展模塊。

 如果在-p中已經指定協議,則默認使用協議中寫的模塊名。

 如果沒有必須要指定對應的模塊 -m +模塊名 這樣才能正常使用 --dport功能

 --dport(--sport)

① 在使用--dport之前一定要先定義好是在哪個模塊協議上進行使用的

否則會無法正常使用 --sport  

iptables -I INPUT -p tcp -s 192.168.23.246 --sport 22 -j DROP

 

 

 

② 拒絕多個端口的訪問 可以在-m 后面加上multiport加上多個端口

iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT

 

 

 

③ 用 :的方式來決定當前的端口是從哪個端口到哪個端口

iptables -A INPUT -p tcp -m multiport --dports 22,80,22:443 -j ACCEPT

  

--src-range (--dst-range)

指定一段連續的ip地址范圍

iptables -I INPUT -m iprange --src-range 192.168.23.240-192.168.23.246 -j DROP

 

--string

--alogo指定對應的匹配算法,可用算法為bm、kmp,此選項為必需選項

--string指定需要匹配的字符串

報文中包含字符XXX,我們就丟棄當前的報文

 iptables -I INPUT -m string --algo bm --string "百度一下" -j REJECT

-m string表示使用string模塊--algo bm表示用bm算法去匹配指定的字符串,--string " "要匹配的內容

--algo:用於指定匹配算法 可選的算法有bm和kmp 此選項為必選項  

 

 

 

time 

表示報文到達的時間在指定的時間范圍內 則符合匹配條件

比如在指定的時間內規定不能看網頁,如家中的熊孩子周六日的早上9:00到下午6:00不能瀏覽網頁

--timestart 指定時間范圍的開始時間,不可取反

--timestop 指定時間范圍的結束時間,不可取反

--weekdays 指定星期幾 可取反

--monthdays 指定幾號,可取反

--datestart 用於指定日期范圍的開始日期 不可取反

--datestop 用於指定日期范圍的結束時間 不可取反

 

iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --timestart 09:00:00 --timestop 19:00:00 -j REJECT
iptables -t filter -I OUTPUT -p tcp --dport 443 -m time --timestart 09:00:00 --timestop 19:00:00 -j REJECT
iptables -t filter -I OUTPUT -p tcp --dport 80  -m time --weekdays 6,7 -j REJECT
iptables -t filter -I OUTPUT -p tcp --dport 80  -m time --monthdays 22,23 -j REJECT
iptables -t filter -I OUTPUT -p tcp --dport 80  -m time ! --monthdays 22,23 -j REJECT
iptables -t filter -I OUTPUT -p tcp --dport 80  -m time --timestart 09:00:00 --timestop 18:00:00 --weekdays 6,7 -j REJECT
iptables -t filter -I OUTPUT -p tcp --dport 80  -m time --weekdays 5 --monthdays 22,23,24,25,26,27,28 -j REJECT
iptables -t filter -I OUTPUT -p tcp --dport 80  -m time --datestart 2017-12-24 --datestop 2017-12-27 -j REJECT

 

限制從2019.12.15-2019.12.16都不能上網

 

 

 

connlimit模塊

主要用來限制連接服務器的數量

常用的擴展匹配條件如下

--connlimit-above 單獨使用此選項時,表示限制每個ip的鏈接數量

--connlimit-mask 選項不可單獨使用,配合--connlimit-above選項,配合此選項針對某類ip段內的一定數量的ip進行連接數量限制

iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT
iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j REJECT
iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 10 --connlimit-mask 27 -j REJECT

限制鏈接數量上限,如每個ip地址最多只能占用2個ssh鏈接遠程到server端,我們可以用如下的限制

 

 

 

可以發現第三個連接就不能正常連接進來了

 

 

 mask為掩碼的意思 24轉換成十進制表示的是255.255.255.0一個最多只能包含254個ip的C類網址中,

同時最多只能有2個ssh客戶端連接到當前服務器...如果子網掩碼是27  表示為這個網段中最多只能有30個ip

 

 

limit模塊

主要用來調整網絡流量和速率限制

--limit-burst 類比令牌桶算法 此選項用於指定令牌桶中令牌的最大數量

--limit 類比令牌桶算法 此選項用於指定令牌桶中生成新令牌的頻率,可用時間單位有second minute hour day

iptables -t filter -I INPUT -p icmp -m limit --limit-burst 3 --limit 10/minute -j ACCEPT
iptables -t filter -A INPUT -p icmp -j REJECT

令牌桶算法是網絡流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一種算法。典型情況下,令牌桶算法用來控制發送到網絡上的數據的數目,並允許突發數據的發送。

大小固定的令牌桶可自行以恆定的速率源源不斷地產生令牌。如果令牌不被消耗,或者被消耗的速度小於產生的速度,令牌就會不斷地增多,直到把桶填滿。后面再產生的令牌就會從桶中溢出。最后桶中可以保存的最大令牌數永遠不會超過桶的大小。

如果令牌桶中存在令牌則允許發送流量,如果令牌桶中不存在令牌,則不允許發送流量

令牌桶算法 假如用戶配置的平均發送速率為r,每個1/r 秒 一個令牌被加入捅中

假設桶最多可以存b個令牌 如果令牌桶滿 則令牌會被丟棄

當一個n個字節(一個字節需要一個令牌才能發送數據)的數據包到達 就從令牌桶中拿出那個令牌 將數據包發送到網絡

如果令牌桶中少於 n個令牌,那么數據包在流量限制之外,

對於在流量限制之外的數據包的處理方式有以下幾種

 

1 被丟棄    2排列在隊列中當令牌桶積累足夠多令牌再傳輸    3 單個數據包拿單個令牌繼續發送需要做特殊標記 網絡過載時就會把這些特殊標記包丟棄

--limit用於指定多長時間生成一個新令牌的b limit-burst指的是木桶中最多存放幾個令牌

如上例中表示令牌桶最多存放3個令牌 每分鍾生成10個令牌(6s 生成一個令牌)

 

對報文到達速率進行限制 想要限制單位時間內流入的包的數量 就用limit模塊(單位時間可以是 分鍾 小時 天)

比如限制本機最多每6s放行一個ping包 

 

--tcp-flags

tcp頭中的標志位 結構表如下

 

 

 

 

 

 第一條命令為第一次握手的報文 第二條命令為第二次握手的報文

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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM