
Estou configurando um novo servidor web com CentOS 6.2 e não consigo me conectar pela web. Tudo parece configurado corretamente httpd.conf
e o Apache está em execução, então presumo que seja um problema de iptables.
Há algo a seguir que possa estar causando o problema?
EDIT: Se eu parar o iptables, posso me conectar bem, então deve haver algo que precise ser ajustado abaixo. Já executei iptables -A INPUT -p tcp --dport 80 -j ACCEPT
e salvei e reiniciei o iptables mas não fez diferença
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
ACCEPT tcp -- anywhere anywhere tcp dpt:http
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Seguindo o conselho na resposta abaixo:
[root@staging ~]# iptables -N TCP
[root@staging ~]# iptables -A TCP -p tcp --dport 80 -j ACCEPT
[root@staging ~]# iptables-save > /etc/iptables/iptables.rules
-bash: /etc/iptables/iptables.rules: No such file or directory
[root@staging ~]# iptables-save
# Generated by iptables-save v1.4.7 on Thu Nov 8 14:09:09 2012
*filter
:INPUT ACCEPT [91:7480]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [70:6556]
:TCP - [0:0]
-A TCP -p tcp -m tcp --dport 80 -j ACCEPT
COMMIT
# Completed on Thu Nov 8 14:09:09 2012
[root@staging ~]# iptables-restore
^C
[root@staging ~]# service iptables start
iptables: Applying firewall rules: [ OK ]
Edição adicional: iptables-save não mostrou nada quando eu o executei depois de parar o iptables! Então aqui está o resultado:
# iptables-save
# Generated by iptables-save v1.4.7 on Thu Nov 8 14:39:10 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [28:3344]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Nov 8 14:39:10 2012
Responder1
A iptables-save
saída mostra esta informação adicional para a regra 3 não mostrada com iptables -L
:
Pela iptables -L
saída, alguém poderia pensar quetodoso tráfego é aceito:
ACCEPT all -- anywhere anywhere
mas iptables-save
mostra:
-A INPUT -i lo -j ACCEPT
o que significa que iptables
de fato aceita todo o tráfego... mas apenas da interface de loopback ( lo
).
E é por isso que o tráfego HTTP nunca chega ao seu servidor web: o único tráfego permitido são conexões estabelecidas na regra 1, ICMP (por exemplo ping
) na regra 2: -A INPUT -p icmp -j ACCEPT
e SSH na regra 4 -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
:.
Então tudo é rejeitado na regra 5: -A INPUT -j REJECT --reject-with icmp-host-prohibited
.
Ou seja, todo o tráfego HTTP é rejeitado antes mesmo de atingir a regra 6:-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
Corrigirexclua a regra 6 ( -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
):
iptables -D INPUT 6
e insira-o (opção -I
) conforme regra 5:
iptables -I INPUT 5 -p tcp -m tcp --dport 80 -j ACCEPT
ou importe isto:
# Generated by iptables-save v1.4.6 on Thu Nov 8 16:46:28 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [40:5423]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Nov 8 16:46:28 2012
salvando-o em um arquivo e executando iptables-restore < file
.
EDIT: O OP notou que as novas regras são perdidas após a reinicialização iptables
.
Conforme explicado aqui:http://wiki.centos.org/HowTos/Network/IPTables, sempre que atualizarmos as regras, precisamos salvá-las, então execute isto:
# /sbin/service iptables save
para tornar as alterações permanentes. Agora as regras modificadas serão carregadas por iptables
.
Responder2
Não sou um mestre em iptables, mas da maneira como o meu é configurado, usei uma cadeia personalizada separada para minha abertura de porta:
iptables -N TCP
iptables -A TCP -p tcp --dport 80 -j ACCEPT
Certifique-se de salvar
iptables-save > /etc/iptables/iptables.rules
Para carregar
iptables-restore < /etc/iptables/iptables.rules
^^ se o daemon não carregar para você. Vejo que você disse que já executou o método descrito acima (apenas para a cadeia INPUT que não acho importante), então isso me faz acreditar que você pode não estar salvando e recarregando corretamente. O seu daemon iptables está funcionando corretamente? Certifique-se de que depois de executar os comandos acima e usar iptables -L você veja a cadeia e regra recém-adicionadas.
Em resposta ao seu problema adicional. iptables-save > location_of_rules Não tenho certeza de onde está no CentOS. Mas verifique se a nova cadeia existe usando iptables -L
Também recomendo verificar se seu site não está acessível. Para isso acesse o seu navegador (no computador) e coloque a url http: //127.0.0.1/ <-Sem o espaço entre: e // Se o site estiver acessível então o problema está no seu roteador. Você precisa encaminhar a porta para abrir a porta no seu firewall.http://en.wikipedia.org/wiki/Port_forwarding