iptables redireciona as conexões locais para o sistema / porta remoto

7

Estou tentando usar o SSH para redirecionar a porta local 3389 para um servidor redhat em alguma porta arbitrária (na região sem privilégios) que protegi por trás de um firewall e, em seguida, encaminhar a porta sem privilégios do servidor redhat para os usuários área de trabalho remota. Essencialmente, crie uma VPN altamente especificada que lide com apenas uma tarefa: faça com que os usuários acessem seus sistemas atrás de um firewall usando um túnel criptografado sobre o qual eu tenho controle.

Eu sei que anos atrás isso foi possível usando o comando:

iptables -A OUTPUT -t nat --dport ${LOCAL UNPRIV PORT} \
           -j DNAT ${ANOTHER SYSTEM}:${REMOTE PORT}

mas pelo que li, parece que a habilidade foi removida e recebo a mensagem em / var / log / messages

      kernel: NAT: no longer support implicit source local NAT 

Eu encontrei recursos que sugerem que do kernel 2.6.X - 2.6.10, havia uma maneira de habilitar isso no kernel usando IP_NF_NAT_LOCAL, mas aparentemente em kernels mais recentes ele foi removido. Eu tentei encaminhar todo o tráfego local para que ele entre na cadeia PREROUTING, e tenha tido sucesso limitado, e isso parece uma má idéia, porque então eu tenho que abrir a porta sem privilégios no servidor para que eu possa alimentá-lo de volta interface eth0. Tenho certeza de que, se eu tivesse mais tempo, poderia descobrir algum tipo de confusão bizarra ou solução alternativa, mas eu preferiria não hackear tanto meus scripts de firewall. Parece que deve haver uma maneira muito mais fácil de fazer isso que não estou vendo. Qualquer ajuda ou orientação que a comunidade possa fornecer seria muito útil! Agradecemos antecipadamente

    
por dynamphorous 12.03.2011 / 01:15

3 respostas

10

Não tenho certeza se compreendi, mas acho que você está na cadeia errada. :-) Eu também estava confuso quando usei o iptables pela primeira vez. Mas o caminho para encaminhar a porta local $ {LOCAL UNPRIV PORT} é a seguinte declaração:

$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport ${LOCAL UNPRIV PORT} 
     -j DNAT --to ${ANOTHER SYSTEM}:${REMOTE PORT}

É uma mistura entre um problema semântico e a maneira como o netfilter funciona: Nos velhos tempos, o encaminhamento de uma porta local envolvia uma conexão com a caixa que estava encaminhando, além de uma segunda conexão com o destino. Iptables faz isso em um passo. Então, em vez de duas conexões - você está encaminhando o tráfego para essa porta diretamente para o destino. O Netfilter faz todas as verificações de integridade e escrituração contábil: somente os pacotes que pertencem a uma conexão válida são NATted e podem, portanto, ser encaminhados.

A ativação do DNAT não permite que nenhum pacote seja encaminhado. Você também precisa adicionar uma regra:

$IPT -N INET-PRIV
$IPT -A FORWARD -i eth0 -o eth1 -j INET-PRIV
$IPT -A FORWARD -j DROP

$IPT -A INET-PRIV -p tcp -d ${ANOTHER SYSTEM} --dport ${REMOTE PORT} -j ACCEPT

$IPT -A INET-PRIV -j DROP

E você precisa ativar o encaminhamento, é claro.

echo "1" > /proc/sys/net/ipv4/ip_forward

Pro iptables : mais seguro, mais flexível, menos memória e CPU usados por conexão

Contra iptables : encaminhar uma conexão de uma máquina interna para uma máquina interna (alimentá-la de volta para a eth0) não faz sentido com iptables (claro que você sempre pode se conectar diretamente), encaminhando o tráfego gerado localmente não funciona (um daemon de encaminhamento de porta pode ajudar, mas geralmente não faz sentido)

Exatamente este pode ser o problema : você tenta usar o NAT em um não-roteador, então você deve usar um daemon de encaminhamento ou pular este encaminhamento de porta extra completamente e fazer:

ssh -L 1234:${ANOTHER SYSTEM}:${REMOTE PORT} special-vpn-box

Em especial-vpn-box, você só pode permitir conexões de entrada do roteador e conexões de saída para $ {ANTHY SYSTEM}: $ {REMOTE PORT} usando o iptables. Dessa forma, os usuários do special-vpn-box só podem acessar $ {ANotherTHERWORLD}: $ {REMOTE PORT} e não poderão fazer mais nada se não forem confiáveis.

    
por 12.03.2011 / 14:53
4

Veja o que eu faço especificamente para encaminhamento de host local:

iptables -t nat -A OUTPUT -m addrtype --src-type LOCAL --dst-type LOCAL -p tcp --dport 3306 -j DNAT --to-destination ip.ip.ip.ip
iptables -t nat -A POSTROUTING -m addrtype --src-type LOCAL --dst-type UNICAST -j MASQUERADE

sysctl -w net.ipv4.conf.all.route_localnet=1

Certifique-se de substituir ip.ip.ip.ip pelo seu IP público real e também o --dport 3306 da porta que você deseja encaminhar.

Por fim, execute o comando sysctl e também atualize seu /etc/sysctl.conf

Você pode atualizar sysctl.ctl para permitir o roteamento de localhost com o seguinte comando:

echo "net.ipv4.conf.all.route_localnet=1" >> /etc/sysctl.conf

Agora tudo isso parece simples e bom, mas foi preciso pesquisar e caçar. Esteja avisado e entenda que o encaminhamento localhost / 127.0.0.1 requer este método e os outros exemplos típicos não funcionam. Alguns exemplos de soluções que não funcionam com o host local:

iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to ip.ip.ip.ip:3306
iptables -t nat -A POSTROUTING -d ip.ip.ip.ip -j MASQUERADE

link

    
por 29.12.2016 / 08:18
2
# Enable IP Forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A PREROUTING  -p tcp \
--dport ${LOCAL UNPRIV PORT} -j DNAT --to-destination ${ANOTHER SYSTEM}:${REMOTE PORT}

iptables -t nat -A POSTROUTING -p tcp \
--dst ${ANOTHER SYSTEM} --dport ${REMOTE PORT} -j SNAT --to-source ${LOCAL SYSTEM}
    
por 20.06.2013 / 00:12