
Этот chef cookbook предоставляет безопасные конфигурации ssh-client и ssh-server.
Этот cookbook предоставляет безопасные конфигурации ssh-client и ssh-server. Данный cookbook не предоставляет возможностей для управления пользователями и/или ssh-ключами, для этого используйте другие cookbook.
Ниже вы можете найти документацию по атрибутам и их значения по умолчанию.
Обратите внимание: некоторые значения атрибутов по умолчанию задаются в рецептах. Для переопределения таких атрибутов следует использовать более высокий уровень приоритета атрибутов. Такие атрибуты помечены как #override attribute# в списке ниже. Пример переопределения такого атрибута:
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:
"recipe[ssh-hardening]"
Это установит ssh-server и ssh-client. Вы также можете выбрать только один из них:
"recipe[ssh-hardening::server]"
"recipe[ssh-hardening::client]"
Настройте атрибуты:
"ssh-hardening": {
"ssh" : {
"server" : {
"listen_to" : "10.2.3.4"
}
}
}
Значение по умолчанию для listen_to — 0.0.0.0. Настоятельно рекомендуется изменить это значение.
Чтобы включить конфигурацию SFTP, добавьте один из следующих рецептов в run_list:
"recipe[ssh-hardening]"
или
"recipe[ssh-hardening::server]"
Настройте атрибуты:
"ssh-hardening": {
"ssh" : {
"server": {
"sftp" : {
"enable" : true,
"chroot" : "/home/sftp/%u",
"group" : "sftusers"
}
}
}
}
Это включит SFTP-сервер и поместит каждого пользователя из группы sftpusers в chroot в каталог /home/sftp/%u.
Дополнительные параметры конфигурации могут быть добавлены в файлы конфигурации клиента или сервера. Это можно использовать для переопределения статически заданных значений или добавления параметров конфигурации, недоступных через атрибуты.
Синтаксис следующий:
# => Дополнительная конфигурация сервера
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_config. Это можно сделать с помощью дерева атрибутов match_blocks:
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:
$ chef exec rake lint
.....
Модульные/спецификационные тесты выполняются с помощью chefspec:
$ chef exec rake spec
.....
Интеграционные тесты выполняются с помощью test-kitchen и inspec:
$ chef exec rake kitchen
.....
# или вы можете использовать kitchen напрямую
$ kitchen test
Я не могу войти в свою учётную запись. Я зарегистрировал ключ клиента, но система по-прежнему не пускает меня.
Если вы проверили все типичные проблемы (межсетевой экран, сеть, отсутствующий ключ, неправильный ключ, отключённая учётная запись и т.д.), возможно, ваша учётная запись заблокирована. Самый быстрый способ выяснить это — посмотреть на хэш пароля вашего пользователя:
sudo grep myuser /etc/shadow
Если хэш содержит !, ваша учётная запись заблокирована:
myuser:!:16280:7:60:7:::
Правильный способ решить эту проблему — разблокировать учётную запись (passwd -u myuser). Если у пользователя нет пароля, вы можете разблокировать её следующим образом:
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.
Этот cookbook в основном основан на руководствах:
Спасибо всем вам!!
Лицензировано в соответствии с Apache License, Version 2.0 («Лицензия»); вы не можете использовать этот файл, кроме как в соответствии с Лицензией. Копию Лицензии можно получить по адресу
http://www.apache.org/licenses/LICENSE-2.0
Если это не требуется применимым законодательством или не согласовано в письменной форме, программное обеспечение, распространяемое по Лицензии, распространяется на основе «КАК ЕСТЬ», БЕЗ ГАРАНТИЙ ИЛИ УСЛОВИЙ ЛЮБОГО РОДА, явных или подразумеваемых. См. Лицензию для получения конкретной информации о разрешениях и ограничениях.