IPTables y redirección de puertos Apache2

IPTables y redirección de puertos Apache2

Estoy usando Apache para redirigir un subdominio a un puerto ( mod_proxy,, ) y tablas de IP para restringir el acceso directo al puerto mod_proxy_http, mod_proxy_ajpexcepto para mí y el servidor local.

Mis tablas de IP se ven así:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       tcp  -- !c-24-7-110-109.hsd1.ca.comcast.net  anywhere             tcp dpt:tproxy
ACCEPT     tcp  --  localhost            anywhere             tcp dpt:tproxy
DROP       tcp  -- !c-24-7-110-109.hsd1.ca.comcast.net  anywhere             tcp dpt:http-alt
DROP       tcp  -- !c-24-7-110-109.hsd1.ca.comcast.net  anywhere             tcp dpt:webmin
ACCEPT     tcp  --  localhost            anywhere             tcp dpt:webmin

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

El contexto que voy a utilizar en esta publicación es:

Nexo Sonatype:nexus.example.com => example.com:8081

Jenkins CI:jenkins.example.com => example.com:8080

Webmin:webmin.example.com => example.com:10000

Lo que tengo funcionando ahora es que no hay acceso directo al puerto excepto para mí. También quiero que el sistema local pueda acceder a los puertos, que es lo que creo que tengo ahora. Lo estoy usando mod_proxy_ajppara Jenkins CI y Webmin y mod_proxy_httppara Sonatype Nexus.

Cuando visito puertos directos, cada uno de estos servicios se carga bien. Cuando le pedí a alguien más que cargara cada uno, no puede, así que está funcionando.

Ahora, sin embargo, cuando intento acceder a uno de los subdominios, obtengo una carga interminable (¿bucle infinito?)

Sin embargo, cuando ejecuto un tracert en el subdominio, termina bien para poder tachar el bucle infinito.

Aquí está mi configuración de host virtual Apache Sonatype Nexus:

<VirtualHost *:80>
        ServerName nexus.majornoob.com
        ServerAlias www.nexus.majornoob.com
        ProxyRequests Off
        ProxyPreserveHost On
        ProxyPass / http://localhost:8081/
        ProxyPassReverse / http://localhost:8081/
        ProxyPassReverseCookiePath / /
        ErrorLog /var/www/majornoob/error-nexus.log
        LogLevel warn
        CustomLog /var/www/majornoob/access-nexus.log combined
</VirtualHost>

y aquí está mi Jenkins:

<VirtualHost *:80>
        ServerName jenkins.majornoob.com
        ServerAlias www.jenkins.majornoob.com
        ProxyRequests Off
        ProxyPreserveHost On
        ProxyPass / ajp://127.0.0.1:8080/
        ProxyPassReverse / ajp://127.0.0.1:8080/
        ProxyPassReverseCookiePath / /

        ErrorLog /var/www/majornoob/error-jenkins.log

        LogLevel warn

        CustomLog /var/www/majornoob/access-jenkins.log combined
</VirtualHost>

Estos dos ejemplos de hosts virtuales utilizan mod_proxy_ajpy mod_proxy_httprespectivamente.

¿Alguien puede ayudarme a descubrir por qué recibo una carga infinita?

Gracias.

editar:No importa en el bucle infinito. Después de un tiempo, recibí un error 503 Servicio no disponible.

Respuesta1

Las reglas de iptables se evalúan en orden, de arriba a abajo tal como están impresas. El problema que tienes es que la conexión proxy es de localhost, lo que coincide con esta regla:

DROP       tcp  -- !c-24-7-110-109.hsd1.ca.comcast.net  anywhere             tcp dpt:tproxy

localhostno lo es c-24-7-..., por lo que se corta la conexión. El tiempo de espera del módulo proxy finalmente se agota; si la regla fuera REJECT en lugar de DROP, obtendría un error mucho más rápido (porque se le negaría explícitamente en lugar de que el intento de conexión simplemente desapareciera).

La solución es bastante simple: reordenar las reglas para que "aceptar desde localhost" antes de "rechazar desde cualquier otro lugar". (El enrutamiento IP coincide con el más específico, pero debido a que los iptables son multifactor, eso no está necesariamente definido).

En general, recomendaría tener una primera regla que permita toda la comunicación con el host local (a través de la interfaz de bucle invertido, en caso de que alguien intente algo extraño a través de Ethernet); intenta agregar

iptables -I INPUT -i lo -s localhost -d localhost -j ACCEPT

para insertar ( -I) eso en la parte superior de la lista.

información relacionada