后端运维【免费下载链接】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),仅供参考
企业数字化 ERP 产品动态
相关推荐
miniconda下载安装及使用教程 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 7:43:44
OfficeCLI 完整指南:AI 文档处理,3 条命令产出可交付的 PPT、Excel 与 Word OfficeCLI 完整指南:AI 文档处理,3 条命令产出可交付的 PPT、Excel 与 Word 【免费下载链接】OfficeCLI OfficeCLI is the first and best Office suite purpose-built for AI agents to read, edit, and automate Word, Excel, and PowerPoint files. F… · 2026/9/27 7:43:44
重复消息、丢失通知怎么解决?幂等、Outbox 与 Inbox 实战 重复消息、丢失通知怎么解决?幂等、Outbox 与 Inbox 实战 《企业级 Workflow 实战:从审批流到 AI Agent》第 06 篇 项目:AcmeFlow,星河设备客户维保服务开通中心 本篇交付:四个故障窗口的可运行实验、Outbox/Inbox 数据… · 2026/9/27 7:43:25
基于自适应语义路由(Semantic Routing)的知识库多路混合召回实战 基于自适应语义路由(Semantic Routing)的知识库多路混合召回实战在企业级大型 RAG(检索增强生成)知识库架构中,企业通常维护着数十个物理隔离、数据形态各异的垂直专业知识库(如:API 技术文档库… · 2026/9/27 8:23:34
NoneBot2 跨插件访问与依赖声明:深入理解 require 机制与插件加载时序 后端即时通讯 【免费下载链接】nonebot2 跨平台 Python 异步聊天机器人框架 / Asynchronous multi-platform chatbot framework written in Python 项目地址: https://gitcode.com/gh_mirrors/no/nonebot2 点击查看 免费下载 跨插件调用是 NoneBot2 插件化架构中的… · 2026/9/27 8:23:34
3天搞定域名迁移:此网站域名三天更换完整流程 3天搞定域名迁移:此网站域名三天更换完整流程 域名服务器搞不懂?别慌。很多站长以为换域名就是改个地址,结果DNS解析卡住、SSL证书报错、后台链接404,折腾三天还没上线。其实,只要理清DNS解析、服务器配置和搜索权重的传递逻辑,… · 2026/9/27 8:23:28
创业决策模型升级:建立基于风险收益矩阵的双轨决策评估机制 创业决策模型升级:建立基于风险收益矩阵的双轨决策评估机制技术人转型创业,最容易踩的两个极端陷阱:
过度工程师思维:试图通过搜集无限的数据、搭建极其复杂的 Excel 模型,把一个充满外部不确定性的商业问题算出一个“… · 2026/9/27 8:23:22
SocratiCode全本地部署指南:零云端、零API Key的隐私优先企业级代码搜索 SocratiCode全本地部署指南:零云端、零API Key的隐私优先企业级代码搜索 【免费下载链接】SocratiCode Enterprise-grade (40m LOC) codebase intelligence, zero-setup, local & private Plugin/Skill/Extension or MCP: hybrid semantic search, polyglot dep… · 2026/9/27 8:23:22
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01