Como fazer logs do iptables para identificar protocolos por nome e não por número?

3

Nos meus arquivos de log do iptables (Ubuntu 16-04), todas as mensagens do meu roteador LAN e de outros hosts na LAN, relacionadas ao IGMP, possuem "PROTO = 2". Existe uma maneira de mudar isso e obter "PROTO = IGMP"?

    
por ARX 30.04.2016 / 17:23

1 resposta

2
sed -e "$(awk '/^[[:space:]]*(#|$)/ { next } ;
               { print "s/ PROTO="$2" / PROTO="$3" /;" }' \
          /etc/protocols)" /path/to/iptables.log

Isso usa awk para construir um script sed dos campos 2 e 3 do arquivo /etc/protocols . Em seguida, ele executa o script sed em /path/to/iptables.log . Isso converterá os protocolos numerados ALL no arquivo de log em seus nomes correspondentes.

Se preferir, você pode salvar a saída do script awk em um arquivo (por exemplo, chamado verbose-proto.sed e executá-lo com sed -f (ou editá-lo para adicionar #!/bin/sed -f como primeira linha e chmod para torná-lo executável), por exemplo,

$ awk '/^[[:space:]]*(#|$)/ { next } ;
     { print "s/ PROTO="$2" / PROTO="$3" /;" }' \
    /etc/protocols > ./verbose-proto.sed

$ printf "%s\n" 1 i '#!/bin/sed -f' . w | ed -s verbose-proto.sed
$ chmod +x ./verbose-proto.sed 
$ ./verbose-proto.sed /path/to/iptables.log

Se tudo o que você quiser fazer é alterar esse número de protocolo 2 para IGMP , é muito mais simples:

sed -e 's/ PROTO=2 / PROTO=IGMP /' /path/to/iptables.log

(o script awk gera cerca de 50 linhas com a pesquisa regexp e substitui regras como essa - uma para cada protocolo conhecido em /etc/protocols )

    
por 01.05.2016 / 03:32

Tags