
告别iptablesnftables-blacklist让服务器安全防护更简单高效【免费下载链接】nftables-blacklistA bash script to ban large numbers of IP addresses published in blacklists.项目地址: https://gitcode.com/gh_mirrors/ip/nftables-blacklistnftables-blacklist是一款基于bash脚本的服务器安全防护工具它能够自动下载公共IP黑名单并使用nftables进行阻止有效抵御脚本小子、僵尸网络和其他恶意流量的攻击。该工具全面支持IPv4、IPv6协议具备CIDR聚合功能内置白名单机制、定时任务调度以及服务器IP自动检测等实用特性为Linux服务器提供简单高效的安全防护解决方案。 为什么选择nftables-blacklist传统的iptables/ipset组合已逐渐被淘汰nftables作为新一代的Linux防火墙工具在性能和功能上都有显著提升。nftables-blacklist正是基于nftables构建的高效IP黑名单管理工具它具有以下核心优势高效处理能力轻松应对10万级别的IP黑名单不会对服务器性能造成明显影响智能IP聚合自动合并重叠的IP范围例如将两个/24网段合并为一个/23网段原子化更新黑名单更新采用事务方式确保规则切换的安全性全面协议支持同时支持IPv4和IPv6协议包括CIDR表示法自动白名单保护能够自动检测服务器自身IP防止意外的自我阻塞 系统要求使用nftables-blacklist需要满足以下条件Debian 10 / Ubuntu 20.04 或其他支持nftables的Linux发行版nftables防火墙工具iprange工具用于合并重叠IP范围和处理白名单减法常用工具curl, grep, sed, sort, wc通常已预装⚡ 快速开始Debian/Ubuntu1. 安装辅助工具首先需要安装必要的辅助工具sudo apt install curl iprange2. 下载脚本使用curl命令下载最新的nftables-blacklist脚本sudo curl -fsSL -o /usr/local/sbin/update-blacklist.sh \ https://raw.githubusercontent.com/trick77/nftables-blacklist/master/update-blacklist.sh sudo chmod x /usr/local/sbin/update-blacklist.sh3. 创建配置目录并下载配置文件sudo mkdir -p /etc/nftables-blacklist if [ -f /etc/nftables-blacklist/nftables-blacklist.conf ]; then echo Config already exists, skipping download else sudo curl -fsSL -o /etc/nftables-blacklist/nftables-blacklist.conf \ https://raw.githubusercontent.com/trick77/nftables-blacklist/master/nftables-blacklist.conf fi4. 编辑配置可选根据需要编辑配置文件sudo nano /etc/nftables-blacklist/nftables-blacklist.conf5. 运行初始更新执行脚本应用初始黑名单规则sudo /usr/local/sbin/update-blacklist.sh /etc/nftables-blacklist/nftables-blacklist.conf6. 验证是否工作通过以下命令验证nftables-blacklist是否正常工作# 列出黑名单表 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 配置自动更新为了保持黑名单的最新状态建议配置自动更新机制。以下是使用systemd定时器实现每日自动更新的方法创建定时器和服务文件sudo cat EOF /etc/systemd/system/nftables-blacklist-update.timer [Unit] DescriptionUpdate nftables IP blacklist daily [Timer] OnCalendar*-*-* 23:33:00 Persistenttrue RandomizedDelaySec14400 [Install] WantedBytimers.target EOFsudo cat EOF /etc/systemd/system/nftables-blacklist-update.service [Unit] DescriptionUpdate nftables IP blacklist Afternetwork-online.target Wantsnetwork-online.target [Service] Typeoneshot 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-update.timer检查定时器状态systemctl list-timers nftables-blacklist-update提示每天更新1-2次已经足够。过于频繁的更新可能会被黑名单提供商禁止访问。⚙️ 配置选项详解nftables-blacklist的主要配置文件是nftables-blacklist.conf以下是一些关键配置选项设置默认值描述ENABLE_IPV4yes是否阻止IPv4地址ENABLE_IPV6yes是否阻止IPv6地址FORCEyes如果nftables表/集不存在自动创建AUTO_WHITELISTno自动检测并白名单服务器自身IP建议设为yesBLOCK_FORWARDno是否在forward链中也阻止黑名单IPNFT_CHAIN_PRIORITY-200检查黑名单的优先级-200表示非常早CURL_CONNECT_TIMEOUT10黑名单服务器连接超时时间秒CURL_MAX_TIME30每个黑名单下载的最大时间秒 自定义黑名单你可以通过编辑配置文件中的BLACKLISTS数组来自定义要使用的黑名单源BLACKLISTS( # 自定义本地列表 file:///etc/nftables-blacklist/custom.list # 公共黑名单 https://www.spamhaus.org/drop/drop_v4.json https://lists.blocklist.de/lists/all.txt # 阻止整个国家使用国家代码如cn、ru等 # https://raw.githubusercontent.com/ipverse/country-ip-blocks/master/country/ru/ipv4-aggregated.txt )️ 白名单设置防止自我阻塞有时服务器的IP可能会出现在公共黑名单中为了防止自我阻塞可以通过以下方式配置白名单手动白名单编辑配置文件中的WHITELIST数组WHITELIST( 203.0.113.10 # 服务器IP 203.0.113.0/24 # 网络范围 2001:db8::1 # IPv6地址 )对于IPv4白名单中的范围如10.0.0.0/8将正确排除该范围内的所有IP即使黑名单中包含该范围内的单个IP。注意IPv6白名单仅匹配精确地址不支持CIDR范围。外部白名单文件WHITELIST条目也可以是指向纯文本文件的file://URL每行一个IP/CIDR#开头为注释空行将被忽略WHITELIST( 203.0.113.10 file:///etc/nftables-blacklist/extra.list )自动检测服务器IP要自动白名单服务器自身IP推荐AUTO_WHITELISTyes这将检测所有本地接口IP并查询外部服务如o11.net、icanhazip.com获取公共IP。 检查被阻止的数据包使用以下命令查看被阻止的数据包统计sudo nft list chain inet blacklist input示例输出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 } 故障排除nftables table does not exist当FORCEyes默认值时脚本会自动创建nftables表/集。如果遇到此错误请确保配置中的FORCEyes。检查IP是否被阻止sudo nft get element inet blacklist blacklist4 { 1.2.3.4 } sudo nft get element inet blacklist blacklist6 { 2001:db8::1 }大型IP集合10万条目对于非常大的IP集合可能会遇到Message too long或No buffer space available错误。可以通过增加内核网络缓冲区解决# 添加到/etc/sysctl.d/99-nftables.conf net.core.rmem_max 8388608 net.core.rmem_default 8388608 # 立即应用 sysctl -p /etc/sysctl.d/99-nftables.conf 从旧版ipset/iptables迁移如果你之前使用的是旧版ipset/iptables版本可以按照以下步骤迁移删除旧的ipset/iptables规则和遗留文件# 删除iptables规则和ipset iptables -D INPUT -m set --match-set blacklist src -j DROP ipset destroy blacklist # 删除旧的cron任务 rm -f /etc/cron.d/update-blacklist # 删除旧脚本 rm -f /usr/local/sbin/update-blacklist.sh # 备份需要保留的自定义内容后删除旧配置目录 rm -rI /etc/ipset-blacklist按照前面的快速开始指南设置新的nftables版本️ 卸载要完全从系统中删除nftables-blacklist停止并禁用systemd定时器和服务sudo systemctl disable --now nftables-blacklist-update.timer sudo systemctl disable --now nftables-blacklist.service删除nftables黑名单表sudo nft delete table inet blacklist删除systemd单元文件sudo rm -f /etc/systemd/system/nftables-blacklist.service sudo rm -f /etc/systemd/system/nftables-blacklist-update.service sudo rm -f /etc/systemd/system/nftables-blacklist-update.timer sudo systemctl daemon-reload删除脚本sudo rm -f /usr/local/sbin/update-blacklist.sh删除配置和数据sudo rm -rI /etc/nftables-blacklist完成这些步骤后黑名单的所有痕迹将被清除所有以前被阻止的流量将恢复正常。总结nftables-blacklist提供了一种简单高效的方式来保护Linux服务器免受恶意IP的攻击。通过自动化的黑名单更新和智能的IP管理它能够在不影响服务器性能的情况下提供强大的安全防护。无论是对于新手还是有经验的系统管理员nftables-blacklist都是一个值得尝试的服务器安全工具。要开始使用nftables-blacklist只需执行以下命令克隆仓库git clone https://gitcode.com/gh_mirrors/ip/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),仅供参考