iptables regras de proxy tcp não funcionam

1

Eu tenho vários servidores que precisam se conectar a um serviço remoto. Esses servidores são instâncias ec2 sob meu controle. O serviço remoto é executado em um servidor gerenciado pela minha empresa, mas não pelo meu departamento, e não tenho certeza de onde ele está hospedado. Por motivos de segurança, o serviço remoto só permitirá um único endereço IP (é um IP elástico da AWS) em uma porta específica para acessar o serviço, portanto, todas as solicitações terão que ser feitas através do proxy. Eu olhei vários exemplos de como fazer isso, e tentei muitas alterações diferentes, e nenhuma parece funcionar. Eu tentei criar as regras com base no meu conhecimento do iptables e descobri exatamente o que eu já tinha (o que ainda não funciona). Espero que alguém possa me ajudar a fazer isso funcionar rapidamente.

$ cat /proc/sys/net/ipv4/ip_forward
1

$proxy_ip
$remote_server_ip
$remote_server_port

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -d $proxy_ip/32 -p tcp -m tcp --dport $remote_server_port -j DNAT --to-destination $remote_server_ip:$remote_server_port
-A POSTROUTING -d $remote_server_ip/32 -p tcp -m tcp --dport $remote_server_port -j SNAT --to-source $proxy_ip
COMMIT
# Completed on Mon Sep 17 17:28:07 2012
# Generated by iptables-save v1.4.12 on Mon Sep 17 17:28:07 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1376:205512]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 3 --name DEFAULT --rsource -j DROP
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -p tcp -m tcp --dport $remote_server_port -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Mon Sep 17 17:28:07 2012

Pontos de bônus para qualquer um que possa me dizer o que está errado com minhas duas regras de limite de taxa no ssh, que também não estão funcionando.

    
por Brandon 19.09.2012 / 19:54

1 resposta

0

Então eu me sinto um pouco idiota agora, mas eu sei qual era o meu problema. Compartilharei aqui para fins históricos.

Essas regras realmente funcionam, é apenas a minha metodologia de teste quebrada. Estou encaminhando o MS SQL de um cluster para um banco de dados remoto. Mas, na verdade, não posso testar se está funcionando porque o único endereço IP com permissão para atingir o banco de dados remoto está sendo usado por um único servidor que não está fazendo proxy de outras solicitações e está em produção. Então eu tenho tentado usar o curl para acertar outro servidor web através do proxy e ver se recebo uma resposta. Então eu poderia apenas mudar os endereços IP e as portas ao redor e esperamos que funcione.

Mas meu problema era a regra

-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

estava pegando todas as respostas que chegavam e não as encaminhava. Quando percebi isso, comentei esta regra e tudo funcionou. E como na produção, será uma porta completamente diferente, essa regra não afetará negativamente o proxy.

Obrigado a qualquer pessoa que tenha gasto algum tempo tentando descobrir meu erro.

    
por 21.09.2012 / 03:09