Command-Line-Interface

使用 firewalld 阻止除少數幾個 ip 之外的所有 ip

  • March 15, 2021

在 linux 聯網機器上,我想限制允許訪問的“公共”區域(防火牆概念)上的地址集。所以最終結果將是沒有其他機器可以訪問任何埠或協議,除了那些明確允許的,有點混合

 --add-rich-rule='rule family="ipv4" source not  address="192.168.56.120" drop'

 --add-rich-rule='rule family="ipv4" source not  address="192.168.56.105" drop'

上面的問題是,這不是一個真正的列表,它會阻止所有內容,因為如果它的一個地址與另一個地址不同而被阻止,從而產生意外的“全部刪除”效果,我將如何“取消阻止”特定的非連續集?source 是否接受地址列表?到目前為止,我在查看文件或Google結果時沒有看到任何內容。


編輯:我剛剛創建了這個:

# firewall-cmd  --zone=encrypt --list-all
encrypt (active)
 interfaces: eth1
 sources: 192.168.56.120
 services: ssh
 ports: 6000/tcp
 masquerade: no
 forward-ports: 
 icmp-blocks: 
 rich rules: 

但是我仍然可以到達埠 6000,因為 .123 我的意圖是如果未列出源,它應該無法訪問任何服務或埠

豐富的規則根本沒有必要。

如果要將區域限制為一組特定的 IP,只需將這些 IP 定義為區域本身的源(並刪除可能存在的任何介面定義,因為它們會覆蓋源 IP)。

但是,您可能不想對“公共”區域執行此操作,因為這在語義上意味著面向公眾的服務向世界開放。

相反,請嘗試使用不同的區域(例如“內部”)來獲取大多數受信任的 IP 地址來訪問潛在的敏感服務,例如 sshd。(您也可以創建自己的區域。)

警告:不要將特殊的“受信任”區域與正常的“內部”區域混淆。添加到“受信任”區域的任何源都將被允許在所有埠上通過;允許向“受信任”區域添加服務,但這樣做沒有任何意義。

firewall-cmd --zone=internal --add-service=ssh
firewall-cmd --zone=internal --add-source=192.168.56.105/32
firewall-cmd --zone=internal --add-source=192.168.56.120/32
firewall-cmd --zone=public --remove-service=ssh

這樣做的結果將是一個“內部”區域,它允許訪問 ssh,但只能從兩個給定的 IP 地址訪問。要使其持久化,請使用--permanent附加或更好的方式重新執行每個命令firewall-cmd --runtime-to-permanent

引用自:https://serverfault.com/questions/680780