как сделать ssh сервер на linux
Установка и настройка сервера 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.
Установка и настройка SSH на сервере с Ubuntu
В этой статье мы создадим виртуальную машину с Ubuntu 18.04 LTS 64-bit и выполним настройки для безопасного взаимодействия с сервером.
SSH (Secure Shell) — протокол с шифрованием для безопасного обмена данными между элементами ИТ-инфраструктуры. Чаще всего SSH используется для управления серверами с операционными системами семейства Linux и различным сетевым оборудованием.
Чтобы создать сервер, откроем панель управления Selectel и перейдем в меню Облачная платформа, затем выберем подходящий дата-центр и создадим нужный сервер.
В нашем примере используется виртуальный сервер с фиксированной конфигурацией в виде 1 ядра CPU, 1 Гб оперативной памяти, 10 Гб пространства на жестком диске и операционной системой Ubuntu 18.04 LTS 64-bit.
Далее нажимаем Создать и уже через несколько минут сервер готов к работе. Для удобства доступа к серверу, также был заказан плавающий внешний IP-адрес.
После успешного создания сервера, можно запускать консоль и настроить подключение по SSH. В Ubuntu за это отвечает утилита OpenSSH. В статье мы рассмотрим настройку доступа по ключам, настройку firewall, отключение аутентификации по паролю и проделаем некоторые другие вещи.
Как установить OpenSSH
OpenSSH — это бесплатный SSH-сервер, дающий возможность интерактивного управления сервером. Для установки SSH на сервер воспользуемся встроенным в Ubuntu пакетным менеджером apt:
В большинстве дистрибутивов OpenSSH-сервер уже присутствует в системе и его установка не требуется. В случае отсутствия OpenSSH, вышеуказанная команда выполнит установку.
Теперь добавим SSH-сервер в автозагрузку. При следующем запуске сервера, операционная система выполнит автоматический запуск SSH-сервера. Как и в случае с другими сервисами systemd позволяет управлять параметрами запуска, автозагрузки и рестарта демона OpenSSH. Включим автозапуск:
В результате получим:
Проверим работоспособность утилиты:
И убедимся, что всё корректно работает:
Как настроить SSH
Настройка SSH на Ubuntu необходима для улучшения защищенности системы. Например, можно отключить возможность входа от имени пользователя root или изменить порт подключения со стандартного 22 на произвольный. Лучше использовать порты из верхнего диапазона (50000-65000). Напомним, что в стеке протоколов TCP/IP доступно 65536 портов.
Настройка выполняется выполняется в конфигурационном файле. Перед его модификацией, создадим резервную копию.
Вот теперь можно менять порт. Все изменения конфигурации SSH выполняются в файле /etc/ssh/sshd_config. Откроем его на редактирование:
Раскомментируем строку Port 22 и изменим значение на 55555. Но мы должны вас предостеречь, боты прежде всего сканируют порты с одинаковыми цифрами, поэтому в промышленных средах лучше использовать номер порта с отличными друг от друга цифрами.
Далее нужно отключить возможность входа на сервер учетной записи суперпользователя (root) и добавить возможность входить через ключи. Для этого изменим значения параметров PermitRootLogin на no и PubkeyAuthentication на yes:
После этого следует перезагрузить демон SSH. Соединение при этом будет разорвано и подключиться можно будет через новый порт и пользовательскую учетную запись (она должны быть предварительно создана).
Переподключимся от обычной учетной записи и по другому порту:
После успешного подключения можно продолжать работу с сервером.
Как создать пару ключей RSA
Еще один способ аутентификации на сервере — пара ключей RSA: открытый и закрытый. Открытый хранится на сервере, к которому будет выполняться подключение, а закрытый на удаленном компьютере (или другом сервере) откуда выполняется подключение.
На схеме ниже иллюстрация безопасного обмена ключами между Алисой и Бобом. Злоумышленник Ева может читать сообщения, если они не зашифрованы. Здесь Алиса или Боб шифруют сообщение при помощи открытого ключа принимающей стороны, которая его дешифрует при помощи своего закрытого ключа.
Чтобы сгенерировать такую пару ключей, достаточно выполнить команду:
Команду нужно выполнять на своей рабочей станции от имени пользователя, который будет в дальнейшем подключаться к удаленному компьютеру. Путь к хранению ключей можно оставить по умолчанию:
Ключи созданы, можно переходить к следующему шагу — копированию открытого ключа на удаленный сервер. Предварительно убедитесь, что на том сервере создана учетная запись, от имени которой вы будете подключаться.
Как скопировать открытый ключ на сервер
Чтобы скопировать ключ на удаленный сервер, выполним следующую команду:
В этом примере 95.213.154.235 — это IP-адрес удаленного сервера. После ввода пароля, ключ копируется папку .ssh домашней директории пользователя.
Вывод обеих команд на скриншоте ниже.
Как пройти аутентификацию на сервере через созданный ключ
Сразу же после выполнения копирования, проверим доступ при помощи созданной пары ключей:
Если подключение по SSH будет успешным — все настройки были выполнены корректно.
Как выполнить отключение аутентификации по паролю
Для отключения возможности входа по паролю необходимо в файле /etc/ssh/sshd_config отредактировать значение PasswordAuthentication и присвоить no.
После изменения настроек перезагружаем службу SSH:
Теперь при попытке подключения пользователем, для которого не определена пара ключей, будет выдаваться ошибка подключения.
При этом подключение при помощи ключа будет успешным.
Отключение доступа паролю — верная стратегия повышения безопасности сервера. Особенно в публичных облаках. Однако, если ключ будет утерян, это станет серьезной проблемой. Поэтому важно его хранить в надежном месте или пользоваться специализированными инструментами, например, аппаратным устройством Yubikey.
Как настроить стандартный firewall
В Ubuntu есть встроенный фаервол Netfilter, который может управляться как непосредственно вызовом утилиты iptables с параметрами так и специальной утилитой UFW (Uncomplicated Firewall). Мы разберем оба варианта.
Iptables на нашем демо-стенде уже установлен, но если в вашем дистрибутиве его нет — можно воспользоваться пакетным менеджером apt:
При работе с iptables можно настроить три типа правил: INPUT — для входящих соединений, OUTPUT — для исходящих и forward для транзитных (используется для маршрутизаторов). Для сервера актуальны первые два.
При обработке пакетов возможно выполнение следующих действий: ACCEPT — разрешить прием пакета, DROP — удалить пакет, REJECT — отклонить пакет и отправил уведомление об отклонении отправителю, LOG — записать пакет в лог и QUEUE — отправить пакет приложению.
В iptables доступны следующие функции управления:
Например, чтобы посмотреть настроенные правила можно выполнить команду
Теперь попробуем заблокировать все пакеты от узла 10.10.10.10:
При помощи комбинаций перечисленных выше опций можно настроить любую требуемую логику работы с сетевыми пакетами.
Если перечисленные выше опции показались сложными, можно упростить задачу настройки фаервола и воспользоваться утилитой ufw. Перед началом работы, установим ее при помощи пакетного менеджера apt:
После установки можно начинать работать с правилами. Разрешим все исходящие соединения и запретим все входящие:
В примерах выше мы меняли порт для доступа по SSH на 55555. Создадим правило для доступа по этому порту:
Теперь включим сам фаервол.
Обратите внимание на предупреждение системы об отключении SSH-подключений, если вдруг вы забыли добавить соответствующее правило. Но мы его добавили, поэтому смело включаем фаервол.
После включения фаервола, проверим его настройки командой:
Дополнительно можно настроить доступ с определенного IP-адреса (или диапазона адресов), на определенный порт.
При помощи правил UFW можно также применять правила к определенным сетевым интерфейсам сервера.
Как настройки подключения по SSH влияют на безопасность
В этом разделе разберем основные настройки для повышения уровня безопасности SSH. Все настройки выполняются в уже известном конфигурационном файле /etc/ssh/sshd_config.
Первая настройка — проверка соответствия DNS-имени IP-адресу клиента. За это отвечает параметр UseDNS.
Следующий шаг к безопасности — запрет пустых паролей. Задается в параметре PermitEmptyPasswords.
Дополнительно можно ограничить количество неудачных попыток подключения:
Еще один подход к ограничению несанкционированных подключений — задание пользователей и групп, которым разрешен доступ по SSH. Они перечисляются в параметрах AllowUsers и AllowGroups.
Дополнительно, можно задать время, в течении которого система ожидает от пользователя ввода пароля. По умолчанию это две минуты, но лучше уменьшить до 30 секунд.
Отключение пользователя при бездействии позволит предотвратить доступ злоумышленника, если пользователь вдруг отлучился от своего рабочего места. Значение задается в секундах
Мы перечислили основные параметры для повышения безопасности SSH-соединений, однако, можно выполнять и более тонкую настройку. Полный список команд можно найти в официальной документации.
Нельзя не упомянуть про эффективный инструмент борьбы с попытками аутентификации — утилите fail2ban. Это сервис, который читает лог безопасности и блокирует злоумышленников по IP. Штатно устанавливается при помощи apt:
После установки появляются два конфигурационных файла: /etc/fail2ban/fail2ban.conf и /etc/fail2ban/jail.conf. Первый отвечает за настройки запуска fail2ban, а второй за настройки защиты конкретных сервисов.
Заключение
Мы рассказали об основных настройках протокола SSH, которые помогут уберечь Ubuntu-сервер от несанкционированного доступа. Особенно важно их использовать при расположении сервера в публичных облаках с публичным IP-адресом. На скриншоте ниже вы видите журнал безопасности системы, на которой мы проводили перечисленные в этой статье настройки. В нем видно, что попытки авторизаций под разными пользователями (root, system и другими) происходят регулярно.
Перечисленных в этой статье настроек достаточно для обеспечения базовой безопасности сервера и предотвращения его вовлечения в бот-сети.
Установка SSH в Ubuntu
Довольно часто может понадобиться получить доступ к удаленному компьютеру или серверу через интернет. В персслучае сональным компьютером, это может понадобиться для срочного решения какой-либо проблемы, а в случае с сервером это вообще очень распространенная практика. В Linux наиболее часто для решения таких задач используется протокол SSH.
Служба SSH позволяет получить доступ к терминалу удаленного компьютера и выполнить там все необходимые вам команды. При своей простоте она достаточно безопасна, чтобы использоваться для решения серьезных коммерческих задач, так и задач обычных пользователей. В этой статье мы рассмотрим как выполняется установка SSH в Ubuntu 20.04, а также поговорим о начальной настройке SSH сервера.
Что такое SSH?
За поддержку протокола SSH в Linux отвечает набор программного обеспечения OpenSSH. Это открытая реализация этого протокола, которая предоставляет все необходимые возможности. В состав пакета OpenSSH входят утилиты для установки соединения, передачи файлов, а также сам ssh сервер.
Установка OpenSSH в Ubuntu
Установить SSH на Ubuntu будет очень просто, программа считается стандартной и используется почти везде. Хотя по умолчанию в дистрибутиве её нет, но зато она есть в официальных репозиториях.
Поэтому для установки откройте терминал с помощью сочетания клавиш Ctrl+Alt+T и выполните команду:
sudo apt install openssh-server
Будет загружено несколько пакетов, а когда установка ssh сервера Ubuntu завершится, программа будет готова к работе. Если вы хотите чтобы служба запускалась автоматически нужно добавить его в автозагрузку. Поэтому чтобы включить SSH в Ubuntu 20.04 выполните:
sudo systemctl enable sshd
Если затем вы захотите удалить службу из автозагрузки, используйте команду disable:
sudo systemctl disable sshd
Что касается клиента ssh, то он уже установлен в системе по умолчанию. Сейчас вы можете попробовать подключиться к локальному ssh серверу просто набрав:
В одной из предыдущих статей мы рассматривали что означает адрес 0.0.0.0, сейчас вы можете убедиться что в пределах этой машины он значит локальный адрес:
Точно таким способом вы можете получить ssh доступ ubuntu к любому другому компьютеру из сети. Для этого достаточно указать вместо localhost его ip адрес и имя пользователя в таком формате:
$ ssh имя_пользователя @ ip_адрес
Настройка SSH в Ubuntu
С параметрами по умолчанию сервер SSH не очень безопасен поэтому перед тем, как программа будет готова к полноценному использованию ее нужно немного настроить. Все настройки сервера SSH хранятся в конфигурационном файле sshd_config, который находится в папке /etc/ssh.
Перед тем как вносить изменения в этот конфигурационный файл рекомендуется сделать его резервную копию, для этого можете использовать такую команду:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.factory-defaults
Дальше вы можете перейти к настройке конфигурационного файла:
sudo vi /etc/ssh/sshd_config
Первым делом желательно сменить порт, на котором работает ssh, возможный злоумышленник не знал включен ли у вас этот сервис. Найдите в конфигурационном файле строчку Port и замените ее значение на любое число, например, Port 2222:
По умолчанию вход от имени суперпользователя включен, рекомендуется отключить такую возможность. Для этого найдите строчку PermitRootLogin и замените ее значение на no:
Чтобы разрешить аутентификацию по ключу, а не по паролю найдите строку PubkeyAuthentication и убедитесь, что ее значение yes.
Как настроить авторизацию по ключу в SSH читайте здесь. После того как все настройки будут завершены, сохраните изменения нажав :w и перезапустите службу SSH:
sudo systemctl restart ssh
Более подробно про настройку и использование различных тонкостей ssh рассказано в статье как использовать ssh.
Если вы изменили порт, то при подключении в клиенте тоже нужно указать новый порт, так как по умолчанию будет использоваться 22, например:
К тому же, если на компьютере установлен и настроен брандмауэр, то в нем тоже нужно разрешить доступ к новому порту ssh, для этого выполните:
sudo ufw allow 2222
Даже если служба ssh находится на порту по умолчанию, его тоже нужно открыть в брандмауэре если вы собираетесь подключаться к компьютеру через интернет:
Настройка ssh Ubuntu 20.04 полностью завершена.
Выводы
Теперь, когда установка SSH в Ubuntu 20.04 завершена, вы можете получить удаленный доступ к своему компьютеру через интернет и быть уверенными что он находится в безопасности. Если у вас остались вопросы, спрашивайте в комментариях.
На завершение видео, где подробно рассказано о том, что такое 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 на нашем сервере. Если у вас есть вопросы, вы можете оставить комментарий, и мы с радостью ответим.