Estou tentando usar a ação REDIRECT
do Shorewall para interceptar o tráfego destinado à porta 514 do firewall (TCP e UDP) para a porta 5000 (também TCP e UDP), além de permitir também o tráfego direto para a última porta. (Os motivos não são importantes, mas a versão curta é que estamos executando um agregador de log como um usuário não privilegiado, mas o daemon não suporta a remoção de privilégios de root, portanto, ele não pode escutar nas portas privilegiadas; ao mesmo tempo nós temos muitas implementações de syslog mais antigas que não permitem o envio para portas alternativas.)
Além do próprio firewall, existem três zonas definidas: loc (10.0.0.0/8), dmz (172.16.0.0/16) e net (tudo o mais); o último existe principalmente para negar / largar tudo de redes "não confiáveis".
As regras relevantes são assim:
#ACTION SOURCE DEST PROTO DEST
# PORT
SECTION NEW
REDIRECT:info loc 5000 tcp,udp 514
REDIRECT:info dmz 5000 tcp,udp 514
ACCEPT:info loc $FW tcp,udp 5000
ACCEPT:info dmz $FW tcp,udp 5000
Até aí tudo bem. (Existem outras regras, como permitir conexões SSH e HTTP, mas estas são as únicas relevantes para as portas 514 ou 5000.) A política padrão é REJECT
para loc e dmz, e DROP
para net.
O problema é que tenho muitas, muitas instâncias de hosts sendo rejeitadas, enquanto hosts vizinhos na mesma rede estão sendo redirecionados e aceitos. Por exemplo, 172.16.0.194 está colocando mensagens em nosso agregador o mais rápido possível, mas 172.16.0.166 está tendo todos os pacotes rejeitados. Similarmente, 10.140.88.150 está sendo aceito, enquanto 10.192.253.4 está sendo rejeitado. Aqui estão mensagens de syslog de amostra para o último par:
Shorewall:loc_dnat:REDIRECT:IN=eth0 OUT= MAC=/*anon*/:08:00 SRC=10.140.88.150 DST=10.1.25.14 LEN=134 TOS=0x00 PREC=0x00 TTL=253 ID=9092 PROTO=UDP SPT=62162 DPT=514 LEN=114
Shorewall:loc2fw:REJECT:IN=eth0 OUT= MAC=/*anon*/:08:00 SRC=10.192.253.4 DST=10.1.25.14 LEN=164 TOS=0x00 PREC=0x00 TTL=254 ID=58464 PROTO=UDP SPT=514 DPT=514 LEN=144
O que eu acho interessante é que há pouquíssimas instâncias de REDIRECT
s bem-sucedidas em meu log (por exemplo, apenas 1 para este host), apesar dos hosts que são bem-sucedidos enviando milhares e milhares de mensagens, embora pareça haver REJECT
line para cada mensagem que um host rejeitado está enviando. Também é interessante que, para muitos dos hosts rejeitados, eles estavam sendo redirecionados e aceitos até que o firewall fosse reiniciado quando tentássemos adicionar uma nova regra (essa regra já foi removida, mas ainda estamos tendo os mesmos problemas ). Todas as mensagens atuais estão chegando no UDP, mas as regras precisam funcionar para ambos os protocolos.
(Interessante também é que, usando tcpdump
, posso ver as respostas do ICMP "port unreachable" enviadas para alguns hosts rejeitados, mas não para outros. Não tenho ideia do que, se é que isso significa.)
Minha teoria é que as mensagens dos hosts rejeitados estão sendo vistas por algum motivo como parte de uma conexão ESTABLISHED
ou RELATED
por iptables e, portanto, não correspondem a nada em SECTION NEW
; no entanto, essa é a única seção em que as regras REDIRECT
ou DNAT
podem ser colocadas, portanto, se esse é o problema, não tenho ideia de como resolvê-lo. (Eu também não tenho ideia de como confirmar ou refutar essa teoria).
Eu tentei usar DNAT
(com $FW::5000
na coluna DEST
) em vez de REDIRECT
, mas os resultados foram idênticos. Eu também tentei adicionar ACCEPT
regras para a porta 514, mas isso não teve efeito sobre quem foi ou não escolhido pelas regras REDIRECT
.
Como preciso configurar o Shorewall para redirecionar corretamente todas as conexões para uma determinada porta das redes especificadas (zonas), em vez de apenas hosts aparentemente aleatórios?