# 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