我想使用 来屏蔽网站iptables
。我该怎么做?如何确保规则iptables
已保存?
答案1
阻塞站点使用 iptables 规则是一个非常糟糕的想法,主要是因为 iptables(与大多数防火墙一样)处理 IP 地址,并且站点与其 IP 地址之间的关系相当松散:
一个网站可以有许多IP 地址可能会经常更改。创建 iptables 规则后,即使你将站点名称指定为规则的一部分,第一个 IP 地址在那一刻被使用。如果站点的地址发生变化,你的 iptables 规则将会过期。
一个 IP 地址可以托管多个网站(这种情况经常发生)。由于 IP 地址稀缺,这种情况只会变得更加频繁。如果您封锁某个 IP 地址,则会封锁该 IP 地址上托管的所有网站。
因此,即使其他答案解释了如何做到这一点,我还是建议您寻求其他解决方案。例如,安装透明 http 代理即可实现您的需求。这透明 HTTP 代理指南有点过时,但它可以帮助你入门。
一旦您有了透明代理,您可以向其中添加任意规则来阻止特定的站点,如果您不想要的话,您甚至不需要使用 squid 的缓存功能。
还有其他方法可以处理站点阻止(其他防火墙、代理等),但 iptables 规则几乎是处理它的最糟糕的方法之一。
答案2
您可以使用 iptables 字符串匹配来实现这一点:
iptables -A OUTPUT -p tcp -m string --string "block-me.com" --algo kmp -j REJECT
-A OUTPUT
将以下规则添加到OUTPUT
链中。
-m string --string "block-me.com" --algo kmp
告诉 iptables 查找字符串block-me.com
告诉 iptables使用以下方式Knuth-Morris-Pratt 匹配算法。
让 iptables 在重新启动计算机时恢复的最简单方法是安装软件包(iptables-persistent
如果系统上可用)。如果您在设置新规则后安装软件包,系统将询问您是否要保存当前使用的规则以供永久使用。基本上iptables-persistent
只是加载保存在文件中的规则/etc/iptables/rules.v4
。/etc/iptables/rules.v6
如果您再次更改规则,要保存更改并在重新启动时恢复,您必须使用以下命令将它们保存到上述文件中
iptables-save > /etc/iptables/rules.v4
iptables-save > /etc/iptables/rules.v6
它们现在将在重新启动时恢复。
实际上你也不需要iptables-persistent
。这个问题还有另一个几乎同样简单的解决方案。
请注意,您需要iptables-save
以 root 身份运行,或者sudo
像这样运行:
sudo bash -c "iptables-save > /etc/iptables/rules.v4"
如果您只是运行,sudo iptables-save > /etc/iptables/rules.v4
您将收到“拒绝访问”消息rules.v4
。
答案3
我们可以使用多种方法来限制 https 站点。
1- Squid 代理
2- IPtables
使用 Squid 代理服务器
--> 在我的情况下打开你的 squid 配置(vim /etc/squid/squid.conf)
--> 按照定义放置规则。
acl badsite dstdomain .facebook.com .soundcloud.com .playit.pk .songs.com
http_reply_accessdenybadsite#此行阻止HTTP
http_access denied CONNECT badsite #此行阻止 HTTPS
--> 之后重新启动 squid
使用 Iptables 需要按照此处的定义制定规则
iptables -N 流
iptables -I OUTPUT -m 字符串 --string "www.facebook.com" --algo bm --from 1 --to 600 -j STREAM
iptables -I OUTPUT -m 字符串 --string “facebook.com” --algo bm --from 1 --to 600 -j STREAM
iptables -I FORWARD -m 字符串 --string "www.facebook.com" --algo bm --from 1 --to 600 -j STREAM
iptables -I FORWARD -m 字符串 --string “facebook.com” --algo bm --from 1 --to 600 -j STREAM iptables -A STREAM -j REJECT
答案4
好的,假设您想要阻止 IP 地址 192.168.1.5,只需在 shell 脚本的命令提示符下输入以下内容:
iptables -A INPUT -s 192.168.1.5 -j DROP
然后,您可以使用以下命令阻止来自服务器的出站 IP 地址 192.168.1.2:
iptables -A OUTPUT -d 192.168.1.2 -j DROP
并且它应该会阻止该网站再次打扰您。希望这会有所帮助。