¿Por qué el firewall parece funcionar de forma intermitente?

¿Por qué el firewall parece funcionar de forma intermitente?

Tengo estas reglas de iptables en el primer servidor que tiene la función de un cliente que se conecta a un segundo servidor MySQL a través de un 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

Lo que pasa es que tan pronto como lo hago:

service iptables restart

Parece que todas las conexiones MYSQL a un segundo servidor funcionan correctamente pero solo por un pequeño período de tiempo, generalmente de 1 a 2 minutos, pero en estos 1 a 2 minutos las conexiones a nginx (servidor web, puerto 80) no funcionan. Después de 1 o 2 minutos, sucede que el servidor web funciona y MYSQL no funciona. También probé el comando iptables-save hasta ahora, pero nada cambió.

Esta es la configuración del firewall del 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

Respuesta1

Debería configurar la política predeterminada DROPen caso de que su última regla general se elimine accidentalmente; como esto :

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [1:44135]

Ahora, en el 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 regla coincide con conexiones cuyo destino es 192.168.1.1, puerto de origen del 1024 al 65535, puerto de destino 3306 y estado nuevo o establecido. Estás pensando demasiado en esto; Si desea permitir conexiones MySQL, solo tiene que hacer coincidir el puerto de destino y, opcionalmente, agregar un parámetro de fuente y/o interfaz si desea bloquearlo en una IP o interfaz de origen en particular.

-A INPUT -i lo -p tcp -m tcp --dport 3306 -j ACCEPT

loya tiene acceso porque su primera -A INPUT -i lo -j ACCEPTregla coincidirá con todo lo que provenga del loopback.

-A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT

Bien, ahora estás permitiendo toda la subred, pero eso ya es mejor y debería funcionar.

-A INPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 3306 -j ACCEPT

Igual que el anterior, el loopback ya está permitido de todos modos.

-A INPUT -i eth1 -p tcp -m tcp --dport 3306 -j ACCEPT

Ahora estás permitiendo todo lo que viene de eth1 con un puerto de destino 3306.

-A OUTPUT -p tcp -m tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

Su política de SALIDA es ACEPTAR todo de todos modos, esas reglas no tienen sentido.

Estoy bastante seguro de que tu problema se debe a que elEl módulo de estado ha quedado obsoleto.y posiblemente eliminado, por lo que deberías usar conntrack.

Resumen:

Primer 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

Esto permitirá todas las conexiones SSH y MySQL que se originen desde eth1, 192.168.1.0/24. Siéntete libre de cambiar eso.

información relacionada