Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
chef-ssh-hardening — Этот chef cookbook предоставляет безопасные конфигурации ssh-client и ssh-server. | Kitploit
Инструменты/GitHubGitHub/dev-sec/chef-ssh-hardening
Безопасность облачной инфраструктурыАудит конфигурацииСетевая безопасностьDevSecOpsАутентификация
GitHubdev-sec/chef-ssh-hardening

chef-ssh-hardening

Этот chef cookbook предоставляет безопасные конфигурации ssh-client и ssh-server.

Репозиторий
1686697 дней назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Сайт
Поделиться

ssh-hardening (Chef cookbook)

Supermarket Build Status Code Coverage Gitter Chat

Описание

Этот cookbook предоставляет безопасные конфигурации ssh-client и ssh-server. Данный cookbook не предоставляет возможностей для управления пользователями и/или ssh-ключами, для этого используйте другие cookbook.

Требования

  • Chef >= 14.13.11

Платформы

  • Debian 8, 9, 10
  • Ubuntu 16.04, 18.04
  • RHEL 6, 7
  • CentOS 6, 7
  • Oracle Linux 6, 7
  • Fedora 29, 30
  • OpenSuse Leap 42
  • Amazon Linux 1, 2
  • Атрибуты

    Ниже вы можете найти документацию по атрибутам и их значения по умолчанию.

    Обратите внимание: некоторые значения атрибутов по умолчанию задаются в рецептах. Для переопределения таких атрибутов следует использовать более высокий уровень приоритета атрибутов. Такие атрибуты помечены как #override attribute# в списке ниже. Пример переопределения такого атрибута:

    root@kitploit:~
    override['ssh-hardening']['ssh']['server']['listen_to'] = node['ipaddress']
    
    • ['ssh-hardening']['network']['ipv6']['enable'] - false. Установите true, если требуется IPv6
    • ['ssh-hardening']['ssh']['ports'] - 22. Порты, на которых ssh-server должен прослушивать соединения и к которым ssh-client должен подключаться
    • ['ssh-hardening']['ssh'][{'client', 'server'}]['kex'] - nil для автоматического расчёта наилучшего обмена ключами (KEX) на основе версии сервера, в противном случае укажите строку значений Kex
    • ['ssh-hardening']['ssh'][{'client', 'server'}]['mac'] - nil для автоматического расчёта наилучших кодов аутентификации сообщений (MAC) на основе версии сервера, в противном случае укажите строку значений Mac
    • ['ssh-hardening']['ssh'][{'client', 'server'}]['cipher'] - nil для автоматического расчёта наилучших шифров на основе версии сервера, в противном случае укажите строку значений Cipher
    • ['ssh-hardening']['ssh'][{'client', 'server'}]['cbc_required'] - false. Установите true, если требуется CBC для шифров. Обычно это необходимо только в том случае, если старые механизмы M2M должны взаимодействовать с SSH, у которых не включён ни один из настроенных безопасных шифров. CBC является слабой альтернативой. Все, что слабее, следует избегать, и поэтому оно недоступно.
    • ['ssh-hardening']['ssh'][{'client', 'server'}]['weak_hmac'] - false. Установите true, если требуются более слабые механизмы HMAC. Обычно это необходимо только в том случае, если старые механизмы M2M должны взаимодействовать с SSH, у которых не включён ни один из настроенных безопасных HMAC.
    • ['ssh-hardening']['ssh'][{'client', 'server'}]['weak_kex'] - false. Установите true, если требуются более слабые механизмы обмена ключами (KEX). Обычно это необходимо только в том случае, если старые механизмы M2M должны взаимодействовать с SSH, у которых не включён ни один из настроенных безопасных KEX.
    • ['ssh-hardening']['ssh']['client']['remote_hosts'] - [] - один или несколько хостов, к которым ssh-client может подключаться.
    • ['ssh-hardening']['ssh']['client']['password_authentication'] - false. Установите true, если должна быть включена аутентификация по паролю.
    • ['ssh-hardening']['ssh']['client']['roaming'] - false. Установите true, если должен быть включён экспериментальный roaming клиента. Известно, что это может привести к потенциальным проблемам с раскрытием секретов вредоносным серверам, и по умолчанию эта функция отключена.
    • ['ssh-hardening']['ssh']['client']['extras'] - {}. Добавьте дополнительные параметры конфигурации, подробнее см. ниже
    • ['ssh-hardening']['ssh']['server']['host_key_files'] - nil для автоматического расчёта наилучшей конфигурации hostkey на основе версии сервера, в противном случае укажите массив с путями к файлам (например, /etc/ssh/ssh_host_rsa_key)
    • ['ssh-hardening']['ssh']['server']['dh_min_prime_size'] - 2048 - Минимально допустимая длина простого числа в битах в /etc/ssh/moduli. Простые числа ниже этого значения будут удалены. (См. эту статью для получения дополнительной информации и справочных данных)
    • ['ssh-hardening']['ssh']['server']['dh_build_primes'] - false - Следует ли генерировать собственные простые числа. Эта перегенерация выполняется только один раз и занимает много времени (~ 1.5 - 2 часа на современном оборудовании для длины 4096).
    • ['ssh-hardening']['ssh']['server']['dh_build_primes_size'] - 4096 - Длина простого числа, которое должно быть сгенерировано. Этот параметр действителен только в том случае, если включён dh_build_primes.
    • ['ssh-hardening']['ssh']['server']['listen_to'] #override attribute# - один или несколько IP-адресов, на которых ssh-server должен прослушивать соединения. По умолчанию прослушиваются все интерфейсы. По соображениям безопасности его следует настроить!
    • ['ssh-hardening']['ssh']['server']['allow_root_with_key'] - false для полного запрета входа root. Установите true, чтобы разрешить root вход через механизм на основе ключей
    • ['ssh-hardening']['ssh']['server']['allow_tcp_forwarding'] - false. Установите true, чтобы разрешить TCP Forwarding
    • ['ssh-hardening']['ssh']['server']['allow_agent_forwarding'] - false. Установите true, чтобы разрешить Agent Forwarding
    • ['ssh-hardening']['ssh']['server']['allow_x11_forwarding'] - false. Установите true, чтобы разрешить X11 Forwarding
    • ['ssh-hardening']['ssh']['server']['permit_tunnel'] - false для запрета пересылки tun-устройств. Установите true, чтобы разрешить пересылку tun-устройств. Другие допустимые значения: 'yes', 'no', 'point-to-point', 'ethernet'. См. man sshd_config для точного описания поведения. Примечание: вам также потребуется включить allow_tcp_forwarding.
    • ['ssh-hardening']['ssh']['server']['use_pam'] - true. Установите false, чтобы отключить pam-аутентификацию sshd
    • ['ssh-hardening']['ssh']['server']['challenge_response_authentication'] - false. Установите true, чтобы включить аутентификацию с запросом-ответом.
    • ['ssh-hardening']['ssh']['server']['deny_users'] - [] для настройки DenyUsers, если указано, вход запрещён для имён пользователей, которые соответствуют одному из шаблонов.
    • ['ssh-hardening']['ssh']['server']['allow_users'] - [] для настройки AllowUsers, если указано, вход разрешён только для имён пользователей, которые соответствуют одному из шаблонов.
    • ['ssh-hardening']['ssh']['server']['deny_groups'] - [] для настройки DenyGroups, если указано, вход запрещён для пользователей, чья основная группа или список дополнительных групп соответствует одному из шаблонов.
    • ['ssh-hardening']['ssh']['server']['allow_groups'] - [] для настройки AllowGroups, если указано, вход разрешён только для пользователей, чья основная группа или список дополнительных групп соответствует одному из шаблонов.
    • ['ssh-hardening']['ssh']['server']['print_motd'] - false. Установите true, чтобы включить вывод MOTD
    • ['ssh-hardening']['ssh']['server']['print_last_log'] - false. Установите true, чтобы включить вывод информации о последнем входе
    • ['ssh-hardening']['ssh']['server']['banner'] - nil. Укажите путь, например '/etc/issue.net', чтобы включить баннер
    • ['ssh-hardening']['ssh']['server']['os_banner'] - false для отключения информации о версии во время рукопожатия протокола (только для семейства debian). Установите true, чтобы включить её
    • ['ssh-hardening']['ssh']['server']['use_dns'] - nil для использования значения по умолчанию openssh. Установите true или false, чтобы включить/отключить DNS-запрос и проверку удалённого хоста
    • ['ssh-hardening']['ssh']['server']['use_privilege_separation'] - nil для автоматического расчёта наилучшего значения на основе версии сервера, в противном случае установите true или false
    • ['ssh-hardening']['ssh']['server']['login_grace_time'] - 30s. Время, в течение которого вход должен быть успешно завершён, в противном случае пользователь будет отключён.
    • ['ssh-hardening']['ssh']['server']['max_auth_tries'] - 2. Количество попыток аутентификации на одно соединение
    • ['ssh-hardening']['ssh']['server']['max_sessions'] - 10 Количество сессий на одно соединение
    • ['ssh-hardening']['ssh']['server']['password_authentication'] - false. Установите true, если должна быть включена аутентификация по паролю
    • ['ssh-hardening']['ssh']['server']['log_level'] - verbose. Уровень журналирования sshd. См. LogLevel в man 5 sshd_config для возможных значений.
    • ['ssh-hardening']['ssh']['server']['sftp']['enable'] - false. Установите true, чтобы включить функцию SFTP демона OpenSSH
    • ['ssh-hardening']['ssh']['server']['sftp']['group'] - sftponly. Устанавливает параметр Match Group для SFTP, чтобы разрешить SFTP только для выделенных пользователей
    • ['ssh-hardening']['ssh']['server']['sftp']['chroot'] - /home/%u. Устанавливает каталог, в который пользователь SFTP должен быть помещён в chroot
    • ['ssh-hardening']['ssh']['server']['sftp']['authorized_keys_path'] - nil. Если не nil, полный путь к одному или нескольким разделённым пробелами файлам authorized keys, который будет установлен внутри Match Group для доступа только через SFTP
    • ['ssh-hardening']['ssh']['server']['sftp']['password_authentication'] - false. Установите true, если должна быть включена аутентификация по паролю
    • ['ssh-hardening']['ssh']['server']['authorized_keys_path'] - nil. Если не nil, ожидается полный путь к одному или нескольким разделённым пробелами файлам authorized keys.
    • ['ssh-hardening']['ssh']['server']['extras'] - {}. Добавьте дополнительные параметры конфигурации, подробнее см. ниже
    • ['ssh-hardening']['ssh']['server']['match_blocks'] - {}. Блок конфигурации Match, подробнее см. ниже

    Использование

    Добавьте рецепты в run_list:

    root@kitploit:~
    "recipe[ssh-hardening]"
    

    Это установит ssh-server и ssh-client. Вы также можете выбрать только один из них:

    root@kitploit:~
    "recipe[ssh-hardening::server]"
    "recipe[ssh-hardening::client]"
    

    Настройте атрибуты:

    root@kitploit:~
    "ssh-hardening": {
      "ssh" : {
        "server" : {
          "listen_to" : "10.2.3.4"
        }
      }
    }
    

    Значение по умолчанию для listen_to — 0.0.0.0. Настоятельно рекомендуется изменить это значение.

    SFTP

    Чтобы включить конфигурацию SFTP, добавьте один из следующих рецептов в run_list:

    root@kitploit:~
    "recipe[ssh-hardening]"
    или
    "recipe[ssh-hardening::server]"
    

    Настройте атрибуты:

    root@kitploit:~
    "ssh-hardening": {
      "ssh" : {
        "server": {
          "sftp" : {
          "enable" : true,
          "chroot" : "/home/sftp/%u",
          "group"  : "sftusers"
        }
        }
      }
    }
    

    Это включит SFTP-сервер и поместит каждого пользователя из группы sftpusers в chroot в каталог /home/sftp/%u.

    Дополнительные параметры конфигурации

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

    Синтаксис следующий:

    root@kitploit:~
    # => Дополнительная конфигурация сервера
    default['ssh-hardening']['ssh']['server']['extras'].tap do |extra|
      extra['#Some Comment'] = 'Heres the Comment'
      extra['AuthenticationMethods'] =  'publickey,keyboard-interactive'
    end
    
    # => Дополнительная конфигурация клиента
    default['ssh-hardening']['ssh']['client']['extras'].tap do |extra|
      extra['PermitLocalCommand'] = 'no'
      extra['Tunnel'] =  'no'
    end
    

    Параметры конфигурации Match для sshd

    Блоки Match должны размещаться в конце sshd_config. Это можно сделать с помощью дерева атрибутов match_blocks:

    root@kitploit:~
    default['ssh-hardening']['ssh']['server']['match_blocks'].tap do |match|
      match['User root'] = <<~ROOT
        AuthorizedKeysFile .ssh/authorized_keys
      ROOT
      match['User git'] = <<~GIT
        Banner none
        AuthorizedKeysCommand /bin/false
        AuthorizedKeysFile .ssh/authorized_keys
        GSSAPIAuthentication no
        PasswordAuthentication no
      GIT
    end
    

    Локальное тестирование

    Пожалуйста, установите chef-dk, VirtualBox или VMware Workstation и Vagrant.

    Проверка стиля кода выполняется с помощью rubocop и foodcritic:

    root@kitploit:~
    $ chef exec rake lint
    .....
    

    Модульные/спецификационные тесты выполняются с помощью chefspec:

    root@kitploit:~
    $ chef exec rake spec
    .....
    

    Интеграционные тесты выполняются с помощью test-kitchen и inspec:

    root@kitploit:~
    $ chef exec rake kitchen
    .....
    # или вы можете использовать kitchen напрямую
    $ kitchen test
    

    FAQ / Возможные проблемы

    Я не могу войти в свою учётную запись. Я зарегистрировал ключ клиента, но система по-прежнему не пускает меня.

    Если вы проверили все типичные проблемы (межсетевой экран, сеть, отсутствующий ключ, неправильный ключ, отключённая учётная запись и т.д.), возможно, ваша учётная запись заблокирована. Самый быстрый способ выяснить это — посмотреть на хэш пароля вашего пользователя:

    root@kitploit:~
    sudo grep myuser /etc/shadow
    

    Если хэш содержит !, ваша учётная запись заблокирована:

    root@kitploit:~
    myuser:!:16280:7:60:7:::
    

    Правильный способ решить эту проблему — разблокировать учётную запись (passwd -u myuser). Если у пользователя нет пароля, вы можете разблокировать её следующим образом:

    root@kitploit:~
    usermod -p "*" myuser
    

    В качестве альтернативы, если вы собираетесь использовать PAM, вы включили его через ['ssh-hardening']['ssh']['use_pam'] = true. PAM позволит заблокированным пользователям войти с помощью ключей.

    Почему моё приложение больше не подключается через SSH?

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

    Мы наблюдали некоторые проблемы в приложениях (на основе python и ruby), которые связаны с использованием ими устаревшего набора криптографических алгоритмов. Это конфликтует с данным модулем усиления безопасности, который сократил список шифров, кодов аутентификации сообщений (MAC) и алгоритмов обмена ключами (KEX) до более безопасного набора.

    Если вы обнаружите, что этого недостаточно, вы можете активировать атрибуты cbc_requires для шифров, weak_hmac для MAC и weak_kex для KEX в пространствах имён ['ssh-hardening']['ssh']['client'] или ['ssh-hardening']['ssh']['server'] в зависимости от того, где вы хотите их поддерживать.

    Почему я не могу войти на SFTP-сервер после того, как добавил пользователя в свою группу SFTP?

    Это проблема прав владения ChrootDirectory. sshd отклонит SFTP-подключения для учётных записей, которые настроены на chroot в любой каталог, права владения/доступа которого sshd считает небезопасными. Строгие требования sshd к правам владения/доступа гласят, что каждый каталог в пути chroot должен принадлежать root и быть доступен для записи только владельцу. Так, например, если среда chroot — /home, она должна принадлежать root.

    См. https://wiki.archlinux.org/index.php/SFTP_chroot

    Участники + Благодарности

    • Dominik Richter arlimus
    • Christoph Hartmann chris-rock
    • Bernhard Weisshuhn (a.k.a. bernhorst) bkw
    • Patrick Munch atomic111
    • Edmund Haselwanter ehaselwanter
    • Dana Merrick dmerrick
    • Anton Rieder aried3r
    • Trent Petersen Rockstar04
    • Petri Sirkkala sirkkalap
    • Jan Klare jklare
    • Zac Hallett zhallett
    • Petri Sirkkala sirkkalap
    • stribika
    • Siddhant Rath sidxz

    Этот cookbook в основном основан на руководствах:

    • NSA: Guide to the Secure Configuration of Red Hat Enterprise Linux 5
    • Deutsche Telekom, Group IT Security, Security Requirements (German)

    Спасибо всем вам!!

    Участие в разработке

    См. руководство для участников.

    Лицензия и автор

    • Автор:: Dominik Richter [email protected]
    • Автор:: Deutsche Telekom AG

    Лицензировано в соответствии с Apache License, Version 2.0 («Лицензия»); вы не можете использовать этот файл, кроме как в соответствии с Лицензией. Копию Лицензии можно получить по адресу

    root@kitploit:~
    http://www.apache.org/licenses/LICENSE-2.0
    

    Если это не требуется применимым законодательством или не согласовано в письменной форме, программное обеспечение, распространяемое по Лицензии, распространяется на основе «КАК ЕСТЬ», БЕЗ ГАРАНТИЙ ИЛИ УСЛОВИЙ ЛЮБОГО РОДА, явных или подразумеваемых. См. Лицензию для получения конкретной информации о разрешениях и ограничениях.

    Скачать инструмент