You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Shell脚本自动更新nftables的badips IP集合?

实现nftables badips集合自动更新的Shell脚本

脚本功能说明

该脚本会完成以下操作:

  • 清空my_table表中的badips集合(避免重复IP堆积)
  • 下载指定的Firehol IP黑名单列表
  • 过滤列表中的注释、空行,提取有效IP/CIDR
  • 将处理后的IP批量添加到badips集合中

完整Shell脚本

#!/bin/bash

# 配置参数
NFT_TABLE="inet my_table"
NFT_SET="badips"
# 指定要下载的Firehol IP列表(可根据需求选择,如firehol_level1.netset、firehol_level2.netset等,自行替换为对应下载地址)
IP_LISTS=(
    "请替换为Firehol IP列表1的下载地址"
    "请替换为Firehol IP列表2的下载地址"
)
TMP_DIR="/tmp/firehol_ips"

# 检查是否为root用户
if [ "$(id -u)" -ne 0 ]; then
    echo "错误:需要以root权限执行该脚本"
    exit 1
fi

# 检查nft命令是否存在
if ! command -v nft &> /dev/null; then
    echo "错误:未找到nft命令,请确保已安装nftables"
    exit 1
fi

# 检查目标集合是否存在
if ! nft list set $NFT_TABLE $NFT_SET &> /dev/null; then
    echo "错误:集合 $NFT_TABLE $NFT_SET 不存在,请检查nftables配置"
    exit 1
fi

# 创建临时目录
mkdir -p $TMP_DIR || { echo "错误:无法创建临时目录 $TMP_DIR"; exit 1; }

# 清空现有badips集合
echo "正在清空 $NFT_SET 集合..."
nft flush set $NFT_TABLE $NFT_SET

# 下载并处理每个IP列表
for list_url in "${IP_LISTS[@]}"; do
    list_file="${TMP_DIR}/$(basename $list_url)"
    echo "正在下载IP列表:$list_url"
    
    # 下载列表(curl失败则跳过当前列表)
    if ! curl -s -o "$list_file" "$list_url"; then
        echo "警告:下载 $list_url 失败,跳过该列表"
        continue
    fi

    # 过滤有效IP(去除注释行、空行),批量添加到集合
    echo "正在处理 $list_file 中的IP..."
    # 收集所有有效IP到临时变量
    valid_ips=$(grep -v '^#' "$list_file" | grep -v '^$')
    if [ -n "$valid_ips" ]; then
        # 将IP格式化为nft接受的元素格式:{ ip1, ip2, ... }
        ip_elements=$(echo "$valid_ips" | paste -sd ',' -)
        nft add element $NFT_TABLE $NFT_SET { $ip_elements }
    fi
done

# 清理临时文件
rm -rf $TMP_DIR

echo "完成:$NFT_SET 集合已更新"

脚本使用说明

  1. 保存脚本:将上述代码保存为update_badips.sh,并赋予执行权限:
    chmod +x update_badips.sh
    
  2. 配置列表地址:修改脚本中IP_LISTS数组,替换为你需要的Firehol IP列表下载地址
  3. 测试执行:以root身份手动执行脚本,验证功能是否正常:
    ./update_badips.sh
    
  4. 设置定时任务:使用cron实现每日自动更新,编辑crontab:
    crontab -e
    
    添加以下内容(每天凌晨0点执行,日志输出到指定文件):
    0 0 * * * /path/to/update_badips.sh >> /var/log/update_badips.log 2>&1
    

注意事项

  • 脚本执行前确保nftables服务正常运行,且my_table表和badips集合已存在
  • 可根据安全需求调整IP列表的级别,避免误拦截正常IP
  • 定时任务需确保脚本路径正确,且日志目录有写入权限

内容的提问来源于stack exchange,提问作者somenxavier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 01:00:30