Estou tentando configurar iptables
um cluster Ceph. Atualmente estou montando regras para um dos servidores de monitor.
O daemon do monitor escuta tcp/6789
(endereço IP removido, pois é um endereço público):
# netstat -tunlp | grep ceph-mon
tcp 0 0 X.X.X.X:6789 0.0.0.0:* LISTEN 2612/ceph-mon
Se eu permitir conexões com a porta tcp 6789 e descartar todo o resto, o monitor será marcado como inativo pelo resto do cluster:
iptables -F INPUT
iptables -A INPUT -p tcp --dport 6789 -j ACCEPT
iptables -A INPUT -j DROP
Confusamente, se eu descartar todas as conexões para a porta tcp 6789, o cluster ainda opera:
iptables -F INPUT
iptbales -A INPUT -p tcp --dport 6789 -j DROP
Se eu permitir conexões com uma porta tcp de origem 6789 e descartar todo o resto que o cluster opera:
iptables -F INPUT
iptables -A INPUT -p tcp --sport 6789 -j ACCEPT
iptables -A INPUT -j DROP
Isso não faz sentido para mim, pois o daemon está ouvindo na porta 6789, então os segmentos tcp devem ter uma porta de destino de 6789.
Se eu fizer uma tcpdump
porta de origem 6789, posso ver os pacotes de entrada com uma porta de destino de 56052 e uma porta de origem de 6789. Isso faz ainda menos sentido para mim, pois não há nada ouvindo na porta 56052 no servidor monitor.
Estou faltando alguma coisa aqui? Estou usando SLES12 e ceph 12.2.7, as chains FORWARD e OUTPUT não possuem regras, e a política em todas as chains é ACCEPT
Eu não habilitei o rastreamento de conexão, então, quando o monitor estava tentando falar com outros monitores, as respostas não estavam sendo permitidas de volta pelo firewall. Eu adicionei a seguinte regra para corrigir o problema:
Obrigado à AB pela sugestão de olhar para firewalls com estado.