本程序允许您集中和分发 IP 黑名单。
如果您在互联网上维护一个服务器,很有可能会遇到一两次暴力破解攻击。没关系,只需安装 fail2ban 即可搞定。
但是,如果您运行着多个服务器,每个服务器都有各自的 fail2ban 实例,那么它们封禁的 IP 地址列表将各不相同。难道不想所有 fail2ban 实例共享一个封禁列表吗?或者,如果您所有的机器都位于您自己控制的路由器或防火墙后面,难道不想在网络边缘就拦截恶意流量吗?
这正是 vallumd 可以帮助您实现的目标。
Vallumd 连接到 MQTT 代理,读取包含 IP 地址的消息,并将这些 IP 地址添加或删除到 ipset 中。就这么简单。
这意味着它本身并非独立有用,但这使得 vallumd 非常灵活。您可以自行决定引用该 ipset 的 iptables 规则类型。将其与 fail2ban 集成只需创建一个新的操作,使用 mosquitto_pub 向 MQTT 代理发送消息即可。由于大多数常用语言都有对应的 MQTT 库,因此将它与您喜爱的 IDS、IPS 或蜜罐集成应该也不难。
vallumd 这个名字来源于拉丁语单词 "vallum",意为 "墙"。而 vallumd 所做的正是:建造一堵墙来保护您的数字帝国。
安装任何软件包的最佳方式,是使用您的发行版的包管理工具。不过,由于本项目还很年轻,尚未被包含在许多发行版中。
一个跟踪 git 主分支的包已在 AUR 中提供。
请确保您已启用 EPEL 仓库。
sudo yum -y install cmake3 ipset-devel mosquitto-devel openssl-devel pkgconfig '@Development Tools'
现在您可以使用 cpack 生成 RPM 包:
git clone https://codeberg.org/stintel/vallumd.git
cd vallumd
cmake3 .
cpack3 -G RPM
sudo yum -y localinstall build/*.rpm
已在 CentOS 7 上构建测试。
您可以使用 cpack 生成 DEB 包:
sudo apt-get -y install build-essential cmake file libipset-dev libmosquitto-dev libssl-dev pkg-config
git clone https://codeberg.org/stintel/vallumd.git
cd vallumd
cmake .
cpack -G DEB
sudo dpkg -i build/*.deb
已在 Debian 10, 11, 12, 13 及 Ubuntu 18.04, 20.04, 22.04, 24.04 上构建测试。
您可以在我的 Gentoo overlay 中找到 vallumd 的 live ebuild。
如果您运行的是 OpenWrt DD 快照版或 LEDE,vallumd 已在 packages feed 中提供,可通过 opkg 安装:
opkg update
opkg install vallumd
手动安装非常简单。 需求:
步骤:
git clone https://codeberg.org/stintel/vallumd.git
cd vallumd
cmake .
make
make install
要使用 vallumd,您需要一个 MQTT 代理,例如 Mosquitto。根据您的设置,您可以将其运行在运行 vallumd 的同一主机上,但这并非必需。
接下来您需要一个 IPset。为了让您完全控制 IPset 的类型及其选项,vallumd 不会自行创建 IPset。您可以从以下 IPset 类型中选择:
IPset 创建示例:
ipset create blacklist hash:ip timeout 3600
现在您可以启动 vallumd。以下是可用的命令行选项:
-h: 要连接的 MQTT 主机
-p: 要连接的 MQTT 端口 (1883)
-u: MQTT 用户名
-P: MQTT 密码
-t: MQTT 主题和 IPset 名称
-V: 打印版本号并退出
-c: CA 文件的路径
-T: 使用 TLS
主机和主题选项是必需的,其他选项为可选(默认值)。可以指定多个主题。
启动 vallumd:
vallumd -h 192.168.0.1 -t blacklist
这将监听位于 192.168.0.1 的 MQTT 代理上 blacklist 主题的消息,当收到消息时,消息中的 IP 地址将被添加或从名为 blacklist 的 IPset 中删除。
现在我们已经准备就绪,可以开始将 IP 添加到黑名单。我们只需将 IDS、IPS 或蜜罐配置为将恶意 IP 地址发送到我们的 MQTT 代理。
对于 fail2ban,可以通过 Mosquitto 客户端 mosquitto_pub 实现。在 /etc/fail2ban/action.d/vallumd.conf 中创建一个新操作:
[Definition]
actionban = mosquitto_pub -h 192.168.0.1 -q 2 -t blacklist/add -m <ip>
actionunban = mosquitto_pub -h 192.168.0.1 -q 2 -t blacklist/del -m <ip>
然后配置您的 fail2ban 监狱以使用 vallumd 操作。
使用 CPack 生成的包支持 OpenRC、Upstart 和 systemd。服务配置文件位于您发行版中预期的位置:
编辑适用于您发行版的文件后,像启动系统上任何其他服务一样启动 vallumd 服务。
Vallumd 使用 syslog(3) 进行日志记录。