hai*_*img 11
使用 iptables 规则阻止站点是一个非常糟糕的主意,主要是因为 iptables(与大多数防火墙一样)处理 IP 地址,并且站点与其 IP 地址之间的关系相当松散:
一个站点可以有多个IP 地址,这些地址可以经常更改。一旦iptables规则创建的,即使你是一个规则的一部分指定网站的名称,第一个IP地址在那一刻被使用。如果站点地址发生变化,您的 iptables 规则将过时。
一个 IP 地址可以托管多个站点(并且经常发生)。由于 IP 地址稀缺,这只会变得更加频繁。如果您阻止某个 IP 地址,则会阻止其上托管的所有站点。
因此,即使其他答案解释了您是如何做到的,我还是敦促您寻求其他解决方案。例如,安装透明的 http 代理将实现您的需求。这个透明的 HTTP 代理 HOWTO有点过时了,但它会帮助你入门。
一旦你有了一个透明代理,你可以向它添加任意规则来阻止特定站点,如果你不想要,你甚至不需要使用鱿鱼的缓存功能。
还有其他方法可以处理站点阻止(其他防火墙、代理等),但 iptables 规则几乎是处理它的最糟糕的方法之一。
您可以使用 iptables 字符串匹配来实现此目的:
iptables -A OUTPUT -p tcp -m string --string "block-me.com" --algo kmp -j REJECT
Run Code Online (Sandbox Code Playgroud)
-A OUTPUT将以下规则添加到OUTPUT链中。
-m string --string "block-me.com" --algo kmp告诉 iptablesblock-me.com使用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
Run Code Online (Sandbox Code Playgroud)
它们现在将在重新启动时恢复。
其实你也不需要iptables-persistent。这个问题有另一个几乎同样简单的解决方案。
请注意,您需要以iptables-saveroot身份运行,或者sudo像这样:
sudo bash -c "iptables-save > /etc/iptables/rules.v4"
Run Code Online (Sandbox Code Playgroud)
如果您刚刚运行,sudo iptables-save > /etc/iptables/rules.v4您将收到“拒绝访问”消息rules.v4。
好吧,假设您想阻止 IP 地址 192.168.1.5,只需在 shell 脚本的命令提示符处输入以下内容:
iptables -A INPUT -s 192.168.1.5 -j DROP
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用以下命令阻止服务器传出 IP 地址 192.168.1.2:
iptables -A OUTPUT -d 192.168.1.2 -j DROP
Run Code Online (Sandbox Code Playgroud)
它应该会阻止该网站再次打扰您。希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
47731 次 |
| 最近记录: |