我的服务器被 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 响应可能比失败的连接更好地传达消息,并且不需要您现在使用的资源来响应带有内容的请求。