Что сделать в первый день: вход по ключу, fail2ban против подбора паролей, другой порт SSH, межсетевой экран и закрытые лишние службы.
Содержание
Сервер в интернете начинают проверять на прочность через несколько минут после запуска: роботы перебирают пароли к SSH. Ничего страшного, если сделать несколько вещей в первый же день.
1. Вход по ключу, пароли выключить
Это главное. Когда пароли выключены, подбирать нечего. Как это сделать — в статье Как подключиться к серверу по SSH.
2. fail2ban — блокировка тех, кто подбирает пароль
fail2ban следит за журналом и на время блокирует адреса, с которых много раз вводили неверный пароль.
Ubuntu: sudo apt install fail2ban. Debian: sudo apt install fail2ban nftables — fail2ban блокирует адреса через nftables, а в образе Debian его нет. Защита SSH включается сразу после установки.
AlmaLinux — из репозитория EPEL. Ставьте именно fail2ban-server: пакет fail2ban потянет за собой межсетевой экран firewalld, а тот после перезагрузки может закрыть сайт.
sudo dnf install epel-release
sudo crb enable
sudo dnf install fail2ban-server
Создайте файл /etc/fail2ban/jail.local:
[DEFAULT]
banaction = nftables-multiport
banaction_allports = nftables-allports
[sshd]
enabled = true
и запустите: sudo systemctl enable --now fail2ban.
Кого заблокировали: sudo fail2ban-client status sshd. Случайно заблокировали себя — войдите через консоль в кабинете и снимите блокировку: sudo fail2ban-client set sshd unbanip 203.0.113.5.
Во FreeBSD то же делает sshguard: sudo pkg install sshguard. Он работает вместе с межсетевым экраном pf, как его подключить — расскажет pkg info -D sshguard.
3. Другой порт SSH
Сам по себе другой порт не защищает, но роботов, которые стучатся в 22-й, станет намного меньше — и журнал станет чище. Не закрывайте текущее подключение, пока не проверите вход на новый порт из другого окна.
Ubuntu:
echo "Port 2222" | sudo tee /etc/ssh/sshd_config.d/20-port.conf
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
Debian: тот же файл, затем sudo systemctl restart ssh.
AlmaLinux — сначала разрешите новый порт в SELinux, иначе SSH на нём не запустится:
sudo dnf install policycoreutils-python-utils
sudo semanage port -a -t ssh_port_t -p tcp 2222
echo "Port 2222" | sudo tee /etc/ssh/sshd_config.d/20-port.conf
sudo systemctl restart sshd
FreeBSD: строка Port 2222 в /etc/ssh/sshd_config, затем sudo service sshd restart.
Проверьте вход: ssh -p 2222 ubuntu@203.0.113.10. Если включён межсетевой экран, сначала откройте в нём новый порт. А в fail2ban допишите порт в раздел [sshd] файла /etc/fail2ban/jail.local строкой port = 2222 — иначе он будет закрывать для нарушителей только старый порт.
4. Межсетевой экран
Оставьте открытыми только нужные порты: SSH, и 80 и 443, если на сервере сайт. Как это сделать в вашей системе: Ubuntu, Debian, AlmaLinux, FreeBSD.
5. Лишние службы
Посмотрите, какие программы ждут подключений из интернета: sudo ss -ltnp. Адреса 127.0.0.1 и [::1] — только изнутри сервера, это нормально. 0.0.0.0 и * — открыто всем.
- База данных должна слушать только
127.0.0.1, если к ней не подключаются с других серверов. Нужен доступ с компьютера — используйте SSH-туннель, а не открытый порт. - Ненужную службу выключите:
sudo systemctl disable --now имя. - Не показывайте версии программ: в nginx —
server_tokens off;, в Apache —ServerTokens ProdиServerSignature Off.
6. Обновления
Большинство взломов — через старые версии программ. Как обновлять систему и включить автоматические обновления безопасности — в справочнике вашей системы: Ubuntu, Debian, AlmaLinux, FreeBSD.

