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

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

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

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

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

Категории

Все категории
Loading categories
ansible-ssh-hardening — Эта роль Ansible предоставляет множество связанных с безопасностью конфигураций SSH, обеспечивая всестороннюю базовую защиту. | Kitploit
Инструменты/GitHubGitHub/dev-sec/ansible-ssh-hardening
Безопасность облачной инфраструктурыАудит конфигурацииСетевая безопасностьDevSecOpsАутентификацияArchived
GitHubdev-sec/ansible-ssh-hardening

ansible-ssh-hardening

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

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

Популярное

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

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

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

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

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

ssh-hardening (Ansible Role)

Внимание: Эта роль была перенесена в нашу коллекцию hardening:

  • https://github.com/dev-sec/ansible-os-hardening/
  • https://galaxy.ansible.com/devsec/hardening

Пожалуйста, открывайте все вопросы и pull request там!

Требования

  • Ansible > 2.5

Переменные роли

  • network_ipv6_enable
    • По умолчанию: false
    • Описание: true, если требуется IPv6. ssh_listen_to также должен быть установлен для прослушивания IPv6-адресов (например, [::]).
  • ssh_server_ports
    • По умолчанию: ['22']
    • Описание: порты, на которых ssh-сервер должен прослушивать соединения
  • ssh_client_port
  • По умолчанию: '22'
  • Описание: порт, к которому ssh-клиент должен подключаться
  • ssh_listen_to
    • По умолчанию: ['0.0.0.0']
    • Описание: один или несколько IP-адресов, на которых ssh-сервер должен прослушивать соединения. По умолчанию — все IPv4-адреса, но по соображениям безопасности следует настроить конкретные адреса!
  • ssh_host_key_files
    • По умолчанию: []
    • Описание: ключи хоста для sshd. Если пусто, будут использованы ['/etc/ssh/ssh_host_rsa_key', '/etc/ssh/ssh_host_ecdsa_key', '/etc/ssh/ssh_host_ed25519_key'] в зависимости от поддержки установленной версией sshd
  • ssh_host_key_algorithms
    • По умолчанию: []
    • Описание: алгоритмы ключей хоста, которые предлагает сервер. Если пусто, будет использован список по умолчанию, в противном случае переопределяет настройку указанным списком алгоритмов
  • ssh_client_alive_interval
    • По умолчанию: 600
    • Описание: задаёт интервал отправки сообщений keepalive
  • ssh_client_alive_count
    • По умолчанию: 3
    • Описание: определяет, как часто отправляются сообщения keep-alive
  • ssh_permit_tunnel
    • По умолчанию: false
    • Описание: true, если требуется туннелирование портов SSH
  • ssh_remote_hosts
    • По умолчанию: []
    • Описание: один или несколько хостов и их пользовательские параметры для ssh-клиента. По умолчанию пусто. См. примеры в defaults/main.yml.
  • ssh_permit_root_login
    • По умолчанию: no
    • Описание: отключить вход root. Установите without-password или yes, чтобы разрешить вход root
  • ssh_allow_tcp_forwarding
    • По умолчанию: no
    • Описание: 'no' для отключения TCP Forwarding. Установите 'yes', чтобы разрешить TCP Forwarding. Если вы используете OpenSSH >= 6.2, можно указать 'yes', 'no', 'all' или 'local'.
      Примечание: значения, передаваемые этой переменной, должны быть строками, поэтому значения 'yes' и 'no' следует передавать в кавычках.
  • ssh_gateway_ports
    • По умолчанию: false
    • Описание: false для запрета привязки перенаправленных портов к адресам, отличным от loopback. Установите true, чтобы принудительно выполнять привязку к wildcard-адресу. Установите clientspecified, чтобы позволить клиенту указывать, к какому адресу выполнять привязку.
  • ssh_allow_agent_forwarding
    • По умолчанию: false
    • Описание: false для отключения Agent Forwarding. Установите true, чтобы разрешить Agent Forwarding.
  • ssh_x11_forwarding
    • По умолчанию: false
    • Описание: false для отключения X11 Forwarding. Установите true, чтобы разрешить X11 Forwarding.
  • ssh_pam_support
    • По умолчанию: true
    • Описание: true, если SSH поддерживает PAM.
  • ssh_use_pam
    • По умолчанию: true
    • Описание: false для отключения аутентификации через pam.
  • ssh_gssapi_support
    • По умолчанию: false
    • Описание: true, если SSH поддерживает GSSAPI.
  • ssh_kerberos_support
    • По умолчанию: true
    • Описание: true, если SSH поддерживает Kerberos.
  • ssh_deny_users
    • По умолчанию: ''
    • Описание: если указано, вход запрещён для имён пользователей, соответствующих одному из шаблонов.
  • ssh_allow_users
    • По умолчанию: ''
    • Описание: если указано, вход разрешён только для имён пользователей, соответствующих одному из шаблонов.
  • ssh_deny_groups
    • По умолчанию: ''
    • Описание: если указано, вход запрещён для пользователей, чья основная группа или список дополнительных групп соответствует одному из шаблонов.
  • ssh_allow_groups
    • По умолчанию: ''
    • Описание: если указано, вход разрешён только для пользователей, чья основная группа или список дополнительных групп соответствует одному из шаблонов.
  • ssh_authorized_keys_file
    • По умолчанию: ''
    • Описание: изменить файл по умолчанию, содержащий открытые ключи, которые можно использовать для аутентификации пользователя.
  • ssh_trusted_user_ca_keys_file
    • По умолчанию: ''
    • Описание: указывает файл, содержащий открытые ключи доверенных центров сертификации, используемые для подписи сертификатов пользователей.
  • ssh_trusted_user_ca_keys
    • По умолчанию: []
    • Описание: задаёт открытые ключи доверенных центров сертификации, используемые для подписи сертификатов пользователей. Используется только если задан ssh_trusted_user_ca_keys_file.
  • ssh_authorized_principals_file
    • По умолчанию: ''
    • Описание: указывает файл, содержащий разрешённые принципалы. Используется только если задан ssh_trusted_user_ca_keys_file.
  • ssh_authorized_principals
    • По умолчанию: []
    • Описание: список хэшей, содержащих пути к файлам и разрешённые принципалы, см. default_custom.yml для всех параметров. Используется только если задан ssh_authorized_principals_file.
  • ssh_print_motd
    • По умолчанию: false
    • Описание: false для отключения вывода MOTD
  • ssh_print_pam_motd
    • По умолчанию: false
    • Описание: false для отключения вывода MOTD через pam (Debian и Ubuntu)
  • ssh_print_last_log
    • По умолчанию: false
    • Описание: false для отключения отображения информации о последнем входе
  • sftp_enabled
    • По умолчанию: false
    • Описание: true для включения конфигурации sftp
  • sftp_umask
    • По умолчанию: '0027'
    • Описание: задаёт umask для sftp
  • sftp_chroot
    • По умолчанию: true
    • Описание: false для отключения chroot для sftp
  • sftp_chroot_dir
    • По умолчанию: /home/%u
    • Описание: изменить расположение chroot sftp по умолчанию
  • ssh_client_roaming
    • По умолчанию: false
    • Описание: включить экспериментальный client roaming
  • sshd_moduli_file
    • По умолчанию: '/etc/ssh/moduli'
    • Описание: путь к файлу модулей SSH
  • sshd_moduli_minimum
    • По умолчанию: 2048
    • Описание: удалить параметры Diffie-Hellman меньше заданного размера для смягчения атаки logjam
  • ssh_challengeresponseauthentication
    • По умолчанию: false
    • Описание: указывает, разрешена ли аутентификация challenge-response (например, через PAM)
  • ssh_client_password_login
    • По умолчанию: false
    • Описание: true для разрешения аутентификации по паролю в ssh-клиенте
  • ssh_server_password_login
    • По умолчанию: false
    • Описание: true для разрешения аутентификации по паролю на ssh-сервере
  • ssh_banner
    • По умолчанию: false
    • Описание: true для вывода баннера при входе
  • ssh_banner_path
    • По умолчанию: '/etc/sshd/banner.txt'
    • Описание: путь к файлу баннера SSH
  • ssh_client_hardening
    • По умолчанию: true
    • Описание: false для прекращения усиления защиты клиента
  • ssh_client_port
    • По умолчанию: '22'
    • Описание: указывает номер порта для подключения к удалённому хосту.
  • ssh_client_compression
    • По умолчанию: false
    • Описание: указывает, запрашивает ли клиент сжатие.
  • ssh_compression
    • По умолчанию: false
    • Описание: указывает, включено ли сжатие на стороне сервера после успешной аутентификации пользователя.
  • ssh_login_grace_time
    • По умолчанию: 30s
    • Описание: задаёт время, отведённое для успешной аутентификации на SSH-сервере
  • ssh_max_auth_retries
    • По умолчанию: 2
    • Описание: задаёт максимальное количество попыток аутентификации, разрешённых для одного соединения.
  • ssh_max_sessions
    • По умолчанию: 10
    • Описание: задаёт максимальное количество открытых сессий, разрешённых для данного соединения.
  • ssh_print_debian_banner
    • По умолчанию: false
    • Описание: true для вывода баннера, специфичного для Debian
  • ssh_server_enabled
    • По умолчанию: true
    • Описание: false для отключения сервера opensshd
  • ssh_server_hardening
    • По умолчанию: true
    • Описание: false для прекращения усиления защиты сервера
  • ssh_server_match_address
    • По умолчанию: ''
    • Описание: вводит условный блок. Если все критерии в строке Match удовлетворены, ключевые слова в следующих строках переопределяют заданные в глобальном разделе файла конфигурации до тех пор, пока не встретится другая строка Match или конец файла.
  • ssh_server_match_group
    • По умолчанию: ''
    • Описание: вводит условный блок. Если все критерии в строке Match удовлетворены, ключевые слова в следующих строках переопределяют заданные в глобальном разделе файла конфигурации до тех пор, пока не встретится другая строка Match или конец файла.
  • ssh_server_match_user
    • По умолчанию: ''
    • Описание: вводит условный блок. Если все критерии в строке Match удовлетворены, ключевые слова в следующих строках переопределяют заданные в глобальном разделе файла конфигурации до тех пор, пока не встретится другая строка Match или конец файла.
  • ssh_server_match_local_port
    • По умолчанию: ''
    • Описание: вводит условный блок. Если все критерии в строке Match удовлетворены, ключевые слова в следующих строках переопределяют заданные в глобальном разделе файла конфигурации до тех пор, пока не встретится другая строка Match или конец файла.
  • ssh_server_permit_environment_vars
    • По умолчанию: no
    • Описание: yes для указания, что ~/.ssh/environment и параметры environment= в ~/.ssh/authorized_keys обрабатываются sshd. Начиная с версии openssh 7.8 можно указать белый список имён переменных окружения в дополнение к глобальным настройкам "yes" или "no"
  • ssh_server_accept_env_vars
    • По умолчанию: ''
    • Описание: указывает, какие переменные окружения, отправленные клиентом, будут скопированы в окружение сессии; несколько переменных окружения могут быть разделены пробелами
  • ssh_use_dns
    • По умолчанию: false
    • Описание: указывает, должен ли sshd выполнять поиск удалённого имени хоста и проверять, что разрешённое имя хоста для удалённого IP-адреса сопоставляется с тем же самым IP-адресом.
  • ssh_server_revoked_keys
    • По умолчанию: []
    • Описание: список отозванных открытых ключей, которые ssh-сервер всегда будет отклонять; полезно для отзыва известных слабых или скомпрометированных ключей.
  • ssh_max_startups
    • По умолчанию: '10:30:100'
    • Описание: задаёт максимальное количество одновременных неаутентифицированных соединений с демоном SSH.
  • ssh_macs
    • По умолчанию: []
    • Описание: измените этот список, чтобы переопределить macs. Значения по умолчанию находятся в defaults/main.yml
  • ssh_kex
    • По умолчанию: []
    • Описание: измените этот список, чтобы переопределить kexs. Значения по умолчанию находятся в defaults/main.yml
  • ssh_ciphers
    • По умолчанию: []
    • Описание: измените этот список, чтобы переопределить ciphers. Значения по умолчанию находятся в defaults/main.yml
  • ssh_custom_options
    • По умолчанию: []
    • Описание: пользовательские строки для конфигурации SSH-клиента
  • sshd_custom_options
    • По умолчанию: []
    • Описание: пользовательские строки для конфигурации демона SSH
  • sshd_syslog_facility
    • По умолчанию: 'AUTH'
    • Описание: код facility, используемый при записи сообщений журнала от sshd
  • sshd_log_level
    • По умолчанию: 'VERBOSE'
    • Описание: уровень подробности, используемый при записи сообщений журнала от sshd
  • sshd_strict_modes
    • По умолчанию: true
    • Описание: проверять режимы файлов и права собственности на файлы пользователя и домашний каталог перед принятием входа
  • sshd_authenticationmethods
    • По умолчанию: publickey
    • Описание: указывает методы аутентификации, которые должны быть успешно выполнены для предоставления доступа пользователю. Обязательно задайте все необходимые переменные для выбранного метода аутентификации. Значения по умолчанию находятся в defaults/main.yml
  • Настройка параметров, не перечисленных в переменных роли

    Если вы хотите настроить параметры ssh, не перечисленные выше, вы можете использовать ssh_custom_options (для /etc/ssh/ssh_config) или sshd_custom_options (для /etc/ssh/sshd_config). Эти параметры будут установлены в начале файла, поэтому вы можете переопределить параметры ниже в файле.

    Пример playbook:

    root@kitploit:~
    - hosts: localhost
      roles:
        - dev-sec.ssh-hardening
      vars:
        ssh_custom_options:
          - "Include /etc/ssh/ssh_config.d/*"
        sshd_custom_options:
          - "AcceptEnv LANG"
    

    Изменение порта по умолчанию и идемпотентность

    Эта роль использует порт 22 по умолчанию или порт, настроенный в inventory, для подключения к серверу. Если порт ssh по умолчанию изменён через ssh_server_ports, после перезапуска ssh-сервера роль всё равно будет пытаться подключиться, используя предыдущий порт. Чтобы запустить эту роль снова на том же сервере, необходимо обновить inventory для использования нового порта ssh.

    Если идемпотентность важна, рассмотрите возможность использования роли ssh-hardening-fallback, которая является обёрткой над этой ролью и возвращается к порту 22, если настроенный порт недоступен.

    Пример Playbook

    root@kitploit:~
    - hosts: localhost
      roles:
        - dev-sec.ssh-hardening
    

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

    Предпочтительный способ локального тестирования роли — использование Docker. Вам потребуется установить Docker в вашей системе. См. Get started для получения пакета Docker, подходящего для вашей системы.

    Вы также можете использовать vagrant и Virtualbox или VMWare для локального запуска тестов. Вам потребуется установить Virtualbox и Vagrant в вашей системе. См. Vagrant Downloads для получения пакета vagrant, подходящего для вашей системы. Для всех наших тестов мы используем test-kitchen. Если вы не знакомы с test-kitchen, пожалуйста, ознакомьтесь с их руководством.

    Затем установите test-kitchen:

    root@kitploit:~
    # Установка зависимостей
    gem install bundler
    bundle install
    

    Тестирование с Docker

    root@kitploit:~
    # быстрый тест на одной машине
    bundle exec kitchen test ssh-ubuntu1804-ansible-latest
    
    # тест на всех машинах
    bundle exec kitchen test
    
    # для разработки
    bundle exec kitchen create ssh-ubuntu1804-ansible-latest
    bundle exec kitchen converge ssh-ubuntu1804-ansible-latest
    bundle exec kitchen verify ssh-ubuntu1804-ansible-latest
    
    # очистка
    bundle exec kitchen destroy ssh-ubuntu1804-ansible-latest
    

    Тестирование с Virtualbox

    root@kitploit:~
    # быстрый тест на одной машине
    KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test ssh-ubuntu-1804
    
    # тест на всех машинах
    KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test
    
    # для разработки
    KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen create ssh-ubuntu-1804
    KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen converge ssh-ubuntu-1804
    

    Для получения дополнительной информации см. test-kitchen

    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_use_pam: true. PAM позволит заблокированным пользователям войти с ключами.

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

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

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

    После использования роли модули template/copy/file Ansible больше не работают!

    Эта роль по умолчанию отключает SFTP. Ansible по умолчанию использует SFTP для передачи файлов на удалённые хосты. Вам необходимо установить scp_if_ssh = True в вашем ansible.cfg. Таким образом Ansible будет использовать SCP для копирования файлов. В качестве альтернативы вы можете снова включить SFTP, установив sftp_enabled в true.

    Невозможно перезапустить службу sshd из-за недостатка привилегий

    Если вы получаете следующую ошибку при запуске обработчика "restart sshd"

    root@kitploit:~
    Unable to restart service ssh: Failed to restart ssh.service: Access denied
    

    или

    root@kitploit:~
    failure 1 running systemctl show for 'ssh': Failed to connect to bus: No such file or directory
    

    либо запустите playbook от имени root (без become: yes на уровне playbook), либо добавьте become: yes в обработчик.

    Это ошибка Ansible: см. здесь и здесь для получения дополнительной информации.

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

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

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

    • Автор:: Sebastian Gumprich
    • Автор:: Christoph Hartmann [email protected]

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

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

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

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