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

服务器访问黑白名单管理如果只用一条条手工执行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

看到 DROP 或 ACCEPT 条目并对应正确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
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意