防火墙:阻止传出连接也会阻止传入连接

防火墙:阻止传出连接也会阻止传入连接

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-) 请求的应答?是否缺少允许发送传入请求应答数据的规则?

答案1

我只是启动一个实例进行测试,但我怀疑这是因为您不允许相关/已建立的出站规则,所以内核正在终止您现有的连接。

更新:我确定这就是问题所在。我刚刚通过在 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 名称的连接,因为服务器无法解析它们......

相关内容