CentOS 6: iptables impide el acceso web a través del puerto 80

CentOS 6: iptables impide el acceso web a través del puerto 80

Estoy configurando un nuevo servidor web con CentOS 6.2 y no puedo conectarme a través de la web. Todo parece configurado correctamente httpd.confy Apache se está ejecutando, así que supongo que es un problema de iptables.

¿Hay algo en lo siguiente que podría estar causando el problema?

EDITAR: Si detengo iptables, puedo conectarme bien, por lo que debe haber algo que deba modificarse a continuación. Ya ejecuté iptables -A INPUT -p tcp --dport 80 -j ACCEPT, guardé y reinicié iptables, pero no hubo diferencia.

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Siguiendo los consejos en la respuesta a continuación:

[root@staging ~]# iptables -N TCP
[root@staging ~]# iptables -A TCP -p tcp --dport 80 -j ACCEPT
[root@staging ~]# iptables-save > /etc/iptables/iptables.rules
-bash: /etc/iptables/iptables.rules: No such file or directory
[root@staging ~]# iptables-save
# Generated by iptables-save v1.4.7 on Thu Nov  8 14:09:09 2012
*filter
:INPUT ACCEPT [91:7480]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [70:6556]
:TCP - [0:0]
-A TCP -p tcp -m tcp --dport 80 -j ACCEPT
COMMIT
# Completed on Thu Nov  8 14:09:09 2012
[root@staging ~]# iptables-restore
^C
[root@staging ~]# service iptables start
iptables: Applying firewall rules:                         [  OK  ]

Edición adicional: ¡iptables-save no mostró nada cuando lo ejecuté después de detener iptables! Así que aquí está el resultado:

# iptables-save
# Generated by iptables-save v1.4.7 on Thu Nov  8 14:39:10 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [28:3344]
-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 -j REJECT --reject-with icmp-host-prohibited
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Nov  8 14:39:10 2012

Respuesta1

El iptables-saveresultado muestra este bit de información adicional para la regla 3 que no se muestra con iptables -L:

Por iptables -Lla salida uno podría pensar quetodoSe acepta tráfico:

ACCEPT     all  --  anywhere             anywhere

pero iptables-savemuestra:

-A INPUT -i lo -j ACCEPT

lo que significa que iptablesefectivamente acepta todo el tráfico... pero sólo desde la interfaz loopback ( lo).

Y esa es la razón por la que el tráfico HTTP nunca llega a su servidor web: el único tráfico permitido son las conexiones establecidas en la regla 1, ICMP (por ejemplo ping) en la regla 2: -A INPUT -p icmp -j ACCEPTy SSH en la regla 4 -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT:.

Entonces todo se rechaza en la regla 5: -A INPUT -j REJECT --reject-with icmp-host-prohibited.

Es decir, todo el tráfico HTTP se rechaza incluso antes de llegar a la regla 6:-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

Corregirse elimina la regla 6 ( -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT):

iptables -D INPUT 6

e insértelo (opción -I) como regla 5:

iptables -I INPUT 5 -p tcp -m tcp --dport 80 -j ACCEPT

o importar esto:

# Generated by iptables-save v1.4.6 on Thu Nov  8 16:46:28 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [40:5423]
-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 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Nov  8 16:46:28 2012

guardándolo en un archivo y ejecutando iptables-restore < file.

EDITAR: El OP notó que las nuevas reglas se pierden después de reiniciar iptables.

Como se explica aquí:http://wiki.centos.org/HowTos/Network/IPTables, cada vez que actualizamos las reglas necesitamos guardarlas, así que ejecuta esto:

# /sbin/service iptables save

para hacer que los cambios sean permanentes. Ahora las reglas modificadas serán cargadas por iptables.

Respuesta2

No soy un maestro de iptables, pero por la forma en que está configurado el mío, utilicé una cadena personalizada separada para la apertura de mi puerto:

iptables -N TCP
iptables -A TCP -p tcp --dport 80 -j ACCEPT

Asegúrate de guardar

iptables-save > /etc/iptables/iptables.rules

Cargar

iptables-restore < /etc/iptables/iptables.rules

^^ si el demonio no lo carga por ti. Veo que dijiste que ya ejecutaste el método descrito anteriormente (solo para la cadena INPUT, lo cual no creo que importe), por lo que me hace creer que es posible que no estés guardando y recargando correctamente. ¿Su demonio iptables se está ejecutando correctamente? Asegúrese de que después de ejecutar los comandos anteriores y usar iptables -L vea la cadena y la regla recién agregadas.


En respuesta a sus mayores problemas. iptables-save > location_of_rules No estoy seguro de dónde está en CentOS. Pero verifique si la nueva cadena está ahí usando iptables -L

También recomiendo verificar para asegurarse de que no se pueda acceder a su sitio web. Para hacer esto, vaya a su navegador web (en la computadora) e ingrese la URL http: //127.0.0.1/ <-Sin el espacio entre : y // Si se puede acceder al sitio web, entonces el problema está en su enrutador. Debe reenviar el puerto para abrir el puerto en su firewall.http://en.wikipedia.org/wiki/Port_forwarding

información relacionada