CentOS 6 - iptables impedindo acesso web via porta 80

CentOS 6 - iptables impedindo acesso web via porta 80

Estou configurando um novo servidor web com CentOS 6.2 e não consigo me conectar pela web. Tudo parece configurado corretamente httpd.confe 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 ACCEPTe 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-savesaída mostra esta informação adicional para a regra 3 não mostrada com iptables -L:

Pela iptables -Lsaída, alguém poderia pensar quetodoso tráfego é aceito:

ACCEPT     all  --  anywhere             anywhere

mas iptables-savemostra:

-A INPUT -i lo -j ACCEPT

o que significa que iptablesde 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 ACCEPTe 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

informação relacionada