hardening

Роль Ansible для Ужесточения Безопасности Серверов

Это Ansible роль, предназначенная для повышения безопасности серверов, работающих на AlmaLinux, Debian или Ubuntu.

Роль ориентирована на systemd и требует Ansible версии 2.15 или выше.

Роль поддерживает следующие операционные системы:

Для тех, кто использует 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.

aide.conf(5)

./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=паника.

auditd.conf(5)

./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.

sysctl.conf

./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=.

/proc параметры монтирования

./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

Информация об авторе

https://github.com/konstruktoid

О проекте

AlmaLinux, Debian and Ubuntu hardening. systemd edition.

Установить
ansible-galaxy install konstruktoid/ansible-role-hardening
Лицензия
apache-2.0
Загрузки
30613
Владелец