O encaminhamento de porta do CentOS não funciona

7

Estou usando o CentOS 6.5 e adicionei os seguintes comandos ao meu iptables para encaminhar todo o tráfego de entrada na porta 8088 para 4569:

iptables -A PREROUTING -t nat -p udp --dport 8088 -i eth0 -j DNAT --to-destination 127.0.0.1:4569
iptables -I FORWARD 1 -d 127.0.0.1 -p udp --dport 4569 -j ACCEPT

iptables --list mostra a seguinte saída:

iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     udp  --  anywhere             localhost.localdomain udp dpt:iax

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Mas quando pego um rastreio de pacotes na porta 4569 do udp, não vejo nenhum pacote naquela porta. Então eu adicionei isto:

iptables -A PREROUTING -t nat -p udp --dport 8088 -i eth0 -j REDIRECT --to-ports 4569

E o meu iptable é assim:

Table: nat
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination
1    DNAT       udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:8088 to:127.0.0.1:4569
2    REDIRECT   udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:8088 redir ports 4569

Mas ainda sem sorte. O que estou fazendo errado?

    
por user3360140 28.12.2014 / 21:28

2 respostas

7

Para redirecionar os pacotes para a interface de loopback, você precisa usar o REDIRECT target.

iptables -A PREROUTING -t nat -p udp --dport 8088 -i eth0 -j REDIRECT --to-ports 4569

Caso contrário, você alterará o endereço de destino antes que a decisão de roteamento seja tomada para 127.0.0.1 . Isso significa que ele será considerado um pacote marciano pelo kernel e descartado pela política de filtragem de caminho reverso.

Os dois parâmetros do kernel responsáveis por este comportamento são:

  • net.ipv4.conf.eth0.route_localnet

route_localnet - BOOLEAN

Do not consider loopback addresses as martian source or destination while routing. This enables the use of 127/8 for local routing purposes.

default FALSE

  • net.ipv4.conf.eth0.rp_filter

rp_filter - INTEGER

0 - No source validation.
1 - Strict mode as defined in RFC3704 Strict Reverse Path Each incoming packet is tested against the FIB and if the interface is not the best reverse path the packet check will fail. By default failed packets are discarded.
2 - Loose mode as defined in RFC3704 Loose Reverse Path Each incoming packet's source address is also tested against the FIB and if the source address is not reachable via any interface the packet check will fail.

Current recommended practice in RFC3704 is to enable strict mode to prevent IP spoofing from DDos attacks. If using asymmetric routing or other complicated routing, then loose mode is recommended.

The max value from conf/{all,interface}/rp_filter is used when doing source validation on the {interface}.

Default value is 0. Note that some distributions enable it in startup scripts.

Como você quer manter esse comportamento legítimo, a corrente REDIRECT deve ser usada para ignorar essa condição para uma determinada regra.

    
por 28.12.2014 / 21:33
-1

Você pode precisar ativar o encaminhamento de ip no kernel do Linux.

Primeiro, verifique o valor atual.

sysctl net.ipv4.ip_forward

Um zero significa que o encaminhamento de ip está desativado. Este é o padrão.

Ativar o encaminhamento de ip.

sysctl -w net.ipv4.ip_forward=1

Agora, teste novamente.

    
por 28.12.2014 / 22:40