ajuda com iptables não pode se conectar ao servidor web

2

Eu recentemente criei um servidor web Fedora Core para minha organização de TI e sou um novato no Linux e ainda mais um novato no iptables. Por enquanto, preciso permitir que usuários externos acessem o servidor da Web na porta 80, habilitar conexões mysql na porta 3306 e também permitir conexões ssh. Agora eu não preciso ser realmente restritivo na origem das conexões, então eu só preciso de algumas regras permissivas gerais para fazer as coisas funcionarem. Eu testei internamente tentando se conectar do meu computador para o novo servidor com as seguintes regras e não consigo me conectar a todos com o iptables iniciado. Uma vez que eu paro o iptables, eu sou capaz de chegar ao servidor, então eu sei que algo está errado com a minha configuração do iptables - eu sou apenas um novato demais para descobrir isso. Alguém pode ajudar? :)

:INPUT ACCEPT [0:0]<br>
:FORWARD ACCEPT [0:0]<br>
:OUTPUT ACCEPT [0:0]<br>
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT<br>
-A INPUT -p icmp -j ACCEPT<br>
-A INPUT -i lo -j ACCEPT<br>
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT<br>
-A INPUT -j REJECT --reject-with icmp-host-prohibited<br>
-A FORWARD -j REJECT --reject-with icmp-host-prohibited<br>
-A INPUT -p tcp --dport 80 -i eth0 -j ACCEPT<br>
-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT<br>
COMMIT<br>

====================
ATUALIZE !!!

Eu mudei minhas regras do iptables para ...

:INPUT ACCEPT [0:0]<br>
:FORWARD ACCEPT [0:0]<br>
:OUTPUT ACCEPT [0:0]<br>
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT<br>
-A INPUT -p icmp -j ACCEPT<br>
-A INPUT -i lo -j ACCEPT<br>
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT<br>
-A INPUT -j REJECT --reject-with icmp-host-prohibited<br>
-A FORWARD -j REJECT --reject-with icmp-host-prohibited<br>
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT<br>
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT<br>
COMMIT<br><br>

Depois de reiniciar o iptables, eu testei e ainda não consigo me conectar ao servidor.

Eu corri iptables -L eu recebo isso ...

Chain INPUT (policy ACCEPT)<br> 
target     prot opt source               destination<br>
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED<br> 
ACCEPT     icmp --  anywhere             anywhere<br>
ACCEPT     all  --  anywhere             anywhere<br>
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh<br> 
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited<br> 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http<br> 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:mysql<br><br>

Chain FORWARD (policy ACCEPT)<br>
target     prot opt source               destination<br>
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited<br><br>

Chain OUTPUT (policy ACCEPT)<br>
target     prot opt source               destination<br><br>
Novamente, se eu parar o iptables e tentar conectar novamente, então eu posso me conectar. Então, ainda parece ser um problema com o iptables (não problema de rede). Estou confuso para que qualquer outra ajuda seja apreciada !!!

    
por Chris 24.06.2010 / 19:43

4 respostas

2

Eu acho que o problema é essa regra:

-A INPUT -j REJECT --reject-with icmp-host-prohibited

Isso diz ao IPTables para rejeitar tudo que entra na cadeia INPUT, ou seja, todos os pacotes recebidos. E como o IPTables lê (e aplica) suas regras em ordem de cima para baixo, para NOVOS pacotes chegando nas portas 80 e 3306, essa é a primeira regra que corresponde. Então todos eles são rejeitados. Os únicos pacotes que não seriam rejeitados por essa regra são os que entram na porta 22, já que a regra logo acima diz para aceitá-los.

Para corrigir isso, basta mover essa regra para o final do arquivo. Dessa forma, o IPTables encontrará as regras dizendo para ACEITAR os pacotes nas portas 80 e 3306 primeiro.

Em uma nota ligeiramente relacionada, eu escrevi um tutorial do IPTables no meu site, que pode ter algumas informações úteis para você.

    
por 24.06.2010 / 21:33
1

A solução mais simples é apenas repetir o seguinte no mesmo local do arquivo:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

Mas altere a porta de destino para as portas que você deseja aceitar.

    
por 24.06.2010 / 19:53
0

Em vez de ter um REJECT na metade da sua lista, eu teria uma política de REJECT nas cadeias INPUT e FORWARD. Então

:INPUT REJECT [0:0]
:FORWARD REJECT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
COMMIT

Dessa forma, você pode anexar mais regras (antes do COMMIT, se estiver editando os arquivos), em vez de inserir regras extras antes da rejeição.

    
por 24.06.2010 / 23:16
0

Você não precisa se preocupar com o iptables neste nível no Fedora se tudo que você precisa são mudanças simples. Ele vem bloqueado, mas tem uma simples ferramenta de firewall que permitirá que você abra portas (tão simples quanto clicar em um botão). Você deveria usar isso enquanto ainda estiver aprendendo.

Além disso, as regras de firewall padrão e básicas têm alguns recursos extras (como a proteção contra inundação de sincronia, etc.) que seu conjunto de regras está ausente. Você sempre pode ver quais são as regras.

    
por 26.06.2010 / 20:48