流量經過防火牆設備,防火牆會從上至下來讀取規則策略,一旦匹配到了合適的就會去執行並立即結束匹配且不再進行默認區域的匹配;如果不能匹配到明細規則,則進行默認區域的匹配。這是硬件防火牆手冊寫的話,也同樣適用於別的形態防火牆邏輯
原文參考:
系統學習建議參考原文,寫以下筆記只是為了讓我後續使用過程中快速查找
- iptables命令把對數據進行過濾或處理數據包的策略叫做規則,把多條規則又存放到一個規則鏈中,規則鏈是依據處理數據包位置的不同而進行的分類,包括有:在進行路由選擇前處理數據包(PREROUTING)、處理流入的數據包(INPUT)、處理流出的數據包(OUTPUT)、處理轉發的數據包(FORWARD)、在進行路由選擇後處理數據包(POSTROUTING)。只考慮INPUT
- 其中REJECT和DROP的動作操作都是把數據包拒絕,DROP是直接把數據包拋棄不響應,而REJECT會拒絕後再回復一條“您的信息我已收到,但被扔掉了”,讓對方清晰的看到數據被拒絕的響應,分別顯示以下現象
當把系統設置為REJECT之後對方會顯示不可達
先設置drop: //丟棄所有入方向的icmp協議
[root@localhost admin]# iptables -I INPUT -p icmp -j DROP
-----------------------------------------------------------------------------
然後去ping:
C:\Users\18432>ping 192.168.119.220
正在 Ping 192.168.119.220 具有 32 字節的數據:
請求超時。
請求超時。
請求超時。
請求超時。
192.168.119.220 的 Ping 統計信息:
數據包: 已發送 = 4,已接收 = 0,丟失 = 4 (100% 丟失),
清空規則後先設置REJECT:
[root@localhost admin]# iptables -F //清空規則
[root@localhost admin]# iptables -L INPUT //查看當前INPUT規則
Chain INPUT (policy ACCEPT)
target prot opt source destination
[root@localhost admin]# iptables -I INPUT -p icmp -j REJECT //入方向icmp拒絕
-------------------------------------------------------------------------------
然後去ping:
C:\Users\18432>ping 192.168.119.220
正在 Ping 192.168.119.220 具有 32 字節的數據:
來自 192.168.119.220 的回覆: 無法連到端口。
來自 192.168.119.220 的回覆: 無法連到端口。
來自 192.168.119.220 的回覆: 無法連到端口。
來自 192.168.119.220 的回覆: 無法連到端口。
192.168.119.220 的 Ping 統計信息:
數據包: 已發送 = 4,已接收 = 4,丟失 = 0 (0% 丟失),
- 基本的命令參數,區分大小寫(記不住的,用的時候查)
|
參數
|
作用
|
|
-P
|
設置默認策略:iptables -P INPUT (DROP|ACCEPT)
|
|
-F
|
清空規則鏈
|
|
-L
|
查看規則鏈
|
|
-A
|
在規則鏈的末尾加入新規則
|
|
-I num
|
在規則鏈的頭部加入新規則
|
|
-D num
|
刪除某一條規則
|
|
-s
|
匹配來源地址IP/MASK,加歎號"!"表示除這個IP外。
|
|
-d
|
匹配目標地址
|
|
-i 網卡名稱
|
匹配從這塊網卡流入的數據
|
|
-o 網卡名稱
|
匹配從這塊網卡流出的數據
|
|
-p
|
匹配協議,如tcp,udp,icmp
|
|
--dport num
|
匹配目標端口號
|
|
--sport num
|
匹配來源端口號
|
具體命令解釋:
iptables配置的防火牆規則會在下一次重啓時候失效,配置完之後輸入如下命令即可永久保存:
[root@localhost ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
- 查看已有的防火牆策略
[root@localhost admin]# iptables -L INPUT //查看INPUT策略
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT icmp -- anywhere anywhere reject-with icmp-port-unreachable
[root@localhost admin]# iptables -L //查看所有策略
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT icmp -- anywhere anywhere reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD_IN_ZONES (0 references)
target prot opt source destination
……省略輸出……
- 清空已有防火牆策略
[root@localhost ~]# iptables -F //清空防火牆策略
[root@localhost ~]# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
- 把INPUT鏈的默認策略設置為拒絕;
如前面所提到的防火牆策略設置無非有兩種方式,一種是“通”,一種是“堵”,當把INPUT鏈設置為默認拒絕後,就要往裏面寫入允許策略了,否則所有流入的數據包都會被默認拒絕掉,需要留意規則鏈的默認策略拒絕動作只能是DROP,而不能是REJECT。
這裏的DROP是包括SSH流量的,即會把自己踢出來
[root@localhost admin]# iptables -P INPUT DROP
[root@localhost admin]# iptables -L INPUT
Chain INPUT (policy DROP) //這個地方默認策略是拒絕
target prot opt source destination
- 在INPUT數據鏈中允許icmp協議:
iptables -I INPUT -p icmp -j ACCEPT
[root@localhost admin]# iptables -I INPUT -p icmp -j ACCEPT
[root@localhost admin]# iptables -L INPUT
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT icmp -- anywhere anywhere
- 刪除INPUT中的允許icmp策略:
iptables -D INPUT 1
[root@localhost admin]# iptables -D INPUT 1
[root@localhost admin]# iptables -L INPUT
Chain INPUT (policy DROP)
target prot opt source destination
- 設置INPUT只允許指定網段訪問本機22端口:
iptables -I INPUT -s 192.168.119.0/24 -p tcp --dport 22 -j ACCEPT
[root@localhost admin]# iptables -I INPUT -s 192.168.119.0/24 -p tcp --dport 22 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j REJECT
[root@localhost ~]# iptables -P INPUT ACCEPT
-----------------------------------------------------------------------------------------------------
[root@localhost ~]# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 192.168.119.0/24 anywhere tcp dpt:ssh
REJECT tcp -- anywhere anywhere tcp dpt:ssh reject-with icmp-port-unreachable
- 禁止192.168.10.5訪問本機80端口:
iptables -I INPUT -s 192.168.80.5 -p tcp --dport 80 -j REJECT
[root@localhost ~]# iptables -I INPUT -s 192.168.80.5 -p tcp --dport 80 -j REJECT
[root@localhost ~]# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT tcp -- 192.168.80.5 anywhere tcp dpt:http reject-with icmp-port-unreachable
ACCEPT tcp -- 192.168.119.0/24 anywhere tcp dpt:ssh
REJECT tcp -- anywhere anywhere tcp dpt:ssh reject-with icmp-port-unreachable
- 向INPUT鏈中添加拒絕所有主機不能訪問本機1000至1024端口的防火牆策略:
[root@localhost ~]# iptables -I INPUT -p tcp --dport 1000:1024 -j REJECT
[root@localhost ~]# iptables -I INPUT -p udp --dport 1000:1024 -j REJECT
[root@localhost ~]# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT udp -- anywhere anywhere udp dpts:cadlock2:1024 reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere tcp dpts:cadlock2:1024 reject-with icmp-port-unreachable
ACCEPT tcp -- 192.168.119.0/24 anywhere tcp dpt:ssh
REJECT tcp -- anywhere anywhere tcp dpt:ssh reject-with icmp-port-unreachable
解決iptables保存報錯
- 關閉防火牆:
systemctl stop firewalld - 安裝iptables-service:
yum install iptables-services - 然後就可以保存了
設置開機啓動iptables:systemctl enable iptables