Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions customization/customization.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#!/bin/bash

conf_banniere(){
# Pour exécuter la fonction, il suffit d'appeler:
echo "Mise à jour /etc/motd avec le message de bienvenue"
read -p "Veuillez entrer le message souhaite : " MESSAGE
echo $MESSAGE >> /etc/motd
}

# Fonction pour ajouter des alias au fichier .bashrc
add_alias() {
local alias_command="$1"
if ! grep -q "alias $alias_command" "$BASHRC"; then
echo "alias $alias_command" >> "$BASHRC"
echo "Ajout de l'alias : $alias_command"
else
echo "L'alias $alias_command existe déjà."
fi
}

alias_conf(){
# Configuration d'alias de commande sur la machine
local BASHRC="$HOME/.bashrc"
while true; do
read -p "Entrez l'alias de commande que vous souhaitez ajouter (ou 'exit' pour quitter) sous la forme "alias='commande'" : " USER_ALIAS
if [[ "$USER_ALIAS" == "exit" ]]; then
break
fi
add_alias "$USER_ALIAS"
done

# Recharger le fichier .bashrc pour appliquer les changements
echo "Rechargement de .bashrc..."
source "$BASHRC"

}
86 changes: 86 additions & 0 deletions main.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
#!/bin/bash

# Script pour durcir Debian en trois etapes :
# 1. Script de configuration et durcissement SSH
# 2. Script de configuration firewall
# 3. Script de gestion des paquets
# 4. Script de configuration de fail2ban
# 5. Script de durcissement Debian

set -e # Exit le script immediatement si l'une des commandes retourne un code qui n'est pas zero

# Gestion des erreurs externes aux fonctions pour ameliorer la portabilite des fonctions
trace(){ echo "# $*";"$@"; }

echo "Lancement du script de durcissement de Debian." # Indique le debut du processus de durcissement

#Sourcage des fichiers de configuration des services
source ./services_config/sshconf.sh || { echo "Erreur : Impossible de sourcer sshconf.sh "; exit 1; }
source ./services_config/ufwconf.sh || { echo "Erreur : Impossible de sourcer ufwconf.sh "; exit 1; }
source ./services_config/fail2banconf.sh || { echo "Erreur : Impossible de sourcer fail2banconf.sh "; exit 1; }

#Sourcage des fichiers de configuration de l'OS
source ./os_config/update_upgrade.sh || { echo "Erreur : Impossible de sourcer managepackage.sh "; exit 1; }
source ./os_config/managepackage.sh || { echo "Erreur : Impossible de sourcer managepackage.sh "; exit 1; }
source ./os_config/hardeningdebian.sh || { echo "Erreur : Impossible de sourcer hardeningdebian.sh "; exit 1; }

#Sourcage des fichiers de customisation de l'OS
source ./customization/customization.sh || { echo "Erreur : Impossible de sourcer customization.sh "; exit 1; }

main(){
# Exécution des fonctions présentes dans les différents fichiers sources

# Mise a jour du systeme
update_upgrade || { echo " Erreur : echec de l'execution de update_upgrade "; exit 1; }

# SSH
sshkeyconf || { echo " Erreur : echec de l'execution de sshkeyconf "; exit 1; }
sshdconf || { echo " Erreur : echec de l'execution de sshdconf "; exit 1; }
sshaccess || { echo " Erreur : echec de l'execution de sshaccess "; exit 1; }
sshrestart || { echo " Erreur : echec de l'execution de sshrestart "; exit 1; }

# Package
disable_useless_package || { echo " Erreur : echec de l'execution de disable_useless_package "; exit 1; }
install_gpg || { echo " Erreur : echec de l'execution de install_gpg "; exit 1; }
install_unattended-upgrades || { echo " Erreur : echec de l'execution de install_unattended-upgrades "; exit 1; }
install_lynis || { echo " Erreur : echec de l'execution de install_lynis "; exit 1; }

# Fail2ban
install_fail2ban || { echo " Erreur : echec de l'execution de install_fail2ban "; exit 1; }
cp_jailconf || { echo " Erreur : echec de l'execution de cp_jailconf "; exit 1; }
conf_jail_local || { echo " Erreur : echec de l'execution de conf_jail_local "; exit 1; }
jail_local_access || { echo " Erreur : echec de l'execution de jail_local_access "; exit 1; }
fail2ban_restart || { echo " Erreur : echec de l'execution de fail2ban_restart "; exit 1; }
fail2ban_enable || { echo " Erreur : echec de l'execution de fail2ban_enable "; exit 1; }

# OS Hardening
auditd_conf || { echo " Erreur : echec de l'execution de auditd_conf "; exit 1; }
auditd_restart || { echo " Erreur : echec de l'execution de auditd_restart "; exit 1; }
auditd_check || { echo " Erreur : echec de l'execution de auditd_check "; exit 1; }
auditd_enable || { echo " Erreur : echec de l'execution de auditd_enable "; exit 1; }
auditd_access || { echo " Erreur : echec de l'execution de auditd_access "; exit 1; }
lynis_audit_system || { echo " Erreur : echec de l'execution de lynis_audit_system "; exit 1; }

# Customization
conf_banniere
alias_conf

# UFW
installufw || { echo " Erreur : echec de l'execution de installufw "; exit 1; }
ufwconf || { echo " Erreur : echec de l'execution de ufwconf "; exit 1; }
ufwreload || { echo " Erreur : echec de l'execution de ufwreload "; exit 1; }
ufwenable || { echo " Erreur : echec de l'execution de ufwenable "; exit 1; }

echo "Durcissement termine avec succes." # Affiche un message de succes si toutes les etapes se sont bien deroulees
}

# Verifie si l'utilisateur est root pour pouvoir executer le script
if [ "$(id -u)" -ne 0 ]; then
echo " Erreur : Vous n'avez pas les privileges necessaire ( Commande debian : su ) pour executer ce script. "
exit 1
fi

#Execution du script
main


49 changes: 49 additions & 0 deletions os_config/hardeningdebian.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#!/bin/bash

auditd_conf(){
# Ajout de regles d'audit de base sur les fichiers critiques
echo "# Surveille les modifications sur les fichiers critiques
-w /etc/passwd -p wa -k passwd_changes
-w /etc/shadow -p wa -k shadow_changes
-w /etc/group -p wa -k group_changes

# Surveille les connexions SSH
-w /var/log/secure -p wa -k ssh_logins

# Surveille les tentatives de connexion echouees
-w /var/log/faillog -p wa -k failed_logins

# Surveille les modifications dans le repertoire /etc
-w /etc/ -p wa -k etc_changes" >> /etc/audit/rules.d/audit.rules

}


auditd_restart(){
# Redemarrer auditd pour appliquer les nouvelles regles
echo "Redemarrage de auditd pour appliquer les nouvelles regles"
systemctl restart auditd
}

auditd_check(){
# Verifie les regles d'audit
echo "Regles d'audit appliquees :"
auditctl -l
}

auditd_enable(){
# Active le demarrage automatique du service auditd
systemctl enable auditd
}

auditd_access(){
# Gestion des acces aux fichiers sensibles
chmod 400 /etc/passwd # Le fichier /etc/passwd contient les informations des utilisateurs, il est securise pour eviter tout acces non autorise
chmod 400 /etc/shadow # Le fichier /etc/shadow contient les mots de passe haches des utilisateurs, il doit etre tres protege
}

lynis_audit_system(){
# Lancement d'un audit du systeme avec lynis pour terminer le durcissement Debian
echo "Lancement d'un audit du systeme avec lynis pour terminer le durcissement Debian"
lynis audit system
}
28 changes: 28 additions & 0 deletions os_config/managepackage.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#!/bin/bash

disable_useless_package(){
# Desactivation des services inutiles et non securises
echo "Desactivation des services inutiles et non securises"
apt purge telnet sendmail nis talk iptables-persistent -y
apt autoremove -y
}

install_gpg(){
# Installation du paquet gpg pour le chiffrement des donnees sensibles
echo "Installation du paquet gpg pour le chiffrement des donnees sensibles"
apt-get install gpg -y
gpg --full-generate-key
}

install_unattended-upgrades(){
# Installation du paquet Unattended-upgrades pour les mises à jour automatique (par defaut 3h du matin)
echo "Installation du paquet Unattended-upgrades pour les mises à jour automatique (par defaut 3h du matin)"
apt-get install unattended-upgrades apt-listchanges -y
dpkg-reconfigure unattended-upgrades
}

install_lynis(){
# Installation du paquet lynis pour pouvoir ulterieurement auditer le systeme
echo "Installation du paquet lynis pour pouvoir ulterieurement auditer le systeme"
apt-get install lynis -y
}
11 changes: 11 additions & 0 deletions os_config/update_upgrade.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/bin/bash

update_upgrade(){

# Mise a jour des paquets et du systeme avec le paramètre -y pour automatiquement accepter les
# propositions interactives de l'invite de commande
echo "Mise a jour du systeme"
apt-get update -y
apt-get upgrade -y

}
67 changes: 67 additions & 0 deletions services_config/fail2banconf.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
#!/bin/bash

install_fail2ban(){
# Installation de fail2ban
echo "Installation de fail2ban"
apt-get install fail2ban -y
}

cp_jailconf(){
# Copie du fichier de configuration jail.conf dans jail.local
echo "Copie du fichier de configuration jail.conf dans jail.local"
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
}

conf_jail_local(){
# Configuration de la jail DEFAUT
echo "Configuration de la jail DEFAUT"
bash -c 'cat << EOF >> /etc/fail2ban/jail.local
[DEFAULT]
ignoreip = 127.0.0.1/8
bantime = 1h
findtime = 10m
maxretry = 3
EOF'

# Configuration de la jail SSH
echo "Configuration de la jail sshd"
bash -c 'cat << EOF >> /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 2
bantime = 1d
EOF'

# Configuration de la jail recidive
echo "Configuration de la jail recidive"
bash -c 'cat << EOF >> /etc/fail2ban/jail.local
[recidive]
enabled = true
filter = recidive
logpath = /var/log/fail2ban.log
maxretry = 1
bantime = 30d
findtime = 1d
EOF'

}

jail_local_access(){
# Gestion des acces au fichier jail.local
echo "Gestion des acces au fichier jail.local"
chmod 600 /etc/fail2ban/jail.local
}

fail2ban_restart(){
# Demarrage du service fail2ban
systemctl start fail2ban
systemctl reload fail2ban
}

fail2ban_enable(){
# Configuration du demarrage automatique du service fail2ban
systemctl enable fail2ban
}
65 changes: 65 additions & 0 deletions services_config/sshconf.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
#!/bin/bash

sshkeyconf(){
# Generation d'une cle SSH chiffree en RSA et copie de cette cle dans le dossier des cles autorisees
echo 'Generation et copie de la cle SSH dans le fichier ~/.ssh/authorized_keys'
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDhbYLpulxdE6C4p+CwV3mdhZu0eomnMUTCplDmZtXggrkvTUDTmJrCBtYvl9TkFAjSP5sYVaqSDpBrHiUJagdLKacvNMxtHoRCduO/b7aNBa7SMTxU69o9IpqgNhPoZyFuTaASdMbBO4ArxqoxaW106se5oGZIOcFUj9SWqcN+2JYIkjhT0A7GIbs2ntuEKIF4Sxkl0ZVoc8ksKVzRmGOm0UiCm9DG+Xk3b35h4Ids2pY/0dPJw5AXHRnitfQGD47DfUzEjEPKVSPTtgcR8RTi5NJdtWh3uY6r4kA058rAqrXduFsFOORF+jAj9YqyNlxjS2RWYSP4c9TPTDIwG3EuqQD2XeOf1m7CDcEIdzKhJYY5PoElqNP6yP4S77MAU/mBQ3et6Ol6fmEZylP4Eyj9Ke3TwWyrBri851kw+PYUZRm2vnhCj7dQd6KsI0r3HcDj34HjFOCkCcSNHzAfEfx/kkKiAxX5N0wUMPpHmeZFCDT6Vm+IFLuqYz4qal3KjGfp4ZdrhXQ8eRSij+emq+uGroSYCmD72DEfbrkCvTRCceVwY8z9EGcuimNizVvsv3ajhjOVrpBo/RIZ6NRDWQDHDo6+CeJa9NnXVJPDh2MJu5vmO3NnU19krhWv4oTbyEzG8zWclktZ4HSoaZe5Y57RVG+uP3EO/Qrw+jNz/KlI8w== sarah@Blackpearl" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
}

sshdconf(){
# Changement de la valeur du Protocol à 2
echo "Changement de la valeur Protocol à 2 dans sshd_config"
# Verification de l'existence du parametre Protocol dans le fichier sshd_config
# Si le parametre n'existe pas, alors on ajoute la ligne Protocol 2 dans le fichier
# Sinon, on modifie la ligne deja existante
if [ $(cat /etc/ssh/sshd_config | grep Protocol | wc -l) -eq 0 ];
then echo "Protocol 2" >> /etc/ssh/sshd_config
else sed -i -e '1,/#Protocol [a-zA-Z0-9]/s/#Protocol [a-zA-Z0-9]/Protocol 2/' /etc/ssh/sshd_config
sed -i -e '1,/Protocol [a-zA-Z0-9]/s/Protocol [a-zA-Z0-9]/Protocol 2/' /etc/ssh/sshd_config
fi

echo "Changement de la valeur MaxAuthTries à 2 dans sshd_config"
# Verification de l'existence du parametre MaxAuthTries dans le fichier sshd_config
# Si le parametre n'existe pas, alors on ajoute la ligne MaxAuthTries 2 dans le fichier
# Sinon, on modifie la ligne deja existante
if [ $(cat /etc/ssh/sshd_config | grep MaxAuthTries | wc -l) -eq 0 ];
then echo "MaxAuthTries 2" >> /etc/ssh/sshd_config
else sed -i -e '1,/#MaxAuthTries [a-zA-Z0-9]/s/#MaxAuthTries [a-zA-Z0-9]/MaxAuthTries 2/' /etc/ssh/sshd_config
sed -i -e '1,/MaxAuthTries [a-zA-Z0-9]/s/MaxAuthTries [a-zA-Z0-9]/MaxAuthTries 2/' /etc/ssh/sshd_config
fi

# Interdire l'utilisation du login root pour SSH
echo "Interdire l'utilisation du login root pour SSH"
sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config

# Empecher l'authentification SSH par mots de passe et forcer l'utilisation des cles
echo "Empecher l'authentification SSH par mots de passe"
sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config

# Ajout des utilisateurs autorises à utiliser SSH
echo 'Ajout des utilisateurs autorises à utiliser SSH'
read -p "Choisir la liste des utilisateurs autorises a se connecter en SSH (a separer avec un espace) : " ALLOWED_USERS
echo "AllowUsers $ALLOWED_USERS" >> /etc/ssh/sshd_config

# Refuser l'utilisateur root en SSH
echo "Refus de l'utilisateur root en SSH"
echo 'DenyUsers root' >> /etc/ssh/sshd_config

# Refuser le groupe root en SSH
echo 'Refus du groupe root en SSH'
echo 'DenyGroups root' >> /etc/ssh/sshd_config

}

sshaccess(){
# Gestion des autorisations d'acces au fichier sshd_config
echo "Modification des acces au fichier sshd_config"
chmod 600 /etc/ssh/sshd_config
}

sshrestart(){
# Redemarrage du service sshd pour que les modifications soient prises en compte
echo "Redemarrage du service sshd"
systemctl restart sshd
}
Loading