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
12 changes: 12 additions & 0 deletions my_script/config/config_file.sh
Original file line number Diff line number Diff line change
@@ -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
"
9 changes: 9 additions & 0 deletions my_script/functions/fail2ban_setup.sh
Original file line number Diff line number Diff line change
@@ -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 "__________________________________________"
}
13 changes: 13 additions & 0 deletions my_script/functions/firewall_setup.sh
Original file line number Diff line number Diff line change
@@ -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 "_____________________________________"
}
32 changes: 32 additions & 0 deletions my_script/functions/log_management.sh
Original file line number Diff line number Diff line change
@@ -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 "_______________________________"
}
131 changes: 131 additions & 0 deletions my_script/functions/secure_ssh.sh
Original file line number Diff line number Diff line change
@@ -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 "_____________________________"
}
79 changes: 79 additions & 0 deletions my_script/main_script.sh
Original file line number Diff line number Diff line change
@@ -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