Explorer
KNOW-PAT-062

Infrastructure firewall - iptables rules, Tor blocking, DDoS mitigation

Domaine
cybersecu
Type
pattern
Priorité
P2

Parent : [[INDEX-CYBERSECU]]

Infrastructure firewall - iptables rules, Tor blocking, DDoS mitigation

Problème

L'archive Ygg contient les règles iptables d'un serveur tracker torrent (IP X.X.X.X). Ces règles montrent comment un tracker gère le trafic Tor, le DDoS UDP, et les IPs malveillantes connues.

Contexte archive Ygg

  • Fichier : 10_SERVEURS_LATERAUX/11a_tracker_62.112.11.32/iptables_rules.txt
  • Serveur : Tracker XBT (X.X.X.X)
  • Règles : Tor blocking, UDP port 8080 blocking, IP blacklisting
  • Paquets bloqués : 186M Tor, 293M UDP:8080

Règles iptables identifiées

Chain INPUT (policy ACCEPT)
 pkts bytes target     prot opt in  out  source               destination
 186M   11G DROP       all  --  *   *    0.0.0.0/0            0.0.0.0/0    match-set tor src
 293M  273G DROP       udp  --  *   *    0.0.0.0/0            0.0.0.0/0    udp dpt:8080
 357K   21M DROP       all  --  *   *    X.X.X.X       0.0.0.0/0
1140K   68M DROP       all  --  *   *    X.X.X.X       0.0.0.0/0
    0     0 DROP       all  --  *   *    X.X.X.X       0.0.0.0/0
 1188 64180 DROP       all  --  *   *    X.X.X.X        0.0.0.0/0
  591 30864 DROP       all  --  *   *    X.X.X.X      0.0.0.0/0

Technique de l'attaquant / défenseur

1. Tor blocking (186M paquets, 11GB)

iptables -I INPUT -m set --match-set tor src -j DROP

Rationale : Bloquer les sorties Tor empêche les utilisateurs de masquer leur IP réelle lors des announces tracker. Cependant, cela ne bloque que les IPs Tor connues (exit nodes) et ne bloque pas les bridges Tor.

2. UDP 8080 blocking (293M paquets, 273GB)

iptables -A INPUT -p udp --dport 8080 -j DROP

Rationale : Le tracker écoute probablement sur TCP 8080. Bloquer UDP 8080 atténue les attaques UDP flood / amplification sur ce port.

3. IP blacklist manuelle

iptables -A INPUT -s X.X.X.X -j DROP
iptables -A INPUT -s X.X.X.X -j DROP
iptables -A INPUT -s X.X.X.X -j DROP
iptables -A INPUT -s X.X.X.X -j DROP
iptables -A INPUT -s X.X.X.X -j DROP

Rationale : Ces IPs sont des sorties Tor spécifiques ou des IPs d'attaquants connus.

Solution protectif — Firewall avancé

1. Règles iptables hardenées pour tracker

#!/bin/bash
# firewall-tracker.sh — Firewall pour tracker BitTorrent

# Vider les règles existantes
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Autoriser localhost
iptables -A INPUT -i lo -j ACCEPT

# Autoriser les connexions établies
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Rate limiting sur le port tracker TCP (anti-DDoS)
iptables -A INPUT -p tcp --dport 8080 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j DROP

# Bloquer UDP sur le port tracker (seulement TCP pour HTTP/HTTPS tracker)
iptables -A INPUT -p udp --dport 8080 -j DROP

# Bloquer Tor (exit nodes connus)
ipset create tor hash:ip maxelem 65536
# Charger la liste Tor exit nodes
for ip in $(curl -s https://check.torproject.org/exit-addresses | grep ExitAddress | cut -d' ' -f2); do
    ipset add tor $ip 2>/dev/null
done
iptables -A INPUT -m set --match-set tor src -j DROP

# Bloquer les IPs d'abus connues (auto-update via fail2ban)
# fail2ban intégré ci-dessous

# Autoriser SSH (limité)
iptables -A INPUT -p tcp --dport 22 -s TRUSTED_IP_RANGE -m limit --limit 3/minute --limit-burst 6 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

# Autoriser ICMP (ping limité)
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/second --limit-burst 4 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

# Log et drop du reste
iptables -A INPUT -j LOG --log-prefix "[IPTABLES DROP] " --log-level 4
iptables -A INPUT -j DROP

2. Fail2ban pour tracker

# /etc/fail2ban/jail.d/tracker.conf
[tracker-ddos]
enabled = true
port = 8080
filter = tracker-ddos
logpath = /var/log/nginx/tracker.access.log
maxretry = 100
findtime = 60
bantime = 3600
action = iptables-multiport[name=tracker, port="8080", protocol=tcp]

[tracker-tor]
enabled = true
port = 8080
filter = tracker-tor
logpath = /var/log/nginx/tracker.access.log
maxretry = 1
findtime = 1
bantime = 86400
action = iptables-multiport[name=tracker-tor, port="8080", protocol=tcp]

3. IPSet avec auto-update Tor

#!/bin/bash
# update-tor-blocklist.sh

TOR_LIST="/tmp/tor-exit-nodes.txt"
curl -s https://check.torproject.org/exit-addresses | \
    grep ExitAddress | cut -d' ' -f2 | cut -d' ' -f1 > "$TOR_LIST"

ipset flush tor
while read ip; do
    ipset add tor "$ip" 2>/dev/null
done < "$TOR_LIST"

# Mettre à jour toutes les heures via cron
# 0 * * * * /usr/local/bin/update-tor-blocklist.sh

4. Cloudflare / CDN layer (optionnel)

# Nginx avec RealIP et rate limiting
server {
    listen 8080;
    
    set_real_ip_from 0.0.0.0/0;  # Cloudflare IPs
    real_ip_header CF-Connecting-IP;
    
    limit_req_zone $binary_remote_addr zone=tracker:10m rate=10r/s;
    limit_req zone=tracker burst=20 nodelay;
    
    # Bloquer les user-agents suspects
    if ($http_user_agent ~* (bot|crawler|scrapy|curl|wget)) {
        return 403;
    }
    
    location / {
        proxy_pass http://127.0.0.1:3000;
    }
}

Checklist de validation

  • Policy INPUT = DROP par défaut
  • Rate limiting sur le port tracker (25/min burst 100)
  • UDP sur le port tracker = DROP
  • Tor exit nodes bloqués via ipset (auto-update)
  • Connexions établies autorisées
  • SSH limité (rate + source IP)
  • ICMP limité (anti-ping flood)
  • Fail2ban configuré pour tracker
  • Logs iptables activés pour analyse
  • Cloudflare/CDN pour absorbption DDoS (optionnel)
  • Connexion tracker uniquement via HTTPS (pas HTTP)

Références