资讯动态

BillionMail 登录被 IP 访问限制拦截怎么解除?(bm cancel-ip-limit 与 fail2ban 机制)

发布时间:2026/9/15 17:54:22 来源:尧图企业网站定制
BillionMail 登录被 IP 访问限制拦截怎么解除bm cancel-ip-limit 与 fail2ban 机制【免费下载链接】BillionMailBillionMail gives you open-source MailServer, NewsLetter, Email Marketing — fully self-hosted, dev-friendly, and free from monthly fees. Join the discord: https://discord.gg/asfXzBUhZr项目地址: https://gitcode.com/GitHub_Trending/bi/BillionMailBillionMail 部署在公网后管理界面偶尔会出现“打不开 / 登录被拒”的情况来源有两类一是 core 服务内置的IP 白名单机制.env中IP_WHITELIST_ENABLE开启后非白名单 IP 直接返回 403IP not allowed二是 core 容器内的fail2ban对访问日志的限频封禁。本文给出这两种拦截的识别方法以及用bm.sh cancel-ip-limit关闭白名单限制、以及理解 fail2bancore-accesslimitjail 行为的完整路径让你能判断自己的拦截属于哪一种并对应解除。准备条件命令在哪里执行bm.sh系列命令要求在 BillionMail 项目目录下以 root 执行脚本开头会检查非 root 用户会提示Non-root install, please try the following solutions用sudo bash bm.sh ...或切换 root当前目录没有.env时脚本会尝试读取/opt/PWD-Billion-Mail.txt记录的项目路径自动切换若仍找不到会输出The .env file does not exist. Cannot continue operation, please operate in the BillionMail project directory并退出系统里必须有docker-compose或docker compose否则报ERROR: Docker Compose does not exist。确认命令可用bash bm.sh help帮助输出中包含本文用到的条目cancel-ip-limit - Cancel IP access limit : $0 c-i-l先判断拦截属于哪一种两种机制的“拦截长相”不同排查前先确认你看到的是哪一种1. IP 白名单拦截core 中间件源码 ip_whitelist.go 中的IPWhitelist中间件逻辑是读取.env中的IP_WHITELIST_ENABLE值为1或true才启用不存在该键时默认禁用并会自动在.env末尾补一行注释和IP_WHITELIST_ENABLEfalse命中豁免路径列表的直接放行如/unsubscribe.html、/api/subscribe/*、/api/batch_mail/api/send等以及前缀为/.well-known/acme-challenge、/pmta/、/roundcube的路径——注意/roundcube前缀豁免意味着 Roundcube Webmail 不受该白名单约束客户端 IP 与白名单比对白名单来自数据库表bm_console_ip_whitelist再固定追加127.0.0.1、::1和服务器自身 IP都不满足时响应403 IP not allowed并在 core 日志写入Blocked non-whitelisted IP: IP。所以如果你访问的是管理界面且收到 403优先怀疑这条路径你的出口 IP 不在bm_console_ip_whitelist里。2. fail2ban 限频封禁core-accesslimit jailcore-accesslimit.conf 定义了 core 的 fail2ban jail[core-accesslimit] ignoreip 127.0.0.1/8 enabled true port 80,443 filter core-limit-filter logpath /opt/billionmail/core/logs/access-*.log maxretry 1000 findtime 60 bantime 60 action %(action_)s配套过滤器 core-limit-filter.conf 的failregex匹配标准 HTTP 访问日志行ignoreregex .*/roundcube.*表示 roundcube 相关访问不计入封禁统计。即同一 IP 在findtime60 秒窗口内访问达到maxretry1000次被封bantime60 秒ignoreip中的127.0.0.1/8永远不受影响。fail2ban 日志可以通过bm.sh直接查看bm.sh 的log-file支持fail2ban这个名字bash bm.sh l-f fail2ban如果日志里能看到针对你 IP 的 ban 记录说明当前拦截来自 fail2ban按上面的参数这类封禁会在 60 秒后自动解除。用 bm.sh cancel-ip-limit 解除 IP 白名单限制当拦截来自 IP 白名单访问管理界面返回 403而 fail2ban 日志无异常时用bm.sh的cancel-ip-limit子命令关闭限制。它对应 bm.sh 中的CANCEL_IP_WHITELIST_LIMIT函数cancel-ip-limit|c-i-l均可bash bm.sh cancel-ip-limit脚本的实际动作是sed -i s/^IP_WHITELIST_ENABLE.*/IP_WHITELIST_ENABLEfalse/ .env—— 把项目目录下.env中的IP_WHITELIST_ENABLE改为false输出The BillionMail IP access whitelist Restrictions: Closed随后停止并删除 core 容器再用 docker compose 重新拉起找不到 core 容器时直接docker compose up -d。也就是说执行这条命令的副作用是修改.env并重建 core管理端容器期间管理端短暂不可用。邮件收发服务不受影响但命令仍需要在 root 下、在项目目录里执行。除脚本外等价的手动路径是直接在.env中把IP_WHITELIST_ENABLEfalse键不存在时中间件本来就视为禁用然后重启 core 容器或者在管理界面设置里操作——settings_v1_set_system_config_key.go 支持键ip_whitelist_enable映射到IP_WHITELIST_ENABLEsettings_v1_delete_ip_whitelist.go 的删除白名单 IP 逻辑在移除最后一项时也会把IP_WHITELIST_ENABLE置为false。如果你只是希望放开自己这一个 IP更精细的做法是走界面/API 的 IP 白名单增删而不是整体关闭。验证是否解除确认配置已生效grep IP_WHITELIST_ENABLE .env应看到IP_WHITELIST_ENABLEfalse。确认 core 容器已重建并运行bash bm.sh status用原先被拦截的出口 IP 重新访问管理界面地址地址可用bash bm.sh default查看能打开登录页即白名单限制已解除对照检查 fail2ban 日志bash bm.sh l-f fail2ban中该 IP 无新增 ban 记录可确认当前访问不再被限频封禁。限制与边界cancel-ip-limit只处理 IP 白名单这一层bantime 60秒的 fail2ban 封禁是自动到期的不需要也不该用该命令解除。若同一 IP 持续高频访问封禁会按maxretry/findtime参数反复触发。关闭白名单意味着管理界面入口对任意 IP 开放安全入口路径SafePath仍生效。如果生产环境需要长期保留白名单建议恢复IP_WHITELIST_ENABLEtrue并通过 IP 白名单功能把自己的 IP 加入bm_console_ip_whitelist而不是永久关闭。fail2ban 的 jail 配置由 core 镜像构建时安装日志随 core 日志滚动access-YYYYMMDD.log。core 服务内的 access_log_detection.go 会监听新日志文件创建并执行容器内/restart_fail2ban.sh见 restart_fail2ban.sh在FAIL2BAN_INITy时执行fail2ban-client reload core-accesslimit/roundcube-accesslimit用于日志切换后让 jail 跟上新的日志文件你排查时不需要手动执行它只需知道 jail 会在日志滚动后被 reload。完成上述步骤后以被拦截 IP 访问管理界面能正常打开、l-f fail2ban无针对该 IP 的持续 ban 记录即说明 IP 访问限制已解除若白名单场景只是临时放开记得按“限制与边界”一节恢复白名单并加入自己的 IP。【免费下载链接】BillionMailBillionMail gives you open-source MailServer, NewsLetter, Email Marketing — fully self-hosted, dev-friendly, and free from monthly fees. Join the discord: https://discord.gg/asfXzBUhZr项目地址: https://gitcode.com/GitHub_Trending/bi/BillionMail创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价