
Эта роль Ansible предоставляет множество связанных с безопасностью конфигураций SSH, обеспечивая всестороннюю базовую защиту.
Внимание: Эта роль была перенесена в нашу коллекцию hardening:
Пожалуйста, открывайте все вопросы и pull request там!
network_ipv6_enable
ssh_listen_to также должен быть установлен для прослушивания IPv6-адресов (например, [::]).ssh_server_ports
ssh_client_port
ssh_listen_to
ssh_host_key_files
ssh_host_key_algorithms
ssh_client_alive_interval
ssh_client_alive_count
ssh_permit_tunnel
ssh_remote_hosts
defaults/main.yml.ssh_permit_root_login
without-password или yes, чтобы разрешить вход rootssh_allow_tcp_forwarding
'no' для отключения TCP Forwarding. Установите 'yes', чтобы разрешить TCP Forwarding. Если вы используете OpenSSH >= 6.2, можно указать 'yes', 'no', 'all' или 'local'. 'yes' и 'no' следует передавать в кавычках.ssh_gateway_ports
falsefalse для запрета привязки перенаправленных портов к адресам, отличным от loopback. Установите true, чтобы принудительно выполнять привязку к wildcard-адресу. Установите clientspecified, чтобы позволить клиенту указывать, к какому адресу выполнять привязку.ssh_allow_agent_forwarding
ssh_x11_forwarding
ssh_pam_support
ssh_use_pam
ssh_gssapi_support
ssh_kerberos_support
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
ssh_print_pam_motd
ssh_print_last_log
sftp_enabled
sftp_umask
sftp_chroot
sftp_chroot_dir
ssh_client_roaming
sshd_moduli_file
sshd_moduli_minimum
ssh_challengeresponseauthentication
ssh_client_password_login
true для разрешения аутентификации по паролю в ssh-клиентеssh_server_password_login
true для разрешения аутентификации по паролю на ssh-сервереssh_banner
falsetrue для вывода баннера при входеssh_banner_path
ssh_client_hardening
truefalse для прекращения усиления защиты клиентаssh_client_port
'22'ssh_client_compression
falsessh_compression
falsessh_login_grace_time
30sssh_max_auth_retries
2ssh_max_sessions
10ssh_print_debian_banner
falsetrue для вывода баннера, специфичного для Debianssh_server_enabled
truefalse для отключения сервера opensshdssh_server_hardening
truefalse для прекращения усиления защиты сервераssh_server_match_address
ssh_server_match_group
ssh_server_match_user
ssh_server_match_local_port
ssh_server_permit_environment_vars
noyes для указания, что ~/.ssh/environment и параметры environment= в ~/.ssh/authorized_keys обрабатываются sshd. Начиная с версии openssh 7.8 можно указать белый список имён переменных окружения в дополнение к глобальным настройкам "yes" или "no"ssh_server_accept_env_vars
ssh_use_dns
falsessh_server_revoked_keys
ssh_max_startups
ssh_macs
defaults/main.ymlssh_kex
defaults/main.ymlssh_ciphers
defaults/main.ymlssh_custom_options
sshd_custom_options
sshd_syslog_facility
sshd_log_level
sshd_strict_modes
sshd_authenticationmethods
publickeydefaults/main.ymlЕсли вы хотите настроить параметры ssh, не перечисленные выше, вы можете использовать ssh_custom_options (для /etc/ssh/ssh_config) или sshd_custom_options (для /etc/ssh/sshd_config). Эти параметры будут установлены в начале файла, поэтому вы можете переопределить параметры ниже в файле.
Пример playbook:
- 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, если настроенный порт недоступен.
- 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:
# Установка зависимостей
gem install bundler
bundle install
# быстрый тест на одной машине
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
# быстрый тест на одной машине
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
Я не могу войти в свою учётную запись. Я зарегистрировал ключ клиента, но система всё равно не пускает меня.
Если вы исключили все типичные проблемы (брандмауэр, сеть, отсутствующий ключ, неправильный ключ, отключённая учётная запись и т. д.), возможно, ваша учётная запись заблокирована. Самый быстрый способ выяснить это — посмотреть на хэш пароля вашего пользователя:
sudo grep myuser /etc/shadow
Если хэш содержит !, ваша учётная запись заблокирована:
myuser:!:16280:7:60:7:::
Правильный способ решить эту проблему — разблокировать учётную запись (passwd -u myuser). Если у пользователя нет пароля, вы можете разблокировать её через:
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"
Unable to restart service ssh: Failed to restart ssh.service: Access denied
или
failure 1 running systemctl show for 'ssh': Failed to connect to bus: No such file or directory
либо запустите playbook от имени root (без become: yes на уровне playbook), либо добавьте become: yes в обработчик.
Лицензировано на условиях Apache License, Version 2.0 (далее — "Лицензия"); вы не можете использовать этот файл, кроме как в соответствии с Лицензией. Копию Лицензии можно получить по адресу
http://www.apache.org/licenses/LICENSE-2.0
Если это не требуется применимым законодательством или не согласовано в письменной форме, программное обеспечение, распространяемое по Лицензии, распространяется на основе "AS IS" (КАК ЕСТЬ), БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ И УСЛОВИЙ, явных или подразумеваемых. См. Лицензию для получения конкретных формулировок о разрешениях и ограничениях.