У обнаружения сканирования портов есть особенность, из-за которой оно выпадает из обычного набора инструментов. 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, ни систему обнаружения вторжений. Он закрывает одну узкую щель — попытки, которые не оставляют следов нигде больше, потому что не дошли ни до одного приложения. Стоит он немного, работает без настройки после первого запуска, а его сводка отвечает на вопрос, который иначе не задают: интересуется ли кем-то ваш сервер отдельно от общего фона. Как выглядит эта сводка — на странице демо ниже.