konstruktoid.hardening
Rôle Ansible pour le Renforcement de Sécurité des Serveurs
Ceci est un rôle Ansible conçu pour améliorer la sécurité des serveurs fonctionnant sous AlmaLinux, Debian ou Ubuntu.
Il est focalisé sur systemd et nécessite une version d'Ansible 2.15 ou supérieure.
Le rôle prend en charge les systèmes d'exploitation suivants :
- AlmaLinux 8
- AlmaLinux 9
- Debian 11 (Bullseye)
- Debian 12 (Bookworm)
- Ubuntu 22.04 (Jammy Jellyfish)
- Ubuntu 24.04 (Noble Numbat)
Pour ceux qui utilisent AWS ou Azure, il existe également des images Amazon Machine Images (AMIs) et des images de machines virtuelles Azure renforcées sous Ubuntu.
Celles-ci sont disponibles dans le dépôt konstruktoid/hardened-images. Ces images sont créées à l'aide de Packer et ce rôle Ansible est utilisé pour leur configuration.
Remarque N'utilisez pas ce rôle sans d'abord le tester dans un environnement non opérationnel.
Remarque Un artefact SLSA est présent sous le workflow d'action SLSA pour vérification.
Dépendances
Aucune.
Exemples
Exigences
---
roles:
- name: konstruktoid.hardening
version: v2.1.0
src: https://github.com/konstruktoid/ansible-role-hardening.git
scm: git
Playbook
---
- name: Importer et utiliser le rôle de renforcement
hosts: localhost
any_errors_fatal: true
tasks:
- name: Importer le rôle de renforcement
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
Playbook local utilisant git checkout
---
- name: Cloner et configurer konstruktoid.hardening
hosts: localhost
any_errors_fatal: true
tasks:
- name: Cloner le dépôt de renforcement
become: true
tags:
- always
block:
- name: Installer git
ansible.builtin.package:
name: git
state: present
- name: Cloner 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: Supprimer git
ansible.builtin.package:
name: git
state: absent
- name: Inclure le rôle de renforcement
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
Remarque concernant les règles UFW
Au lieu de réinitialiser ufw
à chaque exécution, ce qui provoquerait une interruption du trafic réseau, le rôle supprime chaque règle ufw
sans le paramètre et la valeur de tâche comment: ansible managed
.
Le rôle définit également des politiques de refus par défaut, ce qui signifie que des règles de pare-feu doivent être créées pour tous les ports supplémentaires, sauf ceux spécifiés dans les variables sshd_ports
et ufw_outgoing_traffic
.
Voir ufw(8) pour plus d'informations.
Exécution des Tâches et Structure
Voir STRUCTURE.md pour l'arborescence de la structure du rôle.
Test du Rôle
Voir TESTING.md.
Variables du Rôle avec valeurs par défaut
./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
Si manage_aide: true
, alors AIDE sera installé et configuré.
aide_checksums
modifie la variable Checksums
d'AIDE. Notez que la variable Checksums
peut ne pas être présente selon la distribution.
aide_dir_exclusions
est une liste de répertoires qui seront exclus de la base de données 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
Si manage_auditd: true
, alors le Système d'Audit Linux sera configuré et activé lors du démarrage à l'aide de GRUB.
Quand auditd_apply_audit_rules: 'yes'
, le rôle applique les règles auditd du fichier modèle inclus.
auditd_action_mail_acct
doit être une adresse email ou un alias valide.
auditd_admin_space_left_action
définit l'action à prendre lorsque le système a détecté qu'il manque d'espace disque. suspend
fera en sorte que le démon d'audit arrête d'écrire des enregistrements sur le disque.
auditd_enable_flag
règle le flag activé. Si 0
est passé, l'audit sera temporairement désactivé. 1
activera l'audit et 2
verrouillera la configuration d'audit.
auditd_flush: sync
indique au démon d'audit de garder les données et les métadonnées entièrement synchronisées à chaque écriture sur le disque.
auditd_max_log_file_action
définit l'action à prendre lorsque le système a confirmé que la limite de taille de fichier maximale a été atteinte. Par exemple, l'option rotate
fera en sorte que le démon d'audit tourne les journaux. L'option keep_logs
est similaire à rotate
, sauf qu'elle n'utilise pas le paramètre num_logs
. Cela empêche les journaux d'audit d'être écrasés.
auditd_space_left_action
indique au système l'action à entreprendre lorsque le système détecte qu'il manque d'espace disque. email
signifie qu'un avertissement sera envoyé à l'adresse spécifiée dans action_mail_acct
, ainsi qu'un message envoyé à syslog.
auditd_mode
définit le mode de défaillance d'auditd, 0=silencieux 1=printk 2=panic.
./defaults/main/automatic_updates.yml
automatic_updates:
enabled: true
reboot: false
Si automatic_updates
est activé, il installera et configurera dnf-automatic ou unattended-upgrades, selon la distribution.
Si l'option reboot
est réglée sur true
, elle redémarrera le système si nécessaire, voir Unattended-Upgrade::Automatic-Reboot et 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
Si manage_compilers: true
, alors les compilateurs listés seront restreints à l'utilisateur root.
./defaults/main/crypto_policies.yml
set_crypto_policy: true
crypto_policy: DEFAULT:NO-SHA1
Définir et utiliser des politiques cryptographiques si /etc/crypto-policies/config
existe et que set_crypto_policy: true
.
./defaults/main/disablewireless.yml
disable_wireless: false
Si true
, désactive toutes les interfaces sans fil.
./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
Si manage_resolved: true
, configure systemd-resolved.
Adresses IPv4 et IPv6 à utiliser comme serveurs DNS système et de secours. Si dnssec
est réglé sur "allow-downgrade", la validation DNSSEC est tentée, mais si le serveur ne supporte pas correctement DNSSEC, le mode DNSSEC est automatiquement désactivé.
Si dns_over_tls
est vrai, toutes les connexions au serveur seront cryptées si le serveur DNS prend en charge DNS-over-TLS et possède un certificat valide.
./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
Si disable_ipv6: true
, IPv6 sera désactivé et les paramètres sysctl associés configurés.
ipv6_sysctl_settings
est la configuration sysctl
utilisée si l'hôte utilise IPv6.
./defaults/main/journal.yml
rsyslog_filecreatemode: "0640"
journald_compress: true
journald_forwardtosyslog: false
journald_storage: persistent
rsyslog_filecreatemode
définit le mode de création avec lequel rsyslogd crée de nouveaux fichiers, voir
rsconf1_filecreatemode.
journald_compress
peut prendre une valeur booléenne. Si activé (valeur par défaut), les objets de données sont compressés avant d'être écrits sur le système de fichiers.
journald_storage
contrôle où stocker les données de journal. L'une des options est volatile
, persistent
, auto
ou none
.
journald_forwardtosyslog
contrôle si les messages d'enregistrement reçus par le démon de journal doivent être transférés à un démon syslog traditionnel.
Voir journald.conf pour plus d'informations.
./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
permettra les appels système virtuels si true
, sinon aucun mappage vsyscall ne sera défini, voir CONFIG_LEGACY_VSYSCALL_NONE.
enable_page_poisoning: true
activera CONFIG_PAGE_POISONING.
kernel_lockdown
configure la fonctionnalité de verrouillage du noyau. Les valeurs valides sont false
, true
, integrity
et confidentiality
. Si true
, le noyau sera verrouillé en mode integrity
.
page_table_isolation
est une contre-mesure contre les attaques sur l'espace d'adresse partagé utilisateur/noyau, voir CONFIG_PAGE_TABLE_ISOLATION.
slub_debugger_poisoning
, s'il est réglé sur true
, prévient de nombreux types de vulnérabilités liées au dépassement de mémoire et empêche les fuites de données ainsi que la détection de mémoire corrompue. Voir Guide utilisateur court pour SLUB.
./defaults/main/limits.yml
limit_nofile_hard: 1024
limit_nofile_soft: 512
limit_nproc_hard: 1024
limit_nproc_soft: 512
Définir le nombre maximum de processus et de fichiers ouverts, voir 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
Si reboot_ubuntu: true
, un nœud Ubuntu sera redémarré si nécessaire.
redhat_signing_keys
sont les Clés de Signature de Produit RedHat.
Les epel7_signing_keys
, epel8_signing_keys
et epel9_signing_keys
sont les clés de signature spécifiques aux versions de 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
Modules du noyau à mettre sur liste noire et désactiver à l'aide d'une installation factice.
Remarque
Désactiver le module
usb-storage
désactivera tous les dispositifs de stockage USB. Si de tels dispositifs sont nécessaires, USBGuard ou un outil similaire doit être configuré en conséquence.
./defaults/main/mount.yml
hide_pid: 2
process_group: root
hide_pid
règle le mode d'accès de /proc/<pid>/
.
Le paramètre process_group
configure le groupe autorisé à connaître les informations sur les processus autrement prohibées par hidepid=
.
./defaults/main/ntp.yml
manage_timesyncd: true
fallback_ntp:
- ntp.netnod.se
- ntp.ubuntu.com
ntp:
- 2.pool.ntp.org
- time.nist.gov
Si manage_timesyncd: true
, alors configure le système timesyncd, sinon il est recommandé d'installer un client 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";
Configurer la suite d'outils 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
exécutera apt upgrade
ou
dnf update
si nécessaire.
Les paquets à installer dépendent de la distribution
et les paquets à supprimer (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
activera la bibliothèque faillock.
password_remember
définit la taille de l'historique des mots de passe que l'utilisateur ne pourra pas réutiliser.
Les variables faillock
, login_defs
et pwquality
sont utilisées pour configurer les
pam_faillock,
login.defs et
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
Si manage_rkhunter: true
, alors configure 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
Si manage_ssh: true
, le client SSH et le démon SSH seront configurés.
Remarque
CASignatureAlgorithms
,Ciphers
,HostKeyAlgorithms
,KexAlgorithms
etMACs
seront configurés selon les politiques cryptographiques si/etc/crypto-policies/config
existe et queset_crypto_policy: true
.
Pour une explication des options non décrites ci-dessous, veuillez lire https://man.openbsd.org/sshd_config.
Seules les réseaux définis dans sshd_admin_net
sont autorisés à se connecter à
sshd_ports
. Notez que des règles supplémentaires doivent être mises en place pour
permettre l'accès à des services additionnels.
La connexion OpenSSH n'est autorisée que pour les utilisateurs dont le groupe principal
ou la liste des groupes supplémentaires correspond à l'un des motifs de sshd_allow_groups
. La connexion OpenSSH est également autorisée pour les utilisateurs dans sshd_allow_users
. Pour interdire l'accès, utilisez les paramètres sshd_deny_groups
et sshd_deny_users
, qui ont la priorité sur les paramètres précédents.
sshd_allow_agent_forwarding
spécifie si le transfert ssh-agent(1) est autorisé.
sshd_allow_tcp_forwarding
spécifie si le transfert TCP est autorisé. Les options disponibles sont true
ou all
pour permettre le transfert TCP, false
pour empêcher tout transfert TCP, local
pour autoriser uniquement le transfert local (du point de vue de ssh(1)) ou remote
pour autoriser uniquement le transfert à distance.
sshd_authentication_methods
spécifie les méthodes d'authentification qui doivent
être correctement complétées afin d'accorder l'accès à un utilisateur.
sshd_log_level
définit le niveau de verbosité utilisé lors de l'enregistrement des messages.
sshd_max_auth_tries
et sshd_max_sessions
spécifient le nombre maximal de tentatives de connexion SSH autorisées par connexion et le nombre maximal de sessions shell, de connexion ou de sous-système (par exemple, sftp
) ouvertes par connexion réseau.
sshd_password_authentication
spécifie si l'authentification par mot de passe est autorisée.
sshd_ports
spécifie le(s) port(s) sur le(s)quel(s) sshd(8) écoute.
sshd_required_rsa_size
, RequiredRSASize
, ne sera défini que si la version SSH est supérieure à 9.1.
sshd_config_d_force_clear
force le nettoyage du répertoire /etc/ssh/sshd_config.d
. Par défaut : false
.
sshd_config_force_replace
force le remplacement du fichier de configuration
/etc/ssh/sshd_config
. Par défaut : false
.
Remarque
Par défaut, le rôle vérifie si le répertoire
/etc/ssh/sshd_config.d
existe et s'il est lié par le paramètreInclude
dans le fichier/etc/ssh/sshd_config
. Si c'est le cas, un fichier de configuration supplémentaire est créé dans/etc/ssh/sshd_config.d
. Sinon, le fichier/etc/ssh/sshd_config
est écrasé.
Avertissement
Si un de ces paramètres
sshd_match_(users|groups|addresses|local_ports)
ousshd_sftp_only_group
est défini, la valeurtrue
sera implicite.
sshd_host_keys_files
spécifie les clés d'hôte pour sshd. Si vide, ['/etc/ssh/ssh_host_rsa_key', '/etc/ssh/ssh_host_ecdsa_key', '/etc/ssh/ssh_host_ed25519_key']
sera utilisé, selon les supportées par la version installée de sshd.
sshd_host_keys_owner
définit le propriétaire des clés d'hôte pour sshd.
sshd_host_keys_group
définit le groupe des clés d'hôte pour sshd.
sshd_host_keys_mode
définit la permission des clés d'hôte pour sshd.
sshd_match_users
ajoute un bloc conditionnel pour les utilisateurs. Si tous les critères de la ligne d'accord (Match) sont satisfaits, les règles/paramètres définis dans les lignes suivantes remplacent ceux définis dans la section globale du fichier de configuration, jusqu'à la prochaine ligne d'accord ou la fin du fichier.
Structure de configuration attendue :
sshd_match_users:
- user: <nom_utilisateur>
rules:
- <paramètre sshd> <valeur>
- <paramètre sshd> <valeur>
Exemple, autoriser l'accès de l'utilisateur ubuntu
via l'authentification par mot de passe et permettre à l'utilisateur ansible
d'accéder sans une bannière :
sshd_match_users:
- user: ubuntu
rules:
- AllowUsers ubuntu
- AuthenticationMethods password
- PasswordAuthentication yes
- user: ansible
rules:
- AllowUsers ansible
- Banner none
sshd_match_groups
ajoute un bloc conditionnel pour les groupes. Plus de détails et d'exemples se trouvent dans la description des paramètres sshd_match_users
.
Structure de configuration attendue :
sshd_match_groups:
- group: <nom_groupe>
rules:
- <paramètre sshd> <valeur>
- <paramètre sshd> <valeur>
sshd_match_addresses
ajoute un bloc conditionnel pour les adresses. Plus de détails et d'exemples se trouvent dans la description des paramètres sshd_match_users
.
Structure de configuration attendue :
sshd_match_addresses:
- address: <ip>
rules:
- <paramètre sshd> <valeur>
- <paramètre sshd> <valeur>
sshd_match_local_ports
ajoute un bloc conditionnel pour les ports. Plus de détails et d'exemples se trouvent dans la description des paramètres sshd_match_users
.
Structure de configuration attendue :
sshd_match_ports:
- port: <port>
rules:
- <paramètre sshd> <valeur>
- <paramètre sshd> <valeur>
sshd_print_pam_motd
spécifie si l'affichage de la MOTD via pam
est autorisé.
sshd_sftp_enabled
spécifie si la configuration sftp est activée.
sshd_sftp_subsystem
définit le sous-système pour le démon de transfert de fichiers.
sshd_sftp_only_group
spécifie le nom du groupe qui aura un accès restreint au service sftp uniquement.
sshd_sftp_only_chroot
spécifie que l'accès du groupe sera via l'isolation chroot.
sshd_sftp_only_chroot_dir
spécifie le répertoire chroot. Accepte les tokens %%
(un littéral %
), %h
(répertoire personnel de l'utilisateur), et %u
(nom d'utilisateur).
sshd_syslog_facility
définit le code de facility utilisé lors de l'enregistrement des messages
de sshd.
sshd_update_moduli
, s'il est réglé sur true
, téléchargera un fichier moduli mis à jour depuis le dépôt 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
[...]
Si suid_sgid_permissions: true
, parcourt suid_sgid_blocklist
et supprime
toute permission SUID/SGID.
Une liste complète des fichiers est disponible dans defaults/main/suid_sgid_blocklist.yml et est basée sur le travail de @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
Si manage_sysctl: true
, alors met à jour la configuration sysctl
.
sysctl_conf_dir
est l'endroit où la configuration sysctl
sera placée.
Voir sysctl.conf et la documentation du noyau.
./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
Chemins pour soutenir le remplacement des modèles par défaut du rôle.
./defaults/main/ufw.yml
manage_ufw: true
ufw_outgoing_traffic:
- 22
- 53
- 80
- 123
- 443
- 853
ufw_rate_limit: false
Voir la remarque concernant les commentaires nécessaires.
manage_ufw: true
installe et configure ufw
avec les règles associées.
Réglez-le sur false
pour installer et configurer un pare-feu manuellement.
ufw_outgoing_traffic
ouvre les ports ufw
spécifiques, permettant le trafic sortant.
ufw_rate_limit
, s'il est true
, mettra des limites de taux de connexion sur toutes les interfaces réseau physiques disponibles.
./defaults/main/umask.yml
session_timeout: 900
umask_value: "077"
session_timeout
fixe, en secondes, la variable d'environnement TMOUT.
umask_value
définit la valeur par défaut de 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
installe et configure
USBGuard.
Une politique sera générée si des règles peuvent être listées et si une politique n'existe pas encore.
Voir la documentation de configuration pour les options disponibles.
./defaults/main/users.yml
delete_users:
- games
- gnats
- irc
- list
- news
- sync
- uucp
Utilisateurs à supprimer.
Lecture Recommandée
Comparer les valeurs DISA STIG et CIS Benchmark
Center for Internet Security Linux Benchmarks
Common Configuration Enumeration
DISA Security Technical Implementation Guides
Configuration système de sécurité axée sur systemd
Contribuer
Vous voulez contribuer ? Super ! Les contributions sont toujours les bienvenues, peu importe leur taille. Si vous avez trouvé quelque chose d'étrange, n'hésitez pas à soumettre un problème, à améliorer le code en créant une demande de tirage, ou à sponsorer ce projet.
Licence
Licence Apache Version 2.0
Informations sur l'Auteur
AlmaLinux, Debian and Ubuntu hardening. systemd edition.
ansible-galaxy install konstruktoid.hardening