A resposta foi simples o suficiente. Havia um firewall no caminho. A universidade eu estou em blocos TCP / 80 sem ser explicitamente permitido. Mudei a porta de escuta para algo acima de TCP / 10.000 (que eles não bloqueiam) e funcionou.
Eu tenho um servidor web do CentOS 6.0 rodando httpd, mysql, php e Joomla 2.5. Tem um endereço IP público estático. Eu posso acessar a página da Web (que é o console de gerenciamento Joomla) pelo endereço IP perfeitamente de dentro da LAN.
Eu fui para casa e tentei me conectar por trás do meu roteador e não consigo acessar a página da web. Eu posso ping e ssh para o servidor, mas não posso puxar a página com http. Estou usando o Chrome no meu navegador.
Alguma opinião?
Editar:
Esta é a saída de iptables --list
:
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT udp -- anywhere anywhere udp spt:domain
ACCEPT icmp -- anywhere anywhere icmp echo-request
ACCEPT icmp -- anywhere anywhere icmp echo-request
ACCEPT icmp -- anywhere anywhere icmp echo-reply
ACCEPT tcp -- anywhere anywhere multiport dports ftp,ssh,http,https state NEW,ESTABLISHED
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT icmp -- anywhere anywhere icmp echo-request
ACCEPT icmp -- anywhere anywhere icmp echo-reply
ACCEPT tcp -- anywhere anywhere multiport sports ssh,http,https state ESTABLISHED
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http
A resposta foi simples o suficiente. Havia um firewall no caminho. A universidade eu estou em blocos TCP / 80 sem ser explicitamente permitido. Mudei a porta de escuta para algo acima de TCP / 10.000 (que eles não bloqueiam) e funcionou.
Bem, faz anos que eu tive um problema como este com o Apache, mas muito tempo atrás, quando na idade média da internet, tivemos que recorrer a truques em situações como essa.
O problema básico que tivemos foi o mesmo. Eu tenho um IP público na minha rede, e meu servidor Apache usa um IP privado na LAN, e um balanceador de carga estava encaminhando solicitações para o IP público de volta para uma série de servidores com IPs privados.
Usando o tcpdump, podemos ver que nossos pedidos HTTP estavam chegando ao Apache, mas o Apache não estava respondendo, porque os pedidos estavam chegando ao "IP público", e o Apache não achou que deveria responder àqueles solicitações, porque esse IP não estava em sua tabela de interface local.
O que foi consertado para nós foi trazer o endereço IP público como um alias de IP para a interface de loopback, com uma máscara de rede / 32. ifconfig lo0:1 <IP/32> up
como se fosse. Isso permitiu que o Apache acreditasse que deveria responder a essas solicitações.
Você precisa descobrir se suas solicitações externas estão chegando ao seu Apache. Se eles não estão nem mesmo chegando aos servidores, você precisa procurar por firewalls / roteadores / acls. Se você vir as solicitações com tcpdump
, mas não no Apache, será necessário consultar iptables
. Se você vir as solicitações no Apache, mas o Apache não estiver respondendo a elas, você deverá ter informações no access_log e no error_log que fornecerão uma pista do que está acontecendo.
Primeiro, gostaria de ver a saída desse comando em casa:
nmap -p 80 <public ip of webserver>
Se nmap
disser filtered
, existe um problema com algum firewall. Se nmap
disser closed
, existe um problema com a configuração do seu servidor da Web.
Além disso, achei a saída de iptables --list
não muito útil. O comando
iptables --list --verbose
fornece muito mais informação. Veja a primeira regra, por exemplo. Parece que todos os pacotes são aceitos, mas --verbose
revela a verdade. Você também pode ver se os pacotes foram descartados com a ajuda de contadores de regras.
Eu tentaria este comando no seu servidor web em seguida:
tcpdump -i eth0 dst port 80
para ver se algum pacote chega ao seu servidor. Certifique-se de usar o nome do dispositivo apropriado aqui.
Tags php apache-httpd