网关 iptables dns 重定向

网关 iptables dns 重定向

我在将 PC 的 DNS 请求重定向到本地 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

答案1

您需要将这些规则放入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

通过 DHCP 为用户提供本地 DNS 服务器地址,而不必费心将其 DNS 流量重定向到本地服务器 - 如果他们操纵其网络配置(DNS 服务器配置),他们将会失败。

答案2

我使用这些规则强制所有 DNS 查找由我的 DD-WRT 路由器上的 dnsmasq 完成:

iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT
iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT

可以通过前往“管理 - 命令”,将它们输入框并点击“保存防火墙”将它们存储在 DD-WRT 中。

相关内容