Как получать письма при входе по SSH
При использовании сервера важно понимать, что на них происходит в данный момент: кто заходит по SSH и когда. Особенно это касается безопасности: если злоумышленник подберёт пароль и войдёт как root, у него будут неограниченные права — последствия очевидны.
Хорошая практика — запретить прямой вход root по SSH и работать через обычную учётную запись с sudo. Когда нужен доступ суперпользователя, входите как обычный пользователь и переключайтесь на root через su. А чтобы не пропустить подозрительные логины, можно настроить простые email-уведомления — письмо будет приходить на указанный адрес и содержать IP последнего входа.
Если вы увидели неизвестный IP, его легко заблокировать в файрволе.
Как быстро заблокировать IP с доступом к SSH
iptables:
sudo iptables -A INPUT -s <IP_Address> -p tcp --dport ssh -j DROP
firewalld:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="<IP_Address>" port protocol="tcp" port="22" reject'
sudo firewall-cmd --reload
UFW:
sudo ufw deny from <IP_Address> to any port 22
sudo ufw reload
Настройка email-уведомлений о входе по SSH
Здесь понадобятся права root, минимальные навыки работы в nano или vi и установленный почтовый клиент mailx (он же mailutils на Debian-подобных системах), чтобы отсылать письма.
Установите mailx в вашей системе одной из команд:
sudo apt install mailutils # Debian/Ubuntu/Mint
sudo yum install mailx # RHEL/CentOS/Fedora/Rocky/AlmaLinux
sudo emerge -a sys-apps/mailx # Gentoo
sudo apk add mailx # Alpine
sudo pacman -S mailx # Arch
sudo zypper install mailx # openSUSE
sudo pkg install mailx # FreeBSD
Письма при входе под root
Зайдите под root и перейдите в его домашний каталог:
cd /root
Откройте файл .bashrc в любимом редакторе. Учтите, это скрытый файл — его видно командой ls -la.
vi .bashrc
или
nano .bashrc
В конец файла добавьте строку, заменив ServerName на имя вашего сервера, а your@yourdomain.com — на ваш email:
echo 'ALERT - Root Shell Access (ServerName) on:' `date` `who` | mail -s "Alert: Root Access from `who | cut -d'(' -f2 | cut -d')' -f1`" your@yourdomain.com
Сохраните файл, выйдите из сессии и войдите снова по SSH. При каждом входе root будет отправляться письмо. Пример уведомления:
ALERT — Root Shell Access (Database Replica) on: Thu Nov 28 16:59:40 IST 2023 tecmint pts/0 2023-11-28 16:59 (172.16.25.125)
Письма при входе обычного пользователя
Авторизуйтесь под нужным пользователем (в примере — tecmint) и перейдите в его домашний каталог:
cd /home/tecmint
Откройте .bashrc и добавьте ту же строку (подставьте своё имя сервера и почту):
vi .bashrc
или
nano .bashrc
echo ‘ALERT — Root Shell Access (ServerName) on:’ `date` `who` | mail -s «Alert: Root Access from `who | cut -d'(‘ -f2 | cut -d’)’ -f1`» your@yourdomain.com
Сохраните, выйдите из системы и войдите снова. При каждом входе этого пользователя .bashrc выполнится и отправит письмо с данными о входе. Аналогично можно настроить уведомления для любого аккаунта: отредактируйте файл /home/имя_пользователя/.bashrc и добавьте указанную строку.
Такой простой механизм помогает оперативно замечать неожиданные логины и быстро блокировать нежелательные IP на уровне файрвола.