我有一台 Ubuntu Server 12.04,带有两张网卡:
- eth0 已连接到互联网
- eth1 连接到私有网络(192.168.10.1)
该服务器配置为网关,并托管专用网络的 DNS 和 DHCP。专用网络中的计算机(例如 IP 地址为 192.168.10.50)可以成功连接到互联网。
UFW 规则如下:
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere
80 ALLOW Anywhere
443 ALLOW Anywhere
67/udp on eth1 ALLOW 68/udp
53 ALLOW Anywhere
22 ALLOW Anywhere (v6)
80 ALLOW Anywhere (v6)
443 ALLOW Anywhere (v6)
67/udp on eth1 ALLOW 68/udp
53 ALLOW Anywhere (v6)
任何互联网用户都可以查询我的 DNS 服务器。我想阻止此类请求,因为它会带来安全风险。我重置了防火墙,允许访问端口 80、443、22,并输入以下内容以仅允许私有网络上的设备发出 DNS 请求。
sudo ufw allow in on eth1 to 192.168.10.1 port 53
在私有网络中的 Windows 计算机(IP 地址为 192.168.10.50)上输入以下内容:
nslookup google.com. 192.168.10.1
我收到如下回复:
DNS request timed out.
timeout was 2 seconds.
Server: Unknown
Address: 192.168.10.1
当我重置防火墙并允许从任何地方访问端口 53 时,一切都恢复正常。
sudo ufw allow 53
如何在 192.168.10.1 上配置 UFW
- 阻止来自互联网(又名 eth0)的传入 DNS 查询
- 允许专用网络中的计算机进行 DNS 查询
- 允许 192.168.10.1 上的 DNS 服务器将内部 DNS 请求转发到互联网
- 适用于 IPv4 和 IPv6
答案1
除了在 UFW 上阻止流量外,我还会限制 DNS 服务器上的连接。假设您使用 BIND,则类似以下内容:
acl internal {
192.168.10.0/24;
# Add other internal networks here
};
options {
listen-on { 192.168.10.1; };
allow-query { internal; };
};
答案2
对于基于接口的 ufw 规则,以下内容将阻止任何接口对端口 53 的访问(假设你的 dns/bind 服务器配置在端口 53 上),不是 eth1:
$ sudo ufw allow all in on eth1 to any port 53 proto tcp
$ sudo ufw deny to any port 53
为了配置绑定以转发 DNS 请求,您可以在所有内部处理的区域之后在 named.conf 文件中使用此指令:
zone "." {
type forward;
forwarders {
8.8.8.8;
};
};
答案3
尝试这个
sudo ufw allow from 192.168.10.0/24 to 192.168.10.1 port 53 proto tcp
sudo ufw allow from 192.168.10.0/24 to 192.168.10.1 port 53 proto udp
这将允许来自您本地私有网络(我假设是192.168.10.0/24
,或者换句话说,192.168.10.1-255
)而不是任何其他地方的 TCP 和 UDP DNS(端口 53)流量。
最后,检查以确保你的 UFW 状态(运行sudo ufw status
)包含以下行:
To Action From
-- ------ ----
192.168.10.1 53/tcp ALLOW 192.168.10.0/24
192.168.10.1 53/udp ALLOW 192.168.10.0/24