Files
2026-07-20 11:05:07 +02:00

94 lines
5.1 KiB
Bash

# firewall-filters.conf — règles spécifiques aux services
# Chargé par fw.sh après les protections de base.
# Variables disponibles : $ETH_IF, $VPN_IF, $WG_IF
IP="x.x.x.x"
VPN_NET="10.8.0.0/24"
VPN_PORT="1194"
WG_NET="10.10.0.0/24"
WG_PORT="51820"
WG_WEB_PORT="51821"
PORTAINER_PORT="9000"
PORTAINER_SSL_PORT="9443"
SSH_PORT="22"
echo " [Services : SSH / HTTP / OpenVPN / Coturn / MQTT]"
# ─── SSH ──────────────────────────────────────────────────────────────────────
iptables -A INPUT -i $ETH_IF -p tcp --dport $SSH_PORT \
-m conntrack --ctstate NEW \
-m connlimit --connlimit-above 4 --connlimit-mask 32 -j LOG_DROP
iptables -A INPUT -i $ETH_IF -p tcp --dport $SSH_PORT \
-m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# ─── HTTP / HTTPS ─────────────────────────────────────────────────────────────
iptables -A INPUT -i $ETH_IF -p tcp --dport 80 \
-m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i $ETH_IF -p tcp --dport 443 \
-m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# ─── MOSQUITTO TLS (accessible depuis internet) ───────────────────────────────
iptables -A INPUT -i $ETH_IF -p tcp --dport 8883 \
-m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
#iptables -A INPUT -i $ETH_IF -p tcp --dport 8884 \
# -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# ─── COTURN ───────────────────────────────────────────────────────────────────
# Signaling STUN/TURN
iptables -A INPUT -i $ETH_IF -p udp --dport 3478 \
-m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i $ETH_IF -p tcp --dport 3478 \
-m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# Relai TURN UDP — hashlimit par IP source (anti-amplification)
iptables -A INPUT -i $ETH_IF -p udp --dport 49152:65535 \
-m hashlimit --hashlimit-name coturn-relay \
--hashlimit-upto 100/s --hashlimit-burst 200 \
--hashlimit-mode srcip -j ACCEPT
# ─── REDIS : DROP explicite depuis internet ────────────────────────────────────
# Redis doit rester sur 127.0.0.1 ou socket Unix — cette règle est un filet de sécurité
iptables -A INPUT -i $ETH_IF -p tcp --dport 6379 -j DROP
# ─── Transmission (décommenter si actif) ──────────────────────────────────────
#iptables -A INPUT -i $ETH_IF -p tcp --dport 51413 \
# -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# ─── MAIL (décommenter si besoin) ─────────────────────────────────────────────
#iptables -A INPUT -i $ETH_IF -p tcp --dport 465 \
# -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
#iptables -A INPUT -i $ETH_IF -p tcp --dport 993 \
# -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# ─── WIREGUARD ──────────────────────────────────────────────────────────────────
#iptables -A INPUT -i $ETH_IF -p udp --dport $WG_PORT \
# -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
#iptables -I INPUT -i $WG_IF -p tcp --dport $WG_WEB_PORT -j ACCEPT
#iptables -I INPUT -i $WG_IF -p tcp --dport $PORTAINER_PORT -j ACCEPT
#iptables -I INPUT -i $WG_IF -p tcp --dport $PORTAINER_SSL_PORT -j ACCEPT
# ─── DOCKER USER ──────────────────────────────────────────────────────────────────
iptables -I DOCKER-USER -i $ETH_IF -j DROP
iptables -I DOCKER-USER -i $WG_IF -j RETURN # VPN autorisé
iptables -I DOCKER-USER -i lo -j RETURN # loopback autorisé
# ─── OPENVPN ──────────────────────────────────────────────────────────────────
iptables -A INPUT -i $ETH_IF -p udp --dport $VPN_PORT \
-m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# Accès complet au serveur depuis les clients VPN
iptables -A INPUT -i $VPN_IF -j ACCEPT
iptables -A OUTPUT -o $VPN_IF -j ACCEPT
# ─── FORWARD VPN → internet ───────────────────────────────────────────────────
iptables -A FORWARD -i $VPN_IF -o $ETH_IF \
-m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $ETH_IF -o $VPN_IF \
-m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -s $VPN_NET -o $ETH_IF -j MASQUERADE