Firewall — Sécurisation serveur basique
Configure iptables pour un serveur web standard : seuls les ports 22, 80 et 443 sont ouverts.
Utilise iptables-persistent pour survivre aux redémarrages.
> Attention : Ce script coupe toutes les connexions entrantes sauf SSH/HTTP/HTTPS.
> Vérifie que tu as bien accès sur le port 22 avant de lancer.
Ports ouverts :
22/tcp— SSH80/tcp— HTTP443/tcp— HTTPS
Tout le reste : DROP (silencieux, pas de REJECT pour éviter le scan).
bash
#!/bin/bash
set -euo pipefail
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
info() { echo -e "${GREEN}[INFO]${NC} $*"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
error() { echo -e "${RED}[ERR]${NC} $*"; exit 1; }
[[ $EUID -ne 0 ]] && error "Ce script doit être exécuté en root."
# Sécurité : vérifier que SSH est bien accessible avant de verrouiller
warn "Ce script va fermer TOUS les ports sauf 22, 80, 443."
warn "Assure-toi d'être connecté en SSH sur le port 22."
echo ""
read -rp " Continuer ? [oui/NON] " confirm
[[ "$confirm" != "oui" ]] && echo "Annulé." && exit 0
# ── Installation iptables-persistent ─────────────────────────────────────────
info "=== Installation de iptables-persistent ==="
apt-get update -qq
DEBIAN_FRONTEND=noninteractive apt-get install -y iptables-persistent
# ── Flush complet ────────────────────────────────────────────────────────────
info "=== Remise à zéro des règles ==="
iptables -F; iptables -X; iptables -Z
ip6tables -F; ip6tables -X; ip6tables -Z
# ── Politique par défaut : DROP ───────────────────────────────────────────────
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT ACCEPT
info "=== Application des règles ==="
apply() {
iptables "$@"
ip6tables "$@"
}
# Loopback
apply -A INPUT -i lo -j ACCEPT
# Connexions établies
apply -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# ICMP / ping
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
ip6tables -A INPUT -p ipv6-icmp -j ACCEPT
# ── Ports autorisés ───────────────────────────────────────────────────────────
apply -A INPUT -p tcp --dport 22 -j ACCEPT # SSH
apply -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP
apply -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS
# ── Sauvegarde ───────────────────────────────────────────────────────────────
info "=== Sauvegarde des règles ==="
netfilter-persistent save
echo ""
info "=== Firewall configuré ==="
echo ""
echo " Ports ouverts :"
echo " 22/tcp — SSH"
echo " 80/tcp — HTTP"
echo " 443/tcp — HTTPS"
echo ""
echo " Politique par défaut : DROP (tout le reste ignoré)"
echo ""
echo " Règles actives :"
iptables -L INPUT -n -v --line-numbers
echo ""
echo " Ajouter un port : iptables -A INPUT -p tcp --dport PORT -j ACCEPT && netfilter-persistent save"
echo " Voir les règles : iptables -L INPUT -n -v"
echo ""