
पांच डिटेक्शन चरणों (MD5, HEX पैटर्न, YARA, ClamAV, सांख्यिकीय), रीयल-टाइम inotify मॉनिटरिंग, क्वारंटाइन और मल्टी-चैनल अलर्टिंग के साथ मल्टी-इंजन लिनक्स मैलवेयर स्कैनर
लिनक्स के लिए मैलवेयर स्कैनर — बहु-चरणीय खतरे की पहचान (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 के तहत लाइसेंस प्राप्त
43x तेज़ नेटिव स्कैन इंजन — नेटिव स्कैनिंग पाइपलाइन को बैच समानांतर प्रोसेसिंग के साथ पूरी तरह से फिर से लिखा गया है। ~10,000 फ़ाइलों पर वास्तविक दुनिया का बेंचमार्क:
| Version | Runtime | Files | Hits |
|---|---|---|---|
| v1.6.6 | 1,217s | 9,931 | 35 |
| v2.0.1 | 28s | 9,931 | 35 |
MD5 और HEX सिग्नेचर मिलान अब Aho-Corasick समांतर वर्कर्स के साथ बैच grep का उपयोग करता है,
जिससे प्रति-फ़ाइल पैटर्न संकलन ओवरहेड और प्रति स्कैन ~500,000 सबप्रोसेस फोर्क्स समाप्त हो जाते हैं।
scan_workers (डिफ़ॉल्ट: auto) के साथ समांतर वर्कर संख्या कॉन्फ़िगर करें।
अन्य मुख्य बातें: स्कैन लाइफसाइकिल प्रबंधन (--kill, --pause, --stop/--continue,
-L), CPU हार्डवेयर स्वतः-पहचान के साथ SHA-256 हैश स्कैनिंग (scan_hashtype),
नेटिव YARA स्कैनिंग (scan_yara=1), Discord वेबहुक अलर्टिंग, Slack/Telegram अलर्टिंग
सुधार, नेटिव इंजन में ClamAV हेक्स वाइल्डकार्ड समर्थन, और कोडबेस में 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) Linux के लिए एक मैलवेयर स्कैनर है जो GNU GPLv2 लाइसेंस के तहत जारी किया गया है, और इसे साझा होस्टिंग वातावरण में सामने आने वाले खतरों को ध्यान में रखकर डिज़ाइन किया गया है। यह नेटवर्क एज इंट्रूज़न डिटेक्शन सिस्टम से खतरे का डेटा उपयोग करता है ताकि उन मैलवेयर को निकाला जा सके जो वास्तव में हमलों में सक्रिय रूप से उपयोग हो रहे हैं, और पहचान के लिए सिग्नेचर उत्पन्न करता है। इसके अलावा, खतरे का डेटा LMD चेकआउट सुविधा के साथ उपयोगकर्ता सबमिशन और मैलवेयर समुदाय संसाधनों से प्राप्त होता है।
LMD उन मैलवेयर वर्गों पर केंद्रित है जिन्हें पारंपरिक AV उत्पाद अक्सर नहीं पकड़ पाते: PHP शेल, JavaScript इंजेक्टर, base64-एन्कोडेड बैकडोर, IRC बॉट, और अन्य वेब-एप्लिकेशन-लेयर खतरे जो ऑपरेटिंग सिस्टम के आंतरिक भागों के बजाय साझा होस्टिंग उपयोगकर्ता खातों को लक्षित करते हैं।
**पहचान चरण**
- सटीक खतरे की पहचान के लिए MD5 फ़ाइल हैश मिलान
- समानांतर वर्कर्स के साथ नेटिव बैच grep इंजन के माध्यम से HEX पैटर्न मिलान
- मल्टी-पैटर्न बूलियन लॉजिक (AND/OR/threshold), केस-इन्सेंसिटिव मिलान, वाइड (UTF-16LE) मिलान और बाउंडेड गैप वाइल्डकार्ड के साथ कंपाउंड सिग्नेचर (csig) स्कैनिंग
- पूर्ण मॉड्यूल समर्थन और कस्टम नियमों के साथ नेटिव YARA नियम स्कैनिंग
- अस्पष्ट (obfuscated) खतरों (base64, gzinflate) का पता लगाने के लिए सांख्यिकीय स्ट्रिंग-लंबाई विश्लेषण
- LMD-अनुरक्षित ClamAV सिग्नेचर के साथ विस्तारित कवरेज के लिए ClamAV एकीकरण
**स्कैनिंग और निगरानी**
- सभी फ़ाइलें, हाल ही में संशोधित फ़ाइलें, या सूची से फ़ाइलें स्कैन करें
- कर्नेल inotify रीयल-टाइम फ़ाइल निगरानी (create/modify/move इवेंट)
- ModSecurity2 `inspectFile` हुक के माध्यम से HTTP अपलोड स्कैनिंग
- बिना पर्यवेक्षण के बड़े पैमाने पर संचालन के लिए बैकग्राउंड स्कैनिंग
- प्रति-स्कैन include/exclude regex फ़िल्टरिंग
**क्वारंटीन और प्रतिक्रिया**
- शून्य-अनुमति फ़ाइल भंडारण के साथ क्वारंटीन कतार
- स्कैन ID द्वारा बैच क्वारंटीन/पुनर्स्थापना
- मैलवेयर हटाने के लिए सिग्नेचर-विशिष्ट क्लीनर नियम
- पूर्ण फ़ाइल पुनर्स्थापना (सामग्री, स्वामी, अनुमतियाँ, mtime)
**अलर्ट और रिपोर्टिंग**
- एकीकृत rfxn डिज़ाइन (teal ब्रांड, कार्ड प्रविष्टियाँ) के साथ HTML + टेक्स्ट ईमेल अलर्ट
- स्थानीय MTA के बिना वातावरण के लिए SMTP रिले समर्थन (TLS/SSL)
- Slack Block Kit, Telegram MarkdownV2, Discord embed प्रति-प्रविष्टि अलर्ट
- `alert/custom.d/` ओवरराइड के माध्यम से अनुकूलन योग्य अलर्ट टेम्पलेट
- प्रति-फ़ाइल हिट विवरण, रंग-कोडित हिट प्रकारों के साथ स्कैन रिपोर्ट
**इंफ्रास्ट्रक्चर**
- दोहरे-इंजन कवरेज के लिए स्वचालित ClamAV सिग्नेचर लिंकिंग
- 12+ होस्टिंग कंट्रोल पैनल की स्व-पहचान के साथ दैनिक cron
- CPU/IO संसाधन नियंत्रण (nice, ionice, cpulimit)
- सिग्नेचर और संस्करण स्वचालित अपडेट
- systemd सर्विस यूनिट और SysV init स्क्रिप्ट समर्थन
### समर्थित प्लेटफ़ॉर्म
LMD किसी भी Linux वितरण पर bash और मानक GNU उपयोगिताओं के साथ चलता है। परीक्षण किए गए प्लेटफ़ॉर्म:
| प्लेटफ़ॉर्म | इनिट सिस्टम | पैकेज कॉन्फ़िग पथ |
|----------|-------------|---------------------|
| 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
The installer:
/usr/local/maldetect में फ़ाइलें कॉपी करता है/usr/local/sbin/ में maldet सिमलिंक बनाता है/etc/cron.daily/maldet पर cron.daily स्क्रिप्ट इंस्टॉल करता हैconf.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 सामान्य विकल्प
| Variable | उद्देश्य | डिफ़ॉल्ट |
|----------|---------|---------|
| `autoupdate_signatures` | क्रोन के माध्यम से प्रतिदिन सिग्नेचर स्वतः अपडेट करें | `1` |
| `autoupdate_version` | क्रोन के माध्यम से प्रतिदिन LMD संस्करण स्वतः अपडेट करें | `1` |
| `autoupdate_version_hashed` | LMD निष्पादनयोग्य SHA-256 हैश को अपस्ट्रीम से सत्यापित करें (विफल होने पर MD5 पर वापस) | `1` |
| `sigup_interval` | स्वतंत्र क्रोन जॉब (`/etc/cron.d/maldet-sigup`) के माध्यम से स्वचालित सिग्नेचर अपडेट जाँचों के बीच घंटे; 0 = अक्षम | `6` |
| `cron_prune_days` | क्वारंटीन/सत्र/अस्थायी डेटा बनाए रखने के दिन | `21` |
| `cron_daily_scan` | क्रोन के माध्यम से दैनिक स्वचालित स्कैनिंग सक्षम करें | `1` |
| `scan_days` | दैनिक क्रोन स्कैन में संशोधित फ़ाइलों के लिए पीछे देखने के दिन | `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 अलर्टिंग
| Variable | उद्देश्य | डिफ़ॉल्ट |
|----------|---------|---------|
| `email_alert` | स्कैन के बाद ईमेल अलर्ट सक्षम करें | `0` |
| `email_addr` | अलर्ट प्राप्तकर्ता का पता | `[email protected]` |
| `email_subj` | ईमेल विषय पंक्ति टेम्पलेट | `maldet alert from $(hostname)` |
| `email_ignore_clean` | जब सभी हिट साफ़ कर दिए गए हों तो अलर्ट दबाएँ | `1` |
| `email_panel_user_alerts` | हिट पाए जाने पर पैनल उपयोगकर्ता अलर्ट भेजें | `0` |
| `email_panel_from` | पैनल उपयोगकर्ता अलर्ट के लिए From हेडर | `[email protected]` |
| `email_panel_replyto` | पैनल उपयोगकर्ता अलर्ट के लिए Reply-To हेडर | `[email protected]` |
| `email_panel_alert_subj` | पैनल उपयोगकर्ता अलर्ट के लिए विषय पंक्ति | `maldet alert from $(hostname)` |
| `email_format` | ईमेल प्रारूप: `text`, `html`, या `both` | `html` |
| `smtp_relay` | SMTP रिले URL (जैसे, `smtps://smtp.gmail.com:465`) | — |
| `smtp_from` | SMTP रिले डिलीवरी के लिए प्रेषक पता | — |
| `smtp_user` | SMTP प्रमाणीकरण उपयोगकर्ता नाम | — |
| `smtp_pass` | SMTP प्रमाणीकरण पासवर्ड | — |
| `slack_alert` | Slack फ़ाइल अपलोड अलर्ट सक्षम करें | `0` |
| `slack_subj` | Slack अपलोड के लिए फ़ाइल नाम | `maldet alert from $(hostname)` |
| `slack_token` | Slack Bot API टोकन (स्कोप: `files:write`, `files:read`) | — |
| `slack_channels` | चैनल नामों या IDs की अल्पविराम से अलग की गई सूची | `maldetreports` |
| `telegram_alert` | Telegram अलर्ट सक्षम करें | `0` |
| `telegram_bot_token` | Telegram Bot API टोकन | — |
| `telegram_channel_id` | Telegram चैट या समूह ID | — |
| `discord_alert` | Discord वेबहुक अलर्ट सक्षम करें | `0` |
| `discord_webhook_url` | अलर्ट डिलीवरी के लिए Discord वेबहुक URL | — |
### 3.3 स्कैनिंग विकल्प
| Variable | उद्देश्य | डिफ़ॉल्ट |
|----------|---------|---------|
| `scan_hashtype` | चरण 1 के लिए हैश एल्गोरिदम: `auto`, `sha256`, `md5`, `both` | `auto` |
| `scan_max_depth` | find के लिए अधिकतम निर्देशिका गहराई | `15` |
| `scan_min_filesize` | स्कैन करने के लिए न्यूनतम फ़ाइल आकार | `24` bytes |
| `scan_max_filesize` | स्कैन करने के लिए अधिकतम फ़ाइल आकार | `2048k` |
| `scan_hexdepth` | HEX सिग्नेचर मिलान के लिए बाइट गहराई | `262144` |
| `scan_hex_chunk_size` | HEX+CSIG स्कैनिंग में प्रति माइक्रो-बैच फ़ाइलें (सीमा: 1024-20480) | `10240` |
| `scan_csig` | कंपाउंड सिग्नेचर (csig) स्कैनिंग सक्षम करें (केवल नेटिव मोड में) | `1` |
| `scan_workers` | MD5, SHA-256, HEX, और CSIG स्कैन पास के लिए समानांतर वर्कर | `auto` |
| `scan_cpunice` | स्कैन प्रक्रिया के लिए nice प्राथमिकता (-19 से 19) | `19` |
| `scan_ionice` | IO शेड्यूलिंग क्लास प्राथमिकता (0-7) | `6` |
| `scan_cpulimit` | हार्ड CPU सीमा प्रतिशत (0=अक्षम) | `0` |
| `scan_ignore_root` | स्कैन में root-स्वामित्व वाली फ़ाइलें छोड़ें (मॉनिटर मोड में डिफ़ॉल्ट रूप से लागू नहीं; `monitor_scan_owner_filters` देखें) | `1` |
| `scan_ignore_user` | विशिष्ट उपयोगकर्ताओं के स्वामित्व वाली फ़ाइलें छोड़ें | — |
| `scan_ignore_group` | विशिष्ट समूहों के स्वामित्व वाली फ़ाइलें छोड़ें | — |
| `scan_user_access` | गैर-root उपयोगकर्ताओं को स्कैन चलाने की अनुमति दें | `0` |
| `scan_user_access_minuid` | --mkpubpaths उपयोगकर्ता निर्देशिका निर्माण के लिए न्यूनतम UID | `100` |
| `scan_find_timeout` | find फ़ाइल सूची निर्माण के लिए टाइमआउट (0=अक्षम, न्यूनतम 60s, 14400=4hr अनुशंसित) | `0` |
| `scan_export_filelist` | find परिणाम tmp/find_results.last में सहेजें | `0` |
| `scan_tmpdir_paths` | -a/-r स्कैन में शामिल विश्व-लेखन योग्य अस्थायी पथ | `/tmp /var/tmp /dev/shm /var/fcgi_ipc` |
| `string_length_scan` | सांख्यिकीय स्ट्रिंग-लंबाई विश्लेषण सक्षम करें | `0` |
| `string_length` | न्यूनतम संदिग्ध स्ट्रिंग लंबाई | `150000` |
| `scan_progress_log_interval` | पृष्ठभूमि स्कैन के दौरान प्रगति लॉग चेकपॉइंट्स के बीच सेकंड (0=अक्षम) | `60` |
| `scan_meta_cleanup_age` | पूर्ण/समाप्त स्कैन मेटा फ़ाइलों को बनाए रखने के घंटे (0=अक्षम) | `48` |
| `maint_compress_age` | पूर्ण सत्र फ़ाइलों को gzip करने से पहले के दिन (0=अक्षम) | `30` |
| `maint_archive_age` | संपीड़ित सत्रों को मासिक संग्रह में बंडल करने से पहले के दिन (0=अक्षम) | `90` |
### 3.4 YARA स्कैनिंग
नेटिव YARA स्कैनिंग ClamAV से स्वतंत्र रूप से `yara` बाइनरी (या YARA-X से `yr`) को आमंत्रित करती है, जो पूर्ण YARA मॉड्यूल, संकलित नियमों, और कस्टम नियम फ़ाइलों का समर्थन करती है, जिन्हें ClamAV का सीमित YARA उपसमुच्चय संभाल नहीं सकता। जब दोनों उपलब्ध हों, तो `yr` (YARA-X) को प्राथमिकता दी जाती है। जब `auto` पर सेट किया जाता है, तो नेटिव YARA केवल तभी सक्षम होता है जब ClamAV अनुपलब्ध हो और yara/yr बाइनरी पाई जाए, जिससे डुप्लिकेट नियम मूल्यांकन रुकता है।
| Variable | उद्देश्य | डिफ़ॉल्ट |
|----------|---------|---------|
| `scan_yara` | नेटिव YARA स्कैन चरण सक्षम करें: `auto` (बाइनरी का पता लगाएँ, ClamAV फ़ॉलबैक), `0` (अक्षम), `1` (सक्षम) | `auto` |
| `scan_yara_timeout` | सेकंड में टाइमआउट (0=कोई टाइमआउट नहीं) | `300` |
| `scan_yara_scope` | जब ClamAV भी सक्रिय हो तो नियम दायरा: `all` (पूर्ण नेटिव स्कैन) या `custom` (केवल कस्टम नियम नेटिव रूप से, ClamAV rfxn.yara संभालता है) | `custom` |
| `sig_import_yara_url` | सिग्नेचर अपडेट पर कस्टम YARA नियम डाउनलोड करने के लिए URL | — |
**कस्टम YARA नियम** दो स्थानों पर रखे जा सकते हैं, दोनों अपग्रेड के दौरान संरक्षित रहते हैं:
- `sigs/custom.yara` — एकल-फ़ाइल नियम
- `sigs/custom.yara.d/` — `.yar` और `.yara` नियम फ़ाइलों के लिए ड्रॉप-इन निर्देशिका
[YARA Forge](https://yarahq.github.io/) और [Signature Base](https://github.com/Neo23x0/signature-base) जैसे तृतीय-पक्ष नियम सेटों के साथ संगत। संकलित नियम (`yarac` आउटपुट) भी `sigs/compiled.yarc` के माध्यम से समर्थित हैं।
**बैच स्कैनिंग:** YARA 4.0+ और सभी YARA-X संस्करण कुशल बैच फ़ाइल स्कैनिंग के लिए `--scan-list` का उपयोग करते हैं। पुराने YARA संस्करण स्वचालित रूप से प्रति-फ़ाइल स्कैनिंग पर वापस चले जाते हैं।
बिना कॉन्फ़िग संपादित किए रनटाइम पर सक्षम करें:```bash
maldet -co scan_yara=1 -a /home/?/public_html
स्कैन पूर्ण होने के बाद एक कॉन्फ़िगर करने योग्य हुक स्क्रिप्ट चलाई जा सकती है, जो स्थितीय तर्कों, LMD_* पर्यावरण चरों और वैकल्पिक रूप से stdin पर JSON के माध्यम से स्कैन परिणाम प्राप्त करती है। हुक स्कैनिंग को कभी नहीं तोड़ता — विफलताएँ लॉग की जाती हैं, घातक नहीं होतीं। पूर्ण हुक अनुबंध के लिए maldet(1) देखें।
जब ClamAV स्कैनिंग सक्षम होती है (scan_clamscan=1 या पहचाने गए बाइनरी के साथ auto), LMD प्राथमिकता क्रम में सर्वश्रेष्ठ उपलब्ध ClamAV इंजन चुनता है:
clamdscan (यदि scan_clamd_remote=1 और कॉन्फ़िग मौजूद है)clamd डेमनclamd डेमन (--fdpass के साथ)clamscan बाइनरी (फ़ॉलबैक, धीमा)LMD सिग्नेचर install.sh द्वारा स्वचालित रूप से ClamAV डेटा निर्देशिकाओं में सिमलिंक किए जाते हैं, जिससे ClamAV को LMD के MD5 (rfxn.hdb), HEX (rfxn.ndb) और YARA (rfxn.yara) सिग्नेचर तक पहुँच मिलती है।
सिग्नेचर वैलिडेशन गेट: अद्यतन सिग्नेचर को ClamAV डेटा निर्देशिकाओं में तैनात करने से पहले, LMD उन्हें स्टेजिंग निर्देशिका के विरुद्ध clamscan -d के माध्यम से मान्य करता है। यदि वैलिडेशन विफल होता है, तो दोषपूर्ण डेटाबेस को ClamAV को तोड़ने से रोकने के लिए मौजूदा LMD सिग्नेचर ClamAV पथ से हटा दिए जाते हैं। clamd को SIGUSR2 रीलोड सिग्नल केवल तभी भेजा जाता है जब कम से कम एक ClamAV डेटा निर्देशिका वैलिडेशन पास करती है (issue #467)।
| चर | उद्देश्य | डिफ़ॉल्ट |
|---|---|---|
scan_clamscan | ClamAV को स्कैन इंजन के रूप में सक्षम करें: auto (रनटाइम पर बाइनरी पहचानें), 0 (अक्षम), 1 (सक्षम) | auto |
बाद के स्रोत पहले के मानों को ओवरराइड करते हैं:
internals/internals.conf — आंतरिक पथ, बाइनरी खोज, URL परिभाषाएँconf.maldet — उपयोगकर्ता-उन्मुख कॉन्फ़िगरेशनinternals/compat.conf — अप्रचलित चर मैपिंग/etc/sysconfig/maldet या /etc/default/maldet — सिस्टम ओवरराइड-co|--config-option — रनटाइम ओवरराइडकमांड-लाइन इंटरफ़ेस, एग्ज़िट कोड और सामान्य उदाहरण। पूर्ण विकल्प संदर्भ के लिए man maldet(1) देखें।```
usage: maldet [OPTION] [ARGUMENT]
SCANNING: -a, --scan-all PATH scan all files in path (wildcard: ?) -r, --scan-recent PATH DAYS scan files created/modified in last X days -f, --file-list FILE scan files from a line-separated file list -b, --background run scan in the background
SCAN FILTERS: -i, --include-regex REGEX include only matching paths -x, --exclude-regex REGEX exclude matching paths -co, --config-option V=V,... override config options at runtime -U, --user USER run as specified user
MONITORING: -m, --monitor USERS|PATHS|FILE|RELOAD start inotify monitoring -k, --kill-monitor stop inotify monitoring
SCAN MANAGEMENT: -L, --list-active list active scans (text/json/tsv) --kill SCANID abort a running scan --pause SCANID [DURATION] pause a running scan (e.g., 2h, 30m) --unpause SCANID resume a paused scan --stop SCANID checkpoint and stop a running scan --continue SCANID resume a stopped scan from checkpoint --maintenance rotate histories, compress/archive old sessions
QUARANTINE & RESTORE: -q, --quarantine SCANID quarantine hits from scan -n, --clean SCANID clean malware from scan hits -s, --restore FILE|SCANID restore quarantined file(s) -qd PATH override quarantine directory for this run
REPORTING: -e, --report [SCANID|list|latest|hooks|active] view scan report --all show full history with -e list (default: recent) --format text|json|html|tsv set report output format (default: text) --mailto ADDRESS email report to address --json-report [SCANID|list] shorthand: --report --format json --alert-daily generate inotify monitor digest alert --digest fire unified digest (monitor + hook sources) -l, --log view event log
UPDATES: -u, --update-sigs [--force] update malware signatures -d, --update-ver [--force|--beta] update LMD version --cron-sigup cron sig update (internal use)
OTHER: -p, --purge clear logs, quarantine, temp data -c, --checkout FILE submit suspected malware to rfxn.com --test-alert TYPE CHANNEL test alert delivery (scan|digest, email|slack|telegram|discord) --mkpubpaths create per-user pub/ data directories --web-proxy IP:PORT set HTTP/HTTPS proxy -hscan, --hook-scan scan via service hook (internal use) -v, --version show version information -h, --help show detailed help
### 4.1 निकास कोड
| कोड | अर्थ |
|------|---------|
| `0` | सफलता, कोई मैलवेयर हिट नहीं |
| `1` | त्रुटि या सभी स्कैन पथ मौजूद नहीं हैं |
| `2` | मैलवेयर हिट मिले |
**उदाहरण:**```bash
# Scan all files under user web roots
maldet -a /home/?/public_html
# Scan recent files with auto-quarantine and YARA enabled
maldet -co quarantine_hits=1,scan_yara=1 -r /home/?/public_html 2
# Background scan with email alert to specific address
maldet -b -co [email protected] -a /var/www
# View the most recent scan report
maldet -e
# Email a specific report
maldet --mailto [email protected] -e 050910-1534.21135
# Output scan report as JSON (pipe to jq for formatting)
maldet --format json -e 050910-1534.21135
# List all reports as JSON
maldet --format json -e list
# Shorthand JSON output (equivalent to --format json -e)
maldet --json-report 050910-1534.21135
# Restore all quarantined files from a scan
maldet -s 050910-1534.21135
JSON आउटपुट: --format json -e या --json-report का उपयोग करके संरचित JSON आउटपुट करें
(v1.2 स्कीमा) जिसमें स्कैनर मेटाडेटा, स्कैन विवरण (पथ, समय, फ़ाइल संख्याएँ), प्रति-हिट
प्रविष्टियाँ जिनमें सिग्नेचर नाम, फ़ाइल पथ, हिट प्रकार, स्वामी, अनुमतियाँ और क्वारंटीन
स्थिति शामिल हो, साथ ही प्रति-प्रकार विवरण के साथ एक सारांश भी। TSV और लीगेसी प्लेनटेक्स्ट
दोनों सत्र समर्थित हैं; लीगेसी सत्रों में "source": "legacy" शामिल होता है और अनुपलब्ध
संवर्धित फ़ील्ड्स (हैश, आकार, स्वामी, आदि) null के रूप में रेंडर होते हैं।
बड़े फ़ाइल सिस्टम (1M+ फ़ाइलें) पर लंबे समय से चलने वाले स्कैन को kill -9 के बिना नियंत्रित किया जा सकता है:```bash
maldet -L
maldet --format json -L
maldet --kill 260327-1509.25279
maldet --pause 260327-1509.25279 2h
maldet --unpause 260327-1509.25279
maldet --stop 260327-1509.25279
maldet --continue 260327-1509.25279
maldet --maintenance
**चेकपॉइंट पुनः आरंभ:** `--stop` स्कैन चरण, हिट गिनती, कॉन्फ़िग विकल्प और प्रति-वर्कर प्रगति दर्ज करने वाली एक चेकपॉइंट फ़ाइल लिखता है। `--continue` चेकपॉइंट को मान्य करता है, यदि हस्ताक्षर बदले गए हों तो चेतावनी देता है, वर्तमान फ़ाइलसिस्टम स्थिति से फ़ाइल सूची पुनर्निर्मित करता है, पिछले हिट्स को पुनर्स्थापित करता है, और बाधित चरण से स्कैनिंग पुनः आरंभ करता है। HEX कार्यकर्ता चंक ग्रैन्युलैरिटी पर पुनः आरंभ होते हैं (प्रति कार्यकर्ता ~30 सेकंड का कार्य नष्ट हो जाता है)।
**इंजन समर्थन:** नेटिव इंजन (HEX/CSIG/हैश कार्यकर्ता) और स्टैंडअलोन `clamscan` सभी जीवनचक्र संचालन का समर्थन करते हैं। डेमॉन-आधारित ClamAV (`clamdscan`/`clamd`) केवल `--kill` का समर्थन करता है — `--pause` और `--stop` को एक त्रुटि संदेश के साथ अस्वीकार कर दिया जाता है क्योंकि डेमॉन I/O स्थिति अपारदर्शी है और अन्य क्लाइंटों के साथ साझा होती है।
---
## 5. उपेक्षा विकल्प
चार उपेक्षा फ़ाइलें नियंत्रित करती हैं कि स्कैनिंग से क्या बाहर रखा जाए:
| फ़ाइल | प्रारूप | उद्देश्य |
|------|--------|---------|
| `ignore_paths` | पंक्ति-पृथक पथ | स्कैन से निर्देशिकाओं या फ़ाइलों को बाहर करें |
| `ignore_file_ext` | पंक्ति-पृथक एक्सटेंशन | फ़ाइल एक्सटेंशन बाहर करें (`.js`, `.css`) |
| `ignore_sigs` | पंक्ति-पृथक पैटर्न | मेल खाने वाले हस्ताक्षरों को छोड़ें (regex, सबस्ट्रिंग मिलान) |
| `ignore_inotify` | पंक्ति-पृथक शाब्दिक पथ | inotify निगरानी ईवेंट्स बाहर करें |
सभी उपेक्षा फ़ाइलें `/usr/local/maldetect/` के अंतर्गत स्थित हैं।
**उदाहरण:**```
# ignore_paths
/home/user/public_html/cgi-bin
# ignore_file_ext
.js
.css
# ignore_sigs
base64.inject.unclassed
# ignore_inotify (user-owned — your additions only)
/home/user/public_html/cache/
backup-
# ignore_inotify.defaults (LMD-managed — refreshed on every upgrade)
# Ships under /usr/local/maldetect/internals/ with curated defaults
# for systemd-private tmpdirs, MariaDB temp tables, Redis, ClamAV, etc.
# Do NOT edit — add your own entries to ignore_inotify instead.
नोट: ignore_sigs प्रविष्टियों को विस्तारित regex पैटर्न के रूप में माना जाता है और ये उपस्ट्रिंग के रूप में मेल खाती हैं। एक प्रविष्टि php.shell php.shell, php.shell.v2, {YARA}php.shell.backdoor, आदि को दबा देगी। सटीक मिलान के लिए ^php\.shell$ का उपयोग करें। . वर्ण regex में किसी भी वर्ण से मेल खाता है; शाब्दिक डॉट के लिए इसे \. के रूप में एस्केप करें।
स्वचालित दैनिक स्कैनिंग, डेटा प्रूनिंग और सिग्नेचर अपडेट।
/etc/cron.daily/maldet पर स्थापित क्रॉन जॉब तीन कार्य करता है:
cron_prune_days (डिफ़ॉल्ट: 21) से पुराना है।autoupdate_signatures और autoupdate_version सक्षम हों)scan_days दिनों के भीतर, डिफ़ॉल्ट: 1)दैनिक स्कैन स्थापित नियंत्रण पैनलों का स्वतः पता लगाता है और तदनुसार स्कैन पथों को समायोजित करता है:
यदि मॉनिटर मोड सक्रिय है, तो दैनिक स्कैन छोड़ दिए जाते हैं और इसके बजाय मॉनिटरिंग घटनाओं की एक दैनिक रिपोर्ट जारी की जाती है।
कस्टम स्कैन पथों के लिए, हुक फ़ाइल /usr/local/maldetect/cron/custom.cron का उपयोग करें। क्रॉन के लिए विशिष्ट कॉन्फ़िगरेशन ओवरराइड के लिए, /etc/sysconfig/maldet (RHEL) या /etc/default/maldet (Debian) या /usr/local/maldetect/cron/conf.maldet.cron का उपयोग करें।
एक साप्ताहिक वॉचडॉग स्क्रिप्ट (/etc/cron.weekly/maldet-watchdog) प्राथमिक क्रॉन के टूटने या पुराना होने पर स्वतंत्र फ़ॉलबैक सिग्नेचर अपडेट प्रदान करती है।
कर्नेल inotify, डाइजेस्ट अलर्ट और सुपरवाइज़र प्रबंधन के साथ रीयल-टाइम फ़ाइल मॉनिटरिंग।
रीयल-टाइम फ़ाइल मॉनिटरिंग फ़ाइल निर्माण, संशोधन और स्थानांतरण घटनाओं का पता लगाने के लिए कर्नेल inotify सबसिस्टम का उपयोग करती है। इसके लिए CONFIG_INOTIFY_USER वाले कर्नेल की आवश्यकता होती है (सभी आधुनिक कर्नेल पर मानक)।```bash
maldet -m users
maldet -b -m users
maldet -m /home/mike,/home/ashton
maldet -m /root/monitor_paths
maldet -k
**यह कैसे काम करता है:**
`maldet -m` डिफ़ॉल्ट रूप से फोरग्राउंड में एक सुपरवाइज़र प्रक्रिया चलाता है। सुपरवाइज़र एक `inotifywait` चाइल्ड को प्रबंधित करता है और क्रैश रिकवरी, कॉन्फ़िगरेशन रीलोड और डाइजेस्ट अलर्टिंग को संभालता है। सुपरवाइज़र को डेमॉनाइज़ करने और तुरंत वापस लौटने के लिए `-b` का उपयोग करें।
1. `monitor_init()` मॉनिटर किए गए पथों के अंतर्गत सभी फ़ाइलों पर inotify वॉच सेट करता है
2. फ़ाइल इवेंट्स को क्यू किया जाता है और हर `inotify_sleep` सेकंड में बैच-स्कैन किया जाता है (डिफ़ॉल्ट: 15)
3. कॉन्फ़िगरेशन हर `inotify_reloadtime` सेकंड में रीलोड किया जाता है (डिफ़ॉल्ट: 3600)
4. इष्टतम प्रदर्शन के लिए कर्नेल `max_user_watches` और `max_user_instances` को स्वतः-ट्यून किया जाता है
5. यदि `inotifywait` क्रैश होता है, तो सुपरवाइज़र इसे एक्सपोनेंशियल बैकऑफ़ (2, 4, 8, 16, 32 सेकंड) के साथ पुनः आरंभ करता है; लगातार 3 विफलताओं के बाद सुपरवाइज़र बाहर निकल जाता है
**डाइजेस्ट अलर्ट** `digest_interval` द्वारा निर्धारित अंतराल पर समय-समय पर भेजे जाते हैं (डिफ़ॉल्ट: `24h`)। यदि पिछले डाइजेस्ट के बाद से हिट गिनती `digest_escalate_hits` से अधिक हो जाती है, तो एक तत्काल एस्केलेशन अलर्ट भेजा जाता है (डिफ़ॉल्ट: `0`, अक्षम)।
**अतिरिक्त पथ:** `conf.maldet` को संपादित किए बिना अतिरिक्त पथ देखने के लिए, उन्हें `monitor_paths_extra` द्वारा संदर्भित फ़ाइल में एक प्रति पंक्ति जोड़ें (डिफ़ॉल्ट: `/usr/local/maldetect/monitor_paths.extra`)। प्रत्येक कॉन्फ़िग रीलोड पर इन्हें प्राथमिक वॉच सूची के साथ विलय कर दिया जाता है।
`users` मोड का उपयोग करते समय, केवल `inotify_docroot` (डिफ़ॉल्ट: `public_html,public_ftp`) से मेल खाने वाली उपनिर्देशिकाएँ, साथ ही सिस्टम अस्थायी निर्देशिकाएँ `/tmp`, `/var/tmp`, और `/dev/shm` मॉनिटर की जाती हैं।
**इग्नोर फ़ाइलें (inotify):** मॉनिटर बहिष्करण दो फ़ाइलों को संयोजित करते हैं — उपयोगकर्ता-स्वामित्व वाली `/usr/local/maldetect/ignore_inotify` और LMD-प्रबंधित `/usr/local/maldetect/internals/ignore_inotify.defaults`। दोनों लाइन-विभाजित हैं और `#` टिप्पणियाँ + खाली पंक्तियों का समर्थन करते हैं। उपयोगकर्ता-स्वामित्व वाली `ignore_inotify` डिफ़ॉल्ट रूप से POSIX ERE (विस्तारित रेगेक्स) स्वीकार करती है — एंकर (`^`, `$`) और वाइल्डकार्ड (`.*`, `.+`) काम करते हैं। रेगेक्स मेटाकैरेक्टर वाले शाब्दिक पथ को बाहर करने के लिए, प्रविष्टि को `literal:` से उपसर्गित करें (जैसे `literal:/tmp/app.cache`)। LMD-प्रबंधित `ignore_inotify.defaults` को शाब्दिक सबस्ट्रिंग के रूप में माना जाता है — इसकी क्यूरेटेड प्रविष्टियाँ लोड समय पर स्वतः-एस्केप होती हैं। डिफ़ॉल्ट फ़ाइल हर LMD अपग्रेड पर अधिलेखित हो जाती है; केवल `ignore_inotify` में साइट-विशिष्ट बहिष्करण जोड़ें।
---
## 8. सिग्नेचर सिस्टम
सिग्नेचर प्रकार, नामकरण परंपराएँ, अपडेट और कस्टम नियम फ़ाइलें।
LMD पाँच सिग्नेचर प्रकारों के साथ आता है:
| प्रकार | फ़ाइल | प्रारूप | गिनती |
|------|------|--------|-------|
| MD5 हैश | `sigs/md5v2.dat` | `HASH:SIZE:{MD5}sig.name.N` | ~14,801 |
| SHA-256 हैश | `sigs/sha256v2.dat` | `HASH:SIZE:{SHA256}sig.name.N` | CDN |
| HEX पैटर्न | `sigs/hex.dat` | `HEXSTRING:{HEX}sig.name.N` | ~2,054 |
| कंपाउंड सिग्स | `sigs/csig.dat` | `SUBSIG1\|\|SUBSIG2:signame` | CDN |
| YARA नियम | `sigs/rfxn.yara` | YARA सिंटैक्स | ~783 नियम |
| संकलित YARA | `sigs/compiled.yarc` | `yarac` आउटपुट | वैकल्पिक |
ClamAV-संगत सिग्नेचर भी बनाए रखे जाते हैं:
- `sigs/rfxn.hdb` — ClamAV MD5 प्रारूप
- `sigs/rfxn.ndb` — ClamAV HEX प्रारूप
- `sigs/rfxn.hsb` — ClamAV SHA-256 प्रारूप (ClamAV >= 0.97 आवश्यक)
**सिग्नेचर नामकरण परंपरा:** `{TYPE}category.name.variant_number`
श्रेणियों में शामिल हैं: `bin.` (बाइनरी), `c.` (C भाषा), `exp.` (एक्सप्लॉइट), `php.` (PHP), `js.` (JavaScript), `perl.` (Perl), `html.` (फ़िशिंग), `base64.inject.`, `gzbase64.`
**स्कैन रिपोर्टों में हिट उपसर्ग:**
| उपसर्ग | स्रोत |
|--------|--------|
| `{MD5}` | MD5 हैश मिलान (चरण 1) |
| `{SHA256}` | SHA-256 हैश मिलान (चरण 1) |
| `{HEX}` | HEX पैटर्न मिलान (चरण 2) |
| `{CSIG}` | कंपाउंड सिग्नेचर मिलान (चरण 2.5) |
| `{SA}` | सांख्यिकीय विश्लेषण (स्ट्रिंग लंबाई) |
| `{YARA}` | नेटिव YARA स्कैन (`scan_yara=1`) |
| `{CAV}` | ClamAV इंजन (clamd/clamscan) |
### 8.1 सिग्नेचर अपडेट
सिग्नेचर क्रॉन जॉब के माध्यम से दैनिक या मैन्युअल रूप से अपडेट किए जाते हैं:```bash
maldet -u # update signatures
maldet -u --force # force update even if current
कस्टम सिग्नेचर तीन प्रारूपों में जोड़े जा सकते हैं, ये सभी अपग्रेड के दौरान सुरक्षित रहते हैं:
रिमोट इम्पोर्ट URL को सिग्नेचर अपडेट के दौरान स्वचालित डाउनलोड के लिए कॉन्फ़िगर किया जा सकता है:
मैलवेयर-संक्रमित फ़ाइलों को अलग करना, पुनर्स्थापित करना और साफ करना।
क्वारंटाइन की गई फ़ाइलें /usr/local/maldetect/quarantine/ के अंतर्गत 000 अनुमतियों के साथ संग्रहीत की जाती हैं। मूल पथ, स्वामी, अनुमतियाँ और संशोधन समय पूर्ण पुनर्स्थापना के लिए /usr/local/maldetect/sess/quarantine.hist में दर्ज किए जाते हैं।```bash
maldet -q SCANID
maldet -s SCANID
maldet -s /usr/local/maldetect/quarantine/config.php.23754
maldet -n SCANID
**क्वारंटाइन फ़ाइल नामकरण:** `FILENAME.INODE` (जैसे, `config.php.23754`)
गैर-रूट स्कैन (जैसे, ModSecurity2 अपलोड स्कैनिंग) के लिए, क्वारंटाइन डेटा `/usr/local/maldetect/pub/USERNAME/quar/` के अंतर्गत संग्रहीत किया जाता है। गैर-रूट क्वारंटाइन के साथ इंटरैक्ट करने के लिए `-U` फ़्लैग का उपयोग करें:```bash
maldet -U nobody -s 112012-0032.13771
क्लीनर फ़ंक्शन clean/ निर्देशिका के अंतर्गत सिग्नेचर-नामित स्क्रिप्ट ढूँढता है। प्रत्येक स्क्रिप्ट को संक्रमित फ़ाइल पथ तर्क के रूप में मिलता है और उसे दुर्भावनापूर्ण सामग्री हटानी चाहिए। सफाई के बाद, फ़ाइल को फिर से स्कैन किया जाता है — यदि यह अभी भी हिट ट्रिगर करती है, तो सफाई को FAILED चिह्नित किया जाता है।
सिग्नेचर php.cmdshell.r57 के लिए क्लीन नियम बनाने हेतु, clean/php.cmdshell.r57 नामक फ़ाइल जोड़ें जिसमें उपयुक्त पैटर्न के साथ sed -i जैसा कमांड हो। सफल सफाई फ़ाइल को उसके मूल पथ, स्वामी और अनुमतियों पर पुनर्स्थापित करती है।
क्लीनर क्वारंटाइन का एक उप-कार्य है — सफाई निष्पादित होने के लिए फ़ाइलों को क्वारंटीन किया जाना चाहिए (या -n उपयोग करें)।
ModSecurity, FTP, Exim और कस्टम एकीकरण के लिए सेवा हुक API।
LMD एकीकृत hookscan.sh API के माध्यम से कई सेवाओं के लिए रीयल-टाइम फ़ाइल स्कैनिंग प्रदान करता है। एक ही स्क्रिप्ट ModSecurity, pure-ftpd, ProFTPD, Exim और जेनेरिक (कस्टम) एकीकरणों के लिए मोड डिस्पैच को संभालती है।
हुक स्कैन डिटेक्शन को प्रति-स्कैन सत्र फ़ाइलें बनाने के बजाय एक रोलिंग हिट लॉग (hook.hits.log) में लॉग किया जाता है। डिटेक्शन आवधिक डाइजेस्ट अलर्ट में शामिल होते हैं और maldet --report hooks के माध्यम से देखे जा सकते हैं।
SecRequestBodyAccess On
SecTmpSaveUploadedFiles On # Required for ModSecurity >= 2.9
SecRule FILES_TMPNAMES "@inspectFile /usr/local/maldetect/hookscan.sh"
"id:1999999,phase:2,t:none,deny,log,auditlog,severity:2,
msg:'Malware upload blocked by LMD'"
दुर्भावनापूर्ण अपलोड को deny क्रिया के साथ अस्वीकार कर दिया जाता है और ModSecurity ऑडिट लॉग में लॉग किया जाता है। किसी मोड तर्क की आवश्यकता नहीं है — `hookscan.sh` पिछड़ी संगतता के लिए डिफ़ॉल्ट रूप से ModSecurity मोड का उपयोग करता है। ModSecurity v2 और v3 (libmodsecurity) दोनों समान `popen()` अनुबंध का उपयोग करते हैं।
### 10.2 pure-ftpd```bash
# pure-ftpd.conf (or command-line flags):
CallUploadScript yes
# Start the upload-script daemon:
pure-uploadscript -r /usr/local/maldetect/hookscan.sh -B
इसके लिए --with-uploadscript के साथ संकलित pure-ftpd की आवश्यकता होती है। मोड UPLOAD_VUSER पर्यावरण चर के माध्यम से स्वतः पता चलता है। अपलोड के बाद संक्रमित फ़ाइलें क्वारंटाइन कर दी जाती हैं (फायर-एंड-फ़ॉरगेट — अपलोड को अवरुद्ध नहीं किया जा सकता, केवल पोस्ट-प्रोसेस किया जा सकता है)।
av_scanner = cmdline:
/usr/local/maldetect/hookscan.sh exim %s :
maldet: (.+):
maldet: (.+)
तीन कोलन-सेपरेटेड फ़ील्ड हैं: कमांड टेम्पलेट, ट्रिगर regex, और नाम-कैप्चर regex। जब मैलवेयर का पता चलता है, Exim कैप्चर किए गए सिग्नेचर नाम का उपयोग करके संदेश को अस्वीकार कर देता है।
### 10.5 जेनेरिक API
कस्टम इंटीग्रेशन, बैच स्कैनिंग और थर्ड-पार्टी उपयोग के लिए:```bash
# Single file scan
hookscan.sh generic /path/to/file
# Exit: 0 = clean, 1 = error, 2 = infected
# Stdout: CLEAN: /path, INFECTED: signame /path, ERROR: reason
# Batch scan from a file list
hookscan.sh generic --list /tmp/filelist.txt
# Batch scan from stdin
find /uploads -newer /tmp/marker -type f | hookscan.sh generic --stdin
बैच आउटपुट प्रति फ़ाइल एक STATUS: PATH पंक्ति उत्पन्न करता है। एग्ज़िट कोड सबसे खराब परिणाम के अनुसार निर्धारित होता है।
हुक स्कैन कॉन्फ़िगरेशन conf.maldet.hookscan में संग्रहीत होता है (वैकल्पिक — डिफ़ॉल्ट स्क्रिप्ट में निर्मित होते हैं)। संदर्भ डिफ़ॉल्ट conf.maldet.hookscan.default में होते हैं।
मुख्य चर:
सक्षम करने के बाद गैर-root स्कैन कार्यों के लिए प्रति-उपयोगकर्ता डेटा निर्देशिकाएँ बनाने हेतु maldet --mkpubpaths चलाएँ।
सत्यापित करें कि अलर्ट डिलीवरी चैनल सही ढंग से कॉन्फ़िगर किए गए हैं:```bash maldet --test-alert scan email # test per-scan email alert maldet --test-alert scan slack # test per-scan Slack alert maldet --test-alert digest email # test digest email alert maldet --test-alert digest telegram # test digest Telegram alert
परीक्षण अलर्ट वास्तविक रेंडरिंग पाइपलाइन का उपयोग सिंथेटिक डेटा के साथ करते हैं। विषय पंक्ति को `[TEST]` से उपसर्गित किया जाता है। चैनल अलगाव यह सुनिश्चित करता है कि केवल निर्दिष्ट चैनल ही सक्रिय हो।
### 10.8 हुक डाइजेस्ट
हुक डिटेक्शन को आवधिक डाइजेस्ट अलर्ट के माध्यम से संक्षेपित किया जाता है:```bash
# On-demand digest (reads all sources: monitor + hooks)
maldet --digest
# View hook scan activity
maldet --report hooks # last 24 hours
maldet --report hooks --last 7d # last 7 days
maldet --report hooks --mode modsec # filter by mode
दैनिक cron जॉब स्वचालित रूप से एक hook digest चलाता है जब नई detections मौजूद हों (conf.maldet में cron_digest_hook=1 द्वारा नियंत्रित)।
CXS को LMD से बदलने वाले administrators के लिए:
LMD को बाहरी टूल्स, ऑटोमेशन पाइपलाइनों और तृतीय-पक्ष स्कैनर्स से जोड़ना।
LMD सिग्नेचर install.sh द्वारा ClamAV डेटा निर्देशिकाओं से स्वचालित रूप से symlink किए जाते हैं, जिससे dual-engine कवरेज मिलता है। स्वचालित ClamAV पहचान के लिए scan_clamscan=auto (डिफ़ॉल्ट) सेट करें। इंजन चयन और सिग्नेचर सत्यापन के लिए 3.8 ClamAV एकीकरण देखें।
स्कैन इवेंट्स को Elasticsearch पर स्ट्रीम करने के लिए elk_host, elk_port, और elk_index के साथ enable_statistic=1 सक्षम करें। 3.10 ELK एकीकरण देखें।
LMD ईमेल के अलावा चार अलर्ट डिलीवरी चैनलों का समर्थन करता है: Slack (Block Kit), Telegram (MarkdownV2), Discord (webhook embeds), और स्थानीय MTA के बिना वातावरण के लिए SMTP रिले। कॉन्फ़िगरेशन के लिए 3.2 अलर्टिंग देखें।
CI/CD और ऑटोमेशन के लिए मशीन-पठनीय स्कैन आउटपुट:```bash maldet --format json -e SCANID # JSON report to stdout maldet --json-report list # list all scans as JSON
v1.2 JSON स्कीमा के लिए `man maldet`(1) देखें (`-e SCANID` और `-e list` दोनों में समान `{schema_version, scanner, host, reports[]}` संरचना)।
### होस्टिंग पैनल डिटेक्शन
दैनिक क्रॉन 12+ होस्टिंग कंट्रोल पैनलों का स्वतः पता लगाता है और स्कैन पथ समायोजित करता है। पूर्ण पैनल मैट्रिक्स के लिए [6. क्रॉन दैनिक](#6-cron-daily) देखें।
---
## लाइसेंस
LMD का विकास और समर्थन Ryan MacDonald [[email protected]] द्वारा स्वयंसेवी आधार पर किया जाता है।
Linux Malware Detect (LMD) GNU जनरल पब्लिक लाइसेंस (GPL) v2 के अंतर्गत वितरित किया जाता है, जिसमें उपयोग या पुनर्वितरण पर कोई प्रतिबंध नहीं है। कॉपीराइट विवरण और GNU GPL `COPYING.GPL` फ़ाइल में शामिल हैं। GNU GPL के तहत आवश्यकतानुसार व्युत्पन्न कार्यों के लिए श्रेय दिया जाना चाहिए।
---
## सहायता
LMD सोर्स रिपॉज़िटरी यहाँ उपलब्ध है: https://github.com/rfxn/linux-malware-detect
बग, फीचर अनुरोध और सामान्य प्रश्न GitHub issues के रूप में दर्ज किए जा सकते हैं या [email protected] पर भेजे जा सकते हैं।
आधिकारिक प्रोजेक्ट पेज यहाँ है: https://www.rfxn.com/projects/linux-malware-detect/
| चर | उद्देश्य | डिफ़ॉल्ट |
|---|
quarantine_hits | पता चले मैलवेयर को स्वचालित रूप से क्वारंटाइन करें | 0 |
quarantine_clean | क्वारंटाइन की गई फ़ाइलों से मैलवेयर साफ़ करने का प्रयास करें | 0 |
quarantine_suspend_user | हिट होने पर cPanel खाता निलंबित करें या शेल रद्द करें | 0 |
quarantine_suspend_user_minuid | निलंबित करने के लिए न्यूनतम UID (सिस्टम खातों की सुरक्षा करता है) | 500 |
quarantine_on_error | स्कैन इंजन त्रुटि लौटाने पर फ़ाइलों को क्वारंटाइन करें | 1 |
| चर | उद्देश्य | डिफ़ॉल्ट |
|---|
default_monitor_mode | मॉनिटर के लिए स्टार्टअप मोड (users या फ़ाइल का पथ); खाली = अक्षम | "" |
inotify_base_watches | प्रति उपयोगकर्ता पथ फ़ाइल वॉच की आधार संख्या | 16384 |
inotify_minuid | उपयोगकर्ता होम निगरानी के लिए न्यूनतम UID | 500 |
inotify_docroot | उपयोगकर्ता होम में निगरानी के लिए उपनिर्देशिकाएँ | public_html,public_ftp |
inotify_sleep | स्कैन बैचों के बीच सेकंड | 15 |
inotify_reloadtime | कॉन्फ़िग रीलोड के बीच सेकंड | 3600 |
inotify_cpunice | मॉनिटर प्रक्रिया के लिए nice प्राथमिकता | 18 |
inotify_ionice | मॉनिटर प्रक्रिया के लिए IO प्राथमिकता | 6 |
inotify_cpulimit | मॉनिटर के लिए हार्ड CPU सीमा (0=अक्षम) | 0 |
digest_interval | आवधिक डाइजेस्ट सारांश अलर्ट के बीच अंतराल: 24h, 30m, 7d, 0 (अक्षम) | 24h |
digest_escalate_hits | तत्काल एस्केलेशन अलर्ट के लिए हिट संख्या सीमा; 0 = अक्षम | 0 |
cron_digest_hook | cron.daily हुक डाइजेस्ट स्वीप सक्षम करें (नई हुक पहचान मौजूद होने पर डाइजेस्ट चालू करता है) | 1 |
monitor_paths_extra | अतिरिक्त inotify वॉच पथों की लाइन-सेपरेटेड फ़ाइल का पथ | /usr/local/maldetect/monitor_paths.extra |
monitor_scan_owner_filters | मॉनिटर मोड में scan_ignore_root/scan_ignore_user/scan_ignore_group स्वामित्व फ़िल्टर लागू करें; 0 (डिफ़ॉल्ट) = बंद — मॉनिटर स्वामी की परवाह किए बिना सभी फ़ाइलों को स्कैन करता है (1.6.6 सेमेंटिक्स बहाल करता है, issue #485 ठीक करता है); 1 = चालू — स्वामित्व फ़िल्टर लागू करें | 0 |
| चर | उद्देश्य | डिफ़ॉल्ट |
|---|
post_scan_hook | हुक स्क्रिप्ट का पथ (root-स्वामित्व वाली, विश्व-लेखनीय नहीं)। -co के माध्यम से सेट नहीं की जा सकती | "" |
post_scan_hook_format | आउटपुट स्तर: args, file, json (संचयी) | args |
post_scan_hook_exec | निष्पादन मोड: async (गैर-अवरोधक), sync (प्रतीक्षा) | async |
post_scan_hook_timeout | SIGTERM से पहले सेकंड (0=अक्षम, न्यूनतम 5) | 60 |
post_scan_hook_on | स्कैन प्रकार फ़िल्टर: all, cli, digest | all |
post_scan_hook_min_hits | चालू करने के लिए न्यूनतम हिट (0=हमेशा) | 1 |
| चर | उद्देश्य | डिफ़ॉल्ट |
|---|
scan_clamd_remote | स्कैनिंग के लिए रिमोट clamd सर्वर का उपयोग करें | 0 |
remote_clamd_config | रिमोट clamd कॉन्फ़िग फ़ाइल का पथ | /etc/clamd.d/clamd.remote.conf |
remote_clamd_max_retry | रिमोट clamd विफलता पर अधिकतम पुनर्प्रयास | 5 |
remote_clamd_retry_sleep | पुनर्प्रयासों के बीच सेकंड | 3 |
| चर | उद्देश्य | डिफ़ॉल्ट |
|---|
enable_statistic | ELK स्टैक सांख्यिकी संग्रह सक्षम करें | 0 |
elk_host | ELK इनपुट के लिए TCP होस्ट | — |
elk_port | ELK इनपुट के लिए TCP पोर्ट | — |
elk_index | Elasticsearch इंडेक्स नाम | — |
| पैनल | स्कैन पथ |
|---|
| cPanel | /home?/?/public_html/ (+ ऐडन/सबडोमेन डॉकरूट्स) |
| Plesk | /var/www/vhosts/?/ |
| DirectAdmin | /home?/?/domains/?/public_html/, /var/www/html/?/ |
| Ensim | /home/virtual/?/fst/var/www/html/ |
| ISPConfig | /var/www/clients/?/web?/web, …/subdomains, /var/www |
| Virtualmin | /home/?/public_html/, /home/?/domains/?/public_html/ |
| ISPmanager | /var/www/?/data/, /home/?/data/ |
| Froxlor | /var/customers/webs/ |
| Bitrix | /home/bitrix/www/, /home/bitrix/ext_www/?/ |
| VestaCP / HestiaCP | /home/?/web/?/public_html/ (+ public_shtml, tmp, private) |
| DTC | ${conf_hosting_path:-/var/www/sites}/?/?/subdomains/?/html/ |
| प्रकार | फ़ाइल | प्रारूप |
|---|
| कस्टम MD5 | sigs/custom.md5.dat | md5v2.dat के समान |
| कस्टम SHA-256 | sigs/custom.sha256.dat | sha256v2.dat के समान |
| कस्टम HEX | sigs/custom.hex.dat | hex.dat के समान |
| कस्टम CSIG | sigs/custom.csig.dat | csig.dat के समान |
| कस्टम YARA | sigs/custom.yara | YARA नियम सिंटैक्स |
| कस्टम YARA (ड्रॉप-इन) | sigs/custom.yara.d/*.yar | YARA नियम फ़ाइलें |
| संकलित YARA | sigs/compiled.yarc | yarac आउटपुट (वैकल्पिक) |
| चर | उद्देश्य |
|---|
sig_import_md5_url | कस्टम MD5 सिग्नेचर के लिए URL |
sig_import_sha256_url | कस्टम SHA-256 सिग्नेचर के लिए URL |
sig_import_hex_url | कस्टम HEX सिग्नेचर के लिए URL |
sig_import_csig_url | कस्टम कंपाउंड सिग्नेचर के लिए URL |
sig_import_yara_url | कस्टम YARA नियमों के लिए URL |
| Variable | Default | विवरण |
|---|
hookscan_timeout | 30 | स्कैन टाइमआउट सेकंड में |
hookscan_fail_open | 1 | स्कैन त्रुटि पर फ़ाइल को अनुमति दें (0 = ब्लॉक करें) |
hookscan_escalate_hits | 0 | N हुक हिट/घंटा पर तत्काल अलर्ट (0 = अक्षम) |
hookscan_service_users | apache,nginx,... | होमडीर प्रतिबंध से छूट प्राप्त सेवा UID |
hookscan_user_rate_limit | 60 | गैर-root कॉल करने वालों के लिए अधिकतम स्कैन/घंटा |
hookscan_user_show_signames | 1 | गैर-root कॉल करने वालों को सिग्नेचर नाम दिखाएँ |
hookscan_list_max_bytes | 1048576 | अधिकतम सूची फ़ाइल आकार (1 MB) |
hookscan_list_max_entries | 10000 | फ़ाइल सूची में अधिकतम प्रविष्टियाँ |
| CXS Component | LMD Equivalent |
|---|
cxscgi.sh | hookscan.sh modsec |
cxsftp.sh | hookscan.sh ftp |
| ProFTPD mod_exec to cxs | hookscan.sh proftpd |
cxs --file | hookscan.sh generic |
cxswatch | maldet --monitor |
/etc/cxs/cxs.conf | conf.maldet.hookscan |