IPTables y Apache

Tenia funcionando Apache en Linux Red Hat 9.0 sin ningún problema (al menos en red local me funcionaba)... Instale IpTables para compartir internet a los equipos de mi red con los siguientes comandos
# Delete and flush. Default table is "filter". Others like "nat" must be explicitly stated.
Iptables --flush - Flush all the rules in filter and nat tables
iptables --table nat --flush
iptables --delete-chain - Delete all chains that are not in default filter and nat table
iptables --table nat --delete-chain
# Set up IP FORWARDing and Masquerading
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface eth1 -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward - Enables packet forwarding by kernel
Me funciono todo a la perfección, pero el Apache ya no me funciona (el servicio esta arriba y todo), y no me deja entrar desde la red local...
Entiendo que al utilizar IpTables se instala un firewall, no estoy seguro, pero no se como hacer para que el Apache me funcione de nuevo (aparte tengo servicios como MySQL)...

4 respuestas

Respuesta
1
Por lo que veo, has usado un script de iptables y lo has adaptado.
En iptables existen 3 tablas principales: FILTER, NAT y MANGLE.
Las dos prieras son las más usadas. FILTER te da el filtro, el firewall real, lo que define que trafico se admite y en que sentido.
NAT sirve para manipular paquetes, para alterar las direcciones o puertos que traen en el origen y/o destino, antes y/o después de que se decidió la ruta que va a seguir.
Como verás, hay varios conceptos de redes implicados aquí.
Para ir al grano, el script parece bien. Cuando no se especifica una tabla con --table, se asume por defecto FILTER.
En lo que mandaste no veo nada que esté bloqueando los paquetes que llegan a la maq, asumiendo que el apache corre en la misma maq donde usaste este script.
Lo que puede estar pasando es que la política por defecto para las cadena INPUT este en REJECT o DROP. En ese caso, lo que hace es: si no hay reglas que admitan el tráfico, lo descarta.
Para poder ayudarte, corre este comando:
Iptables-sabe
Y mostrame la salida.
Es importante que, como esto es de dominio público, reemplazes las direcciones de red públicas que pudieran aparecer con algo como <dir publica>, para mantener tu privacidad.
Lo que te dije de apache se aplica a cualquier servicio que tengas levantado en la maquina que corre el firewall.
Eso es lo que me dice... no entiendo mucho...
[root@server /]# iptables-save
# Generated by iptables-save v1.2.7a on Thu Jun 30 20:05:04 2005
*nat
:PREROUTING ACCEPT [27268:1647422]
:POSTROUTING ACCEPT [586:35451]
:OUTPUT ACCEPT [925:55787]
-A POSTROUTING -o eth1 -j MASQUERADE
COMMIT
# Completed on Thu Jun 30 20:05:04 2005
# Generated by iptables-save v1.2.7a on Thu Jun 30 20:05:04 2005
*mangle
:PREROUTING ACCEPT [38535:11171938]
:INPUT ACCEPT [12639:2061018]
:FORWARD ACCEPT [25418:9083967]
:OUTPUT ACCEPT [12645:903691]
:POSTROUTING ACCEPT [38063:9987658]
commit
# Completed on Thu Jun 30 20:05:04 2005
# Generated by iptables-save v1.2.7a on Thu Jun 30 20:05:04 2005
*filter
:INPUT ACCEPT [9360:1804241]
:FORWARD ACCEPT [8205:1327515]
:OUTPUT ACCEPT [11766:819702]
-A FORWARD -i eth0 -j ACCEPT
COMMIT
# Completed on Thu Jun 30 20:05:04 2005
Aquí te dice que en lo que respecta a filtros, *filter, por defecto acepta todo lo que entra, sale o se reenvía. Por lo tanto, la linea con
-A FORWARD -i eth0 -j ACCEPT
Es redundante.
En lo que respecta a NAT, estas enmascarando todo lo que, una vez tomada la decisión de ruteo, debe ir por la interfaz eth1.
Supongo que eth1 es la placa de red que tienen una dirección pública.
Y que eth0 es la interna con la dirección de tu red local.
Con esta salida de iptables-sabe no se puede explicar que no puedas acceder al apache.
Proba hacer lo siguiente:
1) Desactivar el firewall y ver si podes accederlo desde tu LAN.
Iptables --flush
Iptables --table nat --flush
Y fíjate si podes acceder el apache.
2) Probá si con solo activar el MASQUERADE para compartir internet, podes seguir accediendo desde tu LAN
iptables --table nat -A POSTROUTING -o eth1 -j MASQUERADE
Y fíjate si ves el apache.
Otra cosa que deberías ver son los logs del apache, para ver si hay algún inconveniente que no tiene que ver con el firewall.
Fijate que hay en /var/log/apache/error.log
/var/log/apache/access.log
Y otros logs que puedan haber ahí.
No recuerdo como es en RH9, pero buscate como se pueden llamar los archivos de log si no encontrás los anteriores.
Respuesta
1
Con IPtables lo que haces es que mediante reglas puedes hacer un firewall ya que al activarlo puedes resindir todas las conexiones a tu maquina y aprobar solo las que quieras ..
¿Has tomado nota que al hacer un forward de todo hacia afuera también lo haces de las peticiones de tus usuarios a tu apache local .?
Hay proxys muy buenos somo squid
http://www.google.com/linux?hl=en&lr=&biw=1018&q=squid&btnG=Search
http://linux.cudeso.be/linuxdoc/squid.php
De tal suerte de controlar todo el trafico saliente de tu red.
Lo otro es que para ayudarte con las reglas y seguridad en esa maquina que estas orientnado y abriendo a internet te recomiendo esto
http://channels.lockergnome.com/linux/archives/20050516_configure_firewalls_with_firestarter.phtml
es una excelente herramienta ..
Respuesta
1
Efecticamente IPTable actua como un Firewall al restringir/permitir el acceso TCP/IP a la maquina.
¿Cómo esta escuchando Apache, en que ip:puerto? Esos datos debes usarlos para permitir el acceso en IPTables, utilizando las opciones --deporte 80 -j ACCEPT
Diego Fernando
Respuesta
El problema que te esta sucediendo es que estas redireccionando paquetes de tu red local a internet (y los paquetes se pierden, claro..)
Prueba a ver si funciona dando este comando y comentame los resultados:
iptables -F && echo 1 > /proc/sys/net/ipv4/ip_forward
Básicamente con esto lo que hacemos es flushear el ip tables (limpiarlo) y con el echo 1 le decimos a linux que haga de puerta de enlace.
Las reglas de postrouting no son necesarias si la conexión no tiene doble sentido.
Cuéntame como fue

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas