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.