У меня проблема с перенаправлением DNS-запросов ПК на локальный DNS-сервер. Я хочу заблокировать доступ к другим службам DNS, кроме моей. Я нашел разные способы сделать это, здесь ни один из них не работает. Так что я, должно быть, делаю что-то не так.
Многие предлагают использовать это:
iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to 192.168.2.70:53
Но в моей конфигурации это блокирует доступ к DNS. Также я не могу понять, почему это вообще должно работать. Поскольку предварительная маршрутизация предназначена для внешних пользователей, которым нужен доступ к внутренней службе, верно?
Я также попытался указать внутренний интерфейс lan -i eth1, но это просто не может работать, так как внутренние серверы также находятся на том же интерфейсе. Это сделало бы петлю правильно? Серверы отправляют пакеты для порта 53, а шлюз отправляет их обратно на тот же сервер.
Тогда я также хотел бы ТОЛЬКО разрешить DNS-серверам в моей внутренней сети связываться с другими внешними DNS-серверами. Подобно:
iptables -A OUTPUT -p udp -s 192.168.2.70 -d 208.67.222.222 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s 192.168.2.70 -d 208.67.222.220 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p udp -s 192.168.2.72 -d 208.67.222.222 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s 192.168.2.72 -d 208.67.222.220 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
Но я предполагаю, что таблица OUTPUT неверна. Поскольку из того, что я узнал, INPUT и OUTPUT предназначены только для локального маршрутизатора Linux, нет?
Информация:
Internal dns servers: 192.168.2.70 and 192.168.2.72
External dns server: 208.67.222.220 and 208.67.222.222
LAN interface: ETH1
WAN interface: ETH0
Моя текущая конфигурация брандмауэра без правил предварительной маршрутизации и пересылки, кроме одного, чтобы показать, как он настроен.
#!/bin/sh -e
ifconfig eth1 192.168.2.1/24
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
#Flush table's
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -t nat -F
#toestaan SSH verkeer
iptables -t nat -A PREROUTING -p tcp --dport 22 -i eth0 -j DNAT --to 192.168.2.1
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#Drop traffic and accept
iptables -P FORWARD DROP
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
#verkeer naar buiten toe laten en nat aanzetten
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -m limit --limit 1/minute --limit-burst 1 -j ACCEPT
iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -j DROP
#toestaan verkeer loopback
iptables -A INPUT -i lo -j ACCEPT
#toestaan lokaal netwerk
iptables -A INPUT -i eth1 -j ACCEPT
#accepteren established traffic
iptables -A INPUT -i eth0 --match state --state RELATED,ESTABLISHED -j ACCEPT
#droppen ICMP boodschappen
iptables -A INPUT -p icmp -i eth0 -m limit --limit 10/minute -j ACCEPT
iptables -A INPUT -p icmp -i eth0 -j REJECT
#RDP forward voor windows servers
iptables -t nat -A PREROUTING -p tcp --dport 3389 -i eth0 -j DNAT --to 192.168.2.73
iptables -A FORWARD -p tcp --dport 3389 -j ACCEPT
Вам нужно поместить эти правила в цепочку FORWARD:
iptables -A FORWARD -p udp -s 192.168.2.70 -d 208.67.222.222 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.2.70 -d 208.67.222.220 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A FORWARD -p udp -s 192.168.2.72 -d 208.67.222.222 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.2.72 -d 208.67.222.220 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
Дайте пользователям адреса локальных DNS-серверов через DHCP и не перенаправляйте свой DNS-трафик на локальные серверы - если они будут манипулировать своей сетевой конфигурацией (конфигурацией DNS-серверов), они просто потерпят неудачу.
Я использовал эти правила, чтобы принудительно выполнять все запросы DNS с помощью dnsmasq на моем маршрутизаторе DD-WRT:
iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT
iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT
Их можно сохранить в DD-WRT, перейдя в Администрирование - Команды, затем введя их в поле и нажав «Сохранить брандмауэр».