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.