pare_feu_serveur.sh

Note de lecture générée automatiquement

Le vrai fichier est scripts/securite/pare_feu_serveur.sh (Obsidian n’affiche pas les scripts eux-mêmes). Ne modifie pas cette note : modifie le script, puis relance python3 generer_vues_obsidian.py dans le dossier scripts.

Code

#!/usr/bin/env bash
# =============================================================================
# pare_feu_serveur.sh — Pare-feu iptables "intelligent" pour un serveur Debian
#   Détecte si Apache et/ou MariaDB tournent, et n'ouvre QUE les ports utiles :
#   SSH (22) toujours, HTTP/HTTPS (80/443) si Apache, MariaDB (3306) si MariaDB.
#   (C'est la fonction "firewall" demandée au TP Linux B2.)
#
# Usage : sudo ./pare_feu_serveur.sh [reseau_autorise_pour_mariadb]
# Exemple : sudo ./pare_feu_serveur.sh 172.30.16.0/24
# =============================================================================
set -euo pipefail
 
$EUID -eq 0 || { echo "Lance ce script avec sudo." >&2; exit 1; }
 
reseau_bdd="${1:-0.0.0.0/0}"     # par défaut : tout le monde (à restreindre !)
 
service_actif() {
  # renvoie 0 (vrai) si le service systemd existe ET est démarré
  systemctl is-active --quiet "$1" 2>/dev/null
}
 
echo "==> Remise à zéro"
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
 
echo "==> Règles de base"
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
echo "    SSH (22) ouvert"
 
if service_actif apache2 || service_actif nginx; then
  iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
  echo "    Serveur web détecté : HTTP/HTTPS (80, 443) ouverts"
fi
 
if service_actif mariadb || service_actif mysql; then
  iptables -A INPUT -p tcp -s "$reseau_bdd" --dport 3306 -j ACCEPT
  echo "    MariaDB détecté : 3306 ouvert pour $reseau_bdd"
fi
 
# Journaliser ce qui est rejeté (limité pour ne pas remplir les logs)
iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "IPTABLES-DROP: "
 
if command -v netfilter-persistent > /dev/null; then
  netfilter-persistent save
else
  echo "Astuce : sudo apt install iptables-persistent pour garder les règles au redémarrage."
fi
 
iptables -L INPUT -n -v --line-numbers