Поиск по сайту:

Как заблокировать ваш SSH-сервер


SSH, что означает Secure Shell, по умолчанию не очень безопасен, выбирая базовую аутентификацию по паролю без каких-либо других ограничений. Если вы действительно хотите заблокировать свой сервер, вам потребуется дополнительная настройка.

Не разрешайте вход с паролем — используйте ключи SSH

Первое, что нужно сделать, это полностью избавиться от аутентификации по паролю и перейти на использование SSH-ключей. Ключи SSH — это форма шифрования с открытым ключом; у вас есть открытый ключ, который действует как ваше имя пользователя, и закрытый ключ, который действует как ваш пароль (за исключением того, что этот пароль имеет длину 2048 символов). Ваш закрытый ключ хранится на вашем диске, но зашифрован парольной фразой и ssh-агентом. Когда вы заходите на сервер по SSH, вместо того, чтобы спрашивать ваш пароль, ssh-агент подключается к серверу, используя ваши ключи.

Даже если вы уже используете ключи SSH, вам все равно нужно убедиться, что ваш вход в систему с паролем отключен, поскольку они не являются взаимоисключающими.

Сгенерировать SSH-ключи

Вы можете сгенерировать новый SSH-ключ с помощью утилиты ssh-keygen, установленной по умолчанию в большинстве систем Unix.

ssh-keygen

Это попросит вас ввести парольную фразу для шифрования файла локального ключа. Он не используется для аутентификации на сервере, но его следует держать в секрете.

ssh-keygen сохранит ваш закрытый ключ в ~/.ssh/id_rsa, а также сохранит ваш открытый ключ в ~/.ssh/id_rsa.pub. Закрытый ключ остается на вашем жестком диске, но открытый ключ необходимо загрузить на сервер, чтобы сервер мог подтвердить вашу личность и убедиться, что у вас есть разрешение на доступ к этому серверу.

Сервер хранит список авторизованных пользователей, обычно хранящийся в ~/.ssh/authorized_keys. Вы можете добавить файл ключа в этот файл вручную или использовать утилиту ssh-copy-id :

ssh-copy-id -i ~/.ssh/id_rsa.pub user@host

Замените user@host своим именем пользователя и именем хоста сервера. Вам будет предложено войти со своим старым паролем еще раз, после чего вам не нужно будет вводить его снова, и вы можете отключить вход с паролем.

Отключить вход по паролю SSH

Теперь, когда вы можете получить доступ к серверу с помощью своих ключей, вы можете полностью отключить аутентификацию по паролю. Убедитесь, что аутентификация на основе ключей работает, иначе ваш сервер будет заблокирован.

На сервере откройте /etc/ssh/sshd_config в своем любимом текстовом редакторе и найдите строку, начинающуюся с:

#PasswordAuthentication

Вы захотите раскомментировать это (удалить хэштег) и изменить «да» на «нет»:

PasswordAuthentication no

Затем перезапустите sshd с помощью:

systemctl restart sshd

Вы должны быть вынуждены повторно подключиться, и если ваш ключевой файл неверен, вам не будет предложено ввести пароль.

При желании вы также можете принудительно использовать аутентификацию на основе открытого ключа, которая заблокирует все другие методы аутентификации. Добавьте следующие строки в /etc/ssh/sshd_config:

AuthenticationMethods publickey
PubkeyAuthentication yes

и перезапустите sshd.

Блокировка злоумышленников с помощью denyhosts

denyhosts – это утилита для предотвращения повторных неудачных попыток входа через SSH, подобно тому, как ваш телефон блокирует вас после слишком большого количества попыток. Он не установлен по умолчанию, поэтому вам придется установить его из диспетчера пакетов вашего дистрибутива. Для систем на основе Debian, таких как Ubuntu, это будет:

sudo apt-get install denyhosts -y

После установки включите его с помощью:

sudo systemctl enable denyhosts

denyhosts теперь должен запускаться автоматически, но вы захотите добавить свой IP-адрес в белый список на случай, если вас заблокируют. Вы всегда можете повторить попытку с другого IP-адреса, но это избавит вас от некоторых хлопот.

Откройте /etc/hosts.allow и внизу файла добавьте:

sshd: your-ip-address

заменив your-ip-address вашим IP-адресом.

По умолчанию denyhosts блокируется после одной неудачной попытки для пользователей root и пяти неудачных попыток для других пользователей. Вы можете изменить это поведение, отредактировав /etc/denyhosts.conf.

Если вы случайно заблокировали себя, вам нужно остановить denyhosts и удалить свой IP-адрес из нескольких мест:

  • /etc/hosts.deny
  • /var/lib/denyhosts/hosts
  • /var/lib/denyhosts/hosts-restricted
  • /var/lib/denyhosts/hosts-root
  • /var/lib/denyhosts/hosts-valid
  • /var/lib/denyhosts/users-hosts

Перезапустите denyhosts и вы снова сможете подключиться.

Белый список SSH-доступа

Хотя форсирование SSH-ключей с помощью denyhosts , вероятно, является достаточной защитой, вы можете добавить определенные IP-адреса в белый список. Большинство провайдеров серверов предоставляют инструменты для этого через веб-интерфейс. Если это вариант, вам нужно создать белый список оттуда, а не с SSH-сервера, так как вы всегда сможете изменить IP-адрес из белого списка в случае блокировки.

Если это невозможно, вам нужно будет вручную настроить /etc/hosts.deny, чтобы заблокировать весь трафик с неавторизованных хостов.

Важное примечание. Если вы вносите свой дом в белый список, ваш интернет-провайдер может не предоставить вам статический IP-адрес, и ваш IP-адрес может измениться в любое время. Вы должны убедиться, что этого не произойдет, прежде чем заносить в черный список все остальные IP-адреса, добавлять несколько адресов в качестве резервных или просто пропускать этот шаг.

Откройте /etc/hosts.allow и убедитесь, что ваш IP-адрес указан в файле:

sshd: your-ip-address

Если это так, вы можете пойти дальше и запретить все остальные подключения:

echo 'sshd: ALL' >> /etc/hosts.deny

Перезапустите sshd и вы должны увидеть свои изменения.

В качестве альтернативы настройте прокси-сервер перед вашим SSH-сервером.

Если вы не хотите, чтобы ваш SSH-сервер был подключен к Интернету, но вам нужен доступ к нему с нескольких IP-адресов, вы можете настроить перед ним прокси-сервер для обработки соединения. Это может быть еще один облачный сервер или даже компьютер, работающий у вас дома.

Сервер SSH должен быть настроен так, чтобы принимать подключения только от прокси-сервера, а прокси-сервер должен принимать подключения из любого места. Вы можете настроить прокси-сервер по своему усмотрению, но даже простое подключение по сети будет работать. Имейте в виду, что этот прокси-сервер будет единственной точкой доступа для вашего SSH-сервера, поэтому, если прокси-сервер выйдет из строя, вы будете заблокированы, если у вас нет резервного адреса.

Не разрешать root-вход

Вместо этого создайте нового пользователя и дайте ему привилегию sudo. По сути, это одно и то же, но с одним существенным отличием: потенциальным злоумышленникам потребуется знать имя вашей учетной записи пользователя даже для того, чтобы начать атаку на ваш сервер, потому что это будет не так просто, как root@yourserver.

Помимо безопасности, как правило, хорошая политика Unix заключается в том, чтобы не входить в систему как root все время, поскольку root не создает журналы и не выдает запросы при доступе к защищенным ресурсам. .

Создайте нового пользователя на вашем SSH-сервере:

adduser myfancyusername

и установите пароль для этого пользователя:

passwd myfancyusername

Вы не будете входить в систему с этим паролем, потому что вы по-прежнему будете использовать ключи SSH, но это необходимо. В идеале, сделайте его отличным от вашего пароля root.

Добавьте этого пользователя в /etc/sudoers, чтобы предоставить права администратора:

echo 'myfancyusername ALL=(ALL) ALL' >> /etc/sudoers

Переключитесь на этого пользователя с помощью su myfancyusername и убедитесь, что вы можете переключиться обратно на пользователя root с помощью sudo su (для которого не требуется пароль root). Если можете, у вас есть доступ к sudo.

Теперь вы хотите заблокировать вход в систему root. В /etc/ssh/sshd_config вам нужно изменить:

#PermitRootLogin yes

Убираем хэштег и меняем «да» на «нет»:

PermitRootLogin no

Перезапустите sshd и ваш сервер должен заблокировать все запросы на вход в систему как root.

Настроить двухфакторную аутентификацию

Это, конечно, излишество, но если вы боитесь, что кто-то украдет ваши личные SSH-ключи, вы можете настроить свой SSH-сервер на использование 2FA.

Самый простой способ сделать это — использовать Google Authenticator с устройством Android или iOS, хотя SSH поддерживает множество двухфакторных методов. С Google Authenticator вам будет предоставлен QR-код, который вы можете отсканировать из мобильного приложения Google Authenticator, чтобы связать свой телефон с сервером, а также вам будет предоставлено несколько резервных кодов для восстановления в случае потери телефона. . Не храните эти коды на своем основном компьютере, иначе это не двухфакторный код.