nftables IP地址黑名单功能

使用 nftables 将 IP 地址添加到黑名单中是一种高效且现代的方式,因为 nftablesiptables 的继任者,提供了更强大的功能和更高效的过滤IP报文。

以下是使用 nftables 将 IP 地址添加到黑名单的步骤:


1. 安装 nftables(如果尚未安装)

在大多数 Linux 发行版中,nftables 已经预装。如果没有,可以使用以下命令安装:

确保 nftables 服务已启用并启动: bash sudo systemctl enable nftables sudo systemctl start nftables


2. 创建 IP 地址黑名单文件

创建一个文本文件(如 blocked_ips.txt),每行一个 IP 地址。例如:

192.168.1.100 10.0.0.1 172.16.0.5


3. 编写 nftables 规则

使用 nftablesset 功能来管理黑名单 IP 地址。

1. 创建一个 nftables 配置文件(如 /etc/nftables.conf):

bash sudo nano /etc/nftables.conf

2. 添加以下内容:

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
    set blocked_ips {
        type ipv4_addr
        flags interval
        elements = {
            8.8.8.8,
            9.9.9.9
        }
    }
    chain input {
        type filter hook input priority 0; policy accept;
        ip saddr @blocked_ips drop
    }
}

3. 保存并退出编辑器。


4. 加载 nftables 规则

使用以下命令加载配置文件: bash sudo nft -f /etc/nftables.conf


5. 动态添加 IP 地址到黑名单

如果你需要动态添加 IP 地址到黑名单,可以使用 nft 命令直接操作 set

1. 添加单个 IP 地址:

bash sudo nft add element inet filter blocked_ips { 192.168.1.101 }

2. 删除单个 IP 地址:

bash sudo nft delete element inet filter blocked_ips { 192.168.1.101 }

3. 查看当前黑名单:

bash sudo nft list set inet filter blocked_ips


6. 使用脚本批量添加 IP 地址

如果你有一个 IP 地址列表文件(如 blocked_ips.txt),可以使用脚本批量添加。

1. 编写脚本(如 add_blocked_ips.sh):

```bash

!/bin/bash

BLOCKEDIPS="/path/to/blockedips.txt"

while read -r ip; do sudo nft add element inet filter blockedips { "$ip" } done < "$BLOCKEDIPS" ```

2. 给脚本执行权限并运行:

bash chmod +x add_blocked_ips.sh sudo ./add_blocked_ips.sh


7. 持久化规则

为了确保规则在重启后仍然有效,将规则保存到默认配置文件: bash sudo nft list ruleset > /etc/nftables.conf


8. 验证规则

使用以下命令查看当前 nftables 规则: bash sudo nft list ruleset

确保黑名单 IP 地址在 blocked_ips 集合中,并且规则已生效。


总结

通过 nftables,你可以高效地管理 IP 地址黑名单。使用 set 功能可以轻松添加、删除和查看黑名单 IP 地址,同时保持规则的简洁性和可维护性。