如何通过bash自动删除带# do not delete注释的CSF拦截IP条目
CSF删除带
# do not delete注释IP的解决方案 原生强制删除参数
CSF官方已经提供了强制删除的功能,无需手动编辑配置文件,使用-dfr参数即可绕过do not delete的限制删除指定IP,示例命令如下:
# 单条IP强制删除 csf -dfr 1.1.1.1
执行上述命令后不会再触发set as "do not delete" - not removed的报错。
批量自动删除脚本
如果需要批量删除数百条带该注释的IP,可以使用以下bash脚本处理,操作前会自动备份配置文件,避免误操作:
#!/bin/bash # 要求root权限执行 if [ "$(id -u)" -ne 0 ]; then echo "请使用root权限执行该脚本" exit 1 fi # 备份原始csf.deny配置 DENY_FILE="/etc/csf/csf.deny" BAK_FILE="${DENY_FILE}.bak.$(date +%Y%m%d%H%M%S)" cp "$DENY_FILE" "$BAK_FILE" echo "已备份原始配置到${BAK_FILE}" # 提取所有带# do not delete注释的有效IP,批量强制删除 grep ' # do not delete' "$DENY_FILE" | grep -v '^#' | awk '{print $1}' | while read -r ip; do echo "正在删除IP:${ip}" csf -dfr "$ip" done # 重载CSF规则使配置生效 csf -r echo "批量删除操作完成,可通过csf -g <IP>命令验证删除结果"
旧版本CSF兼容方案
如果你的CSF版本过低不支持-dfr参数,可以直接修改配置文件批量删除对应条目:
#!/bin/bash if [ "$(id -u)" -ne 0 ]; then echo "请使用root权限执行该脚本" exit 1 fi DENY_FILE="/etc/csf/csf.deny" BAK_FILE="${DENY_FILE}.bak.$(date +%Y%m%d%H%M%S)" cp "$DENY_FILE" "$BAK_FILE" echo "已备份原始配置到${BAK_FILE}" # 直接删除所有带# do not delete后缀的条目 sed -i '/ # do not delete$/d' "$DENY_FILE" # 重载规则 csf -r echo "批量删除操作完成"
注意事项
- 所有操作均需要root权限执行
- 脚本自动备份的配置文件可在误操作后用于恢复,执行完毕确认无问题后再手动删除备份即可
- 可执行
csf -g 待验证IP确认对应IP是否已经从封禁列表中移除
内容的提问来源于stack exchange,提问作者Azimah
相关产品推荐
相关产品推荐

