20 необходимых настроек безопасности SSH для системных администраторов Linux

20 необходимых настроек безопасности SSH для системных администраторов Linux


SSH (Secure Shell) является одним из самых важных инструментов для системных администраторов и разработчиков Linux, так как позволяет безопасно подключаться к удалённым машинам, запускать программы из командной строки, управлять файлами, передавать данные, перенаправлять порты и даже удалённо запускать графические приложения.

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

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

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

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

Для этого откройте файл конфигурации SSH с помощью текстового редактора:

sudo nano /etc/ssh/sshd_config 

Ищите строку, которая говорит:

#Port 22 

Раскомментируйте его (удалите #) и измените на номер порта по вашему выбору, например:

Port 2200 

После сохранения файла перезапустите службу SSH, чтобы применить изменения:

sudo systemctl restart ssh     # Debian/Ubuntu sudo systemctl restart sshd    # RHEL/CentOS 

Важно: В Debian/Ubuntu служба SSH называется ssh, а в RHEL/CentOS она называется sshd. Всегда используйте правильное имя при перезапуске или проверке службы.

Затем обновите правила брандмауэра, чтобы разрешить трафик на новом порту.

------------------ On FirewallD ------------------  sudo firewall-cmd --permanent --zone=public --add-port=2200/tcp sudo firewall-cmd --reload  ------------------ On UFW ------------------ sudo ufw allow 2200/tcp 

В новых версиях OpenSSH изменение порта в sshd_config может не работать, так как SSH управляется через сокеты systemd.

Создайте переопределение сокета systemd (замените ListenStream на нужный вам порт):

sudo mkdir -p /etc/systemd/system/ssh.socket.d sudo bash -c 'cat > /etc/systemd/system/ssh.socket.d/listen.conf <<EOF [Socket] ListenStream= ListenStream=2200 EOF' 

Перезагрузите systemd и перезапустите службу SSH:

sudo systemctl daemon-reload sudo systemctl restart ssh     # Debian/Ubuntu sudo systemctl restart sshd    # RHEL/CentOS 

Обновите правила вашего файрвола (так же, как указано выше).

2. Как отключить вход по SSH для root

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

Чтобы отключить вход под root, найдите следующую строку в файле конфигурации SSH.

PermitRootLogin yes 

и изменить это на:

PermitRootLogin no 

Сохраните файл и перезапустите службу SSH, чтобы применить изменения:

sudo systemctl restart sshd 

3. Как войти на сервер Linux без пароля SSH

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

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

Сначала создайте пару SSH-ключей на вашем локальном компьютере:

ssh-keygen -t rsa -b 4096 

Далее скопируйте ваш открытый ключ на удалённый сервер:

ssh-copy-id user@remote-server 

После установки ключа вы сможете войти на сервер без пароля:

ssh user@remote-server 

4. Как разрешить SSH только определённым пользователям в Linux

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

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

AllowUsers alice bob 

Или, чтобы разрешить целые группы, используйте:

AllowGroups admins devops 

После внесения этих изменений перезапустите службу SSH:

sudo systemctl restart sshd 

С этого момента только указанные пользователи (alice и bob) или группы (admins и devops) смогут входить через SSH, что поможет усилить безопасность сервера.

5. Как показать приветственное или предупреждающее сообщение при входе по SSH

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

Один простой способ — отредактировать файл Сообщение дня (MOTD):

sudo nano /etc/motd 

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

sudo nano /etc/issue.net 

Затем укажите SSH отображать этот баннер, добавив или отредактировав следующую строку в файле конфигурации SSH:

Banner /etc/issue.net 

Наконец, перезапустите службу SSH, чтобы применить изменения:

sudo systemctl restart sshd 

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

6. Как отслеживать неудачные попытки входа по SSH

Мониторинг неудачных попыток входа по SSH необходим для выявления несанкционированных попыток доступа и повышения безопасности сервера.

В дистрибутивах на базе Debian вы можете проверить журналы с помощью:

sudo grep "Failed password" /var/log/auth.log 

В дистрибутивах на основе RHEL используйте:

sudo grep "Failed password" /var/log/secure 

Для мониторинга активности входа в SSH в режиме реального времени вы можете использовать команду journalctl:

sudo journalctl -u sshd -f 

7. Как ограничить доступ по SSH по IP-адресу в Linux

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

Вы можете настроить это напрямую в файле конфигурации SSH, указав пользователя и разрешённый ему IP-адрес:

AllowUsers [email  

В качестве альтернативы вы можете применять ограничения по IP на уровне брандмауэра. Например, с помощью UFW разрешите доступ только с определённого IP-адреса к порту 22:

------------------ On FirewallD ------------------  sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept' sudo firewall-cmd --reload  ------------------ On UFW ------------------  sudo ufw allow from 192.168.1.100 to any port 22 

8. Как установить тайм-аут простоя для SSH-сессий

Неактивные SSH-сеансы могут представлять угрозу безопасности, если пользователь забудет выйти из системы, оставив соединение открытым для потенциального злоупотребления.

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

ClientAliveInterval 300 ClientAliveCountMax 0 
  • ClientAliveInterval 300 → Отправляет сообщение «поддержание активности» каждые 300 секунд (5 минут).
  • ClientAliveCountMax 0 → Отключает сеанс, если не получен ответ.

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

9. Как включить двухфакторную аутентификацию (2FA) для входа по SSH

Добавление двухфакторной аутентификации (2FA) к SSH значительно повышает безопасность, требуя второго этапа проверки помимо вашего пароля.

На системах Debian/Ubuntu вы можете использовать Google Authenticator.

sudo apt install libpam-google-authenticator 

Затем настройте двухфакторную аутентификацию (2FA) для вашей учетной записи, выполнив следующую команду:

google-authenticator 

Далее включите модуль PAM для SSH, отредактировав:

sudo nano /etc/pam.d/sshd 

Добавьте следующую строку:

auth required pam_google_authenticator.so 

Наконец, разрешите аутентификацию с вызовом-ответом в файле конфигурации SSH:

ChallengeResponseAuthentication yes 

Перезапустите службу SSH, чтобы применить изменения:

sudo systemctl restart sshd 

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

10. Как ограничить SSH-подключения с помощью Fail2ban

Fail2ban — это мощный инструмент, который помогает защитить ваш сервер от атак методом подбора пароля, временно блокируя IP-адреса, с которых многократно не удаётся выполнить вход.

Чтобы настроить это, сначала установите Fail2ban на системах Debian/Ubuntu:

sudo apt install fail2ban 

Затем включите SSH-тюрьму, создав или отредактировав локальный конфигурационный файл:

sudo nano /etc/fail2ban/jail.local 

Добавьте следующие строки для настройки защиты SSH:

[sshd] enabled = true port = ssh maxretry = 3 

Наконец, перезапустите Fail2ban, чтобы применить изменения:

sudo systemctl restart fail2ban 

С включённым Fail2ban повторные неудачные попытки входа автоматически вызывают временные блокировки, что значительно снижает риск атак методом подбора пароля.

11. Как настроить аутентификацию SSH на основе ключей в Linux

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

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

ssh-keygen -t ed25519 

Далее скопируйте ваш открытый ключ на удалённый сервер:

ssh-copy-id user@server 

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

PasswordAuthentication no 

Перезапустите службу SSH, чтобы применить изменение:

sudo systemctl restart sshd 

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

12. Как разрешить или запретить доступ по SSH с помощью hosts.allow и hosts.deny

Linux предоставляет простой способ контроля доступа к сервисам с помощью TCP-оберток, которые используют файлы /etc/hosts.allow и /etc/hosts.deny.

Сначала разрешите доверенные IP-адреса в /etc/hosts.allow:

sshd: 192.168.1.100 

Затем запретите все остальные IP-адреса, отредактировав /etc/hosts.deny:

sshd: ALL 

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

13. Как проверять и контролировать активные SSH-сессии в Linux

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

who OR w 

Если вам нужно завершить сеанс конкретного пользователя, вы можете использовать pkill с их именем пользователя:

sudo pkill -u username 

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

14. Как настроить SSH-туннелирование (перенаправление портов) в Linux

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

Для локального перенаправления портов вы можете перенаправить порт на вашем локальном компьютере на порт на удалённом сервере.

ssh -L 8080:localhost:80 user@remote-server 
  • 8080 → Локальный порт на вашем компьютере.
  • localhost:80 → Пункт назначения на удалённом сервере.
  • user@remote-server → Ваши учетные данные для входа по SSH.

После выполнения этой команды весь трафик, отправляемый на localhost:8080 на вашем локальном компьютере, будет безопасно перенаправлен на порт 80 на удалённом сервере.

15. Как включить подробное логирование для устранения неполадок SSH

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

Чтобы включить подробное ведение журнала, просто выполните:

ssh -vvv user@server 
  • Флаг -vvv увеличивает уровень подробностей, предоставляя исчерпывающую информацию о каждом этапе установления SSH-соединения.
  • Вы также можете использовать меньшее количество параметров vs (-v или -vv) для менее подробного вывода.

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

16. Как защитить SSH с помощью надежных шифров и протоколов

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

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

Protocol 2 Ciphers aes256-ctr,aes192-ctr,aes128-ctr MACs hmac-sha2-512,hmac-sha2-256 KexAlgorithms [email  
  • Протокол 2 → Обеспечивает использование только безопасного протокола SSHv2.
  • Шифры → Определяет сильные алгоритмы шифрования для передачи данных.
  • MAC → Устанавливает защищённые коды аутентификации сообщений для проверки целостности данных.
  • KexAlgorithms → Выбирает безопасные алгоритмы обмена ключами.

После внесения этих изменений перезапустите SSH, чтобы применить их:

sudo systemctl restart sshd 

17. Как ограничить доступ по SSH определённым диапазоном портов

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

На системах, использующих UFW (Простой файрвол), вы можете разрешить диапазон портов с помощью следующей команды:

sudo ufw allow 1024:1040/tcp 

Для пользователей FirewallD эквивалент будет следующим:

sudo firewall-cmd --permanent --add-port=1024-1040/tcp sudo firewall-cmd --reload 

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

18. Как изменить тайм-аут подключения SSH в Linux

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

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

LoginGraceTime 30 

После сохранения файла перезапустите службу SSH, чтобы изменения вступили в силу:

sudo systemctl restart sshd 

19. Как включить компрессию SSH для более быстрых соединений

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

Чтобы использовать сжатие для каждого соединения, просто добавьте флаг -C при подключении:

ssh -C user@server 

Для постоянного решения вы можете включить сжатие в файле конфигурации клиента SSH.

Compression yes 

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

20. Как настроить SSH-псевдонимы для более простого доступа

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

Чтобы настроить псевдоним, отредактируйте файл конфигурации вашего SSH-клиента и добавьте запись следующего вида:

Host myserver   HostName 192.168.1.50   User alice   Port 2200 

После сохранения файла вы можете подключиться просто, выполнив:

ssh myserver 

21. Как пересылать графические приложения через SSH (X11 переадресация)

SSH может делать больше, чем просто обеспечивать доступ через командную строку; он также может перенаправлять графические приложения с удалённого сервера на ваш локальный компьютер с помощью перенаправления X11, что позволяет запускать GUI-приложения на сервере так, как если бы они выполнялись локально.

Чтобы включить пересылку X11, подключитесь с опцией -X:

ssh -X user@server 

После подключения вы можете запускать графические приложения, такие как:

gedit 

Окно приложения будет отображаться на вашем локальном компьютере, в то время как все обработки происходят на удаленном сервере.

Совет: Убедитесь, что пересылка X11 разрешена в файле конфигурации SSH-сервера.

X11Forwarding yes 
Заключительные мысли

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

Следуя советам из этого руководства, вы сможете защитить свои серверы от несанкционированного доступа, упростить вход с помощью аутентификации на основе ключей и псевдонимов, а также контролировать активность с помощью таких инструментов, как fail2ban и автоматические тайм-ауты сеансов.

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

Освоение этих практик поможет вам эффективно управлять серверами, оставаться защищённым от атак и работать как уверенный администратор Linux.

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *