iptables bloqueiam tudo, exceto http

1

Estou tentando configurar meu iptables para bloquear qualquer tráfego de rede, exceto HTTP:

iptables -P INPUT DROP #set policy of INPUT to DROP
iptables -P OUTPUT DROP #set policy of OUTPUT to DROP

iptables -A INPUT -p tcp --sport 80 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

A saída do iptables ( iptables -L -v ) me dá:

Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    4   745 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp spt:http state RELATED,ESTABLISHED

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    2   330 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:http state NEW,ESTABLISHED

Quando tento wget 127.0.0.1 (sim, eu tenho um servidor web e funciona bem) eu recebo:

--2012-11-14 16:29:01--  http://127.0.0.1/
Connecting to 127.0.0.1:80...

O pedido nunca termina. O que estou fazendo de errado? Estou definindo o iptables para DROP everything por padrão e adicione uma regra para ACCEPT HTTP.

    
por arminb 14.11.2012 / 16:29

2 respostas

1

Geralmente, não é uma boa ideia bloquear todo o tráfego pela interface de loopback. Além disso, você deve habilitar o ICMP em todas as interfaces que deseja que trabalhem com os protocolos IP corretamente. A última coisa que você provavelmente precisará é o tráfego de DNS. Além disso, a regra que corresponde aos estados ESTABLISHED e RELATED não precisa corresponder a nenhuma porta. Então, tente o seguinte conjunto de regras:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m udp -p udp --sport 53
iptables -A INPUT -j DROP
iptables -A OUTPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A OUTPUT -m udp -p udp --dport 53
iptables -A OUTPUT -j REJECT --reject-with icmp-host-prohibited
    
por 14.11.2012 / 16:49
0

Eu sugiro que você implemente também um pouco de proteção contra vários tipos de varreduras e uso incomum do protocolo TCP:

-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK,URG -j DROP
-A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
-A INPUT -m state --state INVALID -j DROP
    
por 16.11.2012 / 11:06