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-ключам является гораздо более безопасной альтернативой. Она использует пару криптографических ключей: открытый ключ, хранящийся на сервере, и закрытый ключ, хранящийся на вашем локальном компьютере. Аутентификацию могут пройти только клиенты с соответствующим закрытым ключом.
Шаги по внедрению аутентификации по ключам (кратко):
- Сгенерируйте пару ключей на вашем локальном компьютере:
bash ssh-keygen -t ed25519 -b 4096 -C "[email protected]"ed25519— это современный, безопасный алгоритм.rsaтакже распространен, часто с-b 4096для крепости ключа.
- Скопируйте открытый ключ на ваш сервер:
bash ssh-copy-id -i ~/.ssh/id_ed25519.pub user@your_server_ip
В качестве альтернативы вручную добавьте содержимое файла~/.ssh/id_ed25519.pubв файл~/.ssh/authorized_keysна сервере для пользователя, под которым вы хотите войти. -
Убедитесь в правильности разрешений на сервере:
- Каталог
~/.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 3LoginGraceTime: Ограничивает время, отведенное пользователю для аутентификации. По умолчанию — 2 минуты. Уменьшение этого значения (например, до30s) сокращает окно для медленных атак.
config LoginGraceTime 30sClientAliveIntervalиClientAliveCountMax: Предотвращает бесконечное поддержание открытых неактивных SSH-сессий.ClientAliveIntervalотправляет нулевой пакет каждые X секунд. ЕслиClientAliveCountMax(по умолчанию 3) ответов не получено, соединение разрывается.
config ClientAliveInterval 300 ClientAliveCountMax 0 # Отключить проверку активности клиента, если вы хотите, чтобы сеансы сохранялись неопределенно долгоBanner: Отображает предупреждение перед аутентификацией. Это служит юридическим уведомлением для потенциальных неавторизованных пользователей.
config Banner /etc/issue.net
Создайте файл/etc/issue.netс вашим желаемым предупреждающим сообщением.
Заключение
Усиление безопасности вашего SSH-сервера — это непрерывный процесс, а не одноразовая настройка. Внедряя эти 10 основных рекомендаций — от смены портов по умолчанию и отключения входа для root до принудительного использования аутентификации по ключам и развертывания брандмауэров — вы создаете надежную систему безопасности для вашего удаленного доступа. Всегда помните о тщательном тестировании изменений, своевременном обновлении систем и регулярном мониторинге журналов на предмет подозрительной активности. Постоянная бдительность — ключ к поддержанию безопасной и надежной среды удаленного администрирования.
Эти практики являются основополагающими для любого системного администратора и значительно снизят вашу подверженность распространенным киберугрозам, защищая инфраструктуру вашего сервера от несанкционированного доступа и возможной компрометации.