Rhel7
firewalld:阻止傳出連接也阻止傳入連接
log4shell 使我們提高了一些伺服器的安全性。我們現在還希望阻止傳出流量(盡可能)。目前的防火牆規則是:
/> firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client https smtp ssh ports: 143/tcp 3000/tcp 4949/tcp 8080/tcp 12999/tcp 25/tcp 1194/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
因此,目前可以通過 ssh 連接到伺服器(並且將來應該仍然可以)。現在我們要阻止除通過 https (443) 的連接之外的所有傳出連接。為此,我們添加了一些防火牆規則(另請參閱https://serverfault.com/a/624474/145652):
/> firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p tcp -m tcp --dport=443 -j ACCEPT success /> firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -j DROP success /> firewall-cmd --reload
但是在這些命令之後,我們將失去與伺服器的所有連接:沒有 ping,沒有 ssh,伺服器不接受任何連接。可能
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -j DROP
阻止所有傳出流量,包括傳入(ssh-)請求的伺服器應答?是否缺少允許發送傳入請求的應答數據的規則?
我只是在啟動一個實例進行測試,但我懷疑這是因為您也不允許相關/已建立的出站規則,因此核心正在殺死您現有的連接。
更新:我確定這是問題所在。我剛剛通過在 EC2 實例上啟動 Centos 7,安裝 FirewallD,然後粘貼不帶
permanent
標誌的第一條規則來測試它。一切正常。一旦我粘貼了
DROP
規則,我就斷開了連接。在您提供的連結中,他們添加的第一條規則是一條
ESTABLISHED,RELATED
規則。這意味著允許進入的連接被允許出去(因此防火牆是有狀態的)。如果沒有該規則,您將沒有狀態規則,並且您的 SSH 連接無法建立。因此,您的實際規則列表需要是:
# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -m state --state ESTABLISHED,RELATED -j ACCEPT # firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p tcp -m tcp --dport 80 -j ACCEPT # firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p tcp -m tcp --dport 443 -j ACCEPT # firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p tcp -m tcp --dport 53 -j ACCEPT # firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p udp --dport 53 -j ACCEPT # firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 2 -j DROP
請注意,我還包括了 HTTP、HTTPS 和 DNS - 否則將無法建立到 DNS 名稱的連接,因為伺服器將無法解析它們……