konstruktoid.hardening
服务器硬化的 Ansible 角色
这是一个旨在增强运行在 AlmaLinux、Debian 或 Ubuntu 上的服务器安全性的 Ansible 角色。
该角色专注于 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 的用户,提供了经过硬化的 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 检出本地剧本
---
- 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 规则的说明
该角色会删除每个没有包含 comment: ansible managed
任务参数和值的 ufw
规则,而不是每次运行时重置 ufw
,以避免网络流量中断。
该角色还设置了默认的拒绝策略,这意味着在 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
,则会使用 GRUB 配置并启用 Linux 审计系统。
当 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
选项将导致审计守护进程旋转日志。 keep_logs
选项类似于 rotate
,但不使用 num_logs
设置。这防止审计日志被覆盖。
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
是主机使用 IPv6 时使用的 sysctl
配置。
./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
将允许虚拟系统调用,如果为 false,则不会设置 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
,可以防止许多类型的使用后释放漏洞,也防止数据泄露和检测损坏的内存。 参见 Short users guide for 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
设置被授权了解进程信息的组,否则将禁止该信息。
./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 守护进程。
注意
如果存在
/etc/crypto-policies/config
且set_crypto_policy: true
,将根据加密策略配置CASignatureAlgorithms
、Ciphers
、HostKeyAlgorithms
、KexAlgorithms
和MACs
。
对于尚未描述的选项的解释,请阅读 https://man.openbsd.org/sshd_config。
只有在 sshd_admin_net
中定义的网络才能连接到 sshd_ports
。
请注意,为允许访问其他服务,还需要设置附加规则。
仅允许主组或补充组列表与 sshd_allow_groups
中的模式匹配的用户进行 OpenSSH 登录。 也允许 sshd_allow_users
中的用户进行 OpenSSH 登录。 为相反的目的以拒绝访问,使用 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 身份验证尝试次数和每个网络连接允许的最大开放 shell、登录或子系统(例如,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
是否存在,以及它是否由/etc/ssh/sshd_config
文件中的Include
参数链接。如果存在,则在/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 行或文件末尾。
预期的配置结构:
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
指定是否通过 pam
打印 MOTD。
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
,将从 konstruktoid/ssh-moduli 仓库下载更新的 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
设置默认
umask 值。
./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
将被移除的用户。
推荐阅读
贡献
想要贡献吗?太好了!我们欢迎任何贡献,无论大小。 如果你发现了什么不对劲,随时可以提交问题、通过创建拉取请求来改进代码,或者通过 赞助该项目。
许可证
Apache 许可证 版本 2.0