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
- Archive Ygg :
10_SERVEURS_LATERAUX/11a_tracker_62.112.11.32/iptables_rules.txt - Tor Project : Exit Node List
- fail2ban : https://www.fail2ban.org
- iptables : https://netfilter.org