我目前正在尝试通过域名为我的 OpenVPN 服务器的所有客户端阻止某些网站。
我的第一个想法是使用该/etc/hosts
文件。但是,它的效果似乎仅限于主机,并且不会被 OpenVPN 考虑。
然后我尝试配置 bind9 并将其与 OpenVPN 连接,但该解决方案不成功且不易使用。
此后,我考虑使用 iptables 丢弃来自/发往这些网站的所有数据包,但是该论坛主题让我改变了想法,因为 iptables 对 FQDN 的行为可能会产生复杂的问题。
您是否有一个解决方案,可以阻止所有使用我作为根用户的 OpenVPN 服务器的客户端的网站?
答案1
您采用的方式与阻止公司网络上的用户访问网站的方式相同:运行代理服务器并强制每个人的网络流量都通过它。
答案2
这很合乎逻辑,因为客户端使用的 DNS 服务器可能不是您的主机。您可以做的是获取所有 IP 并阻止这些 IP,而不是主机名。
即使您配置了“阻止”这些域名的 DNS 服务器,客户端仍可能选择使用不同的 DNS 服务器进行操作,并且能够绕过此控制。
答案3
您还可以尝试使用 iptables 和字符串过滤功能进行过滤。它应该是这样的:
iptables -A FORWARD -m string --string 'Host: facebook.com' -j DROP
这会相当复杂(因为您需要保留一个 DNS 名称列表并为每个名称构建一个这样的命令),但是,正如@LucasKauffman 已经指出的那样,您无法控制 DNS,因此无法在那里进行过滤。
另请注意,这仅适用于 HTTP 而不适用于 HTTPS,因为所有请求都以 HTTPS 加密。
答案4
我遇到了类似的问题。我刚刚将 OpenVPN 的 server.conf 文件中的 DNS 更改为
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
即 OpenDNS 并从 OpenDNS 控制面板阻止了我不想让客户端通过 VPN 访问的站点。PS OpenDNS 免费家庭帐户需要与 VPN 服务器的静态 IP 一起。