Estou usando um aplicativo chamado logstash e preciso receber dados da porta UDP 514. O problema é que o logstash não tem permissão para escutar a porta 514. Para resolver esse problema, decidi usar a tabela nat do iptables:
iptables -t nat -A PREROUTING -p udp --dport 514 -j REDIRECT --to-port 5140
Em seguida, verifiquei se os pacotes destinados à porta 514 do udp estavam sendo capturados nessa regra, usando o comando:
iptables -t nat -nxvL
A saída foi:
Chain PREROUTING (policy ACCEPT 608395 packets, 392277304 bytes)
pkts bytes target prot opt in out source destination
1 594 REDIRECT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:514 redir ports 5140
0 0 REDIRECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:514 redir ports 5140
Chain INPUT (policy ACCEPT 1716 packets, 638207 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 8906 packets, 538280 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 8906 packets, 538280 bytes)
pkts bytes target prot opt in out source destination
Como você provavelmente pode dizer que a regra capturou apenas um pacote, embora haja vários alcançando essa porta.
tcpdump -nni any -port 514
o comando acima tem a seguinte saída:
12:58:22.222661 IP 100.100.200.2.8587 > 10.93.33.115.514: SYSLOG local7.notice, length: 545
12:58:22.232715 IP 100.100.200.2.10099 > 10.93.33.115.514: SYSLOG local7.notice, length: 519
12:58:22.233787 IP 100.100.200.2.8587 > 10.93.33.115.514: SYSLOG local7.info, length: 699
12:58:22.237041 IP 100.100.200.2.8587 > 10.93.33.115.514: SYSLOG local7.info, length: 550
12:58:22.237100 IP 100.100.200.2.8587 > 10.93.33.115.514: SYSLOG local7.info, length: 564
12:58:22.242670 IP 100.100.200.2.5006 > 10.93.33.115.514: SYSLOG local7.notice, length: 542
12:58:22.242722 IP 100.100.200.2.5006 > 10.93.33.115.514: SYSLOG local7.notice, length: 542
12:58:22.246941 IP 100.100.200.2.8587 > 10.93.33.115.514: SYSLOG local7.warning, length: 746
12:58:22.247627 IP 100.100.200.2.8587 > 10.93.33.115.514: SYSLOG local7.notice, length: 687
12:58:22.247654 IP 100.100.200.2.8587 > 10.93.33.115.514: SYSLOG local7.notice, length: 687
12:58:22.252840 IP 100.100.200.2.8587 > 10.93.33.115.514: SYSLOG local7.notice, length: 604
12:58:22.254676 IP 100.100.200.2.23295 > 10.93.33.115.514: SYSLOG local7.notice, length: 687
12:58:22.254704 IP 100.100.200.2.23295 > 10.93.33.115.514: SYSLOG local7.notice, length: 687
12:58:22.258491 IP 100.100.200.2.8587 > 10.93.33.115.514: SYSLOG local7.notice, length: 677
12:58:22.260588 IP 100.100.200.2.8587 > 10.93.33.115.514: SYSLOG local7.info, length: 581
12:58:22.261878 IP 100.100.200.2.23295 > 10.93.33.115.514: SYSLOG local7.notice, length: 542
12:58:22.261908 IP 100.100.200.2.10099 > 10.93.33.115.514: SYSLOG local7.notice, length: 542
12:58:22.261917 IP 100.100.200.2.23295 > 10.93.33.115.514: SYSLOG local7.notice, length: 540
12:58:22.262554 IP 100.100.200.2.5006 > 10.93.33.115.514: SYSLOG local7.notice, length: 542
12:58:22.262568 IP 100.100.200.2.8587 > 10.93.33.115.514: SYSLOG local7.notice, length: 542
12:58:22.266295 IP 100.100.200.2.5006 > 10.93.33.115.514: SYSLOG local7.notice, length: 639
^C
824 packets captured
855 packets received by filter
18 packets dropped by kernel
Por que a regra não está funcionando? Todo pacote UDP que atinge a porta 514 deve ser redirecionado. Eu realmente não consigo ver o que está causando isso. iptables-service está ativo e em execução, o firewalld está desativado.