Вопрос или проблема
Я использую сервер Ubuntu 20.04, и внезапно у меня возникает тайм-аут операции. Интересно, как я могу устранить эту проблему.
Я использую ufw, и порт подключения открыт. Поэтому, когда я использую sudo ufw status
, он показывает, что порт доступен.
Когда я запускаю systemctl status sshd
, я вижу, что процесс активен и что sshd слушает на порту 0.0.0.0 xx и :: порт xx.
Я могу войти в систему, используя свой пользовательский аккаунт, так что учетные данные здесь не проблема.
Я также могу пинговать сервер с другого компьютера, и пинг работает хорошо.
Редактировать: Я могу подключаться к серверу в локальной сети, но не снаружи. Может ли быть так, что ssh блокируется из интернета, но не в локальной сети?
Предупреждение
Разрешение доступа к любому порту из интернета может быть рискованным. По умолчанию домашний роутер выступает в качестве барьера между вашей домашней сетью и остальным миром. Перенаправление порта с роутера на компьютер в вашей домашней сети позволяет любому человеку снаружи получить прямой доступ к этому компьютеру. Хакеры будут стараться всеми силами захватить контроль над вашим компьютером.
Меры безопасности
Эти меры безопасности специально предназначены для предотвращения несанкционированного доступа по ssh
.
Имена пользователей, пароли и ключи
Хакеры часто пытаются использовать известные имена пользователей (такие как root, admin и т.д.) и пароли, чтобы получить доступ к вашему компьютеру. Доступ к аккаунту root
по умолчанию отключен в Ubuntu. Не включайте этот аккаунт.
Используйте случайно сгенерированный уникальный (не использующийся для других аккаунтов, особенно онлайн-аккаунтов) и длинный пароль.
Пары закрытых и открытых ключей лучше, чем пароли. Лучше отключить аутентификацию по паролю для входа через ssh
и использовать аутентификацию на основе ключей.
Фильтр IP-адресов
Если вы планируете использовать ssh
для доступа к домашнему компьютеру только из одного места, например, с работы, настройте правила брандмауэра так, чтобы разрешались только (диапазон) IP-адресов, используемые вашим рабочим местом.
Fail2Ban
Ограничьте частые попытки входа и забаньте эти IP-адреса.
Настройка собственного VPN
Настройка VPN-сервера в вашей домашней сети является альтернативой прямому доступу по ssh из интернета. VPN более универсальный и безопасный метод. Однако, его сложнее настраивать. Если конфигурация VPN использует аутентификацию с использованием имени пользователя и пароля, вышеупомянутые замечания о легкости угадывания имен и паролей также остаются в силе.
Настройка портов
Смотрите Википедию о переадресации портов, чтобы узнать больше о том, зачем это нужно.
По умолчанию ssh
использует порт 22. Я предположу, что вы его не меняли. Если вы изменили этот порт, то вам необходимо внести соответствующие изменения в инструкции ниже.
Настройка роутера
Убедитесь, что порт 22 перенаправлен на внутренний IP-адрес сервера Ubuntu в домашнем роутере. Это позволит любому человеку снаружи домашней сети использовать ssh для подключения к вашим домашним компьютерам.
Инструкции зависят от роутера и выходят за рамки данного ответа, так как они не имеют отношения к Ubuntu.
Некоторые роутеры позволяют указывать как входящий порт (из интернета), так и исходящий порт (к внутреннему IP-адресу локальной сети для сервера Ubuntu). В этом случае вы можете использовать другой порт, например 2200, при подключении снаружи и настроить ваш роутер соответствующим образом:
Вышеприведенное изображение является лишь примером. Настройки вашего роутера могут выглядеть иначе.
Если вы изменили порт по умолчанию в /etc/ssh/sshd_config
, вы должны будете установить указанный выше внутренний порт на этот порт вместо порта 22.
Чтобы узнать, как настроить ssh
для работы внутри домашней сети, смотрите Подключение двух компьютеров с использованием SSH в домашней сети.
Вот еще одно руководство по переадресации портов для справки.
Надеюсь, это поможет.
Ответ или решение
Для того чтобы обеспечить доступ к SSH-серверу на домашнем компьютере из интернета, необходимо учитывать несколько аспектов, связанных с сетевой настройкой и безопасностью. Ниже представлено руководство, которое охватывает теоретические основы, примеры и практическое применение данного процесса.
Теория
SSH (Secure Shell) — это сетьевой протокол, который позволяет безопасно управлять удаленными серверами через интернет. Проблема, частично описанная в вопросе, связана с необходимостью обеспечить доступ к серверу, работающему на Ubuntu 20.04, из внешней сети, т. е. не из вашей локальной сети. Основные элементы, которые необходимо учесть, включают:
-
Заведение белого списка IP-адресов: Если вы знаете, откуда будут поступать запросы, рекомендуется разрешить доступ только с определенных IP-адресов.
-
Перенаправление портов: Большинство домашних роутеров изначально настроены на блокировку всех входящих соединений из интернета. Для того чтобы получить доступ к SSH извне, необходимо произвести перенаправление портов на роутере.
-
Настройка безопасности: Т.к. открытие SSH-доступа увеличивает риск несанкционированного доступа, необходимо предпринять меры безопасности, такие как использование ключевой аутентификации вместо пароля и установка Fail2Ban для предотвращения брутфорс-атак.
Пример
Допустим, у вас есть Ubuntu-сервер, IP-адрес которого в локальной сети — 192.168.1.10. Вы хотите, чтобы SSH-соединение через порт 22 было доступно извне. Вот как это обычно реализуется:
-
Проверка UFW и SSHD:
- Убедитесь, что SSH доступен и работает на сервере. Команды:
sudo ufw status systemctl status sshd
- SSHD должен быть активен и слушать порт 22 (или другой, если вы изменили настройки по умолчанию).
- Убедитесь, что SSH доступен и работает на сервере. Команды:
-
Настройка роутера:
- В веб-интерфейсе вашего роутера найдите раздел, отвечающий за настройки NAT или перенаправление портов.
- Добавьте правило для перенаправления внешнего порта 22 на IP-адрес 192.168.1.10 и порт 22 в локальной сети.
-
Безопасность:
- Отключение рут-доступа: Убедитесь, что вход для root-пользователя через SSH запрещен (настройка в
/etc/ssh/sshd_config
:PermitRootLogin no
). - Ключевая аутентификация: Настройте аутентификацию по SSH-ключам и отключите парольный вход (
PasswordAuthentication no
). - Fail2Ban: Установите и настройте
Fail2Ban
для блокировки IP-адресов после нескольких неудачных попыток входа.
- Отключение рут-доступа: Убедитесь, что вход для root-пользователя через SSH запрещен (настройка в
Применение
После вышеуказанных настроек, протестируйте подключение извне, используя внешний IP-адрес вашего роутера. Например, ввод команды в терминале с другого устройства, подключенного к интернету:
ssh -p [ваш_внешний_порт] [ваш_логин]@[внешний_IP]
где [ваш_внешний_порт]
— порт, который вы перенаправили, а [внешний_IP]
— IP-адрес вашего домашнего роутера.
Возможные проблемы:
- Динамический IP: Если ваш провайдер предоставляет динамический IP, может потребоваться использовать DDNS-сервис для простоты подключения.
- Порты и брандмауэр: Убедитесь, что все ошибки в настройках UFW устранены, и не забывайте проверять наличие других систем безопасности, которые могут блокировать соединение.
Этот подход требует внимательного соблюдения мер безопасности, чтобы избежать компрометации системы. Всегда проверяйте обновления безопасности и учитывайте возможность использования VPN-серверa для дополнительной защиты инфраструктуры.