Привет, Хабр!

В первой части нашего путешествия мы превратили голый VPS в маленькую крепость. Мы создали пользователя с sudo, настроили вход по SSH-ключам, выставили на стражу файрвол UFW и наняли вышибалу Fail2ban. Теперь лобовые brute-force атаки и автоматические сканеры разбиваются о наши стены, не доставляя хлопот. Мы победили, верно?

Не совсем. Наша крепость неприступна, но она слепа. Мы отбиваем тех, кто ломится в ворота, но совершенно не видим, что происходит на периметре. Что если уязвимость найдется в нашем веб-сервере? Что если одна из запущенных нами программ начнет слать странный трафик, став частью ботнета?

Здесь нам нужна "сигнализация". Система, которая станет нашими глазами и ушами, и поднимет тревогу при малейшем подозрительном движении. Сегодня мы установим именно такую — Maltrail.

Если продолжать нашу аналогию, то Fail2ban — это охранник у двери, а Maltrail — это система камер наблюдения по всему периметру. Это легковесная система обнаружения вторжений (IDS), которая работает по очень простому принципу:

  1. Она тихо слушает весь сетевой трафик, идущий к вашему серверу и от него.

  2. Она сверяет IP-адреса, домены и URL из этого трафика с огромной, постоянно обновляемой базой данных, собранной из сотен публичных "чёрных списков" и статических сигнатур. Туда входят списки от AlienVault, dshield, Emerging Threats, трекеры Ransomware и данные о тысячах семейств вредоносов, от AgentTesla до Zeus.

  3. Если обнаруживается совпадение — Maltrail немедленно записывает это в лог и показывает в красивом веб-интерфейсе.

Это не замена Fail2ban, а идеальное дополнение. Они работают на разных уровнях.

Шаг 1: Установка и базовый запуск

Установка Maltrail на удивление проста, никаких танцев с бубном.

# Клонируем репозиторий с GitHub
git clone https://github.com/stamparm/maltrail.git
cd maltrail

# Ставим зависимости через pip
# Если pip3 не установлен: sudo apt install python3-pip
sudo pip3 install -r requirements.txt

Всё! Для быстрого теста можно запустить сервер и сенсор прямо в консоли.

Лайфхак: Чтобы не занимать терминал, используйте screen или tmux. Это позволит запустить процесс в фоне и спокойно отключиться от сервера.

# Создаем новую сессию screen
screen -S maltrail

# Запускаем сенсор (он собирает данные)
python3 sensor.py
# Нажмите Ctrl+C чтобы остановить его и запустить сервер

# Запускаем сервер (он отдает веб-интерфейс)
python3 server.py
# Чтобы "свернуть" сессию screen, не убивая процесс, нажмите Ctrl+A, а затем D.
# Вернуться в сессию можно командой `screen -r maltrail`

После запуска сервер будет доступен на порту 8338, но только локально. Не спешите открывать его на весь мир! Сначала мы его как следует защитим.

Шаг 2: Прячем админку за Nginx (Обязательный шаг!)

Светить админку такого инструмента в "голом" виде на весь интернет — это очень плохая идея. Мы же строим крепость, а не проходной двор. Поэтому мы настроим Nginx как reverse proxy, который будет:

  • Давать доступ к Maltrail по красивому доменному имени (напрример, sec.yourdomain.com).

  • Шифровать трафик с помощью бесплатного SSL-сертификата от Let's Encrypt.

  • Защищать вход логином и паролем.

2.1. Генерируем пароль

Сначала установим утилиту htpasswd для создания файла с паролями.

sudo apt update
sudo apt install apache2-utils

Теперь создадим файл и добавим в него пользователя (например, admin). Команда попросит вас ввести и подтвердить пароль.

# Флаг -c создает новый файл. Используйте его только для первого пользователя!
sudo htpasswd -c /etc/nginx/.htpasswd admin

Лайфхак: Для добавления других пользователей убирайте флаг -c, чтобы не перезаписать файл: sudo htpasswd /etc/nginx/.htpasswd another_user.

2.2. Настраиваем Nginx

Создаем новый конфиг для нашего сайта в /etc/nginx/sites-available/maltrail:

sudo nano /etc/nginx/sites-available/maltrail

Вставляем туда следующий конфиг, заменив sec.cyberscope360.com на свой домен:

server {
    server_name sec.cyberscope360.com;

    location / {
        # Перенаправляем все запросы на локальный порт Maltrail
        proxy_pass http://127.0.0.1:8338;
        
        # Важные заголовки, чтобы Maltrail видел реальный IP клиента
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # Включаем нашу парольную защиту!
        auth_basic "Restricted Access";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

Активируем конфиг, создав на него символическую ссылку:

sudo ln -s /etc/nginx/sites-available/maltrail /etc/nginx/sites-enabled/

Теперь натравим Certbot, чтобы он автоматически получил SSL-сертификат и настроил HTTPS:

# Если Certbot не установлен: sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d sec.cyberscope360.com

Certbot сам изменит ваш конфиг, добавив всё необходимое для SSL. После этого проверяем синтаксис и перезапускаем Nginx:

sudo nginx -t
sudo systemctl reload nginx

Теперь, если вы зайдете на https://sec.cyberscope360.com, браузер покажет окно для ввода логина и пароля. Наша админка под замком!

Окно базовой авторизации nginx в браузере.
Окно базовой авторизации nginx в браузере.

Шаг 3: Делаем по-взрослому: запуск через systemd

Запускать сервисы в screen хорошо для тестов, но для постоянной работы нам нужно, чтобы Maltrail стартовал автоматически после перезагрузки сервера. Для этого создадим systemd-юниты.

Лайфхак: В репозитории Maltrail уже есть готовые файлы maltrail-sensor.service и maltrail-server.service. Вы можете скопировать их в /etc/systemd/system/ и адаптировать под себя. Но для наглядности мы создадим их с нуля.

maltrail-sensor.service

sudo nano /etc/systemd/system/maltrail-sensor.service
[Unit]
Description=Maltrail Sensor
After=network.target

[Service]
ExecStart=/usr/bin/python3 /путь/к/maltrail/sensor.py
Restart=always
User=root # Сенсору нужны права root для прослушки трафика
WorkingDirectory=/путь/к/maltrail/

[Install]
WantedBy=multi-user.target
    

maltrail-server.service

sudo nano /etc/systemd/system/maltrail-server.service
[Unit]
Description=Maltrail Server
After=network.target

[Service]
ExecStart=/usr/bin/python3 /путь/к/maltrail/server.py
Restart=always
# Сервер можно запускать и от обычного пользователя
User=www-data
Group=www-data
WorkingDirectory=/путь/к/maltrail/

[Install]
WantedBy=multi-user.target
    

Важно: Не забудьте заменить /путь/к/maltrail/ на ваш реальный путь (например, /home/admin/maltrail или /opt/maltrail).

Теперь командуем systemd:

# Перечитываем конфиги
sudo systemctl daemon-reload
# Включаем автозапуск
sudo systemctl enable maltrail-sensor
sudo systemctl enable maltrail-server
# Запускаем сервисы
sudo systemctl start maltrail-sensor
sudo systemctl start maltrail-server

# Проверяем, что все работает
sudo systemctl status maltrail-sensor maltrail-server
    

Шаг 4: Анализируем дашборд

Теперь самое интересное. Заходим на наш защищенный домен, вводим логин/пароль и видим дашборд Maltrail. Не пугайтесь, если там сразу появятся события — это нормально. Интернет — место шумное.

Что именно вы там увидите?

Maltrail — это не просто список IP. Он показывает суть угрозы. Вот лишь несколько примеров того, что вы сможете отловить:

  • Сканеры уязвимостей: Попытки найти дыры в вашем веб-сервере с помощью таких инструментов, как sqlmap или nmap.

  • Обращения к C&C серверам: Ваш сервер (или один из его докер-контейнеров) оказался заражен и пытается связаться со своим "командным центром".

  • Трафик через Tor: Кто-то пытается анонимно получить доступ к вашим сервисам.

  • Подозрительные загрузки: Попытки скачать с вашего сервера или на него файлы .exe, .dll, .ps1.

  • DGA-домены: DNS-запросы на странные, автоматически сгенерированные домены — явный признак работы вредоноса.

Кликнув на событие, можно получить исчерпывающую информацию об IP, включая данные Whois и репутацию.

Главный дашборд Maltrail с несколькими событиями.

На что смотреть:

  • Events: Лента событий в реальном времени.

  • Source IP: IP-адрес, с которого пришел подозрительный трафик.

  • Threat: Насколько серьезная угроза (по шкале от 0 до 100).

  • Info: Самое главное. Здесь написано, в чём именно подозревается IP-адрес: (malware), (scanner), (tor), (botnet) и т.д.

Кликнув на событие, можно получить исчерпывающую информацию об IP.

Детальная информация о конкретной угрозе.
Детальная информация о конкретной угрозе.

Правило честного компромисса: о чём стоит помнить

Maltrail — фантастически полезный инструмент, но важно понимать его место.

  • Это IDS, а не IPS. Maltrail обнаруживает, но не блокирует трафик по умолчанию. Он — ваша сигнализация, а не автоматическая турель.

  • Возможны ложные срабатывания (false positives). Иногда в списки попадают IP-адреса крупных сервисов вроде Google или Cloudflare. Не стоит паниковать и сразу банить их. Смотрите на контекст.

  • Идеален для pet-проектов и небольших серверов. Он очень лёгкий, почти не потребляет ресурсов и прост в настройке. Для защиты корпоративного гиганта, возможно, понадобятся решения "потяжелее".

Заключение: крепость стала зрячей

Поздравляю! Наше путешествие продолжается. Мы не просто построили стены, мы установили на них дозорных. Теперь наша крепость не только защищена от атак «в лоб», но и находится под постоянным наблюдением. Мы будем в курсе, если к нам попытаются подобраться «по‑тихому».

А теперь открытый вопрос к сообществу: какими ещё легковесными IDS/IPS вы пользуетесь для своих проектов? Может, есть что-то интереснее и функциональнее, чем Maltrail, для небольших серверов? Давайте делиться опытом в комментариях

Комментарии (6)


  1. VladimirFarshatov
    11.07.2025 08:25

    Полезно, но как понял, это только для винды, не? )


    1. ColdPhoenix
      11.07.2025 08:25

      тут все на линуксе делалось.


  1. Radiohead72
    11.07.2025 08:25

    А что даст IDS на VPS сервере?

    Его надо ставить где-то между роутером и внутренней сетью. По хорошему - на самом роутере надо ставить)

    Теоретически этот Maltrail можно поставить на некоторые модели микротика. На те которые поддерживают докер.

    У меня как-то был роутер Synology на котором стояла IDS/IPS Suricata. Уж не знаю КАК они ее смогли туда впихнуть, но она реально работала)


    1. cyberscoper Автор
      11.07.2025 08:25

      В контексте статьи мы рассматриваем изолированный одиночный VPS как самодостаточную "крепость". На таком сервере нет "внутренней сети" в привычном понимании (по крайней мере, по умолчанию), и сам VPS является точкой входа/выхода в интернет. В этом случае, установка IDS (Maltrail в данном случае) непосредственно на VPS становится нашим "роутером" и "границей" одновременно, позволяя мониторить трафик на той единственной точке, которая и является нашим цифровым периметром. Что же дает этот IDS? начиная от мониторинга исходящего трафика порой даже обнаружение специфичных атак на веб сервисы по типу всякого рода sql инъекций и обращении к веб шеллу также для понимания веб активности пет проектов и небольших серверов


  1. wwq_deezer
    11.07.2025 08:25

    вводим логин/пароль и видим дашборд Maltrail.

    Чета я не понял. Установил Maltrail(правда посредством docker-compose), открываю в браузере ГУЙ, ввожу умолчательные юзер и пароль. Все замечательно. Захожу в дашборд. Но где настройки? Как поменять эти умолчательные admin/changeme! на свои то?


    1. cyberscoper Автор
      11.07.2025 08:25

      Привожу текст из репы:

      User has to enter the proper credentials that have been set by the server's administrator inside the configuration file maltrail.conf (Note: default credentials are admin:changeme!):

      Думаю что стоит войти внутрь контейнера и поменять данные в этом конфиге, без докера с этим проще.

      https://github.com/stamparm/maltrail/tree/master/docker

      Тут видно что он подтягивает этот конфиг файл, его стоит изменить.