
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.conf
y 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-save
resultado muestra este bit de información adicional para la regla 3 que no se muestra con iptables -L
:
Por iptables -L
la salida uno podría pensar quetodoSe acepta tráfico:
ACCEPT all -- anywhere anywhere
pero iptables-save
muestra:
-A INPUT -i lo -j ACCEPT
lo que significa que iptables
efectivamente 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 ACCEPT
y 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