hardening
Роль Ansible для Ужесточения Безопасности Серверов
Это Ansible роль, предназначенная для повышения безопасности серверов, работающих на AlmaLinux, Debian или Ubuntu.
Роль ориентирована на systemd и требует Ansible версии 2.15 или выше.
Роль поддерживает следующие операционные системы:
- AlmaLinux 8
- AlmaLinux 9
- Debian 11 (Bullseye)
- Debian 12 (Bookworm)
- Ubuntu 22.04 (Jammy Jellyfish)
- Ubuntu 24.04 (Noble Numbat)
Для тех, кто использует AWS или Azure, также доступны защищенные образы Amazon Machine для Ubuntu (AMIs) и образы виртуальных машин Azure.
Эти образы доступны в репозитории konstruktoid/hardened-images. Эти изображения создаются с помощью Packer, и эта роль Ansible используется для настройки.
Примечание Не используйте эту роль без предварительного тестирования в непроизводственной среде.
Примечание В наличии есть артефакт SLSA в рамках Рабочего процесса действия SLSA для проверки.
Зависимости
Нет.
Примеры
Требования
---
roles:
- name: konstruktoid.hardening
version: v2.1.0
src: https://github.com/konstruktoid/ansible-role-hardening.git
scm: git
Плейбук
---
- name: Импорт и использование роли по ужесточению
hosts: localhost
any_errors_fatal: true
tasks:
- name: Импортировать роль по ужесточению
ansible.builtin.import_role:
name: konstruktoid.hardening
vars:
sshd_admin_net:
- 10.0.2.0/24
- 192.168.0.0/24
- 192.168.1.0/24
suid_sgid_permissions: false
Локальный плейбук с использованием git checkout
---
- name: Клонировать и настроить konstruktoid.hardening
hosts: localhost
any_errors_fatal: true
tasks:
- name: Клонировать репозиторий по ужесточению
become: true
tags:
- always
block:
- name: Установить git
ansible.builtin.package:
name: git
state: present
- name: Получить konstruktoid.hardening
become: true
ansible.builtin.git:
repo: https://github.com/konstruktoid/ansible-role-hardening
dest: /etc/ansible/roles/konstruktoid.hardening
version: v2.1.0
- name: Удалить git
ansible.builtin.package:
name: git
state: absent
- name: Включить роль по ужесточению
ansible.builtin.include_role:
name: konstruktoid.hardening
vars:
sshd_allow_groups:
- ubuntu
sshd_login_grace_time: 60
sshd_max_auth_tries: 10
sshd_use_dns: false
sshd_update_moduli: true
Примечание о правилах UFW
Вместо сброса ufw
после каждого запуска и тем самым создания сбоев в сетевом трафике, роль удаляет каждое правило ufw
без параметра задачи и значения comment: ansible managed
.
Роль также устанавливает политики по умолчанию, которые означают, что правил межсетевого экрана необходимо создать для любых дополнительных портов, кроме указанных в
переменных sshd_ports
и ufw_outgoing_traffic
.
Смотрите ufw(8) для получения дополнительной информации.
Выполнение задач и структура
Смотрите STRUCTURE.md для структуры ролей.
Тестирование роли
Смотрите TESTING.md.
Переменные роли с настройками по умолчанию
./defaults/main/aide.yml
manage_aide: true
aide_checksums: sha512
aide_dir_exclusions:
- /var/lib/docker
- /var/lib/lxcfs
- /var/lib/private/systemd
- /var/log/audit
- /var/log/journal
Если manage_aide: true
, то AIDE будет установлен и настроен.
aide_checksums
изменяет переменную AIDE Checksums
. Обратите внимание, что переменная Checksums
может отсутствовать в зависимости от дистрибутива.
aide_dir_exclusions
— это список каталогов, которые будут исключены из базы данных AIDE.
./defaults/main/auditd.yml
manage_auditd: true
auditd_apply_audit_rules: true
auditd_action_mail_acct: root
auditd_admin_space_left_action: suspend
auditd_disk_error_action: suspend
auditd_disk_full_action: suspend
auditd_enable_flag: 2
auditd_flush: incremental_async
auditd_max_log_file: 20
auditd_max_log_file_action: rotate
auditd_mode: 1
auditd_num_logs: 5
auditd_space_left: 75
auditd_space_left_action: email
grub_audit_backlog_cmdline: audit_backlog_limit=8192
grub_audit_cmdline: audit=1
Если manage_auditd: true
, то Система аудита Linux будет настроена и включена при загрузке с помощью GRUB.
Когда auditd_apply_audit_rules: 'yes'
, роль применяет правила auditd из включенного файла шаблона.
auditd_action_mail_acct
должен быть действительным адресом электронной почты или алиасом.
auditd_admin_space_left_action
определяет действие при обнаружении системы с низким дисковым пространством. suspend
заставит демон аудита прекратить запись записей на диск.
auditd_enable_flag
устанавливает флаг включения. Если передано значение 0
, то временно отключается аудит. 1
включает аудит, а 2
заблокирует конфигурацию аудита.
auditd_flush: sync
указывает демону аудита поддерживать синхронизацию между данными и метаданными при каждой записи на диск.
auditd_max_log_file_action
устанавливает действие, которое необходимо предпринять при достижении предела максимального размера файла. Например, параметр rotate
заставит демон аудита выполнять ротацию журналов.
auditd_space_left_action
сообщает системе о действиях, которые необходимо предпринять при обнаружении низкого дискового пространства. email
означает, что будет отправлено предупреждение на указанный в action_mail_acct
адрес электронной почты, а также сообщение будет отправлено в syslog.
auditd_mode
устанавливает режим сбоя auditd
: 0=без уведомлений, 1=печать, 2=паника.
./defaults/main/automatic_updates.yml
automatic_updates:
enabled: true
reboot: false
Если automatic_updates
включены, будет установлено и настроено dnf-automatic или unattended-upgrades, в зависимости от дистрибутива.
Если параметр reboot
установлен в true
, система перезагрузится, если это необходимо, см. Unattended-Upgrade::Automatic-Reboot и dnf_automatic: reboot.
./defaults/main/compilers.yml
manage_compilers: true
compilers:
- as
- cargo
- cc
- cc-[0-9]*
- clang-[0-9]*
- gcc
- gcc-[0-9]*
- go
- make
- rustc
Если manage_compilers: true
, то перечисленные компиляторы будут ограничены для пользователя root.
./defaults/main/crypto_policies.yml
set_crypto_policy: true
crypto_policy: DEFAULT:NO-SHA1
Устанавливаются и используются криптографические политики, если существует файл /etc/crypto-policies/config
и set_crypto_policy: true
.
./defaults/main/disablewireless.yml
disable_wireless: false
Если true
, отключаются все беспроводные интерфейсы.
./defaults/main/dns.yml
manage_resolved: true
dns:
- 1.1.1.2
- 9.9.9.9
fallback_dns:
- 1.0.0.2
- 149.112.112.112
dnssec: allow-downgrade
dns_over_tls: opportunistic
Если manage_resolved: true
, настраивается systemd-resolved.
IPv4 и IPv6 адреса используются в качестве системных и резервных DNS-серверов.
Если dnssec
установлено в "allow-downgrade", будет предпринята попытка валидации DNSSEC, но если сервер некорректно поддерживает DNSSEC, режим DNSSEC автоматически отключается.
Если dns_over_tls
установлен в true, все подключения к серверу будут зашифрованы, если DNS-сервер поддерживает DNS-over-TLS и имеет действительный сертификат.
./defaults/main/ipv6.yml
disable_ipv6: false
sysctl_net_ipv6_conf_accept_ra_rtr_pref: 0
ipv6_disable_sysctl_settings:
net.ipv6.conf.all.disable_ipv6: 1
net.ipv6.conf.default.disable_ipv6: 1
ipv6_sysctl_settings:
net.ipv6.conf.all.accept_ra: 0
net.ipv6.conf.all.accept_redirects: 0
net.ipv6.conf.all.accept_source_route: 0
net.ipv6.conf.all.forwarding: 0
net.ipv6.conf.all.use_tempaddr: 2
net.ipv6.conf.default.accept_ra: 0
net.ipv6.conf.default.accept_ra_defrtr: 0
net.ipv6.conf.default.accept_ra_pinfo: 0
net.ipv6.conf.default.accept_ra_rtr_pref: 0
net.ipv6.conf.default.accept_redirects: 0
net.ipv6.conf.default.accept_source_route: 0
net.ipv6.conf.default.autoconf: 0
net.ipv6.conf.default.dad_transmits: 0
net.ipv6.conf.default.max_addresses: 1
net.ipv6.conf.default.router_solicitations: 0
net.ipv6.conf.default.use_tempaddr: 2
Если disable_ipv6: true
, IPv6 будет отключен, и соответствующие параметры sysctl будет настроены.
ipv6_sysctl_settings
— это настройки sysctl
, используемые, если хост использует IPv6.
./defaults/main/journal.yml
rsyslog_filecreatemode: "0640"
journald_compress: true
journald_forwardtosyslog: false
journald_storage: persistent
rsyslog_filecreatemode
устанавливает режим создания, с которым rsyslogd создает новые файлы, см.
rsconf1_filecreatemode.
journald_compress
может принимать логическое значение. Если включено (по умолчанию), объекты данных сжимаются перед записью в файловую систему.
journald_storage
контролирует, где хранить данные журнала. Одно из значений: volatile
, persistent
, auto
и none
.
journald_forwardtosyslog
контролирует, должны ли сообщения журналов, полученные демоном журнала, быть переадресованы традиционному демону syslog.
Смотрите journald.conf для дополнительной информации.
./defaults/main/kernel.yml
allow_virtual_system_calls: true
enable_page_poisoning: true
kernel_lockdown: false
page_table_isolation: true
slub_debugger_poisoning: false
allow_virtual_system_calls
допускает виртуальные системные вызовы, если значение true, иначе сопоставление vsyscall не будет установлено, смотрите CONFIG_LEGACY_VSYSCALL_NONE.
enable_page_poisoning: true
включает CONFIG_PAGE_POISONING.
kernel_lockdown
настраивает функцию блокировки ядра.
Допустимые значения: false
, true
, integrity
и confidentiality
. Если true
, блокировка ядра будет включена в режиме integrity
.
page_table_isolation
является контрмерой против атак на общую область памяти пользователя/ядра, смотрите CONFIG_PAGE_TABLE_ISOLATION.
slub_debugger_poisoning
, если установлен в true, предотвращает множество типов уязвимостей использования после освобождения и также предотвращает утечку данных и обнаружение поврежденной памяти. Смотрите Краткое руководство по SLUB.
./defaults/main/limits.yml
limit_nofile_hard: 1024
limit_nofile_soft: 512
limit_nproc_hard: 1024
limit_nproc_soft: 512
Устанавливает максимальное количество процессов и открытых файлов, смотрите limits.conf(5).
./defaults/main/misc.yml
reboot_ubuntu: false
redhat_signing_keys:
- 567E347AD0044ADE55BA8A5F199E2F91FD431D51
- 47DB287789B21722B6D95DDE5326810137017186
epel7_signing_keys:
- 91E97D7C4A5E96F17F3E888F6A2FAEA2352C64E5
epel8_signing_keys:
- 94E279EB8D8F25B21810ADF121EA45AB2F86D6A1
epel9_signing_keys:
- FF8AD1344597106ECE813B918A3872BF3228467C
Если reboot_ubuntu: true
, узел Ubuntu будет перезагружен, если это необходимо.
redhat_signing_keys
— это Ключи подписания продуктов RedHat.
epel7_signing_keys
, epel8_signing_keys
и epel9_signing_keys
— это ключи подписания, специфичные для релиза Fedora EPEL.
./defaults/main/module_blocklists.yml
fs_modules_blocklist:
- cramfs
- freevxfs
- hfs
- hfsplus
- jffs2
- squashfs
- udf
misc_modules_blocklist:
- bluetooth
- bnep
- btusb
- can
- cpia2
- firewire-core
- floppy
- ksmbd
- n_hdlc
- net-pf-31
- pcspkr
- soundcore
- thunderbolt
- usb-midi
- usb-storage
- uvcvideo
- v4l2_common
net_modules_blocklist:
- atm
- dccp
- sctp
- rds
- tipc
Ядровые модули, которые будут заблокированы и отключены с помощью подделки установки.
Примечание
Отключение модуля
usb-storage
приведет к отключению всех USB накопителей. Если такие устройства нужны, USBGuard или аналогичный инструмент следует настроить соответствующим образом.
./defaults/main/mount.yml
hide_pid: 2
process_group: root
hide_pid
устанавливает режим доступа к /proc/<pid>/
.
Настройка process_group
определяет группу, уполномоченную получать информацию о процессах, иначе это запрещается hidepid=
.
./defaults/main/ntp.yml
manage_timesyncd: true
fallback_ntp:
- ntp.netnod.se
- ntp.ubuntu.com
ntp:
- 2.pool.ntp.org
- time.nist.gov
Если manage_timesyncd: true
, то настраивается systemd timesyncd, в противном случае рекомендуется установить клиент NTP.
./defaults/main/packagemgmt.yml
apt_hardening_options:
- Acquire::AllowDowngradeToInsecureRepositories "false";
- Acquire::AllowInsecureRepositories "false";
- Acquire::http::AllowRedirect "false";
- APT::Get::AllowUnauthenticated "false";
- APT::Get::AutomaticRemove "true";
- APT::Install-Recommends "false";
- APT::Install-Suggests "false";
- APT::Periodic::AutocleanInterval "7";
- APT::Sandbox::Seccomp "1";
- Unattended-Upgrade::Remove-Unused-Dependencies "true";
- Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Настраивает инструменты APT.
./defaults/main/packages.yml
system_upgrade: true
packages_blocklist:
- apport*
- autofs
- avahi*
- avahi-*
- beep
- git
- pastebinit
- popularity-contest
- prelink
- rpcbind
- rsh*
- rsync
- talk*
- telnet*
- tftp*
- tuned
- whoopsie
- xinetd
- yp-tools
- ypbind
packages_debian:
- acct
- apparmor-profiles
- apparmor-utils
- apt-show-versions
- audispd-plugins
- auditd
- cracklib-runtime
- debsums
- gnupg2
- haveged
- libpam-apparmor
- libpam-cap
- libpam-modules
- libpam-pwquality
- libpam-tmpdir
- lsb-release
- needrestart
- openssh-server
- postfix
- rsyslog
- sysstat
- systemd-journal-remote
- tcpd
- vlock
- wamerican
packages_redhat:
- audispd-plugins
- audit
- cracklib
- gnupg2
- haveged
- libpwquality
- openssh-server
- needrestart
- postfix
- psacct
- python3-dnf-plugin-post-transaction-actions
- rsyslog
- rsyslog-gnutls
- systemd-journal-remote
- vlock
- words
packages_ubuntu:
- fwupd
- secureboot-db
- snapd
system_upgrade: true
выполнит apt upgrade
или
dnf update
, если это необходимо.
Пакеты для установки в зависимости от дистрибутива и пакеты, которые нужно удалить (packages_blocklist
).
./defaults/main/password.yml
manage_faillock: true
faillock:
admin_group: []
audit: true
deny: 5
dir: /var/run/faillock
even_deny_root: true
fail_interval: 900
local_users_only: true
no_log_info: false
nodelay: true
root_unlock_time: 600
silent: false
unlock_time: 600
login_defs:
login_retries: 5
login_timeout: 60
pass_max_days: 60
pass_min_days: 1
pass_warn_age: 7
password_remember: 5
pwquality:
dcredit: -1
dictcheck: 1
dictpath: ""
difok: 8
enforce_for_root: true
enforcing: 1
gecoscheck: 1
lcredit: -1
local_users_only: true
maxclassrepeat: 4
maxrepeat: 3
minclass: 4
minlen: 15
ocredit: -1
retry: 3
ucredit: -1
usercheck: 1
usersubstr: 3
manage_faillock: true
включает библиотеку faillock.
password_remember
устанавливает размер истории паролей, которые пользователь не сможет повторно использовать.
Переменные faillock
, login_defs
и pwquality
используются для настройки
pam_faillock,
login.defs и libpwquality.
./defaults/main/rkhunter.yml
manage_rkhunter: true
rkhunter_allow_ssh_prot_v1: false
rkhunter_allow_ssh_root_user: false
rkhunter_mirrors_mode: "0"
rkhunter_update_mirrors: true
rkhunter_web_cmd: curl -fsSL
Если manage_rkhunter: true
, то настраивается rkhunter.
./defaults/main/sshd.yml
manage_ssh: true
sshd_accept_env: LANG LC_*
sshd_admin_net:
- 192.168.0.0/24
- 192.168.1.0/24
sshd_allow_agent_forwarding: false
sshd_allow_groups:
- sudo
sshd_allow_tcp_forwarding: false
sshd_allow_users:
- "{{ ansible_user | default(lookup('ansible.builtin.env', 'USER')) }}"
sshd_authentication_methods: any
sshd_authorized_principals_file: /etc/ssh/auth_principals/%u
sshd_banner: /etc/issue.net
sshd_ca_signature_algorithms:
- ecdsa-sha2-nistp256
- ecdsa-sha2-nistp384
- ecdsa-sha2-nistp521
- ssh-ed25519
- rsa-sha2-256
- rsa-sha2-512
- ssh-rsa
sshd_kbd_interactive_authentication: false
sshd_ciphers:
- [email protected]
- [email protected]
- aes256-ctr
sshd_client_alive_count_max: 1
sshd_client_alive_interval: 200
sshd_compression: false
sshd_config_d_force_clear: false
sshd_config_force_replace: false
sshd_debian_banner: false
sshd_deny_groups: []
sshd_deny_users: []
sshd_gssapi_authentication: false
sshd_host_key_algorithms:
- [email protected]
- [email protected]
- ssh-ed25519
- ssh-rsa
- [email protected]
- [email protected]
- [email protected]
- ecdsa-sha2-nistp521
- ecdsa-sha2-nistp384
- ecdsa-sha2-nistp256
sshd_host_keys_files: []
sshd_host_keys_group: root
sshd_host_keys_mode: "0600"
sshd_host_keys_owner: root
sshd_hostbased_authentication: false
sshd_ignore_rhosts: true
sshd_ignore_user_known_hosts: true
sshd_kerberos_authentication: false
sshd_kex_algorithms:
- [email protected]
- ecdh-sha2-nistp521
- ecdh-sha2-nistp384
- ecdh-sha2-nistp256
- diffie-hellman-group-exchange-sha256
sshd_listen:
- 0.0.0.0
sshd_log_level: VERBOSE
sshd_login_grace_time: 20
sshd_macs:
- [email protected]
- [email protected]
- hmac-sha2-512
- hmac-sha2-256
sshd_match_addresses: {}
sshd_match_groups: {}
sshd_match_local_ports: {}
sshd_match_users: {}
sshd_max_auth_tries: 3
sshd_max_sessions: 3
sshd_max_startups: 10:30:60
sshd_password_authentication: false
sshd_permit_empty_passwords: false
sshd_permit_root_login: false
sshd_permit_tunnel: false
sshd_permit_user_environment: false
sshd_ports:
- 22
sshd_print_last_log: true
sshd_print_motd: false
sshd_print_pam_motd: false
sshd_rekey_limit: 512M 1h
sshd_required_ecdsa_size: 521
sshd_required_rsa_size: 4096
sshd_sftp_enabled: true
sshd_sftp_only_chroot: true
sshd_sftp_only_chroot_dir: "%h"
sshd_sftp_only_group: ""
sshd_sftp_subsystem: internal-sftp -f LOCAL6 -l INFO
sshd_strict_modes: true
sshd_syslog_facility: AUTH
sshd_tcp_keep_alive: false
sshd_trusted_user_ca_keys_base64: ""
sshd_trusted_user_ca_keys_file: /etc/ssh/trusted-user-ca-keys.pem
sshd_update_moduli: false
sshd_use_dns: false
sshd_use_pam: true
sshd_use_privilege_separation: sandbox
sshd_x11_forwarding: false
Если manage_ssh: true
, SSH-клиент и SSH-сервер будут настроены.
Примечание
CASignatureAlgorithms
,Ciphers
,HostKeyAlgorithms
,KexAlgorithms
иMACs
будут настроены в соответствии с определенными криптографическими политиками, если существует файл/etc/crypto-policies/config
иset_crypto_policy: true
.
Для объяснения неописанных ниже параметров, пожалуйста, читайте https://man.openbsd.org/sshd_config.
Только сети, определенные в sshd_admin_net
, могут подключаться к
sshd_ports
.
Обратите внимание, что также необходимо настроить дополнительные правила для доступа к
дополнительным службам.
Вход в OpenSSH разрешен только для пользователей, чья основная группа или список
дополнительных групп совпадает с одним из шаблонов в sshd_allow_groups
. Вход в OpenSSH также разрешен пользователям в sshd_allow_users
. Для запрета доступа используйте параметры sshd_deny_groups
и sshd_deny_users
, которые в свою очередь имеют приоритет над предыдущими параметрами.
sshd_allow_agent_forwarding
определяет, разрешено ли переадресовывать ssh-agent(1).
sshd_allow_tcp_forwarding
определяет, разрешена ли переадресация TCP.
Доступные параметры: true
или all
для разрешения TCP переадресации,
false
для предотвращения всей TCP переадресации, local
для разрешения локальной (с точки зрения ssh(1)) переадресации только или remote
для разрешения только удаленной переадресации.
sshd_authentication_methods
указывает методы аутентификации, которые должны
быть успешно выполнены для предоставления доступа пользователю.
sshd_log_level
задает уровень детализации, который используется при регистрации сообщений.
sshd_max_auth_tries
и sshd_max_sessions
указывают максимальное количество
попыток аутентификации SSH, разрешенных на одно соединение, и максимальное количество
открытых сеансов оболочки, входа или подсистемы (например, sftp
), разрешенных на одно сетевое соединение.
sshd_password_authentication
указывает, разрешена ли аутентификация по паролю.
sshd_ports
указывает номер(а) порта, на котором прослушивает sshd(8).
sshd_required_rsa_size
, RequiredRSASize
будет установлен только в том случае, если версия SSH
выше 9.1.
sshd_config_d_force_clear
принудительно очищает директорию /etc/ssh/sshd_config.d
.
По умолчанию: false
.
sshd_config_force_replace
принудительно заменяет файл конфигурации
/etc/ssh/sshd_config
. По умолчанию: false
.
Примечание
По умолчанию роль проверяет, существует ли директория
/etc/ssh/sshd_config.d
и подключена ли она с помощью параметраInclude
в файле/etc/ssh/sshd_config
. Если да, создается дополнительный файл конфигурации в/etc/ssh/sshd_config.d
, если нет, файл/etc/ssh/sshd_config
перезаписывается.
Предупреждение
Если какой-либо параметр
sshd_match_(users|groups|addresses|local_ports)
илиsshd_sftp_only_group
установлен, значениеtrue
будет подразумеваться.
sshd_host_keys_files
ключи хоста для sshd. Если пусто, будут использоваться
['/etc/ssh/ssh_host_rsa_key', '/etc/ssh/ssh_host_ecdsa_key', '/etc/ssh/ssh_host_ed25519_key']
,
при условии, что они поддерживаются установленной версией sshd.
sshd_host_keys_owner
устанавливает владельца ключей хоста для sshd.
sshd_host_keys_group
устанавливает группу ключей хоста для sshd.
sshd_host_keys_mode
устанавливает права доступа к ключам хоста для sshd.
sshd_match_users
добавляет условный блок для пользователей. Если все критерии,
указанные в строке Match, удовлетворены, правила/параметры, определенные в
следующих строках, переопределяют те, что установлены в глобальном разделе
конфигурационного файла, пока не будет встречена другая строка Match или не закончится файл.
Ожидаемая структура конфигурации:
sshd_match_users:
- user: <username>
rules:
- <parameter sshd> <value>
- <parameter sshd> <value>
Пример: разрешить доступ пользователю ubuntu
через аутентификацию по паролю и разрешить
пользователю ansible
доступ без баннера:
sshd_match_users:
- user: ubuntu
rules:
- AllowUsers ubuntu
- AuthenticationMethods password
- PasswordAuthentication yes
- user: ansible
rules:
- AllowUsers ansible
- Banner none
sshd_match_groups
добавляет условный блок для групп. Дополнительные детали и примеры можно найти в описании параметра sshd_match_users
.
Ожидаемая структура конфигурации:
sshd_match_groups:
- group: <groupname>
rules:
- <parameter sshd> <value>
- <parameter sshd> <value>
sshd_match_addresses
добавляет условный блок для адресов. Дополнительные детали и примеры можно найти в описании параметра sshd_match_users
.
Ожидаемая структура конфигурации:
sshd_match_addresses:
- address: <ip>
rules:
- <parameter sshd> <value>
- <parameter sshd> <value>
sshd_match_local_ports
добавляет условный блок для портов. Дополнительные детали и примеры можно найти в описании параметра sshd_match_users
.
Ожидаемая структура конфигурации:
sshd_match_ports:
- port: <port>
rules:
- <parameter sshd> <value>
- <parameter sshd> <value>
sshd_print_pam_motd
указывает, следует ли выводить MOTD через pam
.
sshd_sftp_enabled
указывает, разрешена ли конфигурация sftp.
sshd_sftp_subsystem
устанавливает подсистему для демона передачи файлов.
sshd_sftp_only_group
указывает имя группы, доступ которой будет ограничен только службой sftp.
sshd_sftp_only_chroot
указывает, что доступ группы будет осуществляться через chroot изоляцию.
sshd_sftp_only_chroot_dir
указывает директорию chroot. Принимает токены %%
(буквально %
), %h
(домашняя директория пользователя) и %u
(имя пользователя).
sshd_syslog_facility
устанавливает код подсистемы, используемый при регистрации сообщений
от sshd.
sshd_update_moduli
, если установлен в true, загрузит обновленный
файл moduli
из репозитория konstruktoid/ssh-moduli.
./defaults/main/suid_sgid_blocklist.yml
suid_sgid_permissions: true
suid_sgid_blocklist:
- 7z
- aa-exec
- ab
- agetty
- alpine
- ansible-playbook
- ansible-test
- aoss
- apt
- apt-get
[...]
Если suid_sgid_permissions: true
, пройти по suid_sgid_blocklist
и удалить любые разрешения SUID/SGID.
Полный список файлов доступен в defaults/main/suid_sgid_blocklist.yml и основан на работе @GTFOBins.
./defaults/main/sysctl.yml
manage_sysctl: true
sysctl_conf_dir: "{{ '/usr/lib/sysctl.d' if usr_lib_sysctl_d_dir else '/etc/sysctl.d' }}"
sysctl_dev_tty_ldisc_autoload: 0
ipv4_sysctl_settings:
net.ipv4.conf.all.accept_redirects: 0
net.ipv4.conf.all.accept_source_route: 0
net.ipv4.conf.all.log_martians: 1
net.ipv4.conf.all.rp_filter: 1
net.ipv4.conf.all.secure_redirects: 0
net.ipv4.conf.all.send_redirects: 0
net.ipv4.conf.all.shared_media: 0
net.ipv4.conf.default.accept_redirects: 0
net.ipv4.conf.default.accept_source_route: 0
net.ipv4.conf.default.log_martians: 1
net.ipv4.conf.default.rp_filter: 1
net.ipv4.conf.default.secure_redirects: 0
net.ipv4.conf.default.send_redirects: 0
net.ipv4.conf.default.shared_media: 0
net.ipv4.icmp_echo_ignore_broadcasts: 1
net.ipv4.icmp_ignore_bogus_error_responses: 1
net.ipv4.ip_forward: 0
net.ipv4.tcp_challenge_ack_limit: 2147483647
net.ipv4.tcp_invalid_ratelimit: 500
net.ipv4.tcp_max_syn_backlog: 20480
net.ipv4.tcp_rfc1337: 1
net.ipv4.tcp_syn_retries: 5
net.ipv4.tcp_synack_retries: 2
net.ipv4.tcp_syncookies: 1
generic_sysctl_settings:
fs.protected_fifos: 2
fs.protected_hardlinks: 1
fs.protected_symlinks: 1
fs.suid_dumpable: 0
kernel.core_pattern: "|/bin/false"
kernel.core_uses_pid: 1
kernel.dmesg_restrict: 1
kernel.kptr_restrict: 2
kernel.panic: 60
kernel.panic_on_oops: 60
kernel.perf_event_paranoid: 3
kernel.randomize_va_space: 2
kernel.sysrq: 0
kernel.unprivileged_bpf_disabled: 1
kernel.yama.ptrace_scope: 2
net.core.bpf_jit_harden: 2
user.max_user_namespaces: 62967
conntrack_sysctl_settings:
net.netfilter.nf_conntrack_max: 2000000
net.netfilter.nf_conntrack_tcp_loose: 0
Если manage_sysctl: true
, то обновляется конфигурация sysctl
.
sysctl_conf_dir
— это место, где будет размещена конфигурация sysctl
.
Смотрите sysctl.conf и документацию по ядру, где указана информация.
./defaults/main/templates.yml
adduser_conf_template: etc/adduser.conf.j2
common_account_template: etc/pam.d/common-account.j2
common_auth_template: etc/pam.d/common-auth.j2
common_password_template: etc/pam.d/common-password.j2
coredump_conf_template: etc/systemd/coredump.conf.j2
faillock_conf_template: etc/security/faillock.conf.j2
hardening_rules_template: etc/audit/rules.d/hardening.rules.j2
hosts_allow_template: etc/hosts.allow.j2
hosts_deny_template: etc/hosts.deny.j2
initpath_sh_template: etc/profile.d/initpath.sh.j2
issue_template: etc/issue.j2
journald_conf_template: etc/systemd/journald.conf.j2
limits_conf_template: etc/security/limits.conf.j2
login_defs_template: etc/login.defs.j2
login_template: etc/pam.d/login.j2
logind_conf_template: etc/systemd/logind.conf.j2
logrotate_conf_template: etc/logrotate.conf.j2
motd_template: etc/motd.j2
pwquality_conf_template: etc/security/pwquality.conf.j2
resolved_conf_template: etc/systemd/resolved.conf.j2
rkhunter_template: etc/default/rkhunter.j2
ssh_config_template: etc/ssh/ssh_config.j2
sshd_config_template: etc/ssh/sshd_config.j2
sysctl_ipv6_config_template: etc/sysctl/sysctl.ipv6.conf.j2
sysctl_main_config_template: etc/sysctl/sysctl.main.conf.j2
system_conf_template: etc/systemd/system.conf.j2
timesyncd_conf_template: etc/systemd/timesyncd.conf.j2
tmp_mount_template: etc/systemd/tmp.mount.j2
user_conf_template: etc/systemd/user.conf.j2
useradd_template: etc/default/useradd.j2
Пути, необходимые для поддержки переопределения по умолчанию шаблонов ролей.
./defaults/main/ufw.yml
manage_ufw: true
ufw_outgoing_traffic:
- 22
- 53
- 80
- 123
- 443
- 853
ufw_rate_limit: false
Смотрите примечание о необходимых комментариях.
manage_ufw: true
устанавливает и настраивает ufw
с соответствующими правилами.
Установите значение false
, чтобы вручную установить и настроить брандмауэр.
ufw_outgoing_traffic
открывает определенные порты ufw
, разрешая исходящий трафик.
ufw_rate_limit
, если true
, установит ограничение на скорость соединений для всех доступных
физических сетевых интерфейсов.
./defaults/main/umask.yml
session_timeout: 900
umask_value: "077"
session_timeout
устанавливает, в секундах, переменную
TMOUT
окружения.
umask_value
устанавливает значение по умолчанию
умаски.
./defaults/main/usbguard.yml
manage_usbguard: true
usbguard_configuration_file: /etc/usbguard/usbguard-daemon.conf
usbguard_rulefile: /etc/usbguard/rules.conf
usbguard_auditbackend: LinuxAudit
usbguard_auditfilepath: /var/log/usbguard/usbguard-audit.log
usbguard_authorizeddefault: none
usbguard_devicemanagerbackend: uevent
usbguard_deviceruleswithport: false
usbguard_hidepii: false
usbguard_implicitpolicytarget: block
usbguard_inserteddevicepolicy: apply-policy
usbguard_ipcaccesscontrolfiles: /etc/usbguard/IPCAccessControl.d/
usbguard_ipcallowedgroups:
- plugdev
- root
- wheel
usbguard_ipcallowedusers:
- root
usbguard_presentcontrollerpolicy: keep
usbguard_presentdevicepolicy: apply-policy
usbguard_restorecontrollerdevicestate: false
manage_usbguard: true
устанавливает и настраивает
USBGuard.
Политика будет сгенерирована, если какие-либо правила могут быть перечислены и политика пока еще не существует.
Смотрите документацию по настройке относительно доступных параметров.
./defaults/main/users.yml
delete_users:
- games
- gnats
- irc
- list
- news
- sync
- uucp
Пользователи, которых нужно удалить.
Рекомендуемая литература
Сравнение DISA STIG и значений CIS Benchmark
Бенчмарки по безопасности Центра безопасности Интернета для Linux
Общая классификация конфигурации
Руководства по техническому внедрению безопасности DISA
Руководства по безопасности SCAP
Конфигурация системы с фокусом на безопасность
Участие
Хотите внести свой вклад? Отлично! Мы всегда рады любым заимствованиям, независимо от их размера. Если вы заметили что-то странное, не стесняйтесь сообщить об этом, улучшить код, создавая запрос на внесение изменений, или поддерживая этот проект.
Лицензия
Лицензия Apache Версия 2.0
Информация об авторе
AlmaLinux, Debian and Ubuntu hardening. systemd edition.
ansible-galaxy install konstruktoid/ansible-role-hardening