服务器访问黑白名单批量添加删除自动化脚本实战

服务器访问黑白名单管理如果只用一条条手工执行iptables命令,IP一多很容易出错,尤其是遇到批量封禁或解封时段,效率很低。
本文分享一个可直接运行的bash脚本,按列表文件批量添加或删除黑白名单IP,包含完整代码、执行示例和避坑说明,零基础也能照着完成自动化配置。

先理清脚本的应用场景与设计思路

这种脚本适合两类场景:一是把恶意IP批量拉黑,比如从日志里提取扫描IP后统一封禁;
二是只允许固定IP访问服务器特定端口,属于白名单管控。
核心思路很简单:用一个文本文件保存IP列表,脚本逐行读取后调用iptables命令,通过传入参数控制“添加”还是“删除”、“黑名单”还是“白名单”。

编写批量管理脚本

登录服务器后,创建脚本文件:

vim /usr/local/sbin/ip_manager.sh

写入以下内容:

#!/bin/bash
# 用法:./ip_manager.sh {add|del} {black|white} /path/iplist.txt
# 示例:./ip_manager.sh add black /root/blacklist.txt

ACTION=$1
TYPE=$2
LIST_FILE=$3

if [ $# -ne 3 ]; then
    echo "参数错误,用法见脚本开头"
    exit 1
fi

CHAIN=""
if [ "$TYPE" = "black" ]; then
    CHAIN="INPUT"
    TARGET="DROP"
elif [ "$TYPE" = "white" ]; then
    CHAIN="INPUT"
    TARGET="ACCEPT"
else
    echo "类型必须为 black 或 white"
    exit 2
fi

while read -r IP; do
    [ -z "$IP" ] && continue
    [[ "$IP" =~ ^# ]] && continue
    if [ "$ACTION" = "add" ]; then
        iptables -I $CHAIN -s $IP -j $TARGET
    elif [ "$ACTION" = "del" ]; then
        iptables -D $CHAIN -s $IP -j $TARGET
    else
        echo "动作必须为 add 或 del"
        exit 3
    fi
    echo "已处理:$IP"
done < "$LIST_FILE"

保存后赋予执行权限:

chmod +x /usr/local/sbin/ip_manager.sh

脚本中的 -I 表示插入规则到最前面,-D 表示删除指定规则。INPUT 是数据包进入服务器的第一个链条,黑名单执行 DROP,白名单执行 ACCEPT

执行批量添加与删除

先准备一个IP列表文件,每行一个IP,支持用 # 注释:

vim /root/blacklist.txt

写入内容:

# 恶意IP列表
192.168.1.100
10.10.10.5

添加黑名单:

/usr/local/sbin/ip_manager.sh add black /root/blacklist.txt

添加白名单:

/usr/local/sbin/ip_manager.sh add white /root/whitelist.txt

删除规则时将 add 换成 del 即可。
查看当前生效规则:

iptables -L INPUT -n --line-numbers

看到 DROPACCEPT 条目并对应正确IP,说明脚本执行成功。

避坑说明与高频问题

IP列表格式必须严格
每行只放一个IP,脚本会跳过空行和 # 开头的行,但如果IP中间有空格或多余字符,会导致iptables报错。

重复执行会叠加规则
脚本不做去重,多次执行相同列表会导致不同行号的重复规则,建议先执行 iptables -D 删除旧规则,或者执行前用 grep 检查是否已存在。

iptables规则默认不持久化
服务器重启后规则会丢失。
在Debian/Ubuntu上可安装 iptables-persistent,保存后自动恢复;
CentOS可执行 service iptables save 持久化。

防止误封自己
如果你是把当前登录IP加入了黑名单,会立即断连。
建议先加白名单确认能通,再操作黑名单;
万一断连,可通过云控制台的VNC或救援模式清除规则。

firewalld环境不一样
如果系统使用firewalld,可以将脚本里的命令替换为 firewall-cmd --add-rich-rule='rule family=ipv4 source address=IP reject' 等富规则,但需要单独调整脚本结构。

实际使用中,建议先在小规模测试机跑通,再把IP列表交给脚本处理。
结合定时任务或fail2ban等工具,就能实现攻击IP自动拉黑、到期自动解封的完整自动化。
遇到异常时,优先查看 iptables -L -n -v 的输出和系统日志,规则管理会越来越顺手。

分享到:
上一篇
如何批量清理网站垃圾图片释放服务器磁盘存储空间
下一篇
磁盘满自动清理日志定时任务宝塔部署指南
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意