![如何阻止、拒绝或重定向 IP 地址或网站域名](https://linux22.com/image/1076493/%E5%A6%82%E4%BD%95%E9%98%BB%E6%AD%A2%E3%80%81%E6%8B%92%E7%BB%9D%E6%88%96%E9%87%8D%E5%AE%9A%E5%90%91%20IP%20%E5%9C%B0%E5%9D%80%E6%88%96%E7%BD%91%E7%AB%99%E5%9F%9F%E5%90%8D.png)
几天前出现了这个问题:如何在不使用路由器或配置浏览器的情况下阻止、拒绝或重定向 IP 地址或域名到另一个 IP 或 Web 域。基本上只使用 Ubuntu 来执行此操作。
例如,用户使用计算机,他/她无法访问 Facebook 或 Twitter(可能永远被拒绝访问,或者仅在下午 2 点到晚上 8 点之间被拒绝访问)。如果用户尝试访问 Facebook 或 Twitter,它将被重定向到另一个位置或直接取消。
该程序在 GUI 中效果会更好,但如果没有终端也可以。
例如,我检查过 ufw 和 gufw,但它们只适用于程序和端口。没有关于域名的情况。这样可以更轻松地选择或取消选择域。
答案1
如果只有几个 ip / 域名,iptables 很有帮助。
使用 iptables,您可以根据用户、组和/或时间进行限制,但要做到这一点,您需要使用 OUTPUT 表。因此,要允许 root 和组“web”,请使用
# this allows root for things such as apt-get
sudo iptables -A OUTPUT -m owner --uid-owner root -j ACCEPT
# this allows users of the group web
# create a group, web, and add users to it to allow access
sudo iptables -A OUTPUT -m owner --gid-owner web -j ACCEPT
# These two rules allow access to port 80 and 443 over the lunch hour
sudo iptables -A OUTPUT -o eth0 -p tcp -m multiport --dports 80,443 -m time --timestart 12:00 --timestop 13:00 -j ACCEPT
sudo iptables -A OUTPUT -o eth0 -p tcp -m multiport --dports 80,443 -j DROP
但随着您的需求变得越来越复杂,使用代理会很有帮助。例如,您可以使用 privoxy(和其他)来拦截广告。Squid 添加了过滤和更复杂的规则(acl 或访问控制列表),但对于家庭用户来说可能有点过头了。
然后使用 iptables 使代理透明
# This allows root
sudo iptables -A OUTPUT -m owner --uid-owner root -j ACCEPT
# This allows privoxy, which serves as adblock
sudo iptables -A OUTPUT -p tcp --dport 80 -m owner --uid-owner privoxy -j ACCEPT
# this blocks direct access to ports 80 to all other users
sudo iptables -A OUTPUT -p tcp --dport 80 -j DROP
# This allows squid to access privoxy (I think squid runs as "proxy")
#sudo iptables -A OUTPUT -o lo -p tcp --dport 8118 -m owner --uid-owner proxy -j ACCEPT
# this rule blocks other users from direct access to privoxy
sudo iptables -A OUTPUT -o lo -p tcp --dport 8118 -j DROP
# Redirect all outgoing traffic on port 80 to squid listening on port 3128
sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -m owner ! --uid-owner privoxy -j REDIRECT --to-port 3128
现在安装并配置 privoxy 和 squid
这种方法的问题在于您随后需要安装 squidguard、配置 squid 等,这将是一篇很长的文章,更适合较大的 LAN。
答案2
我为您找到了一个更好的解决方案,moblock,它带有每天更新的黑名单和图形配置工具。
要安装它,请运行
sudo add-apt-repository ppa:jre-phoenix/ppa
sudo apt-get update
sudo apt-get install moblock blockcontrol mobloquer
然后运行 Mobloquer
如需更多信息,请参阅Moblock 主页(sourceforge)
答案3
你可以使用以下方式阻止 IP 和域名IP表
传出示例:
iptables -A OUTPUT -p tcp -m string --string "xxx.com" --algo kmp -j DROP
然后使用 cron 任务,你可以在特定时间阻止你想要的所有域名,然后解除阻止
答案4
我已经发现引火者相当不错的用于管理 iptables 条目的 GUI 界面。