服务器访问黑白名单批量添加删除自动化脚本实战
服务器访问黑白名单管理如果只用一条条手工执行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 的输出和系统日志,规则管理会越来越顺手。