Linux
firewalld 阻止來自預分配 IP 的 ICMP 流量除外
我一直在嘗試將 iptables 設置轉換為新伺服器上的 firewalld。現有規則阻止 ICMP,但來自 IP 子集的除外。只有來自我們 IT 子網 (192.168.10.0/24) 和我們的監控伺服器 (10.10.10.10) 的人應該能夠 ping 伺服器。在某些情況下,額外的伺服器會啟用額外的 IP 來獲得 ping 響應。
iptables -I INPUT -p ICMP -j DROP iptables -I INPUT -p ICMP -s 192.168.10.0/24 -j ACCEPT iptables -I INPUT -p ICMP -s 10.10.10.10 -j ACCEPT iptables -I INPUT -p ICMP -s N.N.N.N -j ACCEPT
然後,當我嘗試應用類似的規則時,使用 firewalld 豐富的規則,我能夠創建一個規則來允許 IT 子網或監控伺服器,但不能同時允許兩者。我似乎遇到了與此問題中描述的相同的問題。我已經看到其他幾個頁面提出了解決方案,但都以某種方式失敗了。我已經將我的測試框恢復為預設值。
更新此 ICMP 規則後,我將需要編寫更嚴格的 SSH 訪問列表,它允許 IT 範圍的較小子集訪問這些機器。此時在此過程中添加 SSH 規則會產生意想不到的結果。
rich rules: rule family="ipv4" source address="192.168.10.0/24" accept rule family="ipv4" source address="10.10.10.10" accept rule family="ipv4" source NOT address="192.168.10.0/24" drop
這些規則的結果是:
- 阻止所有流量,而不僅僅是 ICMP
- 如果沒有“NOT address drop”行,我可以在我不應該能夠ping通的設備上ping伺服器
- 使用“NOT address drop”行,我無法從位於 10.10.10.10 的監控伺服器 ping
- 使用上面的命令將規則添加到 iptables 確實有效,但在重新啟動時會被刪除
更新 1 我按照建議重新審視了多區域方法。問題似乎是我的“ssh”人員正在趕上我的 ITsubnet 區域。這會阻止他們進行 SSH 訪問。
# firewall-cmd --zone=ITsubnet --list-all ITsubnet (active) target: default icmp-block-inversion: no interfaces: sources: 192.168.10.0/24 services: ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: # firewall-cmd --zone=MonitoringSRV --list-all MonitoringSRV (active) target: default icmp-block-inversion: no interfaces: sources: 10.10.10.10 services: ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: # firewall-cmd --zone=SSH_Access --list-all SSH_Access (active) target: default icmp-block-inversion: no interfaces: sources: 192.168.10.10 services: ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: # firewall-cmd --zone=public --list-all public (active) target: DROP icmp-block-inversion: no interfaces: eno16777984 sources: services: ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
PS發現這個解釋器有幫助。
用於在UPDATE 1中進行更改的命令
firewall-cmd --permanent --new-zone=ITsubnet firewall-cmd --permanent --new-zone=MonitoringSRV firewall-cmd --permanent --new-zone=SSH_access firewall-cmd --reload firewall-cmd --permanent --zone=ITsubnet --add-source=192.168.10.0/24 firewall-cmd --permanent --zone=MonitoringSRV --add-source=10.10.10.10 firewall-cmd --permanent --zone=SSH_access --add-source=192.168.10.10 firewall-cmd --permanent --zone=public --remove-service=ssh firewall-cmd --permanent --zone=SSH_access --add-service=ssh firewall-cmd --permanent --zone=public --set-target=DROP firewall-cmd --reload
甚至從 192.168.10.10 阻止所有 ssh 訪問。
用於在UPDATE 2中進行更改的命令
區域名稱似乎會影響順序,因此在 SSH_access 之前處理 ITsubnet。這得到了證實:
iptables -S
或者
iptables -vnL
因此,更改區域名稱以獲得更具體的規則以首先處理此問題。
firewall-cmd --permanent --delete-zone=SSH_Access firewall-cmd --permanent --new-zone=A1_First010 firewall-cmd --permanent --zone=A1_First010 --add-source=192.168.10.10 firewall-cmd --permanent --zone=A1_First010 --add-service=ssh