skill——iptables(三)

來源:互聯網
上載者:User

標籤:centos   tcp   動作   put   out   命令   演算法   開始   檢查   

匹配條件

一:-s 源地址:指定 ip 時可用 "," 隔開,指定多個;也可以指定網段,用 "!" 取反
注意:取反表示報文源地址 IP 不為 192.168.1.103 即滿足條件,執行相應的動作
執行個體如下:

二:-d 目標地址
注意:
1. 源地址表示報文從哪裡來,目標地址表示報文要到哪裡去,當目標主機有兩塊或以上網卡時,樣本如下
2. 上面說到 -s 的使用方法 -d 同樣適用
案例一:
指定來 80.174 網卡拒絕接收來自 80.138 的報文

接著我們在 192.168.80.138 的機器中檢查下

可以看到 80.138 可以 ping 通 80.144 的 ip 地址,但被 80.174 拒絕了 “目標連接埠不可到達”

三:-p 協議類型,指定需要匹配的協議類型
注意:
1. ssh 協議的傳輸層協議屬於 tcp 協議類型,ping 命令使用 icmp 協議
2. Centos6 中,-p 支援 tcp、udp、udplite、icmp、esp、ah、sctp
3. Centos7 中,-p 支援 tcp、udp、udplite、icmp、esp、ah、sctp、icmpv6、mh
4. 當不使用 -p 時,預設表示要匹配所有類型,與 -p all 效果相同
案例二:拒絕來自 138 的 tcp 類型的請求

在 192.168.80.138 的機器中測試

四:網卡介面
-i:匹配報文是從哪塊網卡流入原生(瞭解)
-o:匹配報文是從哪塊網卡流入原生(瞭解)
我們回顧下:

資料包從 prerouting 鏈流入 input 鏈 與 forward 鏈
資料包從 output 鏈 與 forward 鏈 經 postouting 鏈流出
所以:-i 用於 prerouting input forward 鏈;-o 用於 output forward postouting 鏈
案例三:
-i 與 -o 舉例

擴充匹配條件

一: tcp、multiport 擴充模組

選項 說明
tcp 模組 當 -p 指定 tcp 協議時,-m 可以將其省略掉
-m 指定擴充模組
--dport (tcp 擴充模組) 目標連接埠
--sport (tcp 擴充模組) 源連接埠
multiport 模組 同時指定多個離散連接埠

1. -p?tcp?-m?tcp?--sport?用於匹配 tcp 協議報文的源連接埠,可以使用 ":" 指定一個連續的連接埠範圍
2. -p 與 -m 並不衝突,因為 -m 指定擴充模組的名稱 -p 指定報文的協議,只不過是兩者名字碰巧一樣
3. 在不使用 -m 時,會預設使用與 -p 指定協議名相同的模組
4. --dport 針對連接埠可以使用的功能,--sport 同樣適用,如:(:20)、(20:80)、(20:80)
案例四:
tcp 擴充模組舉例

1)拒絕來自 101 的 ssh 請求iptables?-I?INPUT?-s?192.168.1.101?-p?tcp?-m?tcp?--sport?22?-j?REJECT2)拒絕來自 101 的 tcp協議的請求,拒絕的連接埠範圍為:22 - 25 連接埠iptables?-I?INPUT?-s?192.168.1.101?-p?tcp?-m?tcp?--dport?22:25?-j?REJECT3)拒絕來自 101 的 tcp協議的請求,拒絕的連接埠範圍為:0 - 22 連接埠iptables -I?INPUT?-s?192.168.1.101?-p?tcp?-m?tcp?--dport?:22?-j?REJECT4)拒絕來自 101 的 tcp協議的請求,拒絕的連接埠範圍為:80 - 65535 連接埠iptables?-I?INPUT?-s?192.168.1.101 -p?tcp?-m?tcp?--dport?80:?-j?REJECT5)拒絕來自 101 的 tcp協議的請求,拒絕的連接埠範圍為:不是 22 連接埠iptables?-I?INPUT?-s?192.168.1.101?-p?tcp?-m?tcp?!?--sport?22?-j?ACCEPT

案例五:
multiport 擴充模組舉例

1)使用 multiport 模組 指定 拒絕 101,102 兩個連接埠iptables?-l INPUT?-s?192.168.1.101?-p?udp?-m?multiport?--sports?101,102?-j?REJECT2)使用 multiport 模組 指定 拒絕 22,80 兩個連接埠iptables?-I?INPUT?-s?192.168.1.101?-p?tcp?-m?multiport?--dports?22,80?-j?REJECT3)使用 multiport 模組 指定 拒絕除 22,80 兩個連接埠以外的連接埠iptables?-I?INPUT?-s?192.168.1.101 -p?tcp?-m?multiport?!?--dports?22,80?-j?REJECT4)使用 multiport 模組 指定 拒絕 80 - 88 範圍內的連接埠iptables?-I?INPUT?-s?192.168.1.101?-p?tcp?-m?multiport?--dports?80:88?-j?REJECT5)使用 multiport 模組 指定 拒絕 22連接埠、80 - 88 範圍內的連接埠iptables?-I?INPUT?-s?192.168.1.101?-p?tcp?-m?multiport?--dports?22,80:88?-j?REJECT

tcp 擴充模組之 --tcp-flags
--tcp-flags:指 tcp 頭中的標誌位,可以用此擴充匹配,去匹配 tcp 報文的頭部的標識位,然後根據標識位實現控制的功能
使用方法如下:

iptables?-I?INPUT?-p?tcp?-m?tcp?--dport?22?--tcp-flags?SYN,ACK,FIN,RST,URG,PSH?SYN?-j?REJECTiptables?-I?INPUT?-p?tcp?-m?tcp?--dport?22?--tcp-flags?ALL?SYN?-j?REJECT其中 tcp 擴充模組專門提供了一個可以匹配 " 第一次握手 " 的選項:**--syn**iptables?-t?filter?-I?INPUT?-p?tcp?-m?tcp?--dport?22?--syn?-j?REJECT**注意:--syn 相當於 --tcp-flags?SYN,RST,ACK,FIN?SYN**

二: iprange、string、time、connlimit、limit 擴充模組
1. iprange 指定一段連續的 IP 位址範圍(-s 與 -d 無法指定一段連續的 IP 位址範圍)
--src-range:匹配報文的源地址所在範圍
--dst-range:匹配報文的目標地址所在範圍
案例六:
指定一段連續的 IP 位址

2. string 匹配字串,即包含對應的字串,則匹配成功執行相應動作
--algo:指定匹配的演算法(bm/kmp)二者必須選其一
--string:指定需要匹配的字串
案例七:
匹配字串 “It works!” 字串,執行 REJTCT 動作
下面是 Apache 的展示頁


規則如下,結果再次訪問時未響應

3. time 指定時間範圍

擴充條件 說明
--timestart 指定時間範圍的開始時間,不可取反
--timestop 指定時間範圍的結束時間,不可取反
--weekdays 指定 "星期幾" ,可取反
--monthdays 指定 "幾號" ,可取反
--datestart 指定日期範圍的開始時間,不可取反
--datestop 指定日期範圍的結束時間,不可取反

案例八:
time 擴充模組舉例

1)早上 9 點至晚上 7 點不可以瀏覽網頁iptables?-I?OUTPUT?-p?tcp?--dport?80?-m?time?--timestart?09:00:00?--timestop?19:00:00?-j?REJECTiptables?-I?OUTPUT?-p?tcp?--dport?443?-m?time?--timestart?09:00:00?--timestop?19:00:00?-j?REJECT2)周六、日不可以瀏覽網頁iptables?-I?OUTPUT?-p?tcp?--dport?80??-m?time?--weekdays?6,7?-j?REJECT3)每月的 22、23 不可以瀏覽網頁iptables?-I?OUTPUT?-p?tcp?--dport?80??-m?time?--monthdays?22,23?-j?REJECT4)每月的除了 22、23 不可以瀏覽網頁iptables?-I?OUTPUT?-p?tcp?--dport?80??-m?time?!?--monthdays?22,23?-j?REJECT5)周六、日的早上 9 點至晚上 7 點不可以瀏覽網頁iptables?-I?OUTPUT?-p?tcp?--dport?80??-m?time?--timestart?09:00:00?--timestop?18:00:00?--weekdays?6,7?-j?REJECT6)每月的 22-28 的星期五不可以瀏覽網頁iptables?-I?OUTPUT?-p?tcp?--dport?80??-m?time?--weekdays?5?--monthdays?22,23,24,25,26,27,28?-j?REJECT7)2018-12-24 至 2018-12-27 不可以瀏覽網頁iptables?-I?OUTPUT?-p?tcp?--dport?80??-m?time?--datestart?2018-12-24?--datestop?2018-12-27?-j?REJECT

4. connlimit 限制 IP 並發串連數

擴充條件 說明
--connlimit-above 單獨使用此選項時,表示限制每個 IP 的串連數量
--connlimit-mask 不可以單獨使用,在使用 --connlimit-above 選項時,配合此選項,表示限制 某類 IP 段內一定數量的 IP 串連數

案例九:
connlimit 擴充模組舉例

1)每個 IP 位址最多隻能佔用兩個 ssh 連結遠程到服務端(不指定 IP 即表示所有 IP)iptables?-I?INPUT?-p?tcp?--dport?22?-m?connlimit?--connlimit-above?2?-j?REJECT2)在 C 類網段中,最多同時有 20 個 ssh 用戶端串連到伺服器iptables?-I?INPUT?-p?tcp?--dport?22?-m?connlimit?--connlimit-above?20?--connlimit-mask?24?-j?REJECT3)在 C 類網段中,最多同時有 10 個 ssh 用戶端串連到伺服器iptables?-I?INPUT?-p?tcp?--dport?22?-m?connlimit?--connlimit-above?10?--connlimit-mask?27?-j?REJECT

5. limit 擴充模組
limit 限制 "報文到達速率",即限制單位時間內流入包的數量

擴充條件 說明
--limit-burst 參考 " 令牌桶 " 演算法,指定令牌桶中令牌的最大數量
--limit 參考 " 令牌桶 " 演算法,指定令牌桶中令牌產生的頻率,時間單位有:/second、/minute、/hour、/day

案例十:
當外部主機對本機進行 ping 操作時,本機沒 6 秒允許存取一個包

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

skill——iptables(三)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.