通过 iptables 阻止蜘蛛

通过 iptables 阻止蜘蛛

我的服务器被 Baiduspider 杀死了,无论我在 robots.txt 文件中输入什么,都没有反应。因此,我需要暂时通过 iptables 阻止尽可能多的 IP 地址。我通过以下方式获取 IP 地址:

grep -ri Baidu /var/log/apache2/access.log | cut -f1 -d' ' | sort | uniq

我的 iptables 规则如下:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            ctstate RELATED,ESTABLISHED 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ftp 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ftp-data 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:www 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:https 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:snpp 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:mysql 
LOG        all  --  anywhere             anywhere            limit: avg 5/min burst 5 LOG level debug prefix `iptables denied: ' 
DROP       all  --  anywhere             anywhere 

我计划添加类似以下内容的新规则:

for ip in $(grep -ri Baidu /var/log/apache2/access.log | cut -f1 -d' ' | sort | uniq); do iptables -A INPUT -s $ip -j DROP; done

但我认为我不能直接添加它们。我认为它们需要插入到特定位置。它们需要插入在哪里才能生效?

答案1

您的第一条规则似乎允许一切,使得其下面的所有规则都变得毫无意义(这是有意的吗?)。

您需要在该规则上方插入规则才能使其产生效果;将您的规则更改-A INPUT-I INPUT

您可能还会考虑仅根据用户代理在 Apache 中阻止它们 - 403 响应可能比失败的连接更好地传达消息,并且不需要您现在使用的资源来响应带有内容的请求。

相关内容