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 连接无法建立。因此,您的实际规则列表需要是:
请注意,我还包括 HTTP、HTTPS 和 DNS - 否则将无法建立到 DNS 名称的连接,因为服务器将无法解析它们......