Eu tenho um servidor que não permite conexões ao mysql de fontes externas - todos os meus bancos de dados e conexões ocorrem no host local. A política padrão do iptables é descartar as conexões de todas as portas que eu não especificar (atualmente não tenho a porta 3306 especificada nas minhas regras de iptable, para que todas as conexões com essa porta sejam descartadas).
Tudo bem, mas agora eu gostaria de me conectar a um banco de dados mysql localizado externamente no Amazon RDS.
A porta 3306 pode ser aberta para o mundo externo da seguinte maneira:
iptables -t filter -A INPUT -p tcp --sport 3306 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 3306 -j ACCEPT
Isso me permite conectar ao banco de dados no Amazon RDS, mas também permite conexões remotas aos bancos de dados no meu servidor.
O que preciso fazer para permitir que meu servidor se conecte ao banco de dados na Amazon, mas restringir as conexões externas aos bancos de dados no meu servidor?
Lembre-se também de que o endereço IP da minha instância do Amazon RDS pode mudar periodicamente, acredito.
Respostas:
Aproveite o mecanismo de estado:
ou em versões posteriores do iptables
É exatamente isso que o mecanismo de estado existe para fazer: permitir tráfego que atenda a vários critérios (por exemplo, protocolo, porta de origem), mas também faça parte de uma conexão existente (como define a conexão ). O resultado é que o
TCP SYN
pacote de saída para um endereço IP externo específico na porta de destino 3306, a partir de uma porta efêmera local, criará uma entrada da tabela de estado para essa combinação específica de endereços IP e números de porta e retornará tráfego apenas com a mesma combinação de endereços e portas serão permitidos através e somente pela duração dessa conexão.fonte