IPTables e redirecionamento de porta Apache2

1

Estou usando o Apache para redirecionar um subdomínio para uma porta ( mod_proxy , mod_proxy_http , mod_proxy_ajp ) e as tabelas IP para restringir o acesso direto à porta, exceto para mim e para o servidor local.

As minhas tabelas IP são assim:

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

O contexto que vou usar neste post é:

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

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

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

O que tenho trabalhado agora não é acesso direto à porta, exceto para mim. Eu também quero que o sistema local seja capaz de acessar portas, o que, creio eu, tenho agora. Estou usando mod_proxy_ajp para Jenkins CI e Webmin e mod_proxy_http para Sonatype Nexus.

Quando visito portas diretas, cada um desses serviços é carregado muito bem. Quando pedi a alguém para carregar cada um, eles não podem, então está funcionando.

Agora, no entanto, ao tentar acessar um dos subdomínios, recebo um carregamento sem fim (loop infinito?)

Quando eu executo um tracert no subdomínio, no entanto, ele termina bem para que eu possa fazer um loop infinito.

Aqui está minha configuração de host virtual do Sonatype Nexus apache:

<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>

e aqui está o meu 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>

Esses dois exemplos de hosts virtuais estão usando mod_proxy_ajp e mod_proxy_http , respectivamente.

Alguém pode me ajudar a descobrir por que estou recebendo uma carga infinita?

Obrigado.

edit: Nevermind no loop infinito. Depois de algum tempo, recebi um erro 503 Serviço Indisponível.

    
por jdersen 18.01.2014 / 05:38

1 resposta

1

As regras do iptables são avaliadas em ordem, de cima para baixo, conforme impressas. O problema que você tem é que a conexão com proxy é de localhost, que corresponde a essa regra:

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

localhost não é c-24-7-... , portanto, a conexão é descartada. O módulo proxy eventualmente expira; se a regra fosse REJECT ao invés de DROP, você receberia um erro muito mais rápido (porque seria negado explicitamente, em vez de a tentativa de conexão simplesmente desaparecer).

A solução é bem simples: reordene as regras para ter o "accept from localhost" antes do "deny from anywhere else". (Correspondências de roteamento IP pelo mais específico, mas porque iptables são multifatoriais, isso não é necessariamente definido).

Eu geralmente recomendo ter uma primeira regra que permita toda a comunicação localhost (através da interface de loopback, para o caso de alguém tentar algo estranho pela ethernet); tente adicionar

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

para inserir ( -I ) no topo da lista.

    
por 29.01.2014 / 14:52