Linux 恶意软件扫描器 — 多阶段威胁检测(MD5、SHA-256、HEX、YARA、统计分析),ClamAV 集成,实时 inotify 监控,隔离/清除/恢复操作,以及多渠道告警(电子邮件、Slack、Telegram、Discord)。
(C) 2002-2026, R-fx Networks <[email protected]>
(C) 2026, Ryan MacDonald <[email protected]>
依据 GNU GPL v2 许可
原生扫描引擎提速 43 倍 — 原生扫描流水线已使用批量并行处理完全重写。基于约 10,000 个文件的真实基准测试:
| 版本 | 运行时间 | 文件 | 命中 |
|---|---|---|---|
| v1.6.6 | 1,217s | 9,931 | 35 |
| v2.0.1 | 28s | 9,931 | 35 |
MD5 和 HEX 签名匹配现在使用批量 grep 与 Aho-Corasick 并行工作线程,消除了每次扫描中逐文件模式编译开销和约 500,000 次子进程 fork。可通过 scan_workers 配置并行工作线程数量(默认:auto)。
其他亮点:扫描生命周期管理(--kill、--pause、--stop/--continue、-L)、带有 CPU 硬件自动检测的 SHA-256 哈希扫描(scan_hashtype)、原生 YARA 扫描(scan_yara=1)、Discord webhook 告警、Slack/Telegram 告警修复、原生引擎中的 ClamAV hex 通配符支持,以及整个代码库中的 200 多项错误修复。完整详情请参阅 CHANGELOG。
./install.sh
maldet -a /home/?/public_html
maldet -r /home/?/public_html 2
maldet -co scan_yara=1 -a /home/?/public_html
maldet -q SCANID
maldet -m users
maldet -u
---
## 1. 简介
LMD 的架构、检测阶段与受支持的平台。
Linux Malware Detect(LMD)是一款依据 GNU GPLv2 许可证发布的 Linux 恶意软件扫描器,设计上针对共享托管环境中面临的威胁。它利用网络边缘入侵检测系统的威胁数据,提取攻击中实际使用的恶意软件并生成检测签名。此外,威胁数据还来自用户通过 LMD 的 checkout 功能提交的样本以及恶意软件社区资源。
LMD 专注于传统防病毒产品经常漏报的恶意软件类别:PHP 木马(Shell)、JavaScript 注入器、base64 编码的后门、IRC 机器人,以及其他针对共享托管用户账户而非操作系统内部的 Web 应用层威胁。
**检测阶段**
- MD5 文件哈希匹配,用于精确定位威胁
- 通过带有并行工作进程的原生批量 grep 引擎进行 HEX 模式匹配
- 复合签名(csig)扫描:支持多模式布尔逻辑(AND/OR/阈值)、不区分大小写匹配、宽字符(UTF-16LE)匹配以及有界间隔通配符
- 原生 YARA 规则扫描,支持完整模块和自定义规则
- 统计字符串长度分析,用于检测混淆威胁(base64、gzinflate)
- ClamAV 集成,配合 LMD 维护的 ClamAV 签名提供扩展覆盖
**扫描与监控**
- 扫描所有文件、最近修改的文件或列表中的文件
- 通过内核 inotify 实现实时文件监控(创建/修改/移动事件)
- 通过 ModSecurity2 `inspectFile` 钩子对 HTTP 上传进行扫描
- 后台扫描,适用于无人值守的大规模操作
- 每次扫描可使用包含/排除正则表达式过滤
**隔离与响应**
- 隔离队列,以零权限方式存储文件
- 按扫描 ID 批量隔离/恢复
- 针对特定签名的清理规则,用于移除恶意软件
- 完整文件恢复(内容、属主、权限、mtime)
**告警与报告**
- HTML + 文本电子邮件告警,采用统一的 rfxn 设计(青色品牌、卡片条目)
- SMTP 中继支持(TLS/SSL),适用于没有本地 MTA 的环境
- Slack Block Kit、Telegram MarkdownV2、Discord embed 的逐条目告警
- 可通过 `alert/custom.d/` 覆盖自定义告警模板
- 扫描报告包含每个文件的命中详情,并按命中类型彩色标识
**基础设施**
- 自动链接 ClamAV 签名,实现双引擎覆盖
- 每日 cron 作业,自动检测 12 种以上托管控制面板
- CPU/IO 资源控制(nice、ionice、cpulimit)
- 签名与版本自动更新
- 支持 systemd 服务单元和 SysV init 脚本
### 受支持的平台
LMD 可在任何装有 bash 和标准 GNU 工具的 Linux 发行版上运行。已测试的平台:
| 平台 | 初始化系统 | 包配置路径 |
|----------|-------------|---------------------|
| RHEL / Rocky / AlmaLinux 8, 9, 10 | systemd | `/etc/sysconfig/maldet` |
| CentOS 6, 7 | SysV / systemd | `/etc/sysconfig/maldet` |
| Debian 10, 11, 12 | systemd | `/etc/default/maldet` |
| Ubuntu 20.04, 22.04, 24.04 | systemd | `/etc/default/maldet` |
| Gentoo | OpenRC | — |
| Slackware | SysV | — |
| FreeBSD | — | — (部分支持;不支持 inotify) |
---
## 2. 安装
在系统上安装、升级和移除 LMD。
附带的 `install.sh` 脚本处理所有安装任务。之前的安装会被自动备份。```bash
./install.sh
安装程序:
/usr/local/maldetect/usr/local/sbin/ 中创建 maldet 符号链接/etc/cron.daily/maldetconf.maldet)、自定义签名和忽略文件先前的安装会保存到 /usr/local/maldetect.bk{PID},并通过 maldetect.last 符号链接指向最近的备份。
默认路径:
/usr/local/maldetect/usr/local/sbin/maldet/etc/cron.daily/maldet/usr/lib/systemd/system/maldet.service所有面向用户的设置及其默认值。完整参考请参阅 man maldet(1)。
主配置文件为 /usr/local/maldetect/conf.maldet。所有选项均附有注释,便于配置。除非另有说明,选项使用 0/1 表示禁用/启用。
也可以使用 -co 标志在运行时覆盖配置:```bash
maldet -co quarantine_hits=1,email_addr=[email protected] -a /home
### 3.1 通用选项
| 变量 | 用途 | 默认值 |
|----------|---------|---------|
| `autoupdate_signatures` | 通过 cron 每日自动更新签名 | `1` |
| `autoupdate_version` | 通过 cron 每日自动更新 LMD 版本 | `1` |
| `autoupdate_version_hashed` | 对照上游校验 LMD 可执行文件的 SHA-256 哈希(若不可用则回退到 MD5) | `1` |
| `sigup_interval` | 通过独立 cron 任务(`/etc/cron.d/maldet-sigup`)进行自动签名更新检查的间隔小时数;0 = 禁用 | `6` |
| `cron_prune_days` | 隔离区/会话/临时数据的保留天数 | `21` |
| `cron_daily_scan` | 通过 cron 启用每日自动扫描 | `1` |
| `scan_days` | 每日 cron 扫描中回溯查找已修改文件的天数 | `1` |
| `import_config_url` | 下载远程配置覆盖项的 URL | — |
| `import_config_expire` | 导入配置的缓存过期时间(秒) | `43200` |
| `sig_import_md5_url` | 下载自定义 MD5 签名的 URL | — |
| `sig_import_hex_url` | 下载自定义 HEX 签名的 URL | — |
| `sig_import_yara_url` | 下载自定义 YARA 规则的 URL | — |
| `sig_import_sha256_url` | 下载自定义 SHA-256 签名的 URL | — |
| `sig_import_csig_url` | 下载自定义复合签名的 URL | — |
| `session_legacy_compat` | 在生成 TSV 会话文件的同时生成旧版纯文本会话文件:`auto`(检测旧格式会话)、`1`(始终生成)、`0`(仅 TSV) | `auto` |
### 3.2 告警