Ajouter install_manage_firewall.sh
This commit is contained in:
parent
7a2d854e07
commit
265f137f5a
228
install_manage_firewall.sh
Normal file
228
install_manage_firewall.sh
Normal file
|
|
@ -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 <IP/Domaine>"
|
||||
echo " firewall --remove-whitelist <IP/Domaine>"
|
||||
echo " firewall --blacklist <IP/Domaine> [port] [proto]"
|
||||
echo " firewall --unblacklist <IP/Domaine>"
|
||||
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 "$@"
|
||||
Loading…
Reference in a new issue