From 9e001908f19b352c5749eea45fc9c89e660c2b0c Mon Sep 17 00:00:00 2001 From: jankelevicht Date: Fri, 25 Oct 2024 14:39:58 +0200 Subject: [PATCH] Add files via upload --- my_script/config/config_file.sh | 12 +++ my_script/functions/fail2ban_setup.sh | 9 ++ my_script/functions/firewall_setup.sh | 13 +++ my_script/functions/log_management.sh | 32 +++++++ my_script/functions/secure_ssh.sh | 131 ++++++++++++++++++++++++++ my_script/main_script.sh | 79 ++++++++++++++++ 6 files changed, 276 insertions(+) create mode 100644 my_script/config/config_file.sh create mode 100644 my_script/functions/fail2ban_setup.sh create mode 100644 my_script/functions/firewall_setup.sh create mode 100644 my_script/functions/log_management.sh create mode 100644 my_script/functions/secure_ssh.sh create mode 100644 my_script/main_script.sh diff --git a/my_script/config/config_file.sh b/my_script/config/config_file.sh new file mode 100644 index 0000000..e1a7190 --- /dev/null +++ b/my_script/config/config_file.sh @@ -0,0 +1,12 @@ +# my_script/config/config_file.sh + +# Fichiers de configuration +export SSH_CONFIG_FILE="/etc/ssh/sshd_config" +export UFW_LOG_FILE="/var/log/ufw.log" + +# Liste des groupes autorisés pour SSH +export ALLOWED_GROUPS="user users root" + +# key ssh +export SSH_KEY_PUB="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDNawY9lagTd+bExcs+LDatPFsJ3MdKGjrlYjrIZQTDT5gFoFXSCX3i2XbQcxLx6XlH7cO6MbwrM9VaVk1pcuDIq0hoLqZz2l0Vdcu7KOBIkdBYxfPH++aDLrLx4GILa1gJkz60x3QvI0cemikkHH/jhdK7+Q5cQ7CD4L26Q2ILP+ZmHcYQa/uiVXWWjWdv9h3PH7jDJrRyzhp6H+XpsusWj0/SmbP3yFXIHTC081o1at31tS0VsqkoaUnSsyCJ4XBlz/FfglXU5FK4Jg5g689SHNNsRs/beBPyiHEgtXlPMvtsN4Iaw+sbsF8spY/uPaomrLLybX3k4n/ZH3uUbQreiv6tzcc1/9L+Rn8bYF7frl7S0sw5RDS+pxJwn5Zkg6DXXP9L97h3sG2y0zlay37XqLiCUAOc1Duzh62ocSDCNp07tbaeowYhavTwYkh0f7PcU5/884GIzqSJLqPEo9mZTirqjZooLLsTikkXoIYTnAivclIFze1wtZRDJFwr42TN8GI+0sa0Kij1NxKzfhtQCobeBEyJ/UGMHV+8CyJ9+bWuuaSFKBgywKer/oSD+flzFrHNI2Q0pwU6PTJZEX44kdEY22W65vxGzssOUbMbgeBzzUYVkOYaIuiKWUm1QH5imnWgcy4w9EeiSY9dj8q8QoZKZI+Qg/o17095Zvi1Ew== pierre@archeasygpt +" diff --git a/my_script/functions/fail2ban_setup.sh b/my_script/functions/fail2ban_setup.sh new file mode 100644 index 0000000..8af94ff --- /dev/null +++ b/my_script/functions/fail2ban_setup.sh @@ -0,0 +1,9 @@ +# my_script/functions/fail2ban_setup.sh + +setup_fail2ban() { + systemctl start fail2ban + systemctl enable fail2ban + echo -e "__________________________________________" + echo -e "| Service fail2ban activé et configuré ! |" + echo -e "__________________________________________" +} diff --git a/my_script/functions/firewall_setup.sh b/my_script/functions/firewall_setup.sh new file mode 100644 index 0000000..0e76394 --- /dev/null +++ b/my_script/functions/firewall_setup.sh @@ -0,0 +1,13 @@ +# my_script/functions/firewall_setup.sh + +setup_ufw() { + ufw default deny incoming + ufw default allow outgoing + ufw allow ssh + ufw allow 80/tcp + + ufw enable + echo -e "_____________________________________" + echo -e "| Service UFW activé et configuré ! |" + echo -e "_____________________________________" +} diff --git a/my_script/functions/log_management.sh b/my_script/functions/log_management.sh new file mode 100644 index 0000000..5836817 --- /dev/null +++ b/my_script/functions/log_management.sh @@ -0,0 +1,32 @@ +# my_script/functions/log_setup.sh + +setup_authenticator() { + apt-get install -y libpam-google-authenticator + su - $username -c google-authenticator + + echo "auth required pam_google_authenticator.so" | tee -a /etc/pam.d/sshd + + echo "ChallengeResponseAuthentication yes" | tee -a $SSH_CONFIG_FIL + echo "AuthenticationMethods publickey" | tee -a $SSH_CONFIG_FIL + echo "AuthenticationMethods keyboard-interactive" | tee -a $SSH_CONFIG_FIL + systemctl restart sshd + echo -e "______________________________________________________" + echo -e "| Service ssh redémarré, double Authentication activé |" + echo -e "______________________________________________________" +} + +# Auto Update +setup_auto_updates() { + apt-get install -y unattended-upgrades + + { + echo "APT::Periodic::Update-Package-Lists "1";" + echo "APT::Periodic::Unattended-Upgrade "1";" + } | tee -a /etc/apt/apt.conf.d/20auto-upgrades + + systemctl restart apt-daily.timer + systemctl restart apt-daily-upgrade.timer + echo -e "_______________________________" + echo -e "| Service d'auto update acitvé |" + echo -e "_______________________________" +} diff --git a/my_script/functions/secure_ssh.sh b/my_script/functions/secure_ssh.sh new file mode 100644 index 0000000..a3c11e3 --- /dev/null +++ b/my_script/functions/secure_ssh.sh @@ -0,0 +1,131 @@ +#!/bin/bash + +# my_script/functions/secure_ssh.sh + +secure_ssh_config() { + +##############################--SSH_KEYS--########################################## + + # Demande à l'utilisateur quel est son nom d'utilisateur + read -p "Entrez le nom d'utilisateur : " username + + # Définir le chemin du répertoire .ssh et du fichier authorized_keys pour l'utilisateur spécifié + ssh_dir="/home/$username/.ssh" + auth_keys_file="$ssh_dir/authorized_keys" + + # Vérifie si le répertoire ~/.ssh existe + if [ ! -d "$ssh_dir" ]; then + # Crée le répertoire ~/.ssh s'il n'existe pas + mkdir -p "$ssh_dir" + echo -e "______________________________________" + echo -e "| Le répertoire $ssh_dir a été créé. |" + echo -e "______________________________________" + + else + echo -e "______________________________________" + echo -e "| Le répertoire $ssh_dir existe déjà. |" + echo -e "______________________________________" + fi + + # Vérifie si le fichier authorized_keys existe + if [ ! -f "$auth_keys_file" ]; then + # Crée le fichier authorized_keys + touch "$auth_keys_file" + echo -e "__________________________________________" + echo -e "| Le fichier $auth_keys_file a été créé. |" + echo -e "_________________________________________" + else + echo -e "___________________________________________" + echo -e "| Le fichier $auth_keys_file existe déjà. |" + echo -e "___________________________________________" + fi + + # Copie de la clé ssh + echo "$SSH_KEY_PUB" >> "$auth_keys_file" + + # Vérifier si la clé a été ajoutée avec succès + if grep -q "$SSH_KEY_PUB" "$auth_keys_file"; then + echo -e "_____________________________" + echo -e "| La clé a été ajoutée avec succès. |" + echo -e "_____________________________" + else + echo -e "_____________________________" + echo -e "| Échec de l'ajout de la clé. |" + echo -e "_____________________________" + fi + + # Ajuste les permissions + chmod 700 "$ssh_dir" + chmod 600 "$auth_keys_file" + chown "$username:$username" "$ssh_dir" + chown "$username:$username" "$auth_keys_file" + + echo -e "_____________________________" + echo -e "| Les permissions ont été ajustées. |" + echo -e "_____________________________" + +##############################--Configuration--########################################## + + # Configuration de SSH + sed -i "s/#PasswordAuthentication yes/PasswordAuthentication no/" "$SSH_CONFIG_FILE" + sed -i "s/#PubkeyAuthentication yes/PubkeyAuthentication yes/" "$SSH_CONFIG_FILE" + sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin no/" "$SSH_CONFIG_FILE" + + # Limiter l'accès + # Demander à l'utilisateur d'entrer un/des groupe/s + read -p "Veuillez entrer les groupes autorisés à se connecter : " authorized_group + + # Vérifier si l'utilisateur a saisi un groupe + if [ -z "$authorized_group" ]; then + echo -e "_____________________________" + echo -e "| Aucun groupe saisi. Le script va maintenant quitter. |" + echo -e "_____________________________" + exit 1 + fi + + # Ajouter AllowGroups au fichier de configuration SSH + echo "AllowGroups $authorized_group" | tee -a "$SSH_CONFIG_FILE" > /dev/null + + # Vérifier si la ligne a été ajoutée avec succès + if grep -q "AllowGroups $authorized_group" "$SSH_CONFIG_FILE"; then + echo -e "_____________________________" + echo -e "| Les groupes autorisés ont été appliqués. |" + echo -e "| Le service SSH a été redémarré. |" + echo -e "_____________________________" + else + echo -e "_____________________________" + echo -e "| Une erreur est survenue lors de l'ajout des groupes. |" + echo -e "_____________________________" + fi + +#############################--Fichier hosts.allow--########################################## + HOSTS_ALLOW="/etc/hosts.allow" + + # Demander à l'utilisateur quelle adresse ajouter + read -p "Veuillez entrer l'adresse IP ou le sous-réseau autorisés à se connecter (ex: 192.168.0.8 ou 192.168.0.0/24) :" ADDR + + # Vérifier si l'utilisateur a saisi une adresse + if [ -z "$ADDR" ]; then + echo -e "_____________________________" + echo -e "| Aucune adresse saisie. Le script va maintenant quitter. |" + echo -e "_____________________________" + exit 1 + fi + + # Ajouter au fichier /etc/hosts.allow + echo "sshd: $ADDR" >> "$HOSTS_ALLOW" + + # Bloquer toutes les autres adresses IP + echo "sshd: ALL : deny" >> "$HOSTS_ALLOW" + + echo -e "_____________________________" + echo -e "| Le fichier $HOSTS_ALLOW a été mis à jour. |" + echo -e "_____________________________" + + # Redémarrer le service SSH pour appliquer les changements + systemctl restart sshd + echo -e "_____________________________" + echo -e "| Les adresses IP autorisées ont été appliquées. |" + echo -e "| Le service SSH a été redémarré. |" + echo -e "_____________________________" +} diff --git a/my_script/main_script.sh b/my_script/main_script.sh new file mode 100644 index 0000000..5639627 --- /dev/null +++ b/my_script/main_script.sh @@ -0,0 +1,79 @@ +#!/bin/bash + +# Ce script s'arrêtera si une commande échoue. +set -e + +# Permet de voir les commandes exécutées avant qu'elles ne s'exécutent +trace() { + echo "# $*" + "$@" +} + +# Vérifier si l'utilisateur a les droits root +if [ "$(id -u)" -ne 0 ]; then + echo -e "_______________________________________________" + echo -e "| Erreur : Ce script nécessite les droits root. |" + echo -e "_______________________________________________" + exit 1 +fi + + echo -e "_______________________________________________" + echo -e "| Démarrage de l'installation des packages |" + echo -e "_______________________________________________" +apt update + +apt install -y vim curl wget openssh-server nano fail2ban ufw + echo "Opération terminée." + echo -e "________________________________________" + echo -e "| Appuyez sur Entrée pour continuer... |" + echo -e "________________________________________" + read + + +# Chargement des fonctions depuis les fichiers sourcés +source ./functions/secure_ssh.sh || { echo "Erreur : Impossible de sourcer secure_ssh.sh"; exit 1; } +source ./functions/firewall_setup.sh || { echo "Erreur : Impossible de sourcer firewall_setup.sh"; exit 1; } +source ./functions/fail2ban_setup.sh || { echo "Erreur : Impossible de sourcer fail2ban_setup.sh"; exit 1; } +source ./functions/log_management.sh || { echo "Erreur : Impossible de sourcer log_management.sh"; exit 1; } +source ./config/config_file.sh || { echo "Erreur : Impossible de charger le fichier de configuration"; exit 1; } + + +# Appeler les fonctions +main(){ + echo -e "_________________________________________________________________" + echo -e "| Démarrage du processus d'automatisation et de durcissement |" + echo -e "_________________________________________________________________" + echo -e "____________________________________________________" + echo -e "| Appuyez sur Entrée pour configuer le service SSH |" + echo -e "____________________________________________________" + read + secure_ssh_config + echo -e "____________________________________________________" + echo -e "| Appuyez sur Entrée pour configuer le firewall UFW |" + echo -e "____________________________________________________" + read + setup_ufw + echo -e "_____________________________________________" + echo -e "| Appuyez sur Entrée pour installer fail2ban |" + echo -e "_____________________________________________" + read + setup_fail2ban + echo -e "________________________________________________________________" + echo -e "| Appuyez sur Entrée pour configuer la double authentification |" + echo -e "________________________________________________________________" + read + setup_authenticator + echo -e "______________________________________________________________" + echo -e "| Appuyez sur Entrée pour configuer le service d'auto-update |" + echo -e "______________________________________________________________" + read + setup_auto_updates + + echo -e "__________________________" + echo -e "| Configuration terminée |" + echo -e "__________________________" + +} + +# Appel de la fonction principale +main