У обнаружения сканирования портов есть особенность, из-за которой оно выпадает из обычного набора инструментов. Fail2ban читает логи приложений — а при сканировании закрытого порта никакого приложения нет, значит, нет и записи в логе. Сканирование видно только на уровне фаервола, и именно там работает PSAD: он читает сообщения, которые iptables пишет об отброшенных пакетах.
Обязательное условие: логирование должно быть включено
Это главная причина, по которой PSAD «стоит и ничего не показывает». Без правил логирования в фаерволе читать ему нечего, и никакой ошибки при этом не возникает.
Если у вас UFW:
sudo ufw logging low
sudo ufw status verbose
Проверить, что сообщения действительно появляются:
sudo journalctl -k | grep -c '\[UFW'
sudo grep -c 'UFW BLOCK' /var/log/ufw.log
Нули в обеих командах означают, что PSAD работать не будет. И отдельно про Debian 12 и Ubuntu 24.04: без rsyslog файла /var/log/ufw.log не существует, всё уходит в журнал systemd — путь к логу в настройках PSAD надо указывать с учётом этого.
Установка
sudo apt install psad
sudo psad --sig-update
sudo psad -R
sudo psad --Status
Последняя команда — основная. Она показывает, сколько пакетов разобрано, какие адреса замечены и с каким уровнем опасности. Если счётчик разобранных пакетов равен нулю, возвращайтесь к предыдущему разделу: дело в логировании, а не в отсутствии сканирований.
Настройки — в /etc/psad/psad.conf. Практически значимых параметров немного: адрес для писем, путь к логу и пороги уровней опасности.
Уровни опасности
PSAD оценивает каждый источник по шкале от 1 до 5 в зависимости от того, сколько разных портов был затронут и насколько поведение похоже на известные приёмы сканирования.
- 1–2 — единичные обращения к закрытым портам. Это постоянный фон интернета, реагировать не нужно;
- 3 — систематический обход портов. Обычно исследовательские сканеры, которых в сети несколько десятков;
- 4–5 — целенаправленный перебор большого числа портов с одного адреса, часто с попыткой скрыть характер обращений.
Порог для писем задаётся параметром EMAIL_ALERT_DANGER_LEVEL. Значение 3 обычно означает несколько писем в день, что довольно быстро приводит к правилу в почтовом клиенте. Разумнее поставить 4 и смотреть остальное на странице сводки.
Автоматическая блокировка: не надо
PSAD умеет сам добавлять правила фаервола (ENABLE_AUTO_IDS). На единственном рабочем сервере включать это не стоит, и причина конкретная: адрес отправителя в пакете подделывается. Достаточно отправить в вашу сторону пакеты с подставленным адресом — и вы заблокируете тот адрес, который выбрал не вы. Это может оказаться адрес вашего же клиента, платёжного шлюза или службы мониторинга.
Если блокировка всё же нужна, включайте её с высоким порогом опасности и обязательно с ограничением по времени (AUTO_BLOCK_TIMEOUT), чтобы ошибочная запись не осталась навсегда.
Что с этим делать практически
Само по себе сканирование безвредно: оно ничего не ломает и происходит непрерывно у всех. Ценность данных PSAD не в факте, а в изменениях характера.
Полезные наблюдения:
- Направленный интерес. Обычный сканер проходит по тысячам адресов и десятку популярных портов. Если же кто-то методично перебирает порты именно вашего сервера, включая нестандартные, — это уже не фон;
- Сканирование конкретного порта. Обращения к порту базы данных или панели управления означают, что кто-то ищет именно эту службу — обычно после публикации сведений об очередной уязвимости в ней;
- Разведка перед попыткой. Всплеск сканирования, а через несколько часов перебор паролей с того же диапазона — типичная последовательность, и первая её часть даёт немного времени.
Практический вывод из любого из этих наблюдений один и тот же: проверить, что список открытых наружу портов соответствует ожидаемому, и что на каждом из них работает то, что вы обновляли в этом году.
Место в общем наборе
PSAD не заменяет ни фаервол, ни Fail2ban, ни систему обнаружения вторжений. Он закрывает одну узкую щель — попытки, которые не оставляют следов нигде больше, потому что не дошли ни до одного приложения. Стоит он немного, работает без настройки после первого запуска, а его сводка отвечает на вопрос, который иначе не задают: интересуется ли кем-то ваш сервер отдельно от общего фона. Как выглядит эта сводка — на странице демо ниже.