10 основных рекомендаций по усилению защиты SSH-сервера

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

32 просмотров

10 основных рекомендаций по усилению безопасности вашего SSH-сервера

Secure Shell (SSH) — это основа удаленного администрирования серверов, обеспечивающая криптографический сетевой протокол для безопасной передачи данных, удаленного выполнения команд и других сетевых служб. Однако его повсеместное использование также делает его основной целью для злоумышленников. Недостаточно защищенный SSH-сервер может открыть критическую уязвимость, ведущую к несанкционированному доступу, утечкам данных и компрометации системы. Защита вашей среды удаленного доступа — это не просто хорошая практика, это необходимость.

В этой статье изложены 10 основных рекомендаций по усилению конфигурации вашего SSH-сервера. Внедряя эти критические директивы конфигурации, рекомендуемые настройки разрешений и советы по безопасности, вы можете значительно укрепить защиту вашего сервера от несанкционированного доступа и распространенных векторов атак, таких как атаки перебора (brute-force) и кража учетных данных. Следование этим рекомендациям поможет обеспечить безопасность вашего удаленного администрирования и защиту инфраструктуры вашего сервера.

1. Измените порт SSH по умолчанию

Порт SSH по умолчанию — 22. Он общеизвестен и постоянно сканируется автоматизированными ботами, ищущими уязвимые серверы. Изменение порта по умолчанию обеспечивает простой, но эффективный уровень скрытности. Хотя это и не мера безопасности сама по себе, она значительно снижает шум от автоматического сканирования и помогает избежать многих случайных атак.

Чтобы изменить порт, отредактируйте файл sshd_config, который обычно находится по адресу /etc/ssh/sshd_config.

sudo nano /etc/ssh/sshd_config

Найдите строку Port 22 (или добавьте ее, если она не существует) и измените 22 на нестандартный, неиспользуемый номер порта (например, 2222, 49152-65535 — это пользовательские/динамические порты).

#Port 22
Port 2222

После сохранения файла перезапустите службу SSH. Не забудьте обновить правила брандмауэра, чтобы разрешить трафик на новом порту и заблокировать старый.

sudo systemctl restart sshd
# Для UFW (Uncomplicated Firewall):
sudo ufw allow 2222/tcp
sudo ufw deny 22/tcp
sudo ufw reload
# Для Firewalld:
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --permanent --remove-port=22/tcp
sudo firewall-cmd --reload

Совет: Всегда оставляйте одну сессию SSH открытой при тестировании изменений конфигурации. Если вы заблокируете себе доступ, вы сможете отменить изменения в активной сессии.

2. Отключите вход для root-пользователя

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

В файле sshd_config найдите директиву PermitRootLogin и установите ее значение в no.

PermitRootLogin no

Сохраните изменения и перезапустите службу SSH:

sudo systemctl restart sshd

3. Используйте аутентификацию по ключам

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

Шаги по внедрению аутентификации по ключам (кратко):

  1. Сгенерируйте пару ключей на вашем локальном компьютере:
    bash ssh-keygen -t ed25519 -b 4096 -C "[email protected]"
    • ed25519 — это современный, безопасный алгоритм. rsa также распространен, часто с -b 4096 для крепости ключа.
  2. Скопируйте открытый ключ на ваш сервер:
    bash ssh-copy-id -i ~/.ssh/id_ed25519.pub user@your_server_ip
    В качестве альтернативы вручную добавьте содержимое файла ~/.ssh/id_ed25519.pub в файл ~/.ssh/authorized_keys на сервере для пользователя, под которым вы хотите войти.
  3. Убедитесь в правильности разрешений на сервере:

    • Каталог ~/.ssh: 700 (только владелец имеет права на чтение, запись и выполнение)
    • Файл ~/.ssh/authorized_keys: 600 (только владелец имеет права на чтение и запись)

    bash chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys

4. Отключите аутентификацию по паролю

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

В файле sshd_config установите PasswordAuthentication в значение no.

PasswordAuthentication no

Сохраните изменения и перезапустите службу SSH:

sudo systemctl restart sshd

Предупреждение: Никогда не отключайте аутентификацию по паролю, прежде чем убедиться, что аутентификация по ключам правильно работает для всех пользователей, которым нужен доступ. В противном случае вы рискуете заблокировать себе доступ к серверу.

5. Ограничьте доступ пользователей

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

Используйте директивы AllowUsers или AllowGroups в файле sshd_config.

Чтобы разрешить вход только определенным пользователям (например, adminuser, devuser):

AllowUsers adminuser devuser

Чтобы разрешить вход только членам определенной группы (например, sshusers):

AllowGroups sshusers

Совет: Если у вас несколько пользователей, обычно лучше использовать AllowGroups. Создайте выделенную группу для доступа SSH и добавьте в нее авторизованных пользователей.

sudo groupadd sshusers
sudo usermod -aG sshusers adminuser
sudo usermod -aG sshusers devuser

После внесения изменений сохраните их и перезапустите SSH.

6. Используйте надежные парольные фразы для SSH-ключей

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

При генерации SSH-ключа (как в шаге 3) вам будет предложено ввести парольную фразу. Выберите длинную, сложную и запоминающуюся парольную фразу, отличную от любого другого используемого вами пароля.

7. Внедрите ограничение скорости соединений (Fail2Ban)

Даже с аутентификацией по ключам SSH-сервер по-прежнему подвержен попыткам соединения. Такие инструменты, как Fail2Ban, могут активно отслеживать журналы SSH на предмет повторных неудачных попыток входа с одного IP-адреса и автоматически блокировать этот IP-адрес с помощью правил брандмауэра на определенный период.

Установка (пример для Debian/Ubuntu):

sudo apt update
sudo apt install fail2ban

Fail2Ban работает «из коробки» с правилами SSH по умолчанию, но вы можете настроить его конфигурацию, скопировав jail.conf в jail.local и отредактировав его.

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

В файле jail.local вы можете настроить bantime, findtime и maxretry для раздела [sshd].

[sshd]
enabled = true
port = 2222 # Ваш новый порт SSH
logpath = %(sshd_log)s
maxretry = 3
bantime = 1h # Блокировка на 1 час
findtime = 10m # Поиск 3 сбоев в течение 10 минут

Перезапустите Fail2Ban после внесения изменений в конфигурацию:

sudo systemctl restart fail2ban

8. Обновляйте программное обеспечение вашего SSH-сервера

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

# Для Debian/Ubuntu:
sudo apt update && sudo apt upgrade

# Для CentOS/RHEL:
sudo yum update
# или
sudo dnf update

Настройте свою систему на автоматическое применение обновлений безопасности, где это уместно, или установите регулярный график ручного обновления.

9. Мониторьте журналы SSH на предмет подозрительной активности

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

Журналы SSH обычно находятся по следующим адресам:

  • /var/log/auth.log (Debian/Ubuntu)
  • /var/log/secure (CentOS/RHEL)
  • С помощью journalctl (системы systemd):
    bash sudo journalctl -u sshd -f

Ищите повторяющиеся неудачные попытки аутентификации, входы с необычных IP-адресов или успешные входы от незнакомых пользователей. Инструменты, такие как Logwatch или Elastic Stack (ELK), могут автоматизировать анализ журналов и оповещение для больших сред.

10. Настройте правила брандмауэра для ограничения доступа

Брандмауэр — ваша первая линия обороны. По умолчанию он должен блокировать весь входящий трафик, кроме служб, которые вы явно хотите сделать доступными. Для SSH это означает разрешение соединений только на выбранном вами порту (например, 2222) и, в идеале, только с определенных доверенных IP-адресов или сетей.

Пример использования UFW (Uncomplicated Firewall):

Разрешить SSH с определенного IP-адреса 192.168.1.100 на порт 2222:

sudo ufw allow from 192.168.1.100 to any port 2222

Разрешить SSH с определенной подсети 192.168.1.0/24:

sudo ufw allow from 192.168.1.0/24 to any port 2222

Пример использования Firewalld (CentOS/RHEL):

Разрешить SSH с определенного IP-адреса 192.168.1.100 на порт 2222:

sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port=2222 protocol="tcp" accept'
sudo firewall-cmd --reload

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

Дополнительные советы по усилению безопасности

Помимо 10 основных рекомендаций, рассмотрите следующие директивы для еще большей безопасности:

  • MaxAuthTries: Ограничивает количество попыток аутентификации на одно соединение. По умолчанию — 6. Уменьшение этого значения (например, до 3) снижает шансы на атаку перебором. Устанавливается в sshd_config.
    config MaxAuthTries 3
  • LoginGraceTime: Ограничивает время, отведенное пользователю для аутентификации. По умолчанию — 2 минуты. Уменьшение этого значения (например, до 30s) сокращает окно для медленных атак.
    config LoginGraceTime 30s
  • ClientAliveInterval и ClientAliveCountMax: Предотвращает бесконечное поддержание открытых неактивных SSH-сессий. ClientAliveInterval отправляет нулевой пакет каждые X секунд. Если ClientAliveCountMax (по умолчанию 3) ответов не получено, соединение разрывается.
    config ClientAliveInterval 300 ClientAliveCountMax 0 # Отключить проверку активности клиента, если вы хотите, чтобы сеансы сохранялись неопределенно долго
  • Banner: Отображает предупреждение перед аутентификацией. Это служит юридическим уведомлением для потенциальных неавторизованных пользователей.
    config Banner /etc/issue.net
    Создайте файл /etc/issue.net с вашим желаемым предупреждающим сообщением.

Заключение

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

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