problema:
Eu tenho um servidor TCP e um cliente que escutam na porta 9000. Eu tenho o servidor e o cliente implantados em dois hosts diferentes, onde o tráfego só pode passar pela porta 80 entre eles. Quero que a porta de origem (9000) seja mantida quando os pacotes forem enviados entre elas (veja a regra SNAT abaixo) para que a regra PREROUTING possa identificar os pacotes com --source-port
.
abordagem:
Estou tentando configurar as regras do iptables de forma que o servidor roteie seu tráfego da porta 9000 para a porta 80 e uma regra complementar para o cliente em que o tráfego de entrada na porta 80 é roteado para 9000 localmente.
Eu criei esse script para aplicar as regras. Eu tentei isso com algumas variações e os pacotes parecem ser aceitos pelo host do servidor, mas não aceitos pela regra PREROUTING (entrada).
#!/bin/bash
apply_inbound_rules() {
# Allow incoming server traffic from port 80 to the TCP client
sudo iptables -t nat \
-I PREROUTING \
-p tcp --destination-port $PROXY_PORT \
-j REDIRECT --to-port $TCP_PORT
}
apply_outbound_rules() {
# Setup outgoing packets created by the TCP server
# to route through local port 80
# and received on port 80 on the client host
sudo iptables -t nat \
-I OUTPUT \
-p tcp --destination-port $TCP_PORT \
-j DNAT --to-destination :$PROXY_PORT
# To maintain the TCP_PORT
sudo iptables -t nat \
-I POSTROUTING \
-p tcp --destination-port $PROXY_PORT \
-j SNAT --to-source :$TCP_PORT
}
apply_inbound_rules
apply_outbound_rules
Alguém tem experiência em criar regras como essa? Parece que seria um problema comum, mas não consigo descobrir.
Esta é uma tradução do meu comentário em uma resposta.
As regras devem ser ajustadas para contar com um MASQUERADE de saída da porta de origem para lidar com os pacotes de retorno. Assim, os pacotes de saída devem ser DNAT-ed com a regra que você tem e MASQUERADE-ed com uma regra:
Use essa regra em vez de sua regra SNAT.
Os pacotes de entrada relacionados aos que foram MASQUERADE-ed terão suas portas de destino devidamente mapeadas.
(corrigido conforme comentário)