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

Linux网关路由器基于ipset批量导入文件黑名单IP的脚本故障排查求助

Linux网关路由器基于ipset批量导入文件黑名单IP的脚本故障排查求助

嘿各位bash大佬,我是个刚入门的新手,现在碰到个棘手的问题,想请大家帮我看看!

我家里用一台Linux服务器当网关路由器,已经配置好了基于ipset列表的iptables封禁规则,现在想把一个大文件里的黑名单IP批量导入到ipset集合里,但自己写的脚本要么跑不起来,要么达不到预期效果,实在摸不着头脑了😭

先跟大家说下我的背景:

  • 路由器上的iptables规则是依赖名为blocked_ip系列的ipset集合来封禁IP的
  • 我需要从路由器拉取一个dump.xml文件,解析出里面的IP地址,处理后批量导入到ipset里

我写的脚本步骤大概是这样的:

  1. 用scp从路由器拉取dump.xml到本地指定目录
  2. 用Python脚本解析xml,提取出IP地址存成文本文件
  3. 对IP列表排序去重,避免重复封禁
  4. 因为IP数量特别多(几百万条),所以把文件分割成每个90万行的小文件,方便后续处理
  5. 最后循环遍历这些小文件,把IP逐个添加到对应的ipset集合里(比如第一个小文件的IP进blocked_ip1,第二个进blocked_ip2以此类推)

但现在脚本不仅没写完(ipset循环部分写到一半卡壳了),而且前面的文件处理步骤也可能有问题,下面是我目前写的脚本代码:

#!/bin/bash

# 从路由器拉取dump.xml文件
scp -P 21 root@192.168.0.10:/blocked-IP/dump.xml /var/scripts/IP
cd /var/scripts/IP

# 用Python解析xml提取IP
/usr/bin/python2.7 /var/scripts/IP/parser_ip.py > /var/scripts/IP/ip_addresses.txt

# 排序并去重IP列表
/usr/bin/sort -u /var/scripts/IP/ip_addresses.txt > /var/scripts/IP/sorted_ip.txt

# 将大文件分割为每个90万行的小文件
/usr/bin/split -l 900000 -d /var/scripts/sorted_ip.txt /var/scripts/IP/sorted_ip_split

# 准备导入ipset
# 原本想先清空现有集合,但先注释掉了
#/sbin/ipset -F blocked_ip
n=1;
# 遍历所有分割后的小文件
for file_ip in `find /var/scripts/IP -type f -name "sorted_ip_split*"`
do
    # 读取文件里的每一行IP
    cat $file_ip | while read line
    do
        # 尝试添加到对应的ipset集合
        /sbin/ipset -A "blocked_ip${n}" $line
    done
    n=$((n+1))
done

我自己排查的时候发现几个可能的问题,但不确定:

  1. scp用了-P 21端口,是不是搞错了?因为我记得scp默认是22端口,路由器上的scp服务会不会是在22端口?
  2. split命令的输入路径是不是写错了?我生成的sorted_ip.txt是在/var/scripts/IP/目录下,但split里写的是/var/scripts/sorted_ip.txt,是不是路径少了IP子目录?
  3. 用find命令遍历文件的时候,用反引号的方式会不会有问题?比如文件名如果有特殊字符的话?
  4. ipset的集合blocked_ip1、blocked_ip2这些我都没提前创建,是不是ipset -A命令会报错?因为添加元素需要集合先存在对吧?
  5. 还有如果重复运行脚本,之前的IP会不会重复添加?我原本想先用ipset -F清空,但又怕影响现有规则,所以注释掉了。

现在实在不知道该从哪下手了,有没有大佬能帮我排查下脚本里的问题,或者给我一些改进的建议?比如批量导入ipset有没有更高效的方式,不用逐行读取添加的?

备注:内容来源于stack exchange,提问作者user26537511

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 10:38:05