Смена SSH-порта и port knocking: прячем вход на сервер
22-й порт сканируют боты круглосуточно — тысячи попыток входа в день забивают логи и создают риск. Смена порта убирает 99% автоматического шума, а port knocking делает SSH невидимым: порт закрыт, пока вы не «постучите» правильной последовательностью. Настроим оба уровня.
Содержание
Шаг 1: меняем порт SSH
['Смена порта — не панацея, но она отсекает ботов, которые бьют только по 22. Редактируем конфиг демона:', 'nano /etc/ssh/sshd_config', 'Находим строку Port и ставим нестандартное значение выше 1024 (например, 2222 или что-то менее очевидное — 49222):', 'Port 49222\nPermitRootLogin prohibit-password\nPasswordAuthentication no\nMaxAuthTries 3', 'Важно: перед перезапуском откройте новый порт в фаерволе, иначе заблокируете себя.', 'ufw allow 49222/tcp\nsystemctl restart sshd\n# НЕ закрывайте текущую сессию, пока не проверите вход в новую:\nssh -p 49222 user@server_ip', 'PermitRootLogin prohibit-password запрещает вход root по паролю, но оставляет ключи — удобно для автоматизации. PasswordAuthentication no убивает саму возможность брутфорса: боту нечего перебирать, если пароли не принимаются в принципе. MaxAuthTries 3 обрывает соединение после трёх неудач, экономя ресурсы демона.', 'Проверьте, что конфиг синтаксически корректен, до перезапуска — так вы не уроните SSH в неработающее состояние:', "sshd -t && echo 'config OK'"]
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.
Арендовать VPS с защищённым SSHSELinux и systemd-socket нюансы
['На системах с systemd (Ubuntu 22.10+, некоторые сборки) SSH может слушать через сокет-активацию, и Port в sshd_config игнорируется. Проверьте:', 'systemctl status ssh.socket', 'Если сокет активен — правьте порт в нём: systemctl edit ssh.socket и добавьте секцию с ListenStream=49222, затем systemctl daemon-reload && systemctl restart ssh.socket.', 'На CentOS/RHEL с SELinux нужно разрешить новый порт для типа ssh_port_t:', 'semanage port -a -t ssh_port_t -p tcp 49222']
Шаг 2: port knocking через knockd
['Port knocking полностью прячет SSH: порт закрыт фаерволом, но при получении «стука» — последовательности пакетов на заданные порты — сервер на время открывает SSH только вашему IP.', 'apt update && apt install -y knockd', 'Настраиваем /etc/knockd.conf:', '[options]\n UseSyslog\n\n[openSSH]\n sequence = 7000,8000,9000\n seq_timeout = 10\n command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 49222 -j ACCEPT\n tcpflags = syn\n\n[closeSSH]\n sequence = 9000,8000,7000\n seq_timeout = 10\n command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 49222 -j ACCEPT\n tcpflags = syn', 'Порт SSH по умолчанию держим закрытым в фаерволе. Включаем демон:', 'systemctl enable --now knockd']
Стучимся с клиента
['С вашей машины отправляем последовательность и подключаемся. Утилита knock идёт в пакете knockd:', 'knock -v server_ip 7000 8000 9000\nssh -p 49222 user@server_ip\n# закрыть порт обратно:\nknock -v server_ip 9000 8000 7000', 'Без knock можно и вручную через nc: for p in 7000 8000 9000; do nmap -Pn --max-retries 0 -p $p server_ip; done — но проще завернуть последовательность в alias или ~/.ssh/config через ProxyCommand.', 'Смысл в том, что при сканировании порт SSH выглядит закрытым (filtered) для всех, кроме того, кто знает секретную последовательность. Массовые сканеры вроде masscan просто не видят открытого 22 или 49222 и уходят дальше. Это не защита от целевой атаки, но обычный фоновый шум исчезает полностью — в логах становится тихо.', 'Частая ошибка: оставить основной порт SSH открытым в фаерволе параллельно с knockd. Тогда knocking бессмысленен — порт и так доступен. Правило по умолчанию должно быть DROP для порта SSH, а knockd временно добавляет ACCEPT для конкретного IP.']
Ключи вместо паролей — обязательно
['Смена порта и knocking не заменяют ключевую аутентификацию. Генерируем ed25519 и заливаем на сервер:', 'ssh-keygen -t ed25519 -a 100\nssh-copy-id -p 49222 user@server_ip', 'После этого PasswordAuthentication no (мы уже поставили) закрывает брутфорс полностью. На VPS от MAATRIX с root-доступом всё это настраивается за 15 минут: AMD EPYC + NVMe в локациях UK и США, оплата картой РФ, СБП или криптой. Быстрый сервер под контролем — идеальная площадка, чтобы поднять защищённый плацдарм для остальных сервисов.']
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.
Арендовать VPS с защищённым SSHЧастые вопросы
Смена порта реально защищает?
От целевой атаки — слабо, но она убирает ~99% автоматического бот-трафика и разгружает логи. Работает как первый слой в связке с ключами и knocking.
Не заблокирую ли я себя port knocking'ом?
Риск есть. Всегда держите открытой вторую SSH-сессию при настройке и добавьте резервное правило доступа с вашего статического IP.
Knockd безопасен на проде?
Для критичных систем лучше single-packet authorization (fwknop) — он устойчив к перехвату последовательности. Knockd — простой и достаточный для личного VPS.