Назад | Перейти на главную страницу

iptables разрешает все исходящие сообщения - по-прежнему не удается разрешить DNS или сделать HTTP-запрос

Я настроил iptables следующим образом:

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

Я могу пинговать хосты по IP, однако я не могу пинговать хосты по имени и wget http://ipaddress/ из командной строки.

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...

Почему, если разрешен весь выходной трафик, я не могу подключиться к удаленным хостам? Думаю, мне нужно открыть еще несколько портов INPUT, но что это?

Я рекомендую вам добавить правила в цепочку INPUT, которая позволяет устанавливать пакеты ESTABLISHED и RELATED:

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

Если позже вы еще больше заблокируете свою цепочку OUTPUT, вам также понадобится соответствующее правило OUTPUT:

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

Эти правила безопасны, и вы обнаружите, что они обычно являются одними из первых правил, добавляемых почти во все сценарии брандмауэра. ESTABLISHED означает, что «после того, как я разрешил установить соединение, пропустить все пакеты для этого соединения», он не позволяет создавать запрещенные иным образом соединения. «СВЯЗАННЫЙ» позволяет использовать полезные пакеты, такие как «Поскольку я отправил запрос на запуск соединения, разрешить возврат пакета ICMP, который сообщает мне, что этот хост недоступен» или «Поскольку я разрешил подключение по ftp, также разрешить подключение для передачи данных по ftp». Опять же, он не должен разрешать создание дополнительных подключений, которые еще не разрешены другими правилами.

Прямо сейчас вы позволяете DNS-запросу уходить, но не возвращаете ответ. В настоящее время вы разрешаете dpt: 53, который позволит кому-либо запрашивать ваш DNS-сервер, но не помогает с ответом DNS (который, как вы ожидаете, будет 53 для исходного порта, но не для порта назначения)

Еще одно примечание: поскольку ваша политика OUTPUT по умолчанию - ACCEPT, все остальные правила бесполезны (поскольку все они также ACCEPT). Таким образом, вы, по сути, говорите: «Если пакет является одним из следующих типов пакетов, тогда ПРИНИМАЙТЕ их, в противном случае также ПРИНИМАЙТЕ их в любом случае», вы можете пропустить все правила в этом случае и просто сказать «Принять все исходящие пакеты». Это звучит как Однако это временно, пока вы не улучшите работу DNS-трафика.