Настройка 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):
- Запускаем программу PuTTYgen (PuTTY Key Generator), она идет в комплекте с PuTTY.
- Находим слова Parameters -> Type of key to generate:
- Выбираем EdDSA -> Ed25519 (256 bits)
- Нажимаем кнопку Generate и произвольно двигаем мышью для генерации уникального ключа.
- При необходимости устанавливаем ключевую фразу-пароль на приватный ключ в поле Key Passphrase и подтверждаем в поле Confirm passphrase.
- Сохраняем публичный и приватный ключи нажав на кнопки Save public key и Save private key и запоминаем место куда сохранили.
- Запускаем PuTTY и в левом меню выбираем: Connection -> SSH -> Auth -> Credentials.
- В открывшемся окне находим поле Private key file for authentication: нажимаем кнопку Browse открываем папку где был сохранен файл с приватным ключом и указываем его.
- Возвращаемся в левом меню к Session и сохраняем настройки нажав на кнопку Save, чтобы не пришлось это повторять при каждом запуске.
- Подсоединяемся к нашему серверу на 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 знаков ключа у всех будут одинаковыми. - Устанавливаем права и разрешения на каталог и файл: chown -R username:username .ssh
chmod 700 .ssh
chmod 600 /home/username/authorized_keys - Подключаемся без пароля: 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
Опрос
Адаптирован ли ваш сайт для смартфонов и планшетов? (голосов: 33)
- Да - 4 (12%)
- Нет - 2 (6%)
- Не знаю - 1 (3%)
- Нет сайта - 26 (79%)