匹配條件
一:-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、icmpv六、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 擴展模塊ssh
選項 | 說明 |
---|---|
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 擴展模塊舉例tcp
1)拒絕來自 101 的 ssh 請求 iptables -I INPUT -s 192.168.1.101 -p tcp -m tcp --sport 22 -j REJECT 2)拒絕來自 101 的 tcp協議的請求,拒絕的端口範圍爲:22 - 25 端口 iptables -I INPUT -s 192.168.1.101 -p tcp -m tcp --dport 22:25 -j REJECT 3)拒絕來自 101 的 tcp協議的請求,拒絕的端口範圍爲:0 - 22 端口 iptables -I INPUT -s 192.168.1.101 -p tcp -m tcp --dport :22 -j REJECT 4)拒絕來自 101 的 tcp協議的請求,拒絕的端口範圍爲:80 - 65535 端口 iptables -I INPUT -s 192.168.1.101 -p tcp -m tcp --dport 80: -j REJECT 5)拒絕來自 101 的 tcp協議的請求,拒絕的端口範圍爲:不是 22 端口 iptables -I INPUT -s 192.168.1.101 -p tcp -m tcp ! --sport 22 -j ACCEPT
案例五:
multiport 擴展模塊舉例ide
1)使用 multiport 模塊 指定 拒絕 101,102 兩個端口 iptables -l INPUT -s 192.168.1.101 -p udp -m multiport --sports 101,102 -j REJECT 2)使用 multiport 模塊 指定 拒絕 22,80 兩個端口 iptables -I INPUT -s 192.168.1.101 -p tcp -m multiport --dports 22,80 -j REJECT 3)使用 multiport 模塊 指定 拒絕除 22,80 兩個端口之外的端口 iptables -I INPUT -s 192.168.1.101 -p tcp -m multiport ! --dports 22,80 -j REJECT 4)使用 multiport 模塊 指定 拒絕 80 - 88 範圍內的端口 iptables -I INPUT -s 192.168.1.101 -p tcp -m multiport --dports 80:88 -j REJECT 5)使用 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 報文的頭部的標識位,而後根據標識位實現控制的功能
使用方法以下:post
iptables -I INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT iptables -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 擴展模塊舉例3d
1)早上 9 點至晚上 7 點不能夠瀏覽網頁 iptables -I OUTPUT -p tcp --dport 80 -m time --timestart 09:00:00 --timestop 19:00:00 -j REJECT iptables -I OUTPUT -p tcp --dport 443 -m time --timestart 09:00:00 --timestop 19:00:00 -j REJECT 2)周6、日不能夠瀏覽網頁 iptables -I OUTPUT -p tcp --dport 80 -m time --weekdays 6,7 -j REJECT 3)每個月的 2二、23 不能夠瀏覽網頁 iptables -I OUTPUT -p tcp --dport 80 -m time --monthdays 22,23 -j REJECT 4)每個月的除了 2二、23 不能夠瀏覽網頁 iptables -I OUTPUT -p tcp --dport 80 -m time ! --monthdays 22,23 -j REJECT 5)周6、日的早上 9 點至晚上 7 點不能夠瀏覽網頁 iptables -I OUTPUT -p tcp --dport 80 -m time --timestart 09:00:00 --timestop 18:00:00 --weekdays 6,7 -j REJECT 6)每個月的 22-28 的星期五不能夠瀏覽網頁 iptables -I OUTPUT -p tcp --dport 80 -m time --weekdays 5 --monthdays 22,23,24,25,26,27,28 -j REJECT 7)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 併發鏈接數code
擴展條件 | 說明 |
---|---|
--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 REJECT 2)在 C 類網段中,最多同時有 20 個 ssh 客戶端鏈接到服務器 iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j REJECT 3)在 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 ACCEPT iptables -t filter -A INPUT -p icmp -j REJECT