В настоящее время я настраиваю 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: такой трафик никогда не попадет в ваш маршрутизатор, потому что он не требует маршрутизации.