Лучшие практики защиты Windows SSH сервера
SSH-сервер открывает доступ к удаленному управлению сервером, позволяет администрировать системы и обмениваться данными. Но насколько безопасно использовать этот инструмент?
Доступ по SSH является одним из наиболее популярных способов подключения к серверам, но вместе с этим он остается привлекательной целью для киберпреступников. Защита SSH-сервера – это не просто технический нюанс, а необходимость для всех, кто стремится защитить свои данные и избежать неприятных сюрпризов. В этой статье мы сосредоточимся на лучших практиках защиты Windows SSH сервера.
Инструкция, как получить доступ по SSH
Почему нужно защищать SSH-сервер?
Несмотря на высокий уровень безопасности протокола SSH, сам сервер может быть уязвим из-за неправильных настроек или слабых паролей.
Основные причины защиты:
- защита от брутфорс-атак, когда злоумышленники подбирают пароли;
- избежание несанкционированного доступа к критически важным системам;
- предотвращение использования сервера в качестве точки доступа для атак на другие системы.
Лучшие методы защиты Windows SSH Server
1. Использование ключей вместо паролей
Один из самых эффективных способов защиты SSH-сервера – это переход на ключевую аутентификацию вместо использования паролей. Ключи сложнее угадать и это значительно снижает риск брутфорс-атак. Для этого необходимо выполнить несколько шагов:
- сгенерируйте пару ключей (публичный и приватный);
- добавляйте публичный ключ к серверу, а приватный храните на клиентском компьютере.
Обратите внимание! Для подключения к вашему Windows VPS через SSH с помощью ключей, ключи нужно генерировать на вашем локальном компьютере, а не на самом сервере.
Если у вас установлен OpenSSH-клиент (встроенный в современные версии Windows 10/11), вы можете создать ключи непосредственно в PowerShell.
Выполните команду для создания ключей:
# ssh-keygen -t rsa -b 4096
Укажите путь для сохранения ключей (или нажмите Enter, чтобы использовать стандартный путь C:\Users\Ваш_пользователь\.ssh\id_rsa). По желанию задайте пароль для защиты приватного ключа (или оставьте поле пустым, нажав Enter).
В результате создадутся два файла:
- приватный ключ: id_rsa (никому не передавайте!);
- публичный ключ: id_rsa.pub (его нужно загрузить на сервер).
Теперь, когда у вас есть пара ключей, вам нужно передать публичный ключ на ваш Windows VPS. Для этого выполните следующие шаги.
Шаг 1. Подключитесь к серверу с помощью пароля
Сначала вам нужно подключиться к вашему серверу с помощью обычного пароля (до того, как вы настроите ключи):
# ssh Administrator@IP_вашего_VPS
Шаг 2. Создайте директорию .ssh на сервере
После подключения к серверу создайте папку .ssh в домашней директории пользователя Administrator:
# mkdir $HOME\.ssh
Шаг 3. Добавьте публичный ключ в authorized_keys
Откройте файл authorized_keys, где будут храниться разрешенные публичные ключи для входа:
# notepad $HOME\.ssh\authorized_keys
Эта команда открывает текстовый редактор, в котором нужно вставить содержимое вашего публичного ключа. Откройте на вашем локальном компьютере файл id_rsa.pub, скопируйте содержимое и вставьте его в редактор на сервере. Сохраните файл.
Шаг 4. Проверьте права доступа
Убедитесь, что у файла authorized_keys правильные права доступа:
# icacls $HOME\.ssh\authorized_keys /inheritance:r /grant:r Administrator:F
Теперь вы можете попробовать подключиться к вашему серверу через SSH и он должен использовать ключ для аутентификации вместо пароля.
2. Отключение входа через пароль
Если вы хотите разрешить подключение только через ключи (без паролей), вам нужно отредактировать конфигурацию SSH-сервера на вашем Windows VPS. Откройте файл sshd_config, который находится по пути C:\ProgramData\ssh\sshd_config, и измените или добавьте следующие параметры:
# PasswordAuthentication no
# PubkeyAuthentication yes
Затем перезапустите службу SSH, чтобы изменения начали действовать:
# Restart-Service sshd
Эти шаги позволят вам безопасно отключить вход через пароль и перейти на аутентификацию только по ключам.
3. Изменение стандартного порта
Стандартный порт SSH – 22. Большинство ботов и злоумышленников автоматически сканируют серверы именно на этом порту для подбора паролей или ключей. Изменение стандартного порта на нестандартный значительно усложняет такие атаки, ведь ваш сервер будет менее заметен для автоматизированных сканеров.
Важно заметить! Убедитесь, что выбранный порт не используется другими программами на сервере. Вы можете проверить это с помощью команды PowerShell:
# netstat -ano | findstr :<порт>
То есть, если вы хотите изменить порт на 2222, необходимо для проверки сначала выполнить следующую команду:
# netstat -ano | findstr :2222
Если вы не получите никакого результата – это будет означать, что порт свободен и не используется другими службами. Если же порт уже используется, вы получите примерный результат, который приведен на скриншоте:
Для изменения стандартного порта на другой вам необходимо будет выполнить несколько шагов.
Шаг 1. Откройте файл конфигурации SSH
Выполните команду в PowerShell для открытия файла конфигурации sshd_config в текстовом редакторе:
# notepad 'C:\ProgramData\ssh\sshd_config'
Шаг 2. Измените стандартный порт
В файле найдите строку, начинающуюся со слова Port. Если этой строки нет, добавьте ее вручную. Укажите желаемый порт, например, Port 2222.
Обратите внимание! Убедитесь, что строка не комментируется символом #.
Сохраните файл (нажмите Ctrl+S) и закройте редактор.
Шаг 3. Откройте порт в брандмауэре Windows
Теперь необходимо открыть порт в брандмауэре Windows, чтобы SSH-соединение могло работать на новом порту. В PowerShell введите команду для создания правила брандмауэра, которое разрешит входящие соединения на указанный порт.
# New-NetFirewallRule -DisplayName «SSH New Port» -Direction Inbound -Protocol TCP -LocalPort 2222 -Action Allow
где 2222 – это ваш выбранный порт.
Чтобы проверить, было ли успешно создано правило брандмауэра для нового порта в Windows, можно воспользоваться командой PowerShell:
# Get-NetFirewallRule | Where-Object DisplayName -eq «SSH New Port»
Эта команда выполняет поиск всех правил брандмауэра, у которых имя отображения (DisplayName) соответствует «SSH New Port». Если правило было создано, вы увидите детали этого правила, включая его статус, направление (Inbound), действие (Allow) и другие параметры.
Шаг 4. Перезагрузите службу SSH
Теперь нужно перезапустить службу SSH, чтобы изменения в конфигурации вступили в силу. В PowerShell выполните команду для перезапуска службы sshd.
# Restart-Service sshd
Это позволит серверу SSH начать слушать новый порт. Для проверки работы на новом порту выполните команду:
# netstat -ano | findstr :2222
где 2222 – это ваш выбранный порт.
Если все настроено правильно, команда покажет, что порт прослушивается. Теперь вы можете подключаться к SSH по новому порту. Если вы используете клиент SSH, не забудьте указать новый порт при подключении.
Теперь злоумышленникам придется потратить больше времени на поиск вашего нестандартного порта. Это не единственная защита, но дает дополнительный уровень безопасности (в частности, в сочетании с другими методами, такими как ключи SSH или блокировка IP).
4. Ограничение доступа по IP-адресам
Ограничение доступа к SSH-серверу по IP-адресам является одной из наиболее часто используемых мер безопасности для сервера. Вы можете разрешить доступ к серверу только с определенных доверенных IP-адресов и одновременно уменьшить количество потенциально опасных IP, которые могут подключиться к вашему SSH-серверу.
Вы можете использовать брандмауэр Windows для ограничения доступа. Для этого вам нужно создать правило брандмауэра, которое разрешает подключение к SSH-серверу только с конкретных IP-адресов или диапазонов адресов.
Откройте PowerShell с правами администратора и создайте правило, которое разрешит подключение только с определенного IP-адреса:
# New-NetFirewallRule -DisplayName «Allow SSH from Specific IP» -Direction Inbound -Protocol TCP -LocalPort 2222 -RemoteAddress 111.111.111.111.111 -Action Allow
Это правило разрешает доступ к порту 2222 только с IP-адреса 111.111.111.111.111. Дополнительно проверить эту настройку можно через графический интерфейс.
Важно заметить! Узнать свой IP-адрес вы можете по ссылке – https://2ip.ua/ua/.
Если вы хотите разрешить доступ с нескольких IP-адресов или с диапазона адресов, добавьте их в список RemoteAddress через запятую. Например:
# New-NetFirewallRule -DisplayName «Allow SSH from Trusted IPs» -Direction Inbound -Protocol TCP -LocalPort 2222 -RemoteAddress 111.111.111.111.111, 111.111.111.111.111 -Action Allow
Это позволит подключение с нескольких указанных IP-адресов.
Чтобы обеспечить максимальную защиту, можно добавить правило для блокировки доступа со всех остальных IP-адресов после того, как разрешен доступ с доверенных IP:
# New-NetFirewallRule -DisplayName «Block SSH from All Other IPs» -Direction Inbound -Protocol TCP -LocalPort 2222 -RemoteAddress Any -Action Block
Это правило будет блокировать все соединения к SSH-серверу, кроме тех, которые указаны в правилах «Allow».
Таким образом, ограничение доступа по IP-адресам обеспечивает доступ только с определенных IP, тем самым уменьшая количество возможных атак на сервер. Благодаря этому легко контролировать, кто может подключаться к серверу SSH, и гарантировать, что доступ имеют только авторизованные пользователи.
Однако, если вы работаете в сети, где IP-адреса могут меняться (например, динамические IP в интернет-подключениях), вам может потребоваться часто обновлять правила брандмауэра. Вы должны внимательно следить за IP-адресами, чтобы случайно не заблокировать себя или авторизованных пользователей.
5. Настройка интервала времени бездействия
Idle Timeout (время ожидания бездействия) – это механизм или параметр, который определяет, сколько времени может длиться соединение без активности, после чего оно автоматически будет закрыто или разорвано.
Например, если вы подключаетесь к серверу через SSH и не вводите команд в течение определенного времени (например, 15 минут), соединение может автоматически закрыться. Это помогает избежать ситуаций, когда открытые SSH-сеансы остаются активными без присмотра.
Чтобы настроить интервал времени бездействия (Idle Timeout) для SSH-сервера на Windows, вам следует изменить параметры конфигурации SSH-сервера. Откройте файл конфигурации sshd_config с помощью текстового редактора или используйте следующую команду:
# notepad C:\ProgramData\ssh\sshd_config
В файле sshd_config найдите или добавьте следующие строки для настройки Idle Timeout:
ClientAliveInterval – это интервал в секундах, после которого сервер отправит сообщение клиенту, чтобы проверить его активность. Если вы хотите, чтобы сервер проверял клиентскую активность каждые 5 минут (300 секунд), укажите следующее:
# ClientAliveInterval 300
ClientAliveCountMax – это количество таких проверок, после которых, если клиент не отвечает, соединение будет закрыто. Например, если вы хотите разрешить 3 попытки проверки перед отключением:
# ClientAliveCountMax 3
Таким образом, соединение будет автоматически закрыто после 15 минут бездействия (3 попытки по 5 минут).
После изменения файла конфигурации нужно перезапустить службу SSH для применения новых настроек, то есть в PowerShell введите команду:
# Restart-Service -Name sshd
Вы можете проверить, работают ли новые настройки, подключившись к серверу через SSH и проверив, происходит ли разрыв соединения после заданного времени бездействия.
6. Резервное копирование файла конфигурации SSH на Windows
Резервное копирование файла конфигурации SSH является важной частью административной практики, особенно на серверах, где SSH используется для удаленного доступа. Это позволяет обеспечить безопасность и стабильность системы в случае каких-либо изменений или ошибок, а также является необходимым шагом в сохранении работоспособности сервера после обновлений или некорректных настроек.
Конфигурационный файл sshd_config на сервере определяет, как именно SSH будет работать. Он включает в себя:
- Порты и адреса: указывается, на каких портах и IP-адресах сервер будет принимать соединения.
- Методы аутентификации: определяет, разрешать ли аутентификацию по паролю или только с помощью ключей.
- Ограничения доступа: устанавливаются правила доступа для определенных пользователей или групп.
- Таймауты: определяет время, после которого соединение будет автоматически закрыто, если нет активности.
Этот файл является основным элементом для настройки и безопасности сервера, и его корректная настройка имеет критическое значение для безопасной работы вашего сервера.
Чтобы вручную создать копию, перейдите в директорию, где хранится файл конфигурации sshd_config. Для этого откройте Проводник Windows или Командную строку (Cmd) и перейдите в следующую директорию:
# C:\ProgramData\SSH\
Важно заметить! Директория ProgramData является скрытой, поэтому вам нужно включить отображение скрытых файлов в настройках Проводника или вручную перейти в эту директорию через командную строку.
Чтобы создать резервную копию файла конфигурации, вы можете просто скопировать его в другое место на компьютере (например, на рабочий стол). Или выполнить следующую команду через PowerShell:
# copy C:\ProgramData\SSH\sshd_config C:\Users\Administrator\Desktop\sshd_config.bak
Так резервная копия файла будет сохранена на вашем рабочем столе.
Если вам нужно восстановить конфигурацию из резервной копии, просто скопируйте ее обратно в оригинальное место. После восстановления конфигурационного файла нужно перезапустить службу SSH, чтобы изменения вступили в силу.
7. Ограничение доступа для пользователей с административными правами
Учетная запись root на сервере имеет полный доступ к системе. Это позволяет выполнять любые операции, включая изменение важных системных файлов и настроек. Если злоумышленник получит доступ к root-аккаунту, он сможет выполнить любые вредоносные действия, что значительно повышает риск компрометации сервера.
Запрет доступа для root (или для администратора в Windows) на SSH-сервере Windows осуществляется с помощью настройки параметра PermitRootLogin в файле sshd_config и перезапуска службы SSH. Для запрета откройте файл sshd_config:
# notepad C:\ProgramData\SSH\sshd_config
Добавьте или измените следующую строку:
# PermitRootLogin no
Это запретит прямой доступ к root через SSH. После изменений перезапустите службу SSH для их применения:
# Restart-Service sshd
Это поможет избежать потенциальных проблем с безопасностью, поскольку доступ к серверу с правами администратора будет ограничен или запрещен.
В заключение
Защита SSH-сервера на Windows является важной частью безопасности вашего сервера, поскольку SSH предоставляет удаленный доступ к системе. Неправильная настройка или отсутствие мер безопасности могут привести к серьезным последствиям.
Приведенные выше методы защиты помогут минимизировать риски, связанные с несанкционированным доступом и злоупотреблениями, обеспечат целостность вашей системы и надежно защитят сервер от потенциальных атак.
Мощные Windows VPS
с бесплатным администрированием 24/7
Возможно, вас заинтересует
Как настроить SSH сервер на Windows
SSH (Secure Shell) – это сетевой протокол, который предоставляет безопасный доступ к удаленным системам...
Обновлено: 06.11.2024
|Как получить доступ по SSH?
SSH (Secure SHell – безопасная оболочка) – это сетевой протокол, используемый для безопасного удаленного...
Обновлено: 04.03.2024
|Как добавить на сервер NVMe диск
Наши новые быстрые VPS тарифы уже включают в себя NVMe-диски. Выберите свой мощный VPS...
Обновлено: 22.06.2021
|
Наш телеграм
с важными анонсами, розыгрышами и мемами
Присоединиться