Задача — отсылать уведомления на почту при SSH-логине на хост с недоверенных IP.
Используем Monit.
Устанавливаем:
Настраиваем отправку почты — задаём localhost (у нас крутится локальный exim
), формат письма и получателя алертов.
Редактируем /etc/monit/monitrc
:
... set mailserver localhost set mail-format { from: Monit <monit@$HOST> subject: monit alert -- $EVENT $SERVICE message: $EVENT Service $SERVICE Date: $DATE Action: $ACTION Host: $HOST Description: $DESCRIPTION Your faithful employee, Monit } ... set alert user@example.com
Создаём файл /etc/monit/conf.d/ssh_alerts.conf
:
check file ssh_logins with path /var/log/auth.log ignore match "/etc/monit/whitelist_ips.txt" if match "Accepted publickey" then alert
См. документацию по IGNORE
Если вместо авторизации по ключам используется парольная авторизация — меняем «Accepted publickey» на «Accepted password«.
В файл /etc/monit/whitelist_ips.txt
пока заносим 1.1.1.1 — после теста обновим, и укажем реальный адрес, который надо игнорировать.
Перезапускаем monit
:
Проверяем — логинимся на сервер:
Логи Monit:
И письмо:
Само собой, такой подход можно использовать для чего угодно, просто меняя условия в if match
.
Например — для одного из своих сайтов, который закрыт от мира, и куда кроме меня никто заходить не должен — я добавил такое правило:
check file nginx_web_access with path /var/log/nginx/example.com-access.log ignore match "/etc/monit/whitelist_ips.txt" if match "GET" then alert
При любом GET
-запросе с IP, не добавленного в доверенные — придёт алерт на почту.
Сам /etc/monit/whitelist_ips.txt
выглядит так:
Где один адрес — это сеть офиса, второй — мой домашний.
Готово.