我正在使用OpenWRT路由器 . 我需要在特定时间内阻止URL或多个URL(非IP) . 例如,我想阻止facebook.com,以便此路由器的客户端无法访问该网站 . 防火墙规则应该有选项,但我不知道如何做到这一点 .
这是一种通过域名而不是IP地址阻止的方法 .
您需要这种复杂方法的主要原因是每个域名(例如facebook.com)可能在任何给定时间被解析为不同的IP地址 . 因此,我们需要保留已解析的IP地址列表,并根据此列表添加iptables规则 .
首先,您应该在dnsmasq配置中启用日志记录:
uci set dhcp.@dnsmasq[0].logqueries=1 uci commit dhcp /etc/init.d/dnsmasq restart
这将为您提供以下日志条目:
daemon.info dnsmasq[2066]: reply facebook.com is 31.13.72.36
现在,您只需要不断解析syslog并添加相应的iptables规则(请注意,您最需要一个更通用的脚本和ipset以获得更好的性能):
logread -f | awk '/facebook.com is .*/{print $11}' | while read IP; do iptables -I OUTPUT -d $IP -j DROP; done
1 回答
这是一种通过域名而不是IP地址阻止的方法 .
您需要这种复杂方法的主要原因是每个域名(例如facebook.com)可能在任何给定时间被解析为不同的IP地址 . 因此,我们需要保留已解析的IP地址列表,并根据此列表添加iptables规则 .
首先,您应该在dnsmasq配置中启用日志记录:
这将为您提供以下日志条目:
现在,您只需要不断解析syslog并添加相应的iptables规则(请注意,您最需要一个更通用的脚本和ipset以获得更好的性能):