iptables permite toda a saída - ainda não é possível resolver dns ou fazer um pedido http

5

Eu configurei o iptables desta maneira:

Table: mangle
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination

Table: filter
Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    VZ_INPUT   all  --  0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy DROP)
num  target     prot opt source               destination
1    VZ_FORWARD  all  --  0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
1    VZ_OUTPUT  all  --  0.0.0.0/0            0.0.0.0/0

Chain VZ_FORWARD (1 references)
num  target     prot opt source               destination

Chain VZ_INPUT (1 references)
num  target     prot opt source               destination
1    ACCEPT     tcp  --  12.123.12.myip       0.0.0.0/0           tcp dpt:22
2    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
6    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:53
7    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:53
8    ACCEPT     tcp  --  127.0.0.1            127.0.0.1
9    ACCEPT     udp  --  127.0.0.1            127.0.0.1
13   ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 255


Chain VZ_OUTPUT (1 references)
num  target     prot opt source               destination
1    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0
2    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 255
4    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           state NEW udp dpt:53
5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:53

Table: nat
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

Eu posso pingar hosts por IP, no entanto eu não posso pingar hosts pelo nome nem wget http://ipaddress/ da linha de comando.

root ~ # ping google.com

root ~ # ping 89.33.254.54
PING 89.33.254.54 (89.33.254.54) 56(84) bytes of data.
64 bytes from 89.33.254.54: icmp_seq=1 ttl=54 time=82.2 ms

--- 89.33.254.54 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 82.263/82.263/82.263/0.000 ms
root ~ # wget http://89.33.254.50
--2011-12-09 17:21:03--  http://89.33.254.50/
Connecting to 89.33.254.50:80...

Por que, se todo o tráfego de saída for permitido, não posso me conectar a hosts remotos? Eu acho que eu tenho que abrir um pouco mais portas INPUT, mas quais são essas?

    
por develroot 09.12.2011 / 16:22

1 resposta

13

Eu recomendo que você adicione regras à cadeia INPUT, que permite pacotes ESTABLISHED e RELACIONADOS:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 

Se mais tarde você bloquear mais sua cadeia OUTPUT, também desejará a regra OUTPUT correspondente:

iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Essas regras são seguras e você verá que elas são geralmente as primeiras regras adicionadas em quase todos os scripts de firewall. ESTABLISHED significa "uma vez que eu tenha permitido que uma conexão seja estabelecida, deixe todos os pacotes para esta conexão" não permitir que conexões não permitidas sejam criadas. "RELATED" permite pacotes úteis como "Desde que eu enviei um pedido para iniciar uma conexão, permita que o pacote ICMP retorne, o que me diz que este host não está acessível" ou "Desde que eu permiti uma conexão ftp, também permita a conexão de dados ftp". Novamente, ele não deve permitir a criação de conexões adicionais que não foram permitidas por outras regras.

Agora você está permitindo que a consulta DNS saia, mas não a resposta para voltar. Você está atualmente permitindo o dpt: 53, que permitirá que alguém consulte seu servidor DNS, mas não ajuda com uma resposta de DNS (que você esperaria ter 53 para uma porta de origem, mas não uma porta de destino)

Outra coisa digna de nota é que, como sua política padrão de OUTPUT é ACCEPT, todas as outras regras não são úteis (já que todas são ACCEPT). Então você está essencialmente dizendo "se o pacote é um dos seguintes tipos de pacotes, então ACEITAR, caso contrário, também ACEITA-los de qualquer maneira", você pode pular todas as regras neste caso e apenas dizer "Aceitar todos os pacotes de saída" No entanto, isso é temporário até que o tráfego de DNS funcione melhor.

    
por 09.12.2011 / 16:48

Tags