thechip911.hardening
Absichern - die Ansible-Rolle
Eine Ansible Rolle, um einen AlmaLinux, Debian oder Ubuntu Server etwas sicherer zu machen. systemd-Version.
Benötigt Ansible >= 2.12.
Verfügbar auf Ansible Galaxy.
AlmaLinux 8, Debian 11, Ubuntu 20.04 LTS (Focal Fossa) und 22.04 LTS (Jammy Jellyfish) werden unterstützt.
Hinweis
Verwenden Sie diese Rolle nicht, ohne sie zuerst in einer nicht betrieblichen Umgebung zu testen.
Hinweis
Es gibt ein SLSA Artefakt im slsa-Action-Workflow zur Überprüfung.
Abhängigkeiten
Keine.
Beispiele
Playbook
---
- hosts: localhost
any_errors_fatal: true
tasks:
- name: Die Hardening-Rolle einbinden
ansible.builtin.include_role:
name: thechip911.hardening
vars:
block_blacklisted: true
sshd_admin_net:
- 10.0.0.0/16
suid_sgid_permissions: false
...
ansible-pull mit git checkout
---
- hosts: localhost
any_errors_fatal: true
tasks:
- name: Git installieren
become: true
ansible.builtin.package:
name: git
state: present
- name: Thechip911.hardening auschecken
become: true
ansible.builtin.git:
repo: 'https://github.com/thechip911/ansible-role-hardening'
dest: /etc/ansible/roles/thechip911.hardening
version: master
- name: Die Hardening-Rolle einbinden
ansible.builtin.include_role:
name: thechip911.hardening
vars:
block_blacklisted: true
sshd_admin_net:
- 10.0.2.0/16
suid_sgid_permissions: false
...
Hinweis zu UFW-Firewallregeln
Anstatt ufw
bei jedem Durchlauf zurückzusetzen und damit den Netzwerkverkehr zu stören, löscht die Rolle jede ufw
-Regel ohne das
comment: ansible managed
-Parameter und dessen Wert.
Die Rolle legt auch Standardverweigerungsrichtlinien fest, was bedeutet, dass Firewallregeln für zusätzliche Ports erstellt werden müssen,
außer für die in den Variablen sshd_port
und ufw_outgoing_traffic
angegebenen.
Ausführung und Struktur der Aufgaben
Siehe STRUCTURE.md für die Struktur der Rolle.
Rollentest
Siehe TESTING.md.
Rollenv Variablen mit Standardwerten
./defaults/main/auditd.yml
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_max_log_file: 8
auditd_max_log_file_action: keep_logs
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
Aktivieren Sie auditd
beim Booten über Grub.
Wenn auditd_apply_audit_rules: 'yes'
gesetzt ist, wendet die Rolle die auditd-Regeln aus der enthaltenen Vorlagendatei an.
auditd_action_mail_acct
sollte eine gültige E-Mail-Adresse oder ein Alias sein.
auditd_admin_space_left_action
definiert, welche Aktion unternommen wird, wenn das System erkannt hat, dass der Speicherplatz niedrig ist. suspend
führt dazu, dass der Audit-Daemon aufhört, Protokolle auf die Festplatte zu schreiben.
auditd_max_log_file_action
legt fest, welche Aktion unternommen wird, wenn das System erkannt hat, dass die maximale Dateigröße erreicht ist. Zum Beispiel wird die rotate
-Option den Audit-Daemon dazu bringen, die Protokolle zu rotieren. Die keep_logs
-Option ist ähnlich wie rotate
, es verwendet jedoch nicht die num_logs
-Einstellung. Dadurch wird verhindert, dass Audit-Protokolle überschrieben werden.
auditd_space_left_action
teilt dem System mit, welche Aktion unternommen werden soll, wenn erkannt wird, dass der Speicherplatz niedrig ist. email
bedeutet, dass eine Warnung an das in action_mail_acct
angegebene E-Mail-Konto gesendet wird sowie eine Nachricht an syslog gesendet wird.
auditd_mode
legt den Fehlermodus von auditd
fest, 0=silent 1=printk 2=panic.
./defaults/main/compilers.yml
compilers:
- as
- cargo
- cc
- cc-[0-9]*
- clang-[0-9]*
- gcc
- gcc-[0-9]*
- go
- make
- rustc
Liste der Compiler, die auf den Root-Benutzer beschränkt werden.
./defaults/main/disablewireless.yml
disable_wireless: false
Wenn true
, werden alle drahtlosen Schnittstellen deaktiviert.
./defaults/main/dns.yml
dns: 127.0.0.1 1.1.1.1
fallback_dns: 9.9.9.9 1.0.0.1
dnssec: allow-downgrade
dns_over_tls: opportunistic
IPv4- und IPv6-Adressen, die als System- und Fallback-DNS-Server verwendet werden.
Wenn dnssec
auf "allow-downgrade" gesetzt ist, wird DNSSEC-Validierung versucht, aber wenn der Server DNSSEC nicht korrekt unterstützt, wird der DNSSEC-Modus automatisch deaktiviert.
Wenn dns_over_tls
wahr ist, werden alle Verbindungen zum Server verschlüsselt, wenn der DNS-Server DNS-over-TLS unterstützt und ein gültiges Zertifikat hat.
systemd Option.
./defaults/main/ipv6.yml
disable_ipv6: false
ipv6_disable_sysctl_settings:
net.ipv6.conf.all.disable_ipv6: 1
net.ipv6.conf.default.disable_ipv6: 1
Wenn disable_ipv6: true
gesetzt ist, wird IPv6 deaktiviert.
./defaults/main/limits.yml
limit_nofile_hard: 1024
limit_nofile_soft: 512
limit_nproc_hard: 1024
limit_nproc_soft: 512
Maximale Anzahl von Prozessen und offenen Dateien.
./defaults/main/misc.yml
install_aide: true
reboot_ubuntu: false
redhat_signing_keys:
- 567E347AD0044ADE55BA8A5F199E2F91FD431D51
- 47DB287789B21722B6D95DDE5326810137017186
epel7_signing_keys:
- 91E97D7C4A5E96F17F3E888F6A2FAEA2352C64E5
epel8_signing_keys:
- 94E279EB8D8F25B21810ADF121EA45AB2F86D6A1
epel9_signing_keys:
- FF8AD1344597106ECE813B918A3872BF3228467C
Wenn install_aide: true
gesetzt ist, wird AIDE installiert und konfiguriert.
Wenn reboot_ubuntu: true
gesetzt ist, wird ein Ubuntu-Knoten bei Bedarf neu gestartet.
redhat_signing_keys
sind RedHat Produkt-Signaturschlüssel.
Die epel7_signing_keys
, epel8_signing_keys
und
epel9_signing_keys
sind versionsspezifische
Fedora EPEL-Signaturschlüssel.
./defaults/main/module_blocklists.yml
block_blacklisted: false
fs_modules_blocklist:
- cramfs
- freevxfs
- hfs
- hfsplus
- jffs2
- squashfs
- udf
misc_modules_blocklist:
- bluetooth
- bnep
- btusb
- can
- cpia2
- firewire-core
- floppy
- n_hdlc
- net-pf-31
- pcspkr
- soundcore
- thunderbolt
- usb-midi
- usb-storage
- uvcvideo
- v4l2_common
net_modules_blocklist:
- atm
- dccp
- sctp
- rds
- tipc
Blockierte Kernel-Module.
Durch Setzen von block_blacklisted: true
werden alle automatisch geladenen
blacklisted
Kernel-Module blockiert oder deaktiviert. Der Grund dafür ist, dass ein blockiertes Modul dennoch manuell mit modprobe module_name
geladen werden kann. Die Verwendung von
install module_name /bin/true
verhindert dies.
./defaults/main/mount.yml
hide_pid: 2
process_group: root
hide_pid
legt den Zugangsmodus für /proc/<pid>/
fest.
Die Einstellung process_group
konfiguriert die Gruppe, die berechtigt ist, Informationen über Prozesse zu erfahren, die sonst durch hidepid=
verboten sind.
./defaults/main/ntp.yml
fallback_ntp: 2.ubuntu.pool.ntp.org 3.ubuntu.pool.ntp.org
ntp: 0.ubuntu.pool.ntp.org 1.ubuntu.pool.ntp.org
NTP-Server-Hostnamen oder IP-Adressen. systemd Option.
./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*
- 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
- rkhunter
- rsyslog
- sysstat
- tcpd
- vlock
- wamerican
packages_redhat:
- audispd-plugins
- audit
- cracklib
- gnupg2
- haveged
- libpwquality
- openssh-server
- needrestart
- postfix
- psacct
- rkhunter
- rsyslog
- rsyslog-gnutls
- vlock
- words
packages_ubuntu:
- fwupd
- secureboot-db
system_upgrade: 'yes'
führt apt upgrade
oder
dnf update
durch, wenn nötig.
Pakete, die abhängig von der Distribution installiert werden sollen,
und Pakete, die entfernt werden sollen (packages_blocklist
).
./defaults/main/password.yml
crypto_policy: FIPS
pwquality_config:
dcredit: -1
dictcheck: 1
difok: 8
enforcing: 1
lcredit: -1
maxclassrepeat: 4
maxrepeat: 3
minclass: 4
minlen: 15
ocredit: -1
ucredit: -1
Setzt kryptografische Richtlinien
wenn /etc/crypto-policies/config
existiert.
Konfiguriert die libpwquality Bibliothek.
./defaults/main/sshd.yml
sshd_accept_env: LANG LC_*
sshd_admin_net:
- 192.168.0.0/24
- 192.168.1.0/24
sshd_allow_agent_forwarding: 'no'
sshd_allow_groups: sudo
sshd_allow_tcp_forwarding: 'no'
sshd_authentication_methods: any
sshd_banner: /etc/issue.net
sshd_challenge_response_authentication: 'no'
sshd_ciphers: [email protected],[email protected],aes256-ctr
sshd_client_alive_count_max: 1
sshd_client_alive_interval: 200
sshd_compression: 'no'
sshd_gssapi_authentication: 'no'
sshd_hostbased_authentication: 'no'
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_ignore_user_known_hosts: 'yes'
sshd_kerberos_authentication: 'no'
sshd_kex_algorithms: [email protected],ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256
sshd_login_grace_time: 20
sshd_log_level: VERBOSE
sshd_macs: [email protected],[email protected],hmac-sha2-512,hmac-sha2-256
sshd_max_auth_tries: 3
sshd_max_sessions: 3
sshd_max_startups: 10:30:60
sshd_password_authentication: 'no'
sshd_permit_empty_passwords: 'no'
sshd_permit_root_login: 'no'
sshd_permit_user_environment: 'no'
sshd_port: 22
sshd_print_last_log: 'yes'
sshd_print_motd: 'no'
sshd_rekey_limit: 512M 1h
sshd_required_rsa_size: 2048
sshd_strict_modes: 'yes'
sshd_subsystem: sftp internal-sftp
sshd_tcp_keep_alive: 'no'
sshd_use_dns: 'no'
sshd_use_pam: 'yes'
sshd_x11_forwarding: 'no'
Für eine Erklärung der nicht beschriebenen Optionen lesen Sie bitte https://man.openbsd.org/sshd_config.
Nur die Netzwerke, die in sshd_admin_net
definiert sind, dürfen sich mit
sshd_port
verbinden. Beachten Sie, dass zusätzliche Regeln eingerichtet werden müssen, um den Zugriff auf zusätzliche Dienste zu ermöglichen.
Die SSH-Login ist nur für Benutzer erlaubt, deren Hauptgruppe oder Liste der zusätzlichen Gruppen mit einem der Muster in sshd_allow_groups
übereinstimmt.
sshd_allow_agent_forwarding
gibt an, ob das Weiterleiten von ssh-agent(1) erlaubt ist.
sshd_allow_tcp_forwarding
gibt an, ob TCP-Weiterleitung erlaubt ist. Die verfügbaren Optionen sind yes
oder all, um TCP-Forwarding zuzulassen, no
, um alles zu verhindern, local
, um nur lokale (aus der Sicht von ssh(1)) Weiterleitung zuzulassen, oder remote
, um nur remote Weiterleitung zuzulassen.
sshd_authentication_methods
gibt die Authentifizierungsmethoden an, die erfolgreich abgeschlossen sein müssen, um einem Benutzer den Zugang zu gewähren.
sshd_log_level
gibt die Detailtiefe an, die beim Protokollieren verwendet wird.
sshd_max_auth_tries
und sshd_max_sessions
geben die maximale Anzahl von
SSH-Authentifizierungsversuchen pro Verbindung und die maximale Anzahl an offenen Shell-, Anmelde- oder Subsystem (z.B. sftp) Sitzungen pro Netzwerkverbindung an.
sshd_password_authentication
gibt an, ob die Passwortauthentifizierung erlaubt ist.
sshd_port
gibt die Portnummer an, auf der sshd(8) lauscht.
sshd_required_rsa_size
, RequiredRSASize, wird nur festgelegt, wenn die SSH-Version höher ist als 9.1.
./defaults/main/suid_sgid_blocklist.yml
suid_sgid_permissions: true
suid_sgid_blocklist:
- ansible-playbook
- ar
- as
- at
- awk
- base32
- base64
- bash
- busctl
- busybox
[...]
Wenn suid_sgid_permissions: true
gesetzt ist, wird durch die Liste suid_sgid_blocklist
geschleust und alle SUID/SGID-Berechtigungen entfernt.
Eine vollständige Dateiliste ist verfügbar in defaults/main/suid_sgid_blocklist.yml.
./defaults/main/sysctl.yml
sysctl_dev_tty_ldisc_autoload: 0
sysctl_net_ipv6_conf_accept_ra_rtr_pref: 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
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
generic_sysctl_settings:
fs.protected_fifos: 2
fs.protected_hardlinks: 1
fs.protected_symlinks: 1
fs.suid_dumpable: 0
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
conntrack_sysctl_settings:
net.netfilter.nf_conntrack_max: 2000000
net.netfilter.nf_conntrack_tcp_loose: 0
sysctl
Konfiguration.
./defaults/main/ufw.yml
ufw_enable: true
ufw_outgoing_traffic:
- 22
- 53
- 80
- 123
- 443
- 853
ufw_enable: true
installiert und konfiguriert ufw
mit den entsprechenden Regeln. Setzen Sie es auf false
, um die Firewall manuell zu installieren und zu konfigurieren.
ufw_outgoing_traffic
öffnet die spezifischen ufw
-Ports,
und erlaubt ausgehenden Verkehr.
./defaults/main/users.yml
delete_users:
- games
- gnats
- irc
- list
- news
- sync
- uucp
Benutzer, die entfernt werden sollen.
Empfohlene Literatur
Vergleich der DISA STIG- und CIS Benchmark-Werte
Center for Internet Security Linux Benchmarks
Common Configuration Enumeration
Sicherheitsfokussierte systemd-Konfiguration
Mitwirken
Möchten Sie mitwirken? Toll! Beiträge sind immer willkommen, egal wie groß oder klein. Wenn Ihnen etwas Seltsames aufgefallen ist, zögern Sie nicht, ein Problem zu melden, den Code zu verbessern, indem Sie einen Pull-Request erstellen, oder dieses Projekt zu unterstützen.
Lizenz
Apache Lizenz Version 2.0
Autoreninformation
AlmaLinux, Debian and Ubuntu hardening. systemd edition.
ansible-galaxy install thechip911.hardening