Rhel7

firewalld:阻止傳出連接也阻止傳入連接

  • December 29, 2021

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 名稱的連接,因為伺服器將無法解析它們……

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