新闻详情

新闻详情

首页 / 资讯中心 / 详情

Ajenti 安全加固实战:基于 Fail2ban 的暴力破解防护配置指南

发布时间:2026/9/27 7:43:50来源:尧图网络
Ajenti 安全加固实战:基于 Fail2ban 的暴力破解防护配置指南
后端运维【免费下载链接】ajentiAjenti Core and stock plugins项目地址https://gitcode.com/gh_mirrors/aj/ajenti点击查看免费下载Ajenti 是一个基于 Python 的轻量级 Web 管理平台包含 Ajenti Core平台本身含 HTTP 服务器、事件循环与插件容器与 Ajenti Panel启动脚本及文件管理器、网络配置、服务管理等内置插件。本文以官方文档 docs/source/man/security.rst 为主体深入讲解 Ajenti 的日志记录机制、Fail2ban 过滤器原理以及完整的防暴力破解配置方案读完你可以独立为 Ajenti 接入 Fail2ban并根据自己的部署环境调优封禁策略。一、为什么需要为 Ajenti 配置 Fail2banAjenti 提供完整的 Web 管理界面其登录入口/api/core/auth天然暴露在网络上成为暴力破解攻击的目标。虽然 Ajenti 自身在登录失败时会强制睡眠gevent.sleep(3)见 plugins/core/views/api.py以拖慢攻击节奏但仅靠应用层限速并不能阻止分布式或持续的暴力尝试。Fail2ban 是业界标准的入侵防御工具它扫描服务日志匹配失败尝试的正则规则对超阈值来源 IP 在防火墙层面进行临时封禁。Ajenti 官方在文档中明确推荐这一方案并在仓库内提供了配套的过滤器配置 scripts/ajenti.conf。依据docs/source/man/security.rst 明确说明 Failed login attempts are logged in/var/log/ajenti/ajenti.log并给出了完整的 Fail2ban 接入示例同时 docs/source/index.rst 的 Feature Overview 也将 Fail2ban rule 列为 Ajenti 的安全特性之一。二、Ajenti 登录失败日志的产生与格式2.1 日志写入位置Ajenti 的日志目录与文件名硬编码在核心模块 ajenti-core/aj/log.py 中LOG_DIR /var/log/ajenti LOG_NAME ajenti.log LOG_FILE os.path.join(LOG_DIR, LOG_NAME)即失败登录记录写入/var/log/ajenti/ajenti.log。该文件使用TimedRotatingFileHandler按日轮转whenmidnight保留backupCount7份也就是说 Fail2ban 的logpath指向的是每日轮转的活跃日志文件。2.2 失败登录日志的生成代码登录接口位于 plugins/core/views/api.py认证失败时会执行以下逻辑L170-L183# Log failed login for e.g. fail2ban remote_addr http_context.env.get(REMOTE_ADDR, None) if len(aj.config.data[trusted_proxies]) 0: if remote_addr in aj.config.data[trusted_proxies]: ip http_context.env.get(HTTP_X_FORWARDED_FOR, ).split(,)[0] else: ip remote_addr logging.warning(fFailed login from {username} at IP : {ip}) gevent.sleep(3)这段代码揭示了一个关键事实Ajenti 是主动为 Fail2ban 设计日志格式的注释 Log failed login for e.g. fail2ban并且会优先从HTTP_X_FORWARDED_FOR中提取客户端真实 IP——前提是你已在 ajenti-panel/config.yml 中配置了trusted_proxies该参数在 docs/source/man/config.rst 中有说明。若你的 Ajenti 部署在 Nginx 等反向代理之后务必配置trusted_proxies否则 Fail2ban 封禁到的将是代理 IP 而非真实攻击者 IP。2.3 实际日志行示例按照 ajenti-core/aj/log.py 的文件日志格式%(asctime)s %(levelname)-8s: %(message)s一条失败登录记录大致长这样2026-09-26 01:12:33,456 WARNING : Failed login from admin at IP : 203.0.113.7这就是下文 Fail2ban 正则failregex的匹配对象。日志行以WARNING级别写出且与过滤器正则中的WARNING字样严格对应。三、仓库自带的 Fail2ban 过滤器仓库在 scripts/ajenti.conf 中提供了官方基础过滤器完整内容如下# Fail2Ban basic filter for ajenti # # Author : Arnaud Kientz [Definition] failregex ^.* WARNING : Failed login from \w from at IP : HOST ignoreregex [Init] maxlines 1注上表为仓库内实际文件内容其中正则\w from at IP与日志生成代码中的Failed login from {username} at IP : {ip}存在细微不匹配若按原样使用可能导致匹配失败。建议在部署时将其修正为与 plugins/core/views/api.py 输出格式一致的正则^.* WARNING : Failed login from \w at IP : HOST。对正则各部分的解读正则片段含义^.* WARNING :匹配以任意前缀开头、包含WARNING :的日志行对应日志轮转文件的 asctime 前缀Failed login from \w匹配用户名\w覆盖字母、数字、下划线at IP : HOSTHOST是 Fail2ban 的占位符自动匹配并提取 IPv4/IPv6 地址ignoreregex留空表示不忽略任何匹配行maxlines 1表示每次只解析单行日志即可完成匹配因为一条失败登录就是一行独立日志无需跨行聚合。四、完整的 Fail2ban 配置步骤4.1 安装与前置条件确认 Ajenti 正常运行且能观察到/var/log/ajenti/ajenti.log的写入Ajenti 的日志目录与文件会在初始化时自动创建并设置为0o640权限见 ajenti-core/aj/log.py 的init_log_directory/init_log_file确认 Fail2ban 已安装Debian/Ubuntuapt install fail2banRHELdnf install fail2ban并已启动fail2ban服务确保 Ajenti 进程对日志文件有写权限同时 Fail2ban 进程对该文件有读权限。4.2 安装过滤器将仓库中的 scripts/ajenti.conf 复制到 Fail2ban 的过滤器目录sudo cp /path/to/ajenti/scripts/ajenti.conf /etc/fail2ban/filter.d/ajenti.conf注意复制前建议先按上一节的说明修正failregex使其与当前版本的日志格式完全一致即Failed login from \w at IP : HOST否则过滤器可能永远匹配不到日志。4.3 定义 Jail监狱规则在/etc/fail2ban/jail.d/ajenti中写入以下内容即官方文档给出的示例[ajenti] enabled true port 8000 bantime 120 maxretry 3 findtime 60 logpath /var/log/ajenti/ajenti.log filter ajenti各参数含义与取值说明参数示例值含义enabledtrue启用该 jailport8000封禁的端口。务必与你 Ajenti 实际监听端口一致默认 8000见 ajenti-panel/config.yml 的bind.port也可写成port http,https或省略Fail2ban 会按协议自动推断bantime120封禁时长秒。示例中为 2 分钟maxretry3在findtime时间窗口内允许的最大失败次数超过即触发封禁findtime60统计窗口秒。示例中表示60 秒内logpath/var/log/ajenti/ajenti.log监听的日志文件路径与 ajenti-core/aj/log.py 中定义一致filterajenti引用上一步安装的过滤器ajenti.conf官方文档对该示例的行为解释为在最近 60 秒findtime内出现 3 次maxretry失败登录尝试后来源 IP 将被封禁 2 分钟bantime。4.4 使配置生效sudo systemctl restart fail2ban # 或 sudo fail2ban-client reload4.5 验证# 查看 jail 状态 sudo fail2ban-client status ajenti # 查看封禁列表应在输出中的 Banned IP list 出现目标 IP sudo fail2ban-client status ajenti | grep Banned验证思路从另一个 IP 连续故意输错密码 3 次以上然后观察fail2ban-client status ajenti是否出现该 IP同时可tail -f /var/log/ajenti/ajenti.log确认产生了WARNING : Failed login from ... at IP : ...记录。五、按生产环境调优建议官方明确说明示例只是基础配置This is only an example你可以根据实际环境调整参数。以下调优方向均围绕原文档参数展开降低误封风险若存在多用户共享出口 IP 的场景maxretry 3可能过严。可放宽到maxretry 5或增大findtime到60010 分钟窗口。延长封禁时间将bantime从120提升到3600甚至864001 天并配合 Fail2ban 的递增封禁功能在 jail 中增加bantime.increment true实际封禁时长会随重复违规逐步增加。与 Ajenti 自身限速配合Ajenti 每次失败登录都会gevent.sleep(3)见 plugins/core/views/api.py因此单 IP 每秒最多约 0.33 次尝试。Fail2ban 的 60 秒窗口 3 次阈值设计已充分考虑了这一点无需刻意调低。反向代理场景如 2.2 节所述通过 Nginx 等代理访问时必须在 ajenti-panel/config.yml 中配置trusted_proxies否则日志里记录的是代理 IPFail2ban 的封禁将失去意义。该参数同时也会影响密码重置邮件等功能的安全性详见 docs/source/man/config.rst。多实例/多端口如果 Ajenti 监听非默认端口修改bind.port记得同步修改 jail 中的port参数。六、拓展Ajenti 的其他安全机制Fail2ban 只是 Ajenti 安全体系的一环。从 docs/source/index.rst 的 Feature Overview 可以看到Ajenti 还内置了以下安全能力可与 Fail2ban 组合使用可插拔认证支持 OS 用户、独立用户文件、SSL 客户端证书等多种认证提供者认证接口定义见 ajenti-core/aj/auth.py 的AuthenticationProvider接口认证提供者由 ajenti-panel/config.yml 中auth.provider选择os或users非特权会话隔离登录会话在独立进程中以受限权限运行restricted_user: nobody参数见 ajenti-panel/config.ymlHTTPS 与客户端证书认证ssl配置块支持强制 HTTPS 跳转ssl.force与客户端证书认证ssl.client_auth详见 docs/source/man/config.rstSudo 提权控制auth.allow_sudo决定是否允许 sudo 组用户提权plugins/core/views/api.py 中的sudo认证模式。七、常见问题排查日志里根本没有失败记录确认auth.provider对应认证路径确实走了 plugins/core/views/api.py 的normal模式且日志文件可写。Fail2ban 一直显示0 failures优先检查failregex是否与日志实际内容逐字符一致建议先用fail2ban-regex /var/log/ajenti/ajenti.log /etc/fail2ban/filter.d/ajenti.conf离线测试正则匹配。封禁了代理 IP 而非真实客户端如 2.2 节所述配置trusted_proxies后再观察日志中的 IP 字段。重启后配置丢失确认 jail 文件位于/etc/fail2ban/jail.d/且文件名不以.conf或.local结尾以外的其他后缀干扰加载并用fail2ban-client reload生效。结语为 Ajenti 接入 Fail2ban 只需三步确认日志写入 → 安装 scripts/ajenti.conf 过滤器 → 在/etc/fail2ban/jail.d/配置 jail 并 reload。通过findtime/maxretry/bantime三个参数你可以精确控制多久内几次失败就封禁多久再结合 Ajenti 自身的登录限速、HTTPS 强制与客户端证书认证即可构建一套完整的 Web 管理面板防护方案。关键文件索引官方安全文档docs/source/man/security.rstFail2ban 过滤器scripts/ajenti.conf日志路径定义与轮转ajenti-core/aj/log.py失败登录日志生成逻辑plugins/core/views/api.py配置文件说明docs/source/man/config.rst示例配置ajenti-panel/config.yml赞分享后端运维【免费下载链接】ajentiAjenti Core and stock plugins项目地址https://gitcode.com/gh_mirrors/aj/ajenti点击查看免费下载相关推荐Docker Mailserver 安全防护Fail2Ban 防暴力破解完整配置指南Docker Mailserver 安全防护Fail2Ban 防暴力破解完整配置指南 Fail2BanF2B是一款基于 Python 编写的入侵防御框架后端通信云原生Linux-Tutorial网络安全fail2ban与sshguard防非法访问尝试Linux Tutorial网络安全fail2ban与sshguard防非法访问尝试 非法访问尝试防护现状 服务器管理员常面临SSH安全外壳协议非法访问尝文档教程技术博客File Browser 安全部署实践用户自助注册Signup配置与 Fail2ban 暴力破解防护指南File Browser 安全部署实践用户自助注册Signup配置与 Fail2ban 暴力破解防护指南 File Browser 是一款基于 Go 的轻后端前端上一篇从本地模型到生产级APIDeepSeek-R1-Distill-Qwen-32B的FastAPI封装实战下一篇5个超实用技巧让Monaco Editor代码编辑器成为你的网页开发利器 创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Humanizer 字符串大小写转换指南:LetterCasing 枚举与 ApplyCase 深入解析 2026/9/27 8:29:51

Humanizer 字符串大小写转换指南:LetterCasing 枚举与 ApplyCase 深入解析

开发工具 【免费下载链接】Humanizer Humanizer meets all your .NET needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities 项目地址: https://gitcode.com/gh_mirrors/hu/Humanizer 点击查看 免费下载 Lette…

阅读更多 →
Kubernetes 生产集群跨版本平滑升级:etcd 数据面零抖动与节点滚动维护 2026/9/27 8:29:51

Kubernetes 生产集群跨版本平滑升级:etcd 数据面零抖动与节点滚动维护

Kubernetes 生产集群跨版本平滑升级:etcd 数据面零抖动与节点滚动维护在企业级基础设施运维中,Kubernetes 集群的跨大版本升级是一项极高风险的工程操作。稍有不慎,就可能导致 API Server 短暂失联、CoreDNS 解析抖动、甚至由于 etcd 的 Raft…

阅读更多 →
避坑指南:博客软件WordPress等选型与SEO注意事项 2026/9/27 8:29:51

避坑指南:博客软件WordPress等选型与SEO注意事项

避坑指南:博客软件WordPress等选型与SEO注意事项 网站做好了没人访问,这大概是每个站长最心酸的痛。你花了半个月时间,代码一行行敲,页面一个个调,终于上线了,结果后台日志里除了爬虫,连个人类访客的影子都没有。这时候别急着砸键盘,问题…

阅读更多 →
个人特种证件查询网站怎么选?3种方案拆解真实成本 2026/9/27 8:29:51

个人特种证件查询网站怎么选?3种方案拆解真实成本

个人特种证件查询网站怎么选?3种方案拆解真实成本 自己不会代码想做网站,却不知从哪下手,这确实是很多非技术背景从业者的痛点。面对市面上琳琅满目的建站服务, 怎么选 才能既省钱又靠谱,成了大家最关心的核心问题。…

阅读更多 →
ARM Cortex-M 处理器双堆栈(MSP 与 PSP)物理隔离与硬件自动切换时序实战 2026/9/27 8:29:44

ARM Cortex-M 处理器双堆栈(MSP 与 PSP)物理隔离与硬件自动切换时序实战

ARM Cortex-M 处理器双堆栈(MSP 与 PSP)物理隔离与硬件自动切换时序实战在基于 ARM Cortex-M(如 M3/M4/M7/M33)开发商业级实时操作系统(RTOS)或编写高可靠汽车电子固件时,双堆栈指针机制&#x…

阅读更多 →
30天搞定在360网站上怎么做推广速查手册 2026/9/27 8:29:38

30天搞定在360网站上怎么做推广速查手册

30天搞定在360网站上怎么做推广速查手册 域名买好了吗?服务器选对了吗?别急着哭,我知道很多老板卡在这一步,看着后台一脸懵,觉得 域名服务器搞不懂 简直像天书。其实没那么玄乎,我整理了这份 速查手册…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉