从ipset-blacklist迁移到nftables-blacklist:完整迁移指南

📅 2026/7/18 7:35:08 👁️ 阅读次数 📝 编程学习
从ipset-blacklist迁移到nftables-blacklist:完整迁移指南

从ipset-blacklist迁移到nftables-blacklist:完整迁移指南

【免费下载链接】nftables-blacklistA bash script to ban large numbers of IP addresses published in blacklists.项目地址: https://gitcode.com/gh_mirrors/ip/nftables-blacklist

你是否还在使用传统的ipset和iptables组合来保护你的Linux服务器?是时候升级到更现代、更高效的nftables-blacklist了!🚀 随着Linux内核的发展,nftables已经成为iptables的官方替代品,提供更好的性能和更简洁的语法。本文将为你提供从ipset-blacklist迁移到nftables-blacklist的完整指南,让你的服务器安全防护与时俱进。

为什么要迁移?🤔

nftables-blacklist相比传统的ipset-blacklist有多个显著优势:

  1. 性能更优:nftables使用更高效的数据结构,处理大量IP地址时性能更好
  2. 语法更简洁:摆脱了复杂的iptables规则链,配置更加直观
  3. 原生支持IPv6:无需额外配置,IPv4和IPv6统一管理
  4. 更好的错误处理:更智能的IP地址验证和错误处理机制
  5. 自动CIDR聚合:自动合并重叠的IP范围,减少规则数量

迁移前准备 📋

在开始迁移之前,请确保你的系统满足以下要求:

  • 操作系统:Debian 10+ 或 Ubuntu 20.04+(其他支持nftables的Linux发行版也可)
  • 必需工具:nftables、iprange、curl
  • 网络环境:稳定的互联网连接以下载黑名单

检查你的当前ipset-blacklist配置,记下自定义的黑名单URL和白名单IP地址,这些信息在迁移过程中会用到。

完整迁移步骤 🛠️

步骤1:备份当前配置

首先,备份你现有的ipset-blacklist配置:

# 备份配置文件 sudo cp /etc/ipset-blacklist/ipset-blacklist.conf /etc/ipset-blacklist/ipset-blacklist.conf.backup # 备份自定义黑名单文件 if [ -f /etc/ipset-blacklist/ip-blacklist-custom.list ]; then sudo cp /etc/ipset-blacklist/ip-blacklist-custom.list /etc/ipset-blacklist/ip-blacklist-custom.list.backup fi

步骤2:清理旧的ipset规则

安全地移除旧的防火墙规则:

# 查看当前的iptables规则编号 sudo iptables -L INPUT --line-numbers # 移除ipset规则(根据实际情况调整规则编号) sudo iptables -D INPUT <rule-number> # 删除ipset集合 sudo ipset destroy blacklist # 停止并禁用旧的cron任务 sudo rm -f /etc/cron.d/update-blacklist

注意:如果你的系统使用的是iptables-nft(现代Debian/Ubuntu的默认设置),可能需要切换回nftables后端:

sudo update-alternatives --set iptables /usr/sbin/iptables-nft sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-nft

步骤3:安装nftables-blacklist

现在安装新的nftables-blacklist系统:

# 安装必需工具 sudo apt install curl iprange # 下载脚本 sudo curl -fsSL -o /usr/local/sbin/update-blacklist.sh \ https://gitcode.com/gh_mirrors/ip/nftables-blacklist/raw/master/update-blacklist.sh sudo chmod +x /usr/local/sbin/update-blacklist.sh # 创建配置目录 sudo mkdir -p /etc/nftables-blacklist # 下载配置文件 sudo curl -fsSL -o /etc/nftables-blacklist/nftables-blacklist.conf \ https://gitcode.com/gh_mirrors/ip/nftables-blacklist/raw/master/nftables-blacklist.conf

步骤4:迁移配置文件

这是迁移过程中最关键的一步。打开新旧配置文件,将自定义设置从旧配置迁移到新配置:

# 打开新旧配置文件进行对比 sudo nano /etc/ipset-blacklist/ipset-blacklist.conf sudo nano /etc/nftables-blacklist/nftables-blacklist.conf

需要迁移的主要配置项:

  1. BLACKLISTS数组:将你自定义的黑名单URL从旧配置复制到新配置的BLACKLISTS数组中

  2. 自定义文件:如果你有ip-blacklist-custom.list文件,将其移动到新位置:

    sudo cp /etc/ipset-blacklist/ip-blacklist-custom.list /etc/nftables-blacklist/custom.list

    然后在配置文件中添加:"file:///etc/nftables-blacklist/custom.list"

  3. 白名单设置:将你的服务器IP地址添加到WHITELIST数组中,防止自我封锁

步骤5:配置自动白名单检测

强烈建议启用自动白名单检测功能,防止意外封锁自己的服务器:

# 编辑配置文件 sudo nano /etc/nftables-blacklist/nftables-blacklist.conf # 找到并修改这一行 AUTO_WHITELIST=yes

这个功能会自动检测服务器的所有IP地址(包括公网和私有地址),确保它们不会被黑名单封锁。

步骤6:测试新系统

在正式应用之前,先进行干运行测试:

sudo /usr/local/sbin/update-blacklist.sh --dry-run /etc/nftables-blacklist/nftables-blacklist.conf

你会看到类似这样的输出:

Downloading blacklists.............................................. Downloaded 43 of 43 blacklists Processing IPv4 addresses... CIDR optimization: 104791 → 66178 entries (38613 merged) Processing IPv6 addresses... Auto-detecting server IPs for whitelist... Whitelisted: 2001:db8:305:2100::1 Whitelisted: 203.0.113.10 Applying IPv4 whitelist... Whitelist applied: 66178 → 66178 entries (0 removed) Applying IPv6 whitelist... Note: IPv6 whitelist uses exact matching only Whitelist applied: 23927 → 23927 entries (0 removed) Generating nftables script... Dry run complete - no rules applied

步骤7:应用新规则

如果干运行测试成功,现在可以正式应用规则:

sudo /usr/local/sbin/update-blacklist.sh /etc/nftables-blacklist/nftables-blacklist.conf

步骤8:验证迁移结果

验证nftables-blacklist是否正确工作:

# 查看nftables黑名单表 sudo nft list table inet blacklist # 查看IPv4黑名单集合内容 sudo nft list set inet blacklist blacklist4 # 查看IPv6黑名单集合内容 sudo nft list set inet blacklist blacklist6 # 检查丢弃的数据包统计 sudo nft list chain inet blacklist input

你应该能看到类似这样的输出:

table inet blacklist { set blacklist4 { type ipv4_addr size 65535 flags interval elements = { 1.0.0.0/24, 1.0.4.0/22, ... } } set blacklist6 { type ipv6_addr size 65535 flags interval elements = { 2001:4:112::/48, 2001:67c:10e8::/48, ... } } chain input { type filter hook input priority -200; policy accept; ip saddr @blacklist4 counter packets 1523 bytes 91380 drop comment "IPv4 blacklist" ip6 saddr @blacklist6 counter packets 42 bytes 3360 drop comment "IPv6 blacklist" } }

步骤9:设置持久化和自动更新

为了让配置在重启后依然生效,并自动更新黑名单,需要设置systemd服务:

# 创建systemd服务文件 sudo cat <<'EOF' > /etc/systemd/system/nftables-blacklist.service [Unit] Description=nftables IP blacklist After=network.target [Service] Type=oneshot ExecStart=/usr/local/sbin/update-blacklist.sh /etc/nftables-blacklist/nftables-blacklist.conf RemainAfterExit=yes [Install] WantedBy=multi-user.target EOF # 创建自动更新定时器 sudo cat <<'EOF' > /etc/systemd/system/nftables-blacklist-update.timer [Unit] Description=Update nftables IP blacklist daily [Timer] OnCalendar=*-*-* 23:33:00 Persistent=true RandomizedDelaySec=14400 [Install] WantedBy=timers.target EOF sudo cat <<'EOF' > /etc/systemd/system/nftables-blacklist-update.service [Unit] Description=Update nftables IP blacklist After=network-online.target Wants=network-online.target [Service] Type=oneshot ExecStart=/usr/local/sbin/update-blacklist.sh --cron /etc/nftables-blacklist/nftables-blacklist.conf EOF # 启用服务 sudo systemctl daemon-reload sudo systemctl enable --now nftables-blacklist.service sudo systemctl enable --now nftables-blacklist-update.timer

步骤10:清理旧文件(可选)

确认新系统工作正常后,可以安全地清理旧文件:

# 移除旧的脚本 sudo rm -f /usr/local/sbin/update-blacklist.sh.old # 移除旧的配置目录(先备份重要数据) sudo rm -rI /etc/ipset-blacklist

配置优化技巧 ⚡

1. 自定义黑名单源

nftables-blacklist支持更灵活的黑名单配置。你可以在/etc/nftables-blacklist/nftables-blacklist.conf文件中添加自定义黑名单源:

BLACKLISTS=( # 本地自定义列表 "file:///etc/nftables-blacklist/custom.list" # 国家级IP封锁(示例:俄罗斯) "https://raw.githubusercontent.com/ipverse/country-ip-blocks/master/country/ru/ipv4-aggregated.txt" "https://raw.githubusercontent.com/ipverse/country-ip-blocks/master/country/ru/ipv6-aggregated.txt" # 特定ASN封锁 "https://raw.githubusercontent.com/ipverse/as-ip-blocks/master/as/64496/ipv4-aggregated.txt" )

2. 动态白名单配置

nftables-blacklist支持从外部文件加载白名单,这让你可以创建动态白名单:

WHITELIST=( "203.0.113.10" "file:///etc/nftables-blacklist/dynamic-whitelist.list" )

你可以创建一个定时任务来更新这个动态白名单文件,例如从API获取可信IP地址。

3. 转发流量拦截

如果你的服务器需要转发流量(例如作为Docker宿主机),可以启用转发链拦截:

# 在配置文件中启用 BLOCK_FORWARD=yes

这样会同时保护服务器本身和通过它转发的流量。

常见问题解答 ❓

Q1:迁移后为什么我的服务器无法访问?

这通常是因为白名单配置不正确。检查是否启用了AUTO_WHITELIST=yes,或者手动将服务器IP添加到WHITELIST数组中。

Q2:如何检查特定IP是否被封锁?

使用以下命令检查IP地址是否在黑名单中:

# 检查IPv4地址 sudo nft get element inet blacklist blacklist4 '{ 1.2.3.4 }' # 检查IPv6地址 sudo nft get element inet blacklist blacklist6 '{ 2001:db8::1 }'

Q3:如何处理大量IP地址(10万+)?

对于非常大的IP集合,可能需要调整内核网络缓冲区:

# 创建sysctl配置文件 sudo tee /etc/sysctl.d/99-nftables.conf <<'EOF' net.core.rmem_max = 8388608 net.core.rmem_default = 8388608 EOF # 应用配置 sudo sysctl -p /etc/sysctl.d/99-nftables.conf

Q4:迁移后iptables规则还在吗?

nftables-blacklist使用独立的nftables表(inet blacklist),不会影响你现有的iptables规则。两者可以共存。

Q5:如何回滚到ipset-blacklist?

如果遇到问题需要回滚:

  1. 停止nftables-blacklist服务:sudo systemctl disable --now nftables-blacklist.service
  2. 删除nftables表:sudo nft delete table inet blacklist
  3. 恢复ipset-blacklist配置和规则

性能对比 📊

迁移到nftables-blacklist后,你会注意到以下改进:

  • 规则加载速度:nftables的批量操作比iptables逐个规则添加快得多
  • 内存使用:nftables使用更高效的数据结构,内存占用更少
  • 规则查找:哈希表查找比线性遍历快得多
  • IPv6支持:原生支持,无需额外配置

维护建议 🛡️

  1. 定期检查日志:监控journalctl -u nftables-blacklist-update.service的输出
  2. 更新黑名单源:定期审查和更新BLACKLISTS数组中的URL
  3. 测试新配置:在应用任何配置更改前,始终使用--dry-run参数测试
  4. 备份配置:定期备份/etc/nftables-blacklist/目录
  5. 监控性能:使用sudo nft list chain inet blacklist input查看丢弃的数据包统计

总结 🎯

从ipset-blacklist迁移到nftables-blacklist是一个值得投入的升级。新系统不仅性能更好,而且配置更简单,功能更强大。通过本指南的10个步骤,你可以顺利完成迁移,享受现代防火墙技术带来的好处。

记住迁移的关键点:

  1. 备份现有配置以防万一
  2. 仔细迁移自定义设置确保不丢失重要配置
  3. 启用自动白名单防止自我封锁
  4. 充分测试确保一切正常
  5. 设置自动更新保持黑名单最新

现在就开始迁移吧!你的服务器将获得更好的保护,而你将有更多时间专注于其他重要任务。🚀

提示:如果在迁移过程中遇到任何问题,可以参考项目文档或在社区寻求帮助。nftables-blacklist拥有活跃的维护者和用户社区,随时准备帮助你解决问题。

【免费下载链接】nftables-blacklistA bash script to ban large numbers of IP addresses published in blacklists.项目地址: https://gitcode.com/gh_mirrors/ip/nftables-blacklist

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考