Iptables redireciona múltiplas portas com base no endereço de destino

1

Eu tenho a configuração do iptables para roteamento seletivo. Na configuração atual, ele verifica se o endereço dst está listado em uma cadeia específica e, se não estiver, redireciona o tráfego para a porta proxy que está ativa na porta 1080.

Isso funciona bem com a seguinte configuração:

iptables -t nat -N PROXY
# Do not redirect
iptables -t nat -A PROXY -d external.proxy.address.1 -j RETURN
iptables -t nat -A PROXY -d external.proxy.address.2 -j RETURN
iptables -t nat -A PROXY -d 211.96.0.0/255.240.0.0 -j RETURN
iptables -t nat -A PROXY -d 211.128.0.0/255.128.0.0 -j RETURN
iptables -t nat -A PROXY -d 218.0.0.0/255.128.0.0 -j RETURN
... [and many more address] ...

# Redirect everything else to the proxy listening on port 1080
iptables -t nat -A PROXY -p tcp -j REDIRECT --to-ports 1080
iptables -t nat -I PREROUTING -p tcp -j PROXY 

Como mencionado, isso funciona bem para o proxy1, mas estou tentando redirecionar o tráfego de maneira semelhante para o destino 10.0.0.15 para um proxy diferente (proxy2) que escuta na porta 1088.

Eu tentei várias maneiras de conseguir isso sem sucesso.

Configuração Eu tentei:

iptables -t nat -A PROXY -d 10.0.0.15 -j REDIRECT --to-ports 1088 # didn't do anything

Qual seria a melhor maneira de conseguir isso (se for possível)

    
por datether 20.04.2016 / 18:16

1 resposta

0

Seu problema é que eu entendi mal o que o RETURN faz. O link pode ajudar.

Atualmente, sua cadeia PROXY funciona da seguinte maneira:

  • o tráfego entra na cadeia PREROUTING , onde você tem (como uma primeira cláusula?) iptables -t nat -I PREROUTING -p tcp -j PROXY .
  • isso diz ao iptables para avaliar seu tráfego em relação à PROXY chain
  • a cadeia PROXY diz uma das duas coisas: basicamente, há uma regra com uma ação RETURN para o tráfego ou não, e iptables -t nat -A PROXY -p tcp -j REDIRECT --to-ports 1080 se aplica.
  • se seu tráfego corresponder a uma entrada RETURN , o iptables retornará à corrente PREROUTING e avaliará a próxima regra. Parece que não há 'próxima regra' para fazer o que você quer.

O problema é este: iptables -t nat -A PROXY -d 10.0.0.15 -j REDIRECT --to-ports 1088

Você coloca isso na cadeia PROXY , mas todo o tráfego para o qual você deseja que esse redirecionamento seja aplicado está realmente configurado para RETURN (ou seja, sair) da sua corrente PROXY .

O que você precisa no lugar da linha acima é:

iptables -t nat -A PREROUTING -d 10.0.0.15 -j REDIRECT --to-ports 1088

A chave é a cadeia na qual a regra é. Com essa regra em PREROUTING, as regras de RETURN funcionarão conforme o esperado, forçando o tráfego de correspondência do 'padrão' PROXY rule iptables -t nat -A PROXY -p tcp -j REDIRECT --to-ports 1080 e de volta para PREROUTING , onde iptables -t nat -A PREROUTING -d 10.0.0.15 -j REDIRECT --to-ports 1088 pode ser aplicado.

    
por 06.03.2017 / 12:23