Knowledge Base
Публично открытый SSH-порт 22
Что означает открытый SSH
Категория: Server Hardening · Риск: medium
Что означает открытый SSH
Открытый порт `22/tcp` не является уязвимостью сам по себе: серверу часто нужен SSH для администрирования. Но публичный SSH постоянно попадает под автоматические попытки входа, перебор пользователей, сканирование версий и шум в логах.
Цель hardening: оставить управляемый доступ администраторам и убрать лишний риск для всего интернета.
Минимальный безопасный baseline
В `/etc/ssh/sshd_config`:
PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
После изменения:
sudo sshd -t
sudo systemctl reload ssh
Перед закрытием публичного SSH всегда держите второй активный сеанс или доступ через панель VPS.
Ограничение по IP
Если у администратора статический IP:
sudo ufw allow from 203.0.113.10 to any port 22 proto tcp
sudo ufw deny 22/tcp
sudo ufw status numbered
Если IP динамический, лучше не строить безопасность на allowlist. Используйте Tailscale или WireGuard.
SSH через Tailscale
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
tailscale status
После проверки доступа через tailnet:
sudo ufw delete allow 22/tcp
sudo ufw allow in on tailscale0 to any port 22 proto tcp
Fail2ban как дополнительный слой
sudo apt-get install fail2ban
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
Fail2ban не заменяет ключи, VPN и firewall, но уменьшает шум от повторяющихся попыток входа.
Проверка после исправления
С внешней машины:
nc -vz example.com 22
Ожидаемо:
connection timed out
Из private network/VPN:
ssh admin@server
Ожидаемо: вход по ключу без password prompt.