Tenho dois servidores com versões diferentes de RHEL e firewalld. Ambos são configurados da mesma forma, mas se comportam de maneira diferente quando adiciono um IP de origem a uma zona.
Servidor A:
# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.9 (Maipo)
# firewall-cmd --version
0.6.3
Servidor B:
# cat /etc/redhat-release
Red Hat Enterprise Linux release 9.3 (Plow)
# firewall-cmd --version
1.2.5
Ambos os servidores têm uma configuração de firewalld muito básica e posso fazer ssh em ambos (observe a inclusão do serviço ssh em ambas as configurações):
A:
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens32
sources:
services: dhcpv6-client mysql ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
B:
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eno8303
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Os servidores irão hospedar um banco de dados MariaDB, então preciso garantir que a porta 3306 seja permitida. Sem outras alterações, executo os seguintes comandos que (por experiência própria) permitem o tráfego da porta 3306 do endereço IP específico 192.168.1.2:
# firewall-cmd --new-zone=test --permanent
success
# firewall-cmd --zone=test --add-source=192.168.1.2 --permanent
success
# firewall-cmd --zone=test --add-port=3306/tcp --permanent
success
# firewall-cmd --reload
Depois de executar esses comandos, ainda posso fazer SSH no Servidor A a partir do endereço IP 192.168.1.2, mas não consigo fazer SSH no Servidor B. Posso, no entanto, fazer SSH no Servidor B a partir de outras máquinas. De 192.168.1.2 para o Server BI, obtenha:
# ssh ServerB
ssh: connect to host ServerB port 22: No route to host
Se eu criar a zona sem a --add-source
opção, o SSH funcionará bem, então parece que esta opção tem um comportamento diferente no servidor mais recente. Isso está correto? Não consigo encontrar nenhum outro motivo para isso não funcionar.
Parece que versões mais antigas do firewalld permitiam o Zone Drifting.
O que é desvio de zona?
Um usuário pode configurar um zoneFoo baseado em fonte - uma zona à qual você adicionou fontes via --add-source. Se zoneFoo usar um --set-target padrão, os pacotes poderão ingressar em uma segunda zona baseada em interface. Isso inclui a zona padrão abrangente.
Fontes:
Postagem do blog do Firewalld: https://firewalld.org/2020/01/allowzonedrifting
Fórum Alma Linux: https://almalinux.discourse.group/t/adding-source-ip-to-specific-zone-prevents-same-ip-from-accessing-services-in-other-zones/2539/3