Bloquer Hadopi et TMG sous rTorrent et Transmission

Voici une méthode semi-automatique afin de bloquer les IP de TMG et Hadopi avec iptables ainsi qu'au niveau des clients rTorrent et Transmission afin d'éviter des tentatives infructueuses et consommatrices en ressources.

Pourquoi semi-automatique et pas automatique via un cron ? ce genre de liste n'évolue que très rarement, il est préférable de procéder à une comparaison puis à une mise à jour si nécessaire de façon manuelle tous les 2 à 6 mois.

Le script utilisera tout simplement le RIPE puis parsera la sortie afin de générer des fichiers qui devront être exploités manuellement.

Il existe des listes sur Internet très complètes dont vous ne contrôlez pas le contenu, ce qui est mal, jetez un œil au contenu de ses listes et faites des recherches pour en savoir plus.

La plupart des guides vous feront paramétrer un cron hebdomadaire avec un arrêt du client torrent, une mise à jour de la liste puis un démarrage de votre client torrent, une véritable horreur.

  1. Pré-requis
  2. Script bash pour la génération
  3. Lancement du script
  4. Blocage iptables
  5. Blocage rTorrent
  6. Blocage Transmission
  7. Références et remerciements

1. Pré-requis

  • ipcalc
  • iptables
  • rtorrent ou transmission

2. Script bash pour la génération

Vous pouvez créer le script ou vous le voulez, par exemple ~/downloads/wicked.sh :

#!/bin/bash

wickedList=('trident+AND+mediaguard' 'hadopi' 'trident+AND+media+AND+guard')
rtorrentFile='./out-rtorrent-wickedlist.txt'
transmissionFile='./out-transmission-wickedlist.txt'
iptablesFile='./out-iptables-rules.txt'
tmpWickedFile='/tmp/tmpWickedFile.txt'
tmpWorkFile='/tmp/tmpWorkFile.txt'

rm -f "${rtorrentFile}" "${transmissionFile}" "${iptablesFile}" 2> /dev/null

for m in "${wickedList[@]}"; do
    curl -s -o "${tmpWickedFile}" "https://apps.db.ripe.net/db-web-ui/api/rest/fulltextsearch/select?facet=true&format=xml&hl=true&q=(${m})&start=0&wt=json" -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0' --compressed
    cat "${tmpWickedFile}" | sed s/\<\\/str\>/\\n/g | grep 'str name="inetnum"' | sed 's/.*>//' >> "${tmpWorkFile}"
    cat "${tmpWickedFile}" | sed s/\<\\/str\>/\\n/g | grep 'str name="inetnum"' | sed 's/.*>//' | awk -v list="${m}" '{ print list ":" $1 "-" $3 }' | sed s/+AND+/\ /g >> "${transmissionFile}"
    rm -f "${tmpWickedFile}"
done

while read -r line; do
    ipcalc ${line} | tail -n1 >> "${rtorrentFile}"
done < "${tmpWorkFile}"

rm -f "${tmpWorkFile}"

while read -r ip; do
    echo iptables -A INPUT -s "${ip}" -j DROP >> "${iptablesFile}"
    echo iptables -A OUTPUT -d "${ip}" -j DROP >> "${iptablesFile}"
done < "${rtorrentFile}"

3. Lancement du script

[user@hostname ~]$ cd ~/downloads/
[user@hostname downloads]$ chmod +x wicked.sh
[user@hostname downloads]$ ./wicked.sh

Le script va générer 3 fichiers :

  • out-iptables-rules.txt
  • out-rtorrent-wickedlist.txt
  • out-transmission-wickedlist.txt

4. Blocage iptables

Le fichier out-iptables-rules.txt contient pour mon cas au moment où j'écris :

iptables -A INPUT -s 82.138.70.128/26 -j DROP
iptables -A OUTPUT -d 82.138.70.128/26 -j DROP
iptables -A INPUT -s 82.138.74.0/25 -j DROP
iptables -A OUTPUT -d 82.138.74.0/25 -j DROP
iptables -A INPUT -s 90.80.100.192/28 -j DROP
iptables -A OUTPUT -d 90.80.100.192/28 -j DROP
iptables -A INPUT -s 5.23.42.12/30 -j DROP
iptables -A OUTPUT -d 5.23.42.12/30 -j DROP
iptables -A INPUT -s 195.5.217.72/29 -j DROP
iptables -A OUTPUT -d 195.5.217.72/29 -j DROP
iptables -A INPUT -s 194.79.142.64/30 -j DROP
iptables -A OUTPUT -d 194.79.142.64/30 -j DROP
iptables -A INPUT -s 213.215.34.160/29 -j DROP
iptables -A OUTPUT -d 213.215.34.160/29 -j DROP
iptables -A INPUT -s 195.5.216.0/30 -j DROP
iptables -A OUTPUT -d 195.5.216.0/30 -j DROP
iptables -A INPUT -s 213.215.33.248/30 -j DROP
iptables -A OUTPUT -d 213.215.33.248/30 -j DROP
iptables -A INPUT -s 213.41.214.0/27 -j DROP
iptables -A OUTPUT -d 213.41.214.0/27 -j DROP

Il suffit de coller les lignes dans un terminal en root, évitez les doublons, flushez iptables avant si nécessaire et n'oubliez pas de sauvegarder vos règles afin qu'elles soient conservées en cas de redémarrage.

5. Blocage rTorrent

Le fichier out-rtorrent-wickedlist.txt contient pour mon cas au moment où j'écris :

82.138.70.128/26
82.138.74.0/25
90.80.100.192/28
5.23.42.12/30
195.5.217.72/29
194.79.142.64/30
213.215.34.160/29
195.5.216.0/30
213.215.33.248/30
213.41.214.0/27

Il suffit de placer le fichier dans un répertoire accessible par votre utilisateur exécutant rTorrent.

Pour mon cas :

  • Fichier de configuration : ~/.rtorrent.rc
  • Fichier de blocage généré précédemment : ~/.rtorrent.wickedlist.txt

Vous aurez compris que j'ai renommé out-rtorrent-wickedlist.txt en .rtorrent.wickedlist.txt dans le $HOME de l'utilisateur exécutant rTorrent.

Rajoutez la ligne suivante dans votre fichier de configuration rTorrent ~/.rtorrent.rc :

ipv4_filter.load = ~/.rtorrent.wickedlist.txt, unwanted

6. Blocage Transmission

Le fichier out-transmission-wickedlist.txt contient pour mon cas au moment où j'écris :

trident mediaguard:82.138.70.128-82.138.70.191
trident mediaguard:82.138.74.0-82.138.74.127
hadopi:90.80.100.192-90.80.100.207
hadopi:5.23.42.12-5.23.42.15
hadopi:195.5.217.72-195.5.217.79
trident media guard:194.79.142.64-194.79.142.67
trident media guard:213.215.34.160-213.215.34.167
trident media guard:195.5.216.0-195.5.216.3
trident media guard:213.215.33.248-213.215.33.251
trident media guard:213.41.214.0-213.41.214.31

Il suffit de placer le fichier dans le répertoire adéquat.

Pour mon cas :

  • Fichier de configuration : ~/.config/transmission-daemon/settings.json
  • Fichier de blocage généré précédemment : ~/.config/transmission-daemon/blocklists/tmg_hadopi.txt

Vous aurez compris que j'ai renommé out-transmission-wickedlist.txt en tmg_hadopi.txt dans le $HOME de l'utilisateur exécutant transmission-daemon.

Arrêtez le daemon transmission-daemon puis modifiez les lignes suivantes dans votre fichier de configuration Transmission ~/.config/transmission-daemon/settings.json :

"blocklist-enabled": true,
"blocklist-url": "",

Vous pouvez démarrer le daemon transmission-daemon et vous remarquerez que cela crée automatiquement le fichier ~/.config/transmission-daemon/blocklists/tmg_hadopi.bin, ce qui voudra dire que la liste est bien prise en compte.

Vous pourrez aussi constater la bonne prise en compte depuis l'interface web, dans Preferences > Peers > Blocklist, avec en bas de la fenêtre l'indication Blocklist has 10 rules, ce qui correspond au nombre de lignes dans mon fichier généré out-transmission-wickedlist.txt.

7. Références et remerciements