Установка и настройка сервера SSH в Linux
Secure Shell, т. е. SSH – протокол, обеспечивающий защищённые соединения и передачу данных между двумя удалёнными компьютерами. Изначально создавался на замену таким системам как rlogin и rcp. Как понятно из полного названия протокола, система SSH позволяет соединяться и управлять удалённым узлом (компьютером, маршрутизатором и т. д.), при этом защищая весь передаваемый трафик с помощью высоконадёжного шифрования.
SSH широко применяется администраторами серверов для их настройки и управления, да и обычные продвинутые пользователи — владельцы, например, сайтов или виртуальных серверов активно используют SSH для подключения к своей учётной записи на хостинге и использования командной оболочки сервера.
Сразу после окончания разработки система SSH стала активно трансформироваться в закрытый коммерческий продукт в виде версии SSH2. Но благодаря сообществу GNU версии протокола SSH1 и SSH2 были реализованы в виде открытого и свободно распространяемого ПО openSSH. В Linux-системах используется именно этот метапакет.
Метапакет SSH базово включает в себя сервер SSH (sshd) в качестве програмы-демона, а также несколько утилит: ssh – удаленная регистрация и выполнение команд, scp – передача файлов и ssh-keygen – для генерации пар SSH-ключей.
Установка пакетов SSH
Как уже говорилось система ssh в Linux-системах распространяется в виде составного метапакета, поэтому для установки всех требуемых утилит ssh нужно выполнить всего одну команду:
В Ubuntu
После чего начнется процесс установки
Как видно, менеджер пакетов сам распознает все зависимые и связанные пакеты и установит их. Также, по завершению установки, автоматически будет запущен SSH-сервер в режиме демона. Это можно проверить командой:
$ systemctl status sshd
или:
$ service sshd status даст тот же вывод. Теперь сервер работает с базовыми настройками по-умолчанию.
Настройка SSH
Режим работы SSH-сервера с настройками по-умолчанию хоть и является вполне работоспособным для небольших частных сетей, всё же нуждается в задании некоторых важных параметров для использования на высоконадёжных публичных серверах. Настройки демона хранятся в файле /etc/ssh/sshd_config. Посмотреть его можно командой
В первую очередь следует обратить внимание на следующие параметры: Port, AddressFamily, ListenAddress. Первый глобально задаёт номер порта, через который будет работать соединение и если оставить его стандартным, т. е. 22, то велика вероятность, что он будет слишком часто сканироваться роботами.
Примечание: для задания активации параметра необходимо раскомментировать соответствующую строку — убрать символ «#» в её начале.
Второй параметр задаёт семейство используемых IP-адресов — IPv4 и IPv6. Если, к примеру, используются только адреса IPv4, то очень рекомендуется установить для параметра
Для адресов семейства IPv6 используется значение inet6.
Параметр ListenAddress позволяет задавать порты для отдельных сетевых интерфейсов:
Поскольку реализация openSSH позволяет работать с протоколами SSH1 и SSH2, то разумно отключить использование SSH1, т. к. эта версия является устаревшей. Работа по SSH1 крайне не рекомендуется: Protocol 2
Очень полезным является параметр, позволяющий проводить авторизацию и шифрование трафика с помощью специальных SSH-ключей:
Или же, в случае, если всё-таки необходимо использовать доступ по паролю, то обязательно нужно отключать авторизацию по пустому паролю:
Для указания разрешённых или запрещённых пользователей и групп служат директивы DenyUsers, AllowUsers, DenyGroups, и AllowGroups. Значениями для них являются списки имён, разделяемых пробелами, например:
Следует также отключать root-доступ:
Иногда, когда следует задавать мультисерверную конфигурацию, очень удобно использовать алиасы (Aliases), что позволяет настроить сразу несколько режимов доступа (с разными хостами, портами и т. д.) и использовать их, указывая при этом конкретный алиас:
Настройки для алиасов хранятся либо глобально в /etc/ssh/ssh_config, либо раздельно для пользователей в
/.ssh/config. Здесь нужно не спутать с ssh_config! Пример:
Для применения сделанных настроек необходим перезапуск SSH-сервера:
Настройка и использование клиента SSH
Для подключения по к серверу используется команда:
где user_name – имя пользователя в системе, host_name – имя узла, к которому производится подключение, например:
Утилита предложит выбрать расположение ключей (лучше всё оставить по-умолчанию), обычно это каталог
/.ssh/, ввести парольную фразу для закрытого ключа. После чего будут сгенерированы открытый ключ id_rsa.pub и закрытый — id_rsa. Теперь нужно скопировать открытый ключ, т. е. «слепок» закрытого на сервер. Проще всего этого можно добиться командой:
Теперь можно выполнить подключение командой ssh и запустить защищённый сеанс удалённого управления.
Важно заметить, что использование сгенерированных openSSH-ключей несовместимо с PPK-форматом, используемым по-умолчанию в таких комплексах как PuTTY. Поэтому необходимо конвертировать имеющиеся openSSH-ключи в формат PPK. Удобнее всего это делать с помощью утилиты PuTTY – puttygen.exe.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
linux-notes.org
Установка и настройка OpenSSH-сервера на Linux
Secure Shell (SSH) является сетевым протоколом обеспечения оболочки услуги на удаленной машине по защищенному каналу. OpenSSH является реализацией с открытым исходным кодом протокола SSH, позволяя зашифровать сообщения по сети через набор программного обеспечения.
OpenSSH разработан группой открытого BSD и он выпущен под упрощенное лицензии BSD.
Особенности OpenSSH
1. Open Source проект ;
2. Бесплатная лицензирование;
3. Очень хорошее шифрование (3DES, Blowfish, AES, Arcfour);
4. X11 Forwarding (шифрование X Window System трафика);
5. Перенаправление портов (зашифрованные каналы для традиционных протоколов);
6. Сильная аутентификация (Public Key, Одноразовый пароль и Проверка подлинности Kerberos);
7. Экспедитор (Single-Sign-On);
8. Взаимодействие (Соблюдение SSH 1.3, 1.5 и стандартов протоколов 2,0);
9. SFTP клиент и сервер поддерживают в обоих протоколов SSH1 и SSH2;
10. Сжатие данных.
Установка OpenSSH на RHEL / CentOS 5.x/6.x
Чтобы установить OpenSSH и автоматически включить OpenSSH сервер на CentOS или RHEL необходимо выполнить следующую команду:
Запускаем ssh демон:
Добавим сервис в автозапуск системы (не нужно запускать каждый раз при старте вашей ОС):
Установка OpenSSH на Fedora 15/16/17/18/19
Чтобы установить OpenSSH и автоматически включить OpenSSH сервер на Fedora 15/16/17/18/19 необходимо выполнить следующую команду:
Запустим ssh-демон для работы:
Добавим, по желанию в автозагрузку нашей ОС:
Установка OpenSSH на основе Debian / Ubuntu
Чтобы установить OpenSSH и автоматически включить OpenSSH сервер на основе Debian / Ubuntu, необходимо выполнить следующую команду:
Как войти в OpenSSH
Для входа в систему с Unix-подобной машины, нужно зайти в терминал и в командной строке и ввести:
Настройка сервера OpenSSH
Чтобы перезапустить OpenSSH на Ubuntu или Debian:
Чтобы перезапустить OpenSSH на CentOS, Fedora или RHEL:
Установка и настройка OpenSSH-сервера на Linux завершена. Если нужно помочь, пишите мне ниже в комментарии и я вам помогу.
Команда ssh Linux подключение и настройка
ssh ( Secure Shell — «безопасная оболочка») – это протокол прикладного уровня в операционной системе «Линукс», который обеспечивает удаленный доступ управления персональным компьютером. Чаще всего такой протокол используется при удаленном управлении серверами с помощью терминала.
Если вы являетесь администратором на нескольких серверах, обладаете обширными знаниями в области веб-программирования, команда SSH должна быть знакома. Для осуществления поставленных задач в системе «Линукс» применяется сервер, установленный на машине, и клиент, из которого к ней подключаются.
Утилита ssh отличается широким функционалом, дает пользователю большие возможности. С помощью утилиты можно подключиться к серверу, а также передавать файлы, выполнять скрипты удаленным способом, управлять сервером без предварительного ввода пароля.
Синтаксис
Рассмотрим синтаксис команды.
ssh [опция] [пользователь]@[название хоста] [команда]
Стоит отметить, что утилита ssh способна работать с помощью двух версий протокола, они так и называются протокол 1 и протокол 2. Второй вариант является наилучшим, так как поддерживает значительно больше способов шифрования, а также аутентификаций. Именно поэтому протокол 2 применяется пользователями чаще всего.
Представленный выше список является неполным. На самом деле команда ssh поддерживает в разы больше опций, а описанные варианты используются чаще всего. Стоит заметить, что большинство настроек можно водить с использованием файла «ssh/config».
Настройка
Для осуществления поставленной перед пользователем задачи первоначально требуется обратиться к файлу «/etc/ssh/sshd_config». Здесь имеется множество настроек, большинство из которых применяются редко. Именно поэтому рекомендуется рассмотреть те, которые пользователи вводят чаще всего.
Строка Port
Утилита работает согласно стандартным установкам на основе порта 22. Это поведение не является безопасным, так как мошенникам известен этот порт. Они могут организовать атаку Bruteforce, чтобы перебить имеющийся пароль. Требуемый порт задается с помощью строки «Port 22». Потребуется в обязательном порядке изменить показатели порта на необходимые вам данные.
На сервере команда ssh согласно стандартным установкам используются две версии протоколов. Они предназначены для совмещения. К примеру, если потребуется использование только второго протокола, потребуется раскомментировать (удалить #) строку «Protocol 2,1» и убрать цифру 1.
Запрет входа root через ssh
В команде ssh согласно стандартным установкам разрешается Root-доступ. Данное поведение также небезопасно. Именно поэтому пользователю потребуется обязательно раскомментировать строку:
Если в конфиге нет строчки PermitRootLogin no, необходимо довать ее в конец файла.
Вход только одному пользователю
В файле конфигурации sshd_config можно добавить две директивы:
Они позволяют разрешить пользоваться ssh только конкретным пользователям или группам.
AllowUsers имя пользователя1, имя пользователя2
AllowGroups группа1, группа2
Особенности выполнения приложений Х11
Не каждый современный пользователь знает, что утилиту SSH можно применить для полноценного запуска приложений Х11. Чтобы появилась возможность использования такой функции, потребуется разрешить ее со стороны сервера. Для этих целей необходимо ввести:
Для вступления изменений, внесенных в утилиту ssh, необходим обязательный перезапуск сервиса. Для этого потребуется ввести специальную команду:
service sshd restart
Или можно перезагрузить всю машину:
Примеры
Существует большое количество методов использования утилиты. Большинство из них неизвестны современному пользователю операционной системы Линукс.
Рассмотрим подключение к серверу.
При присоединении с использованием утилиты в командной строке потребуется ввести:
Например, нам надо подключиться к компьютеру в локальной сети debian, под пользователем slon.
ВАЖНО! Вместо доменного имени компьютера в сети можно написать IP-адрес.
Все современные пользователи первоначально присоединяются к удаленной хосту (компьютеру). Только после этого они вводят требуемые команды. Утилита ssh дает возможность выполнить необходимую задачу без обязательного запуска терминала на удаленной машине.
Предположим нам надо запустить команду top на удаленном компьютере.
ssh slon@debian top
С использованием утилиты пользователю предоставляется возможность сохранить бекап локального диска на удаленной серверной машине. Для этих целей нужно перенаправлять вывод dd с использованием оператора перенаправления. Далее вывод dd сохраняется в файле copiadiska.img.
sudo dd if=/dev/sdb | ssh slon@192.168.1.7 ‘dd of=copiadiska.img’
Для восстановления прежнего состояния локального диска используется созданная ранее копия. Для этого в командной строке нужно ввести:
ssh slon@192.168.1.7 ‘dd if=copiadiska.img’ | dd of=/dev/sdb»
При использовании команды ssh для входа в удаленный сервер нередко требуется пароль. Это создает дополнительные неудобства, но дает возможность обезопасить вас от злоумышленников. Несмотря на защиту, пароль можно подобрать.
Наиболее надежным методом аутентификации является использование нескольких ключей RSA. Один из них хранится на ПК, а второй является публичным. Он применяется пользователем при авторизации.
Это поведение весьма просто настроить. Изначально необходимо задать ключ. Для этого потребуется ввести:
При создании ключа пользователю необходимо ответить на определённый перечень вопросов. Если вы желаете присоединиться к удаленной машине без обязательного введения пароля, в области «Passphare» нужно оставить пустое место.
Далее ключ отправляется на удаленную машину, вводится:
После этого ключ будет сохранен. Если попробовать присоединиться к серверу повторно, вы увидите, что введение пароля уже не требуется.
Стоит отметить, размещать пароли в обыденных текстовых файлах не стоит. Ими могут воспользоваться злоумышленники Но если это потребуется, такой вариант возможен. Чтобы сохранить пароль, необходимо воспользоваться оператором, используемым при перенаправлении Bash. Введите в командной строке:
При запуске команды ssh на экране монитора нередко всплывает приветствие. Допускается его изменение. За такую функцию отвечает специальный файл «/etc/issue». Вам потребуется просто открыть данный файл и указать необходимо приветствие. Для этого вводится команда:
В некоторых случаях пользователю ОС Линукс может потребоваться информация о неудачных попытках подключения к утилите. Вы можете посмотреть IP-адреса, с которых совершалось данное действие.
Все запросы о входах концентрируются в «/var/log/secure».
Чтобы отфильтровывать информацию в терминале по запросу «Failed password» необходимо добавит grep
cat /var/log/secure | grep Failed password
Нередко пользователям требуется запустить определенное приложение с графической оболочкой на удаленном компьютере.
Для осуществления поставленной задачи не нужно использовать VNC, достаточно применить команду ssh. Программа запустится со стороны удаленной машины, пользователю транслируется лишь окно, в котором можно увидеть все, что ему необходимо.
Нередко при использовании нестабильного соединения с сетью возможно возникновение сбоев в работе утилиты. Если соединение случайным образом было разорвано, потребуется принудительное завершение сессии. Для активации поддержки необходимо добавить в файл:
Теперь можно завершить сессию простой командой:
В завершении можно сказать, что утилита ssh имеет существенно больший функционал, чем это кажется с первого взгляда. Пользоваться такой командой можно как при программировании, так и в повседневной работе.
Как пользоваться SSH
В этой инструкции мы рассмотрим как пользоваться ssh, а также ее возможности, о которых вы даже не знали. Скорее всего, вы уже знаете как подключиться к серверу по ssh, но у этой утилиты есть еще много возможностей, таких как передача файлов ssh, подключение без пароля или выполнение скрипта на удаленном сервере. Все это мы и рассмотрим далее в статье. Но начнем с самых основ.
Базовый синтаксис
Синтаксис команды выглядит следующим образом:
$ ssh [опции] имя пользователя @ сервер [команда]
Важно заметить что ssh может работать по двум версиям протокола. Версии 1 и 2. Понятное дело, что версия 2 лучше и поддерживает больше типов шифрования и аутентификации. Больше в этой статье об отличиях протоколов мы говорить не будем и я буду подразумевать что вы используете версию 2.
Опции команды SSH
Теперь давайте рассмотрим самые основные опции команды ssh:
Это далеко не все опции утилиты, остальные выходят за рамки данной статьи. Многие настройки работы ssh можно изменять через конфигурационный файл
/.ssh/config но здесь мы это тоже подробно рассматривать не будем.
Настройка сервера SSH
Настройки сервера SSH находятся в файле /etc/ssh/sshd_config. Многие из них мы тоже трогать не будем. Рассмотрим только самые интересные. Сначала откройте файл /etc/ssh/sshd.conf
Порт ssh
По умолчанию ssh работает на порту 22. Но такое поведение небезопасно, поскольку злоумышленник знает этот порт и может попробовать выполнить Bruteforce атаку для перебора пароля. Порт задается строчкой:
Поменяйте значение порта на нужное.
Протокол SSH
По умолчанию сервер ssh может работать по двум версиям протокола, для совместимости. Чтобы использовать только протокол версии два раскомментируйте строчку:
И приведите ее к такому виду:
Рут доступ
По умолчанию Root доступ по ssh разрешен, но такое поведение очень небезопасно, поэтому раскомментируйте строчку:
Доступ только определенного пользователя к SSH
Мы можем разрешить доступ к ssh только для определенного пользователя или группы. Для этого добавьте строчки:
AllowUsers User1, User2, User3
AllowGroups Group1, Group2, Group3
Выполнение X11 приложений
Не все знают но есть возможность использовать ssh для запуска полноценных X11 приложений. Об этом мы поговорим ниже, но чтобы все заработало необходимо разрешить эту возможность на стороне сервера, добавьте такую строчку:
Основные опции рассмотрели, перед тем как переходить дальше, не забудьте перезагрузить ssh сервер чтобы сохранить изменения:
service sshd restart
Использование SSH
Подключение к серверу
Чтобы просто подключиться к серверу по SSH используйте такую команду:
Выполнить команду
Мы привыкли подключаться к удаленному серверу, а уже потом выполнять нужные команды, но на самом деле утилита ssh позволяет сразу выполнить нужную команду без открытия терминала удаленной машины. Например:
Выполнит команду ls на удаленном сервере и вернет ее вывод в текущий терминал.
Выполнить локальный скрипт
Выполним интерпретатор bash на удаленном сервере и передадим ему наш локальный скрипт с помощью перенаправления ввода Bash:
Бекап на удаленный сервер и восстановление
Мы можем сохранять бекэп диска сразу на удаленном сервере с помощью ssh. Перенаправим вывод dd с помощью оператора перенаправления |, затем сохраним его на той стороне в файл:
sudo dd if=/dev/sda | ssh user@host ‘dd of=sda.img’
Теперь чтобы восстановить состояние диска из сделанной копии выполните:
ssh user@host ‘dd if=sda.img’ | dd of=/dev/sda
Здесь и выше /dev/sda имя файла вашего жесткого диска.
Аутентификация без пароля
Настроить такое поведение очень легко. Сначала создайте ключ командой:
Затем отправляем ключ на сервер:
Вот и все. Теперь при попытке подключится к этому серверу пароль запрашиваться не будет, а стазу произойдет подключение. Смотрите подробнее создание открытого ключа для ssh.
Взять пароль из локального файла
Изменить приветствие SSH
При входе по ssh может выводиться приветствие, изменить его очень легко. За это отвечает файл /etc/issue. Просто откройте этот файл и введите нужный текст:
Смотрим неудачные попытки входа SSH
Хотите посмотреть были ли попытки неудачного доступа по ssh к вашему серверу и с каких IP адресов? Запросто, все запросы логируются в файл /var/log/secure, отфильтруем только нужные данные командой:
cat /var/log/secure | grep «Failed password for»
Передача файлов по SSH
Кроме выполнения команд, можно копировать файлы по ssh. Для этого используется утилита scp. Просто укажите файл, который нужно передать, удаленный сервер и папку на сервере, вот:
$ scp /адрес/локального/файла пользователь@ хост: адрес/папки
Кроме утилиты scp, передача файлов ssh может быть выполнена более хитрым способом. Прочитаем файл и с помощью cat, передадим, а там сохраним поток в файл:
cat localfile | ssh user@host «cat > remotefile»
ssh user@host «cat > remotefile»
Пойдем еще дальше, вы можете сжимать файлы перед передачей с помощью tar, а потом их сразу же на лету распаковывать:
Такое копирование файлов ssh позволяет отправлять сразу целые папки.
Запуск графических приложений по ssh
Если вам нужно запустить то или иное графическое приложение на удаленной машине необязательно для этого использовать VNC, вы можете обойтись возможностями ssh. Программа будет выполняться на стороне сервера, а вам будет лишь транслироваться окно, чтобы вы могли сделать все что нужно. Причем все данные шифруются. Чтобы эта функция работала, нужно включить ее поддержку на стороне сервера.
Затем просто выполняем команду запуска графического приложения на удаленном сервере вот таким образом:
Завершение сессии SSH
В файл /etc/ssh/ssh_config. Теперь, чтобы разорвать SSH соединение достаточно нажать Enter и набрать:
Другие управляющие символы можно узнать нажав:
Туннели SSH
С помощью SSH туннелей вы можете пробросить порт с удалённого сервера на локальную машину. Это очень полезно, в первую очередь, для разработчиков. Для того чтобы пробросить порт с удалённой машины локальной используйте опцию -L и такой синтаксис:
Например, сделаем удалённую базу данных доступной локально на порту 5555. Для этого выполните подставив свои значения:
Теперь локальная база данных на порту 3306 будет доступна на удалённом сервере при обращении к порту 5555.
Выводы
Теперь вы знаете как пользоваться SSH. Как видите, технология SSH позволяет сделать намного больше чем можно предположить с первого взгляда, и это еще далеко не все. Какие интересные возможности SSH используете вы при повседневной работе? Поделитесь в комментариях!
Настройте сервер OpenSSH в Linux с максимальной безопасностью
Другими фундаментальными характеристиками SSH являются то, что он позволяет нам: безопасно копировать данные, как файлы, так и папки, по протоколу SFTP (SSH FTP), протокол, созданный с нуля и не имеющий ничего общего с FTPS или FTPES (FTP через SSL / TLS). Протокол SSH необходим в области сетей и систем, кроме того, мы можем детально настроить его, чтобы обеспечить нашей системе максимально возможную безопасность.
Протокол SSH обеспечивает конфиденциальность (данные зашифрованы точка-точка), идентификация (мы можем аутентифицироваться перед SSH-сервером несколькими способами, с помощью пользователя / ключа, криптографии с открытым ключом, и мы даже можем настроить второй фактор аутентификации), целостность (да, данные, изменяемые или изменяемые злоумышленником, могут быть обнаружены, поскольку он использует HMAC для проверки целостности всех без исключения данных).
В этом руководстве, которое мы представляем сегодня, мы научим вас настраивать SSH-сервер OpenSSH, программу, доступную для операционных систем на базе Unix и Linux, такие как FreeBSD, OpenBSD, Debian, Red Hat Enterprise Linux и многие другие дистрибутивы. В этом руководстве мы не только научимся правильно настраивать файл конфигурации sshd_config, но также будем использовать дополнительные программы для обеспечения максимально возможной безопасности системы. В этом руководстве все настройки будут выполняться с помощью Debian, однако все меры безопасности могут быть реализованы в любой операционной системе на основе Linux и Unix.
Установка и запуск OpenSSH
sudo apt install openssh-server
После установки мы должны учитывать определенные каталоги и команды для запуска, остановки и перезапуска службы SSH.
Чтобы отредактировать конфигурация SSH-сервера мы должны сделать в консоли:
sudo nano /etc/ssh/sshd_config
Этот каталог по умолчанию скрыт (.ssh), и для каждого пользователя операционной системы есть каталог, который подключается к удаленному серверу.
Чтобы запустить сервер:
sudo /etc/init.d/ssh start
Чтобы остановить сервер:
sudo /etc/init.d/ssh stop
Чтобы перезапустить сервер:
sudo /etc/init.d/ssh restart
После того, как мы установили SSH-сервер, мы знаем, где находятся файлы конфигурации сервера и каталог, в котором хранятся открытые ключи, мы переходим к настройке sshd_config, поскольку это основной файл конфигурации OpenSSH.
Конфигурация sshd_config для максимальной безопасности
Измените порт по умолчанию для SSH-сервера
Блокировать root-доступ для удаленных подключений
По умолчанию любой пользователь операционной системы, имеющий разрешения Shell, сможет войти на сервер. Кроме того, мы должны помнить, что если у нас активирован пользователь root, он также сможет подключаться к серверу локально или удаленно, избегая того, чтобы злоумышленник «угадывал» имя пользователя. По умолчанию боты всегда пытаются атаковать порт 22 и пользователя «root».
Таким образом, корневые подключения будут заблокированы, что не позволит неавторизованным пользователям проводить атаки методом грубой силы на наш SSH-сервер, чтобы угадать учетные данные пользователя root. У нас также есть другие варианты в этом разделе, например » PermitRootLogin без пароля », Где аутентификация разрешена, но не с использованием имени пользователя и пароля, а с использованием криптографических ключей RSA.
Дополнительные настройки безопасности
Например, файл конфигурации для sshd_config будет следующим:
Port 22445
PermitRootLogin no
LoginGraceTime 30
MaxAuthTries 3
MaxStartups 3
AllowUsers sergio sergio2
DenyUsers adrian adrian2
Дополнительной мерой безопасности является настройка алгоритмов обмена ключами, симметричного шифрования, а также конфигурации HMAC для проверки целостности. В настоящее время рекомендуется применять следующую конфигурацию для обеспечения очень высокой безопасности:
KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256 Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com
С этой конфигурацией у нас будут лучшие криптографические наборы для сервера, однако старые клиенты могут не иметь возможности подключиться, поскольку они не поддерживают эти алгоритмы. Мы должны принять во внимание эту деталь и проверить, какие алгоритмы совместимы, а какие нет.
Если мы создали новые ключи RSA или DSA для ключей с большей битовой длиной, мы должны поместить их в файл конфигурации (или заменить предыдущие, и, таким образом, нам не придется трогать файл конфигурации), таким образом мы получим дополнительная безопасность, если, например, мы используем ключи RSA длиной 4096 бит или выше.
HostKey /etc/ssh/ssh_host_ed25519_key
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
Чтобы сгенерировать новые 4096-битные ключи RSA, нам просто нужно выполнить следующую команду:
Если мы хотим сгенерировать новые ключи ECDSA (с максимальной длиной 512 бит) или ED25519, нам нужно будет ввести следующие команды:
Аутентификация в SSH: все режимы подробно описаны
В этом разделе мы собираемся показать вам различные методы аутентификации, доступные на сервере. Обычно у нас есть в основном два метода: имя пользователя и пароль (что-то, что мы знаем), а также с криптографическими ключами (что-то, что у нас есть). Однако мы можем обеспечить системе дополнительную безопасность, объединив эти аутентификации, например, с одноразовым паролем, сгенерированным таким приложением, как Google Authenticator или Latch OTP. Кроме того, мы также можем предоставить систему защелки, чтобы предотвратить вход любого пользователя в систему, если у нас не открыта «защелка».
Пользователь и пароль
Это предложение касается всех пользователей системы. Чтобы не остаться без доступа к серверу, мы должны убедиться, что PubkeyАутентификация для оператора установлено значение «да», чтобы разрешить вход с криптографическими ключами.
Открытый ключ SSH
Вот как мы активируем конфигурацию с открытым ключом SSH в системе, однако есть еще некоторые шаги, которые мы должны сделать, чтобы мы могли подключиться к этому серверу, а именно передать открытый ключ самому компьютеру. Для этого мы должны разрешить (на данный момент) аутентификацию с помощью имени пользователя и пароля, после того как мы завершим все шаги, мы сможем без проблем отказать в аутентификации с помощью имени пользователя и пароля.
На компьютере, на котором мы хотим подключиться к серверу с криптографическими ключами, мы должны создать эти ключи и передать их серверу. Чтобы создать ключи RSA длиной 4096 бит, мы должны ввести следующую команду в SSH-клиенте:
После того, как мы создали открытый и закрытый ключи на нашем компьютере, мы должны отправить открытый ключ на SSH-сервер там, где мы хотим подключиться, будьте осторожны: открытый ключ.
Открытый ключ будет автоматически скопирован на указанный сервер, и мы сможем включить аутентификацию только с открытым ключом, и мы автоматически зарегистрируемся. Вывод, предлагаемый этой командой, должен выглядеть примерно так:
The authenticity of host ‘12.34.56.78 (12.34.56.78)’ can’t be established.
RSA key fingerprint is b1:2d:33:67:ce:35:4d:5f:f3:a8:cd:c0:c4:48:86:12.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘12.34.56.78’ (RSA) to the list of known hosts.
user@12.34.56.78’s password:
Now try logging into the machine, with «ssh ‘user@12.34.56.78′», and check in:
/.ssh/authorized_keys
to make sure we haven’t added extra keys that you weren’t expecting.
В этих выходных данных пользователь должен подтвердить, что он хочет добавить удостоверение, и ввести учетные данные для входа в учетную запись, которую он хочет использовать в этой службе. По этой причине важно, чтобы мы по-прежнему поддерживали возможность аутентификации с использованием имени пользователя / пароля на сервере. Как только этот процесс будет завершен, мы сможем войти в систему на этом компьютере без ввода пароля:
Не забудьте установить директиву «PasswordAuthentication no», чтобы не разрешать доступ через имя пользователя и пароль.
Имя пользователя и пароль с одноразовым паролем (Google Authenticator или Latch OTP)
В этой части руководства мы собираемся аутентифицироваться с обычным именем пользователя / паролем, но также мы должны использовать OTP с Google Authenticator или Latch OTP для входа в сеанс. То есть мы предоставим SSH-серверу двухэтапную проверку.
Первое, что мы должны сделать, это установить ряд зависимостей, необходимых для настройки двойной аутентификации на нашем SSH-сервере. Для этого мы откроем терминал и наберем:
sudo apt install libpam0g-dev make gcc wget ssh
После того, как зависимости будут установлены в нашей системе, мы можем загрузить программное обеспечение для двойной аутентификации.
sudo apt install libpam-google-authenticator
Чтобы начать настройку Google Authenticator, нам просто нужно ввести в терминал:
ПРИМЕЧАНИЕ. Запустите его без прав суперпользователя (sudo), то есть запустите его от имени «обычного» пользователя. Если вы запустите его как root, этот Google Auth будет доступен только в самом root, и его отключение в SSH ничего не даст.
Затем мы говорим ему сохранить изменения в файле в нашей папке / home, и он спросит нас, хотим ли мы, чтобы каждый токен использовался только один раз, даже если это ограничивает вход в систему каждые 30 секунд. Чтобы защитить себя от возможных атак MITM, мы выбираем да. Наконец, он спросит нас, хотим ли мы продлить срок действия каждого кода вместо 1 минуты 30 секунд (чтобы избежать проблем с синхронизацией времени). Чтобы избежать атак грубой силы, мы также можем ограничить количество подключений до 3 на каждые 30 секунд.
Сканирование QR-кода или ввод кода вручную можно выполнить в таких программах, как Google Authenticator, Authy, Latch и т. Д. Мы рекомендуем использовать Google Authenticator или Latch.
Следующим шагом, который мы должны сделать, является открытие файла конфигурации «sshd», чтобы указать ему использовать этот модуль для входа в систему. Для этого мы можем сделать «clear», чтобы очистить терминал и ввести его:
sudo nano /etc/pam.d/sshd
И мы добавим в конец файла следующую строку:
auth required pam_google_authenticator.so
Сохраняем изменения и открываем файл sshd_config следующей командой:
sudo nano /etc/ssh/sshd_config
И мы меняем строку «ChallengeResponseAuthentication no» на «ChallengeResponseAuthentication yes».
Мы перезапускаем сервер с помощью «sudo /etc/init.d/ssh restart», и как только он запустится снова, у нас будет включена двухэтапная аутентификация.
Открытый ключ SSH с одноразовым паролем (Google Authenticator или Latch OTP)
Конфигурация на уровне открытого ключа должна быть такой же, как и раньше, а также на уровне установки и конфигурации Google Authenticator. Единственная разница в том, что в sshd_config файл у нас должен быть примерно такой:
PasswordAuthentication no
ChallengeResponseAuthentication yes
PubKeyAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive
А в файле /etc/pam.d/sshd у нас должно быть что-то вроде этого:
#@include common-auth
auth required pam_google_authenticator.so
Очень важно поставить знак решетки (#), чтобы прокомментировать @include, таким образом, мы будем правильно аутентифицироваться с помощью открытого ключа и кода OTP, сгенерированного мобильным телефоном. Таким образом, мы сообщим серверу принимать только аутентификацию с открытым ключом.
Конфигурация защелки в OpenSSH и позже выберите метод аутентификации
Дополнительные меры безопасности: межсетевой экран, блокировка портов, fail2ban и DenyHosts.
В этом разделе мы собираемся использовать дополнительное программное обеспечение для защиты SSH-сервера, поскольку необходима дополнительная безопасность. Мы будем использовать как брандмауэр на основе iptables, например, выбивание портов, чтобы всегда скрывать службу за брандмауэром, а также fail2bat и DenyHost для обнаружения возможных атак грубой силы и остановки их с помощью брандмауэра.
Конфигурация межсетевого экрана iptables для защиты SSH
Брандмауэр iptables, включенный в большинство систем на базе Linux, позволит нам ограничить количество одновременных подключений к нашему серверу, а также мы сможем использовать специальный модуль под названием «недавний» для сохранения всех из них в базе данных. попытки подключения, идеально подходят для предотвращения атак грубой силы.
Ограничить количество одновременных подключений в iptables
Если злоумышленник пытается подключиться несколько раз с одного и того же IP-адреса, мы можем ограничить это количество подключений, чтобы смягчить его атаку. Это не пресекает возможную атаку в зародыше, но смягчает ее с двумя целями: не иметь большой памяти и CPU / ЦЕНТРАЛЬНЫЙ ПРОЦЕССОР потребление на компьютере путем открытия нескольких подключений SSH, задерживая возможную атаку методом грубой силы, открывая несколько подключений.
Этот оператор ПРИНИМАЕТ до 5 подключений, которые происходят с одного и того же общедоступного IP-адреса, шестое подключение мы блокируем. Если у нас несколько сетевых интерфейсов, мы должны использовать «-i», чтобы установить интерфейс, для которого мы применяем это правило, если мы ничего не укажем, оно будет применяться ко всем из них.
Настройте последний модуль для предотвращения атак методом грубой силы на службу SSH.
Последний модуль служит для ограничения количества подключений в секунду на уровне IP, это идеально для защиты нас от атак на порт SSH, потому что злоумышленник попытается ввести несколько паролей. В следующем примере мы зарегистрируем все подключения к TCP-порту назначения 22445 в базе данных и зарегистрируем источник этих подключений (общедоступный IP-адрес возможного злоумышленника).
Впоследствии проверяем, что в таблице не более 4 совпадений за последние 60 секунд. Если совпадений больше 4, мы переходим к блокировке всех подключений оттуда.
Этот модуль отличается от предыдущего тем, что проверяет эти соединения по времени. Обычно для защиты службы SSH лучше использовать этот последний модуль, чем предыдущий.
Port-Knocking, чтобы «скрыть» службу SSH
sudo apt-get install knockd
После установки мы должны включить его, отредактировав:
sudo nano /etc/default/knockd
И положив: START_KNOCKD = 1
Далее запускаем сервис:
sudo service knockd start
Файл конфигурации knockd находится в /etc/knockd.conf
Мы должны редактировать его любым файловым редактором, с необходимыми правами root. Файл будет выглядеть так:
А чтобы «открыть» порт службы SSH, надо в консоли поставить «стук IP_address 7000 8000 9000». После того, как мы использовали службу, мы можем закрыть ее с помощью оператора, который мы ранее поместили в файл конфигурации, это не обязательно должно быть наоборот (это зависит от того, как вы настроили файл выше).
Таким образом, когда мы покидаем сервер, нам не нужно будет «закрывать» дверь, как в предыдущем случае, поскольку она была открыта всего 10 секунд.
Fail2ban для смягчения атак методом грубой силы на SSH
Мы также можем установить программу fail2ban для запрета IP-адресов, которые делают много неудачных попыток подключения (с неправильным паролем). Эта программа хорошо известна и используется, так как ее очень легко настроить и запустить. Мы можем установить его, поставив
sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Теперь мы можем создать с помощью fail2ban настраиваемое правило для SSH, мы создаем новый файл конфигурации, который будет отвечать за перезапись предыдущего основного файла jail.local.
sudo nano /etc/fail2ban/jail.d/sshjail.local
[sshd] enabled = true
port = 22445
bantime = 3600
findtime = 600
filter = sshd
maxretry = 3
И мы запускаем его, останавливаем и перезапускаем, как если бы это был SSH, в данном случае start = start:
sudo /etc/init.d/fail2ban restart
Чтобы увидеть ЖУРНАЛЫ соединений, вам нужно будет посмотреть путь /var/log/auth.log, а чтобы увидеть журналы fail2ban, вы должны посмотреть их здесь: /var/log/fail2ban.log
DenyHosts: как fail2ban, но специально ориентированный на SSH
У нас также есть еще одна программа, предназначенная исключительно для SSH, она называется DenyHost и имеет большую базу данных IP-адресов, известных как злоумышленники. Это еще одно решение для возможных атак, если у нас всегда есть наш SSH-сервер, подключенный к Интернету. DenyHosts работает так же, как fail2ban, он просматривает журналы подключений, чтобы определить, сталкиваемся ли мы с атакой грубой силы, а также проверяет базы данных IP, чтобы определить, являются ли они ботнетами.
Для установки этой программы нам нужно будет сделать это из официальных репозиториев, мы предполагаем, что в /etc/apt/source.list:
sudo apt install denyhosts
Первая часть настройки выполняется в пути /etc/hosts.allow, здесь нам нужно будет поместить белый список с нашими компьютерами, чтобы он никогда не блокировал нас, это важно, чтобы не блокировать себя через брандмауэр, особенно если вы используете удаленный сервер, этот шаг действительно важен.
sudo nano /etc/hosts.allow
Вам следует использовать следующий синтаксис:
Например, при этом вы разрешите три исходных IP-адреса:
Мы сохраняем, чтобы применить изменения, и теперь нам нужно будет отредактировать глобальный файл конфигурации DenyHosts:
sudo nano /etc/denyhosts.conf
В этом файле конфигурации мы увидим комментарии к различным доступным параметрам конфигурации, синтаксис очень похож на Fail2ban, поэтому у вас не возникнет проблем при его настройке.
Pam_tally2: еще одна настоятельно рекомендуемая альтернатива
Этот инструмент также очень похож на предыдущие, он выполняет точно такую же функцию: управлять неудачными попытками на SSH-сервере. Эта программа позволит нам подсчитывать попытки доступа разных пользователей с соответствующими исходными IP-адресами. Если будет слишком много неудачных попыток входа в систему, им автоматически будет отказано в доступе через брандмауэр. Этот инструмент состоит из двух частей: pam_tally2.so, который является модулем PAM, который мы можем настроить в нашей операционной системе Linux, и у нас также будет pam_tally2, который является самой программой.
Наконец, SSHGuard Программа также настоятельно рекомендуется для адекватной защиты нашего SSH-сервера от попыток вторжения.
Как проверить безопасность моего SSH-сервера
Сегодня у нас есть несколько инструментов для проверки безопасности нашего сервера OpenSSH, который мы только что настроили, эти программы будут отвечать за анализ конфигурации сервера, устанавливая соединения с сервером, чтобы обнаружить какой-либо тип неправильной или небезопасной конфигурации. Некоторые из наиболее рекомендуемых программ: Rebex SSH Проверить который настоятельно рекомендуется онлайн-сканер, кроме того, у нас также есть SSH-аудит это инструмент, который устанавливается локально, где SSH-сервер должен проверять безопасность сервера.
До сих пор мы пришли с этим руководством о том, как подробно настроить службу SSH на нашем сервере. Если у вас есть вопросы, вы можете оставить комментарий, и мы с радостью ответим.






