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

DNS-запросы заблокированы iptables

В настоящее время я настраиваю IP-таблицы для нашей сети. У нас есть следующая сетевая ситуация:

У нас есть 3 сети: серая, зеленая и красная. Серая сеть имеет полный доступ в Интернет без ограничений, но не имеет доступа к зеленому или красному. Зеленый имеет доступ к серому и к Интернету без ограничений, красный не имеет доступа к Интернету и доступ к зеленому и серому.

Серый имеет диапазон IP 192.168.178.0/24 (на интерфейсе eth_grey) Зеленый имеет диапазон IP 192.168.50.0/24 (на интерфейсе eth_green) Красный имеет диапазон IP 192.168.40.0/24 (на интерфейсе eth_red)

Я установил следующие правила в моем файле rules.v4 (в настоящее время нет ipv6, это будет настроено позже, ipv6 настроен на политику принятия):

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o eth_grey -j MASQUERADE
COMMIT


*filter
:INPUT DROP
:FORWARD DROP
:OUTPUT DROP

# Allow all loopback traffic and traffic from established connections.
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow traffic in the internal network
-A OUTPUT -s 192.168.40.0/24 -d 192.168.40.0/24 -j ACCEPT
-A OUTPUT -s 192.168.50.0/24 -d 192.168.50.0/24 -j ACCEPT
-A OUTPUT -s 192.168.178.0/24 -d 192.168.178.0/24 -j ACCEPT

#Allow traffic from red to green
-A OUTPUT -s 192.168.40.0/24 -d 192.168.50.0/24 -j ACCEPT

#Allow traffic from green to grey
-A OUTPUT -s 192.168.50.0/24 -d 192.168.178.0/24 -j ACCEPT

#Allow traffic from red to grey
-A OUTPUT -s 192.168.40.0/24 -d 192.168.178.0/24 -j ACCEPT

# Allow all traffic in the grey network
-A INPUT -i eth_grey -d 192.168.178.0/24 -j ACCEPT
-A OUTPUT -s 192.168.178.0/24 -j ACCEPT

#Allo outgoing traffic from the sales network
-A OUTPUT -s 192.168.50.0/24 -j ACCEPT

#Forward traffic from eth_green to eth_grey
-A FORWARD -i eth_green -o eth_grey -j ACCEPT
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Accept ICMP and SSH.
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp --dport 22 -j ACCEPT
COMMIT

Сейчас ситуация такова, что трафик из зеленого в Интернет разрешен, например Я могу пинговать 8.8.8.8. Я не могу разрешить DNS. На роутере установлен DNSmasq. Я даже не могу разрешить DNS на маршрутизаторе напрямую при подключении к SSH, но когда я устанавливаю политику для принятия и сброса правил, я могу разрешить DNS, поэтому я предполагаю, что DNSMasq настроен правильно.

Думаю, вам нужно внимательно перечитать документацию iptables.

Взгляните на эту диаграмму, визуализирующую цепочки iptables: https://github.com/rda0/diagram/blob/master/iptables-chains-hooks.png

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

В INPUT цепочка предназначена для всех пакетов, предназначенных для локальной системы (маршрутизатора) и OUTPUT цепочка предназначена для пакетов, исходящих из локальной системы.

Все ваши политики DROP. Поэтому вам нужно открыть несколько портов, чтобы разрешить трафик DNS.

Например, чтобы разрешить DNS локально на маршрутизаторе при тестировании через ssh, вам необходимо открыть порт 53 в OUTPUT цепь.

Я не понимаю, какой интерфейс подключен к Интернету. Но чтобы разрешить DNS из ваших сетей, вам нужно открыть порт 53 в FORWARD цепочка, с правилом вроде этого:

-A FORWARD -i <local_if> -o <inet_if> --dport 53 -j ACCEPT

куда local_if одна из ваших сетей и inet_if это интерфейс, подключенный к Интернету.

Я бы также рекомендовал принять RELATED,ESTABLISHED трафик в обоих OUTPUT и FORWARD цепи.

Правила № 3-5: такой трафик никогда не попадет в ваш маршрутизатор, потому что он не требует маршрутизации.