Закрываем двери: SSH‑ключи, firewall и Fail2ban
Новый VPS начинают сканировать автоматические боты почти сразу. Паниковать не нужно: уберём вход по паролю, закроем ненужные порты и включим блокировку перебора.
Что именно мы защищаем
У сервера есть сетевые порты — условные двери для разных служб. SSH обычно использует порт 22, сайты — 80 и 443. Firewall решает, какие двери открыты. SSH‑ключ заменяет пароль длинной криптографической парой: приватная часть остаётся у вас, публичная хранится на сервере.
1. Создаём ключ на своём компьютере
Выполняйте этот блок не на VPS, а в терминале своего компьютера:
На вопрос о пути просто нажмите Enter. Затем желательно задать пароль ключа. Появятся два файла: id_ed25519 — секретный, никому его не отправляйте; id_ed25519.pub — публичный.
2. Копируем публичную часть
ssh deploy@IP_СЕРВЕРА
На Windows без ssh-copy-id выведите ключ командой type $env:USERPROFILE\.ssh\id_ed25519.pub, скопируйте строку и добавьте её на сервере в ~/.ssh/authorized_keys.
Новое подключение должно пройти по ключу. Если ключ защищён парольной фразой, терминал запросит именно её.
3. Запрещаем опасные способы входа
На сервере создайте отдельный файл настроек:
Вставьте:
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
AllowUsers deploy
PermitRootLogin no запрещает прямой вход root, а PasswordAuthentication no оставляет только ключи. Сначала проверим синтаксис:
Пустой вывод означает, что ошибок нет. Только после этого применяйте настройки:
Откройте третье окно и снова выполните ssh deploy@IP_СЕРВЕРА. Не продолжайте, пока вход не работает.
4. Включаем UFW
UFW — простой интерфейс к системному firewall. Сначала разрешаем SSH, потом включаем блокировку всего остального:
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status verbose
В таблице должно быть правило 22/tcp ALLOW. Когда появится сайт, мы отдельно откроем 80 и 443. Порт приложения 8000 наружу открывать не нужно.
5. Блокируем перебор
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
Fail2ban читает журнал SSH и временно блокирует адреса с множеством неудачных попыток. Если jail sshd ещё не отображается, подождите несколько секунд и повторите проверку.
6. Автоматические исправления безопасности
sudo dpkg-reconfigure --priority=low unattended-upgrades
В открывшемся окне выберите Yes. Крупные обновления приложения всё равно устанавливайте осознанно после бэкапа.
7. Смотрим, что доступно
sudo ufw status numbered
sudo systemctl --failed
last -a | head
ss показывает слушающие порты. Адрес 127.0.0.1 доступен только внутри сервера, 0.0.0.0 — на всех интерфейсах. Последняя команда показывает недавние входы.
Как не запереть себя снаружи
- Сначала проверяем ключ, потом запрещаем пароль.
- Сначала разрешаем OpenSSH, потом включаем UFW.
- Всегда держим запасную сессию открытой.
- Знаем, где в панели хостинга находится веб‑консоль.
Что дальше
Безопасный фундамент готов. Теперь установим Docker и разберёмся, зачем он нужен →