Eu tenho essas regras de iptables no primeiro servidor que tem a função de um cliente conectando-se a um segundo servidor mysql através do adaptador LAN.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1:44135]
-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 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Wed Feb 4 20:33:41 2015
# Generated by iptables-save v1.4.7 on Wed Feb 4 20:33:41 2015
*nat
:PREROUTING ACCEPT [76:10856]
:POSTROUTING ACCEPT [11:734]
:OUTPUT ACCEPT [11:734]
COMMIT
# Completed on Wed Feb 4 20:33:41 2015
# Generated by iptables-save v1.4.7 on Wed Feb 4 20:33:41 2015
*mangle
:PREROUTING ACCEPT [2739:2511918]
:INPUT ACCEPT [2739:2511918]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1913:165876]
:POSTROUTING ACCEPT [1913:165876]
COMMIT
O que está acontecendo é que assim que eu fizer isso:
service iptables restart
parece que todas as conexões MYSQL com um segundo servidor funcionam corretamente, mas apenas por um pequeno período de tempo, geralmente de 1 a 2 minutos, mas nesses 1 a 2 minutos as conexões com o nginx (servidor web, porta 80) não funcionam. Após 1-2 minutos, acontece que o servidor web funciona e o MYSQL não funciona. Tentei o comando iptables-save também até agora, mas nada mudou.
Esta é a configuração do firewall do segundo servidor mysql:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [2785:425650]
-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 22 -j ACCEPT
-A INPUT -d 192.168.1.1/32 -p tcp -m tcp --sport 1024:65535 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i lo -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A OUTPUT -p tcp -m tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
Responder1
Você deve definir a política padrão para DROP
o caso de sua última regra abrangente ser removida acidentalmente; assim :
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [1:44135]
Agora, no segundo servidor.
-A INPUT -d 192.168.1.1/32 -p tcp -m tcp --sport 1024:65535 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
Esta regra casa conexões cujo destino é 192.168.1.1, porta de origem de 1024 a 65535, porta de destino 3306 e estado novo ou estabelecido. Você está pensando demais nisso; se você quiser permitir conexões MySQL, basta combinar a porta de destino e, opcionalmente, adicionar um parâmetro de origem e/ou interface se quiser bloqueá-lo para um IP ou interface de origem específico.
-A INPUT -i lo -p tcp -m tcp --dport 3306 -j ACCEPT
lo
já tem acesso porque sua primeira -A INPUT -i lo -j ACCEPT
regra corresponderá a qualquer coisa vinda do loopback.
-A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
Ok, agora você está permitindo toda a sub-rede, mas isso já está melhor e deve funcionar.
-A INPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 3306 -j ACCEPT
Assim como acima, o loopback já é permitido de qualquer maneira.
-A INPUT -i eth1 -p tcp -m tcp --dport 3306 -j ACCEPT
Agora você está permitindo tudo que vem da eth1 com uma porta de destino 3306.
-A OUTPUT -p tcp -m tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT
Sua política OUTPUT é ACCEPT tudo de qualquer maneira, essas regras são inúteis.
Tenho certeza de que seu problema é porque omódulo de estado foi descontinuadoe possivelmente removido, então você deve usar o conntrack.
Recapitulando:
Primeiro servidor:
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 22 -j ACCEPT
Segundo servidor:
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth1 -s 192.168.1.0/24 -p tcp -m tcp --dport 3306 -m conntrack --ctstate NEW -j ACCEPT
Isso permitirá todas as conexões SSH e MySQL originadas de eth1, 192.168.1.0/24. Sinta-se à vontade para mudar isso.