我看过各种指南,教你如何对单个 IP 地址进行空路由,我以前也这样做过。但是,我不确定如何对一组 IP 地址进行空路由。逐个检查太麻烦了。
route
如果我有一个文本文件,每行都有一个 IP 地址,我该如何将该文件中的所有地址路由为 nullroute?是否有我可以使用或命令iptables
?我正在运行 Debian VPS。
另外,我读到过一篇文章,说这种方法可能不是封禁一组 IP 的最佳方法。如果有更好的方法,请告诉我。我的服务器一直受到垃圾邮件攻击。
答案1
您是否希望对主机进行空路由,而不是仅使用 IP 表阻止它们?无论哪种方式,IPtables 规则和静态路由都可以通过 ubuntu 中的设置配置文件进行管理。您可以编写脚本来解析文本文件,然后修改路由或 iptables 配置文件,但这似乎是循环的。它本质上是创建一个配置文件来管理另一个配置文件。如果您需要在多台服务器上执行此操作,您可以在它们之间同步配置文件或使用配置管理系统(如 puppet)。
答案2
也许您想要一个简单的 bash 脚本或者您喜欢的 shell 脚本。
#!/bin/bash
shit="/tmp/null_ips"
ips=$(grep -Ev "^#" $shit)
for ip in $ips
do
ip route add blackhole $ip
done
进一步:检查您是否已经阻止了这些 IP。
ip route show
答案3
IPtables 非常简单。首先iptables --list
获取链和规则的列表。默认设置非常简单。如果下面的命令不起作用或您没有看到 INPUT 规则,请发布该命令的输出,并删除 IP 以确保安全。
下面添加了一条规则来记录来自服务器的流量,然后将其删除并保存您的链,以便在启动时恢复它们:
iptables -I INPUT --source 1.2.3.4/32 -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -I INPUT --source 1.2.3.4/32 -j DROP
iptables-save
如果你有一个 IP 列表,你可以在 Bash 中执行如下操作:
#!/bin/bash
while read -r ip
do
iptables -I INPUT --source $ip/32 -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -I INPUT --source $ip/32 -j DROP
done < $1
iptables-save
./block.sh file-with-bad-ip's
顺便提一下,该命令也将采用主机名,但出于性能原因,我们不建议这样做。
答案4
手动执行此操作将是一场噩梦,而且绝对是一种打地鼠游戏。真正的问题是:什么样的垃圾邮件攻击?
在几乎所有情况下,这些事情都很普遍并且很常见,至少有一半的情况可以通过使用公共黑名单或调整一些设置来缓解。
如果它是:
评论垃圾邮件,看看你的博客/网站软件是否可以使用 Akismet 或类似软件 - 我似乎记得有很多基于 IP 信誉的过滤插件。
论坛垃圾邮件,启用一些验证码并打开发帖前电子邮件验证。您的论坛可能也有一个反垃圾邮件模块。
电子邮件垃圾邮件,使用 RBL 来删除 60-85%(根据我们的经验)的垃圾邮件(特别是查看 barracudacentral),安装 spamassassin 等,或者将您的垃圾邮件过滤外包给一家公司,每年花费不多,可以节省您的时间和精力。