Привет, Хабр!
В первой части нашего путешествия мы превратили голый VPS в маленькую крепость. Мы создали пользователя с sudo, настроили вход по SSH-ключам, выставили на стражу файрвол UFW и наняли вышибалу Fail2ban. Теперь лобовые brute-force атаки и автоматические сканеры разбиваются о наши стены, не доставляя хлопот. Мы победили, верно?
Не совсем. Наша крепость неприступна, но она слепа. Мы отбиваем тех, кто ломится в ворота, но совершенно не видим, что происходит на периметре. Что если уязвимость найдется в нашем веб-сервере? Что если одна из запущенных нами программ начнет слать странный трафик, став частью ботнета?
Здесь нам нужна "сигнализация". Система, которая станет нашими глазами и ушами, и поднимет тревогу при малейшем подозрительном движении. Сегодня мы установим именно такую — Maltrail.

Если продолжать нашу аналогию, то Fail2ban — это охранник у двери, а Maltrail — это система камер наблюдения по всему периметру. Это легковесная система обнаружения вторжений (IDS), которая работает по очень простому принципу:
Она тихо слушает весь сетевой трафик, идущий к вашему серверу и от него.
Она сверяет IP-адреса, домены и URL из этого трафика с огромной, постоянно обновляемой базой данных, собранной из сотен публичных "чёрных списков" и статических сигнатур. Туда входят списки от AlienVault, dshield, Emerging Threats, трекеры Ransomware и данные о тысячах семейств вредоносов, от AgentTesla до Zeus.
Если обнаруживается совпадение — 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, браузер покажет окно для ввода логина и пароля. Наша админка под замком!

Шаг 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 и репутацию.

На что смотреть:
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, для небольших серверов? Давайте делиться опытом в комментариях
