From 265f137f5a1b8ac56889c4a105618ad87a69fb47 Mon Sep 17 00:00:00 2001 From: florent Date: Mon, 9 Dec 2024 22:46:51 +0000 Subject: [PATCH] Ajouter install_manage_firewall.sh --- install_manage_firewall.sh | 228 +++++++++++++++++++++++++++++++++++++ 1 file changed, 228 insertions(+) create mode 100644 install_manage_firewall.sh diff --git a/install_manage_firewall.sh b/install_manage_firewall.sh new file mode 100644 index 0000000..b6e16a2 --- /dev/null +++ b/install_manage_firewall.sh @@ -0,0 +1,228 @@ +#!/bin/bash +# Script d'installation automatisée du gestionnaire de firewall +# Auteur: Florent Tainturier +# Version: 1.3 + +set -euo pipefail + +# Couleurs pour les messages +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +# Fonction de logging +log() { + echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')] $1${NC}" +} + +error() { + echo -e "${RED}[ERREUR] $1${NC}" >&2 +} + +warning() { + echo -e "${YELLOW}[ATTENTION] $1${NC}" +} + +# Vérification des privilèges root +if [ "$(id -u)" != "0" ]; then + error "Ce script doit être exécuté en tant que root" + exit 1 +fi + +# Vérification et installation des dépendances +check_dependencies() { + log "Vérification des dépendances..." + + # Liste des paquets requis + local packages=( + "sudo" + "iptables" + "ipset" + "dnsutils" # pour dig + ) + + # Mise à jour des dépôts + log "Mise à jour des dépôts..." + apt-get update + + # Installation des paquets manquants + for pkg in "${packages[@]}"; do + if ! dpkg -l | grep -q "^ii $pkg "; then + log "Installation de $pkg..." + apt-get install -y "$pkg" + else + log "$pkg est déjà installé" + fi + done +} + +# Fonction de vérification et création de répertoire +create_directory() { + local dir="$1" + local perms="$2" + if [ ! -d "$dir" ]; then + log "Création du répertoire $dir" + mkdir -p "$dir" + fi + chmod "$perms" "$dir" + chown root:root "$dir" +} + +# Fonction de création de fichier +create_file() { + local file="$1" + local perms="$2" + if [ ! -f "$file" ]; then + log "Création du fichier $file" + touch "$file" + fi + chmod "$perms" "$file" + chown root:root "$file" +} + +# 1. Préparation de l'environnement +install_environment() { + log "Préparation de l'environnement..." + + create_directory "/root/log" "755" + create_file "/root/log/blacklistipv4.txt" "644" + create_file "/root/log/blacklistipv6.txt" "644" + create_file "/root/log/whitelist.txt" "644" + create_file "/root/log/firewall.log" "644" +} + +# 2. Installation du script principal +install_main_script() { + log "Installation du script principal..." + + if [ ! -f "manage_firewall.sh" ]; then + error "Le fichier manage_firewall.sh doit être présent dans le répertoire courant" + exit 1 + fi + + cp manage_firewall.sh /usr/local/sbin/manage_firewall.sh + chmod 755 /usr/local/sbin/manage_firewall.sh + chown root:root /usr/local/sbin/manage_firewall.sh +} + +# 3. Création de l'utilisateur +create_firewall_user() { + log "Création de l'utilisateur firewall_manager..." + + if ! id -u firewall_manager >/dev/null 2>&1; then + adduser --disabled-password --gecos "" firewall_manager + # Définir un mot de passe + echo "Définition du mot de passe pour firewall_manager" + passwd firewall_manager + else + warning "L'utilisateur firewall_manager existe déjà" + fi +} + +# 4. Création du script wrapper +create_wrapper_script() { + log "Création du script wrapper..." + + cat > /usr/local/bin/firewall << 'EOF' +#!/bin/bash +# Script wrapper pour la gestion du firewall + +# Vérification des arguments +if [ $# -eq 0 ]; then + echo "Usage:" + echo " firewall --add-whitelist " + echo " firewall --remove-whitelist " + echo " firewall --blacklist [port] [proto]" + echo " firewall --unblacklist " + echo " firewall --show" + echo " firewall --save-rules" + exit 1 +fi + +# Exécution du script principal +sudo /usr/local/sbin/manage_firewall.sh "$@" +EOF + + chmod 755 /usr/local/bin/firewall + chown root:root /usr/local/bin/firewall +} + +# 5. Configuration sudo +configure_sudo() { + log "Configuration des permissions sudo..." + + create_directory "/etc/sudoers.d" "750" + + # Vérifier l'inclusion du répertoire sudoers.d + if ! grep -q "#includedir /etc/sudoers.d" /etc/sudoers; then + echo "#includedir /etc/sudoers.d" >> /etc/sudoers + fi + + cat > /etc/sudoers.d/firewall_manager << 'EOF' +# Permissions pour l'exécution du script principal +firewall_manager ALL=(root) NOPASSWD: /usr/local/sbin/manage_firewall.sh --add-whitelist * +firewall_manager ALL=(root) NOPASSWD: /usr/local/sbin/manage_firewall.sh --remove-whitelist * +firewall_manager ALL=(root) NOPASSWD: /usr/local/sbin/manage_firewall.sh --blacklist * +firewall_manager ALL=(root) NOPASSWD: /usr/local/sbin/manage_firewall.sh --unblacklist * +firewall_manager ALL=(root) NOPASSWD: /usr/local/sbin/manage_firewall.sh --show +firewall_manager ALL=(root) NOPASSWD: /usr/local/sbin/manage_firewall.sh --save-rules + +# Permissions pour la lecture des fichiers +firewall_manager ALL=(root) NOPASSWD: /usr/bin/cat /root/log/blacklistipv4.txt +firewall_manager ALL=(root) NOPASSWD: /usr/bin/cat /root/log/blacklistipv6.txt +firewall_manager ALL=(root) NOPASSWD: /usr/bin/cat /root/log/whitelist.txt +firewall_manager ALL=(root) NOPASSWD: /usr/bin/cat /root/log/firewall.log + +# Permissions pour voir les règles iptables +firewall_manager ALL=(root) NOPASSWD: /usr/sbin/iptables -L INPUT -n +firewall_manager ALL=(root) NOPASSWD: /usr/sbin/ip6tables -L INPUT -n +EOF + + chmod 440 /etc/sudoers.d/firewall_manager + chown root:root /etc/sudoers.d/firewall_manager +} + +# 6. Vérification de l'installation +verify_installation() { + log "Vérification de l'installation..." + + # Vérifier les fichiers + for file in "/usr/local/sbin/manage_firewall.sh" "/usr/local/bin/firewall" "/etc/sudoers.d/firewall_manager"; do + if [ ! -f "$file" ]; then + error "Fichier manquant : $file" + return 1 + fi + done + + # Vérifier la syntaxe sudoers sans visudo + if ! grep -q "^firewall_manager" /etc/sudoers.d/firewall_manager; then + error "Erreur dans la configuration sudo : fichier firewall_manager non trouvé ou vide" + return 1 + fi + + log "Tests des permissions..." + sudo -u firewall_manager firewall --show + + log "Installation terminée avec succès !" + log "L'utilisateur firewall_manager peut maintenant utiliser les commandes firewall" +} + +# Exécution principale +main() { + log "Début de l'installation..." + + check_dependencies + install_environment + install_main_script + create_firewall_user + create_wrapper_script + configure_sudo + verify_installation + + log "Installation terminée !" + log "Testez l'installation en vous connectant avec : su - firewall_manager" +} + +# Lancement du script +main "$@" \ No newline at end of file