CentOS 6 - iptables impedindo acesso web via porta 80

6

Estou configurando um novo servidor web com o CentOS 6.2 e não consigo me conectar via web. Tudo parece configurado corretamente em httpd.conf e o Apache está sendo executado, então estou assumindo que é um problema do iptables.

Há algo a seguir que possa estar causando o problema?

EDIT: Se eu parar o iptables, eu posso me conectar bem, então deve ser algo que precise ser alterado no abaixo. Eu já corri iptables -A INPUT -p tcp --dport 80 -j ACCEPT e salvei e reiniciei o iptables, mas não fiz 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 os conselhos 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  ]

Editar mais: iptables-save não mostrou nada enquanto eu o executava após ter parado o iptables! Então aqui está a saída:

# 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
    
por bsod99 08.11.2012 / 11:11

2 respostas

7

A saída iptables-save mostra este bit de informações adicionais para a regra 3 não mostrada com iptables -L :

A partir de iptables -L output, pode-se pensar que o tráfego all é 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 somente da interface de loopback ( lo ).

E esse é o motivo pelo qual o tráfego HTTP nunca chega ao servidor da Web: o único tráfego permitido é estabelecer conexões 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 .

Em seguida, 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

Para corrigir , elimine a regra 6 ( -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT ):

iptables -D INPUT 6

e insira-o (opção -I ) como 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 o reinício de iptables .

Como explicado aqui: link , sempre que atualizarmos as regras, precisamos salvá-las. :

# /sbin/service iptables save

para tornar as alterações permanentes. Agora as regras modificadas serão carregadas por iptables .

    
por 08.11.2012 / 17:04
0

Eu não sou um mestre do iptables mas do jeito que o meu é o setup usei uma corrente personalizada separada para a abertura da minha 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 me interessa), o que me faz acreditar que talvez você não esteja salvando e recarregando corretamente. Seu daemon iptables está funcionando corretamente? Certifique-se de que após executar os comandos acima e usando iptables -L, você verá a cadeia e a regra recém-adicionadas.

Em resposta ao seu maior problema. iptables-save > location_of_rules Não tenho certeza de onde está no CentOS. Mas verifique se a nova cadeia está lá usando iptables -L

Também recomendo que você verifique se seu site não está acessível. Para fazer isso vá para o seu navegador (no computador) e coloque na url http: //127.0.0.1/ < -Sem o sapce entre: e // Se o site estiver acessível, o problema está no seu roteador. Você precisa redirecionar a porta para abrir a porta no seu firewall. link

    
por 08.11.2012 / 14:53