Ajuda com iptables

2

Instalei recentemente o Oracle Linux 6 em um servidor doméstico e tenho tido problemas ao permitir portas além do 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 de regras atual é:

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

No entanto, não consigo acessar essas portas (exceto o ssh, que aparentemente foi configurado automaticamente) em qualquer dispositivo da minha rede (todos os quais começam com 192.168.0. *). Se eu liberar as tabelas (iptables -F), todas as conexões estarão funcionais. Eu salvei e recarreguei a mesa. Alguma idéia de por que isso não está funcionando?

Destemido
fonte

Respostas:

3

iptablesprocessa 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 anteriores, ele termina 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), ele segue para a próxima regra que rejeita qualquer tráfego que não tenha sido correspondido até esse momento. Por esse motivo, 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 de REJECT( iptables -I INPUT $INDEX, onde $INDEXestá o índice da REJECTregra). Outro, que está mais no "espírito" de, iptablesé remover a REJECTregra 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 corresponda a uma regra; portanto, você pode simplesmente anexar ACCEPTs ao final e não se preocupar em colocá-los antes do explícito REJECT.

Stephen Touset
fonte
Como altero para implícito?
Fearless
Ah, e o OL6 é muito semelhante ao RHEL, se isso ajudar.
Fearless