thechip911.hardening
Renforcement - le rôle Ansible
Un rôle Ansible pour rendre un serveur AlmaLinux, Debian ou Ubuntu un peu plus sécurisé.
édition systemd.
Nécessite Ansible >= 2.12.
Disponible sur Ansible Galaxy.
Les versions AlmaLinux 8, Debian 11, Ubuntu 20.04 LTS (Focal Fossa) et 22.04 LTS (Jammy Jellyfish) sont prises en charge.
Remarque
N'utilisez pas ce rôle sans d'abord le tester dans un environnement non opérationnel.
Remarque
Il existe un artefact SLSA sous le workflow d'action slsa pour vérification.
Dépendances
Aucune.
Exemples
Playbook
---
- hosts: localhost
any_errors_fatal: true
tasks:
- name: Inclure le rôle de renforcement
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 avec git checkout
---
- hosts: localhost
any_errors_fatal: true
tasks:
- name: Installer git
become: true
ansible.builtin.package:
name: git
state: present
- name: Cloner thechip911.hardening
become: true
ansible.builtin.git:
repo: 'https://github.com/thechip911/ansible-role-hardening'
dest: /etc/ansible/roles/thechip911.hardening
version: master
- name: Inclure le rôle de renforcement
ansible.builtin.include_role:
name: thechip911.hardening
vars:
block_blacklisted: true
sshd_admin_net:
- 10.0.2.0/16
suid_sgid_permissions: false
...
Remarque concernant les règles du pare-feu UFW
Au lieu de réinitialiser ufw
à chaque exécution, ce qui provoquerait des interruptions dans le trafic réseau, le rôle supprime chaque règle ufw
sans le paramètre 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_port
et ufw_outgoing_traffic
.
Exécution et structure des tâches
Voir STRUCTURE.md pour l'arborescence de la structure du rôle.
Tests de rôle
Voir TESTING.md.
Variables de rôle avec valeurs par défaut
./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
Activez auditd
au démarrage avec 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 détecte qu'il manque d'espace disque. suspend
arrêtera le démon d'audit d'écrire des enregistrements sur le disque.
auditd_max_log_file_action
définit l'action à prendre lorsque le système détecte que la limite de taille de fichier maximum 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 à prendre lorsque le système détecte qu'il manque d'espace disque. email
signifie qu'un avertissement sera envoyé à l'adresse email spécifiée dans action_mail_acct
ainsi qu'à syslog.
auditd_mode
définit le mode de défaillance dauditd
, 0=silencieux 1=printk 2=paniquer.
./defaults/main/compilers.yml
compilers:
- as
- cargo
- cc
- cc-[0-9]*
- clang-[0-9]*
- gcc
- gcc-[0-9]*
- go
- make
- rustc
Liste des compilateurs qui seront restreints à l'utilisateur root.
./defaults/main/disablewireless.yml
disable_wireless: false
Si true
, éteignez toutes les interfaces sans fil.
./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
Adresses IPv4 et IPv6 à utiliser comme serveurs DNS système et de secours.
Si dnssec
est défini sur "allow-downgrade", une validation DNSSEC sera tentée, mais si le serveur ne prend pas correctement en charge DNSSEC, le mode DNSSEC sera automatiquement désactivé.
Si dns_over_tls
est vrai, toutes les connexions au serveur seront chiffrées si le serveur DNS prend en charge DNS-over-TLS et dispose d'un certificat valide.
./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
Si disable_ipv6: true
, IPv6 sera désactivé.
./defaults/main/limits.yml
limit_nofile_hard: 1024
limit_nofile_soft: 512
limit_nproc_hard: 1024
limit_nproc_soft: 512
Nombre maximal de processus et de fichiers ouverts.
./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
Si install_aide: true
, AIDE sera installé et configuré.
Si reboot_ubuntu: true
, un nœud Ubuntu sera redémarré si nécessaire.
redhat_signing_keys
sont les Clés de signature des produits RedHat.
Les epel7_signing_keys
, epel8_signing_keys
et epel9_signing_keys
sont des clés de signature spécifiques aux versions Fedora EPEL.
./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
Modules du noyau bloqués.
Définir block_blacklisted: true
empêchera tout chargement automatique des modules du noyau "blacklistés". Cela empêche le chargement manuel de modules "blacklistés" via modprobe module_name
.
./defaults/main/mount.yml
hide_pid: 2
process_group: root
hide_pid
définit le mode d'accès de /proc/<pid>/
.
Le paramètre process_group
configure le groupe autorisé à apprendre des informations sur les processus autrement interdites par hidepid=
.
./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
Noms d'hôtes ou adresses IP des serveurs NTP. option systemd.
./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'
exécutera apt upgrade
ou dnf update
si nécessaire.
Packages à installer selon la distribution et packages à supprimer (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
Définir des politiques cryptographiques si /etc/crypto-policies/config
existe.
Configurer la bibliothèque libpwquality.
./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'
Pour une explication des options non décrites ci-dessous, veuillez lire https://man.openbsd.org/sshd_config.
Seuls les réseaux définis dans sshd_admin_net
sont autorisés à se connecter à sshd_port
. Notez que des règles supplémentaires doivent être mises en place pour permettre l'accès à d'autres services.
La connexion OpenSSH est autorisée uniquement pour les utilisateurs dont le groupe principal ou la liste des groupes supplémentaires correspond à l'un des modèles dans sshd_allow_groups
.
sshd_allow_agent_forwarding
spécifie si le transfert de ssh-agent(1) est autorisé.
sshd_allow_tcp_forwarding
spécifie si le transfert TCP est autorisé. Les options disponibles sont yes
ou toutes pour autoriser le transfert TCP, no
pour interdire tous les transferts 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 validées avec succès pour accorder l'accès à un utilisateur.
sshd_log_level
indique le niveau de verbosité utilisé lors de l'enregistrement des messages.
sshd_max_auth_tries
et sshd_max_sessions
spécifient respectivement le nombre maximum de tentatives d'authentification SSH autorisées par connexion et le nombre maximum de sessions shell, de connexion ou de sous-système (par exemple, sftp) autorisées par connexion réseau.
sshd_password_authentication
spécifie si l'authentification par mot de passe est autorisée.
sshd_port
spécifie le numéro de port que sshd(8) écoute.
sshd_required_rsa_size
, RequiredRSASize, ne sera défini que si la version de SSH est supérieure à 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
[...]
Si suid_sgid_permissions: true
, passez en boucle dans suid_sgid_blocklist
et retirez toutes les permissions SUID/SGID.
Une liste complète des fichiers est disponible dans 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
Configuration sysctl
.
./defaults/main/ufw.yml
ufw_enable: true
ufw_outgoing_traffic:
- 22
- 53
- 80
- 123
- 443
- 853
ufw_enable: 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.
./defaults/main/users.yml
delete_users:
- games
- gnats
- irc
- list
- news
- sync
- uucp
Utilisateurs à supprimer.
Lectures recommandées
Comparer les valeurs DISA STIG et CIS Benchmark
Centre pour la sécurité d'Internet Linux Benchmarks
Numérotation des configurations communes
Guides de mise en œuvre technique de sécurité DISA
Configuration système centré sur la sécurité systemd
Contribuer
Vous souhaitez 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 en sponsorisant ce projet.
Licence
Licence Apache Version 2.0
Informations sur l'auteur
AlmaLinux, Debian and Ubuntu hardening. systemd edition.
ansible-galaxy install thechip911.hardening