从文本文件创建 IP 空路由黑名单

从文本文件创建 IP 空路由黑名单

我看过各种指南,教你如何对单个 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 等,或者将您的垃圾邮件过滤外包给一家公司,每年花费不多,可以节省您的时间和精力。

相关内容