Быстро, доступно, безопасно!
Магазин готовых сайтов

Настройка SSHD на AlmaLinux 8.9

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

Настройка сервера на AlmaLinux 8.9 -> Настройка SSHD

SSHD (secure shell daemon) - это служба (программа) обеспечивающая работу SSH. Стандартный SSH "живет" на 22 порту и об этом знаем не только мы.

There were 1088 failed login attempts since the last successful login.

И это менее, чем за сутки, т.е. примерно раз в минуту кто-то пытается войти на сервер подбирая пароли. Серверы SSH прослушивают входящие соединения через TCP-порт 22. Поэтому, порт 22 подвергается несанкционированным попыткам входа в систему от непрошенных гостей, пытающихся получить доступ к серверу. Чтобы это предотвратить необходимо отключить порт 22 и запустить SSH на произвольном порту в диапазоне от 1024 до 65535. В примере будем использовать порт 12345.

Редактируем конфигурационный файл Службы SSHD: vim /etc/ssh/sshd_configменяем стандартный порт 22 на известный только нам "12345": #Port 22
Port 12345

Меняем конфигурацию и добавляем запреты чтобы отключить туннелирование SSH для всех пользователей кроме root: #AllowTcpForwarding yes
AllowTcpForwarding no
Match Group root
AllowTcpForwarding yes
Match all

Запрещаем входить пользователю root: #PermitRootLogin yes
PermitRootLogin no

Запускаем Инструмент управления политиками SELinux, чтобы разрешить службе работать на новом порту: semanage port -a -t ssh_port_t -p tcp 12345редактируем файл Сетевых служб: vim /etc/services и заменяем в нем в соответствующих строках порт "22" на нужный нам 12345 (для примера): #ssh    22/tcp       # The Secure Shell (SSH) Protocol
#ssh    22/udp       # The Secure Shell (SSH) Protocol
ssh     12345/tcp
ssh     12345/udp

Разрешаем брандмауэру использовать новый порт: firewall-cmd --permanent --zone=public --add-port=12345/tcpПерезапускаем SSH сервер, чтобы применить новые настройки: systemctl restart sshd

В результате произведенных действий войти на сервер стандартным способом под пользователем root не получится. Для входа потребуется знать имя пользователя (не используйте для него словарные слова), пароль и номер порта.

Проверить открытые порты: semanage port -l | grep sshРезультат для нашего примера: ssh_port_t           tcp     12345, 22
С "22" делать ничего не нужно, работать он не будет. Чтобы его убрать нужно редактировать политики, но в этом нет необходимости.

Для удаления порта используется команда: semanage port --delete -t ssh_port_t -p tcp 12345


Подключаемся к своему серверу

Наиболее безопасным способом для подключения к удаленном серверу является подключение без пароля, с помощью открытого ключа. Существует несколько различных алгоритмов для генерации ключей. Мы воспользуемся самым безопасным и эффективным на конец 2023 года: EdDSA.

EdDSA (Edwards-curve Digital Signature Algorithm) - этот алгоритм использует эллиптические кривые и разработан чтобы обеспечить большую стойкость к атакам при высокой эффективности, оставаясь при этом более безопасным по сравнению с другими. Наиболее распространенным вариантом EdDSA является Ed25519. Поэтому для генерации ключей выберем именно его, чтобы избежать возможных проблем с совместимостью.

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

Windows

Инструкция для Windows 7 и PuTTY (Release 0.79):

  1. Запускаем программу PuTTYgen (PuTTY Key Generator), она идет в комплекте с PuTTY.
  2. Находим слова Parameters -> Type of key to generate:
  3. Выбираем EdDSA -> Ed25519 (256 bits)
  4. Нажимаем кнопку Generate и произвольно двигаем мышью для генерации уникального ключа.
  5. При необходимости устанавливаем ключевую фразу-пароль на приватный ключ в поле Key Passphrase и подтверждаем в поле Confirm passphrase.
  6. Сохраняем публичный и приватный ключи нажав на кнопки Save public key и Save private key и запоминаем место куда сохранили.
  7. Запускаем PuTTY и в левом меню выбираем: Connection -> SSH -> Auth -> Credentials.
  8. В открывшемся окне находим поле Private key file for authentication: нажимаем кнопку Browse открываем папку где был сохранен файл с приватным ключом и указываем его.
  9. Возвращаемся в левом меню к Session и сохраняем настройки нажав на кнопку Save, чтобы не пришлось это повторять при каждом запуске.
  10. Подсоединяемся к нашему серверу на AlmaLinux и в домашнем каталоге пользователя, для которого производится настройка доступа, создаем папку .ssh и файл authorized_keys в который вставляем публичный ключ: mkdir .ssh
    vim /home/username/.ssh/authorized_keys
    содержимое файла будет выглядеть примерно так: ---- SSH2 PUBLIC KEY ----
    ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIxHBvw0eJtXgC7vuanq2Y1IOkS4LP0o0I6GafnwRVxqa eddsa-key-20231031
    ---- END SSH2 PUBLIC KEY ----
    обратите внимание, что в файле публичного ключа только 3 строки (браузер может показывать по-другому): первая и последняя - это комментарии, а вторая - это сам ключ и служебная информация, причём первые 25 знаков ключа у всех будут одинаковыми.
  11. Устанавливаем права и разрешения на каталог и файл: chown -R username:username .ssh
    chmod 700 .ssh
    chmod 600 /home/username/authorized_keys
  12. Подключаемся без пароля: login as: username
    Authenticating with public key "eddsa-key-20231031"
    Last login: Tue Oct 31 17:23:48 2023 from 1.2.3.4
    [username@example ~]$

Иногда может потребоваться подключаться к одному и тому же хосту от имени разных пользователей. PuTTY не позволяет иметь несколько разных ключей для одного хоста, но это не проблема. Добавляем тот же самый публичный ключ в домашний каталог другого пользователя, повторив шаги 10-12 и получаем необходимый результат: доступ к серверу без пароля.

FreeBSD

Инструкция для FreeBSD 13.2.

ssh-keygen -t ed25519 -f /home/username/.ssh/keys/example.com -N ''


Подключаемся к другим серверам

Как подключиться по SSH с сервера на AlmaLinux 8.8 к серверам с другими операционными системами. Некоторые шаги будут общими для подключения к любым серверам.

В домашнем каталоге пользователя, от имени которого будет устанавливаться подключение создаем необходимую папку (если её ещё там нет) и настраиваем права доступа ("username" заменить на имя вашего пользователя): mkdir .ssh
chown username:username .ssh
chmod 700 .ssh

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

Переходим в папку .ssh и создаем файл: touch configустанавливаем разрешения: chmod 600 configредактируем: vim configи добавляем настройки: Host example
    HostName example.com
    User example
    Port 12345
    IdentitiesOnly yes
    IdentityFile /home/example/.ssh/keys/example

Host example2
    HostName 1.2.3.4
    User example2
    Port 54321
    IdentitiesOnly yes
    IdentityFile /home/example/.ssh/keys/example2

Поскольку нам необходимо подключаться к разным серверам и пользователям, у нас может быть много ключей. Разместим их в отдельном каталоге и установим на него разрешения только для его владельца: mkdir keys
chmod 700 keys

Генерируем ключ: ssh-keygen -t ed25519далее необходимо будет ввести парольную фразу (можно оставить это поле пустым) и указать название файла включающее полный путь, вместо предложенного по умолчанию: Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/username/.ssh/id_ed25519): /home/username/.ssh/keys/example
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/username/.ssh/keys/example.com
Your public key has been saved in /home/username/.ssh/keys/example.com.pub
The key fingerprint is:
... username@example.com
The key's randomart image is:
+--[ED25519 256]--+
|      (.)(.)     |
+----[SHA256]-----+

Если вам не нужна парольная фраза и вы знаете имя файла ключа, то можно всё сделать одной командой без лишних вопросов: ssh-keygen -t ed25519 -f /home/username/.ssh/keys/example.com -N ''

Готово: пара ключей - приватный и публичный сгенерированы с заданным именем.

CentOS

Инструкция как подключиться с сервера на AlmaLinux 8.8 к серверу на CentOS 7.9.x.

Копируем публичный ключ на тот сервер, к которому мы хотим подключаться без пароля: ssh-copy-id -i /home/username/.ssh/keys/example.com.pub example@example.com -p 12345Ключ -i указывает на файл публичного ключа, который надо скопировать на удаленный сервер
Далее идут имя пользователя на сервере к которому подключаемся и имя самого сервера разделенные знаком @
-p указывает порт к которому надо подключиться.

После ввода этой команды мы увидим в терминале примерно следующее (потребуется ответить "да" и ввести пароль пользователя на удаленном сервере): /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/username/.ssh/keys/example.com.pub"
The authenticity of host '[example.com]:12345 ([1.2.3.4]:12345)' can't be established.
ECDSA key fingerprint is SHA256:[...].
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
example@example.com's password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh -p '12345' 'example@example.com'"
and check to make sure that only the key(s) you wanted were added.
Однако с учетом нашего конфигурационного файла для подключения нам будет достаточно указать название хоста: ssh exampleи мы уже на нужном сервере.

FreeBSD


Метки: sshd

Опрос

В каком году был сделан ваш сайт? (голосов: 24)

  • до 2015 года - 23 (96%)
  • в 2015 - 0 (0%)
  • в 2016 - 0 (0%)
  • в 2017 - 0 (0%)
  • в 2018 - 1 (4%)
  • в 2019 - 0 (0%)