log4shell nos fez melhorar a segurança de alguns servidores. Queremos agora também bloquear o tráfego de saída (na medida do possível). As regras de firewall atuais são:
/> 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:
Portanto, no exemplo, as conexões com o servidor via ssh são atualmente possíveis (e ainda devem ser possíveis no futuro). Agora queremos impedir todas as conexões de saída, exceto conexões por meio de https (443). Para fazer isso, adicionamos algumas regras de firewalld (consulte também 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
Mas após esses comandos, perderemos todas as conexões com o servidor: sem ping, sem ssh, o servidor não aceita nenhuma conexão. É possível que firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -j DROP
esteja bloqueando todo o tráfego de saída, incluindo a resposta dos servidores de solicitações de entrada (ssh-)? Está faltando alguma regra para permitir o envio dos dados de resposta das solicitações recebidas?
Estou apenas criando uma instância para testar, mas suspeito que seja porque você também não está permitindo regras de saída relacionadas/estabelecidas, então o kernel está matando suas conexões existentes.
Atualização: tenho certeza que este é o problema. Acabei de testá-lo inicializando o Centos 7 em uma instância do EC2, instalando o FirewallD e colando sua primeira regra sem o
permanent
sinalizador. Tudo funcionando bem.Assim que colei a
DROP
regra, fui desconectado.No link que você forneceu, a primeira regra que eles adicionam é uma
ESTABLISHED,RELATED
regra. Isso significa que as conexões permitidas são permitidas fora (portanto, o firewall fica com estado). Sem essa regra, você não tem regras com estado e sua conexão SSH não pode estabelecer.Portanto, sua lista real de regras precisa ser:
Observe que também incluí HTTP, HTTPS e DNS - caso contrário, as conexões não serão estabelecidas para nomes DNS porque o servidor não poderá resolvê-los ...