
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_ajp
excepto 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_ajp
para Jenkins CI y Webmin y mod_proxy_http
para 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_ajp
y mod_proxy_http
respectivamente.
¿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
localhost
no 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.