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 relancepython3 generer_vues_obsidian.pydans le dossierscripts.
- À quoi il sert : iptables selon les services présents
- Lancer (dans le dossier
scripts/securite/) :sudo ./pare_feu_serveur.sh 172.30.16.0/24 - Fiche : S03 - Pare-feu Linux (iptables et nftables)
- Retour : 00 - Tous les 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