Ajuda com iptables

2

Eu instalei recentemente o Oracle Linux 6 em um servidor doméstico, e tenho tido problemas em permitir que as portas passem pelo firewall (iptables). Eu tentei adicionar portas com o comando

iptables -I INPUT -p tcp --dport 80 -s 192.168.0.0/24 -j ACCEPT

Minha configuração atual de regras é:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  192.168.0.0/24       anywhere            tcp dpt:ldap 
ACCEPT     tcp  --  192.168.0.0/24       anywhere            tcp dpt:x11 
ACCEPT     tcp  --  192.168.0.0/24       anywhere            tcp dpt:vnc-server 
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

Ainda não consigo acessar essas portas (exceto o ssh, que aparentemente era auto-configurado) de qualquer dispositivo na minha rede (todos com 192.168.0. *). Se eu limpar as tabelas (iptables -F), todas as conexões estão funcionando. Eu salvei e recarreguei a mesa. Alguma idéia de por que isso não está funcionando?

    
por Fearless 12.05.2014 / 20:42

1 resposta

3

iptables processa pacotes de acordo com todas as regras em ordem. Você está anexando a regra para aceitar o tráfego HTTP após a regra que rejeita todo o tráfego:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

...

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

Se um pacote não corresponder a nenhuma das regras de e-mail, ele acaba aqui. Se for uma nova conexão TCP para SSH, ela corresponderá à primeira regra. Se não for (por exemplo, se for um pacote HTTP), prossegue para a próxima regra que rejeita qualquer tráfego que não tenha sido correspondido até este ponto. Por causa disso, a última regra nunca será correspondida, porque qualquer novo tráfego HTTP já terá sido rejeitado pela regra anterior.

Não tenho certeza de como o Oracle Linux recomenda que você configure suas regras de firewall (o Ubuntu, por exemplo, incentiva o uso de ufw ). Uma coisa simples é inserir a regra HTTP antes do REJECT ( iptables -I INPUT $INDEX , em que $INDEX é o índice da regra REJECT ). Outro, que está mais no "espírito" de iptables , é remover a regra REJECT explícita e alterar a política padrão para REJECT . Isso faz com que a rejeição de pacotes seja feita implicitamente para qualquer pacote que não tenha sido combinado com uma regra, então você pode simplesmente anexar ACCEPT s ao final e não se preocupar em colocá-los antes do explícito REJECT .

    
por 12.05.2014 / 20:56