O firewall está rejeitando as “conexões” do UDP?

1

Eu tenho um servidor que está agregando logs de vários outros servidores. Ele funciona muito bem, no entanto, de tempos em tempos (logo após a reinicialização, mas não todas as reinicializações), ele decide que várias "conexões" UDP estão em algum estado estranho e rejeitam pacotes de entrada.

A coisa é, isso não faz sentido, porque não há "conexões" quando se lida com o UDP!

Veja um exemplo do que aparece nos meus logs do firewall:

Shorewall:loc2fw:REJECT:IN=eth0 OUT= MAC=/*snip*/ SRC=10.x.x.4 DST=10.y.y.14 LEN=159 TOS=0x00 PREC=0x00 TTL=254 ID=37407 PROTO=UDP SPT=514 DPT=514 LEN=139

Depois de executar o comando sudo conntrack -D -p udp para limpar todas as "conexões" UDP da conntrack, aqui está um log mostrando uma mensagem recebida do mesmo host:

Shorewall:loc_dnat:REDIRECT:IN=eth0 OUT= MAC=/*snip*/ SRC=10.x.x.4 DST=10.y.y.14 LEN=201 TOS=0x00 PREC=0x00 TTL=254 ID=50542 PROTO=UDP SPT=514 DPT=514 LEN=181

E aqui está o que aparece em conntrack para este host antes de executar o comando -D :

udp      17 29 src=10.x.x.4 dst=10.y.y.14 sport=514 dport=514 [UNREPLIED] src=10.y.y.14 dst=10.x.x.4 sport=514 dport=514 mark=0 use=1

Aqui estão os bits relevantes da minha configuração Shorewall para esta porta:

#ACTION         SOURCE          DEST            PROTO   DPT
SECTION NEW
REDIRECT:info   loc             5000            tcp,udp 514
ACCEPT:info     loc             $FW             tcp,udp 5000

E por questões de integridade, aqui está a cadeia resultante no iptables (isto é, depois que o comando conntrack -D -p udp foi executado e o firewall estava aceitando os pacotes por um tempo):

Chain loc2fw (1 references)
 pkts bytes target     prot opt in     out     source               destination         
16328 1648K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
 6428  386K ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 8 /* Ping */
    1    64 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22 /* SSH */
   18  1080 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 /* HTTP */
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:5000 ctorigdstport 514
  12M 6677M ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:5000 ctorigdstport 514
    0     0 ~log0      tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           [goto]  tcp dpt:5000
    0     0 ~log0      udp  --  *      *       0.0.0.0/0            0.0.0.0/0           [goto]  udp dpt:5000
   52  3088 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:9200
 126M   32G Reject     all  --  *      *       0.0.0.0/0            0.0.0.0/0           
 126M   32G LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0            LOG flags 0 level 6 prefix "Shorewall:loc2fw:REJECT:"
 126M   32G reject     all  --  *      *       0.0.0.0/0            0.0.0.0/0           [goto]

Como você pode ver, estou usando uma regra REDIRECT para aceitar as conexões que chegam na porta 514 e enviá-las para a porta 5000, onde meu agregador de logs escuta (foi mais fácil fazer isso no firewall do que saltar pela porta). aros para permitir que um usuário não privilegiado abra uma porta privilegiada).

Não consigo entender por que as "conexões" do UDP parecem entrar nesse estado estranho onde são rejeitadas pela política padrão. Digo isso porque eles aparecem claramente em conntrack, e excluí-los parece "redefinir" tudo e deixar as mensagens fluírem para meu agregador de registros novamente. Neste ponto, a única alternativa que vejo é configurar o cron para executar o comando conntrack logo após a reinicialização, mas eu prefiro entender por que isso está acontecendo e corrigir a causa em vez de apenas implementar isso solução alternativa.

    
por Kromey 24.06.2014 / 17:55

0 respostas