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 oeil 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

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+mediaguard" "hadopi" "trident+media+guard")
finalFile=out-rtorrent-wickedlist.txt
iptablesFile=out-iptables-rules.txt
tmpWickedFile=/tmp/tmpWickedFile.txt
tmpWorkFile=/tmp/tmpWorkFile.txt
tmpCookieFile=/tmp/cookie.txt
viewState=`curl -s -c "${tmpCookieFile}" 'https://apps.db.ripe.net/search/full-text.html' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0' | grep -G "javax.faces.ViewState:0" | sed 's/.*value="//' | sed 's/".*//' | sed -e "s/:/%3A/"`

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

for m in "${wickedList[@]}" ; do
    curl -s -b "${tmpCookieFile}" -o "${tmpWickedFile}" 'https://apps.db.ripe.net/search/full-text.html' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0' --compressed -H 'Referer: https://apps.db.ripe.net/search/full-text.html' --data 'home_search=home_search&home_search%3Asearchform_q='${m}'&home_search%3AdoSearch=Search&javax.faces.ViewState='${viewState}''
    cat "${tmpWickedFile}" | grep -G "type=inetnum" | sed 's/.*key=//' | sed 's/".*//' >> "${tmpWorkFile}"
    cat "${tmpWickedFile}" | grep -G "type=route" | sed 's/.*key=//' | sed 's/AS.*//' >> "${finalFile}"
    rm -f "${tmpWickedFile}"
done

while read -r line ; do
    ipcalc $line | tail -n1 >> "${finalFile}"
done < <(cat "${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 < "${finalFile}"

rm -f "${tmpWorkFile}" "${tmpCookieFile}"

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 2 fichiers :

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

4. Blocage iptables

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

iptables -A INPUT -s 195.191.244.0/23 -j DROP
iptables -A OUTPUT -d 195.191.244.0/23 -j DROP
iptables -A INPUT -s 193.107.240.0/22 -j DROP
iptables -A OUTPUT -d 193.107.240.0/22 -j DROP
iptables -A INPUT -s 193.105.197.0/24 -j DROP
iptables -A OUTPUT -d 193.105.197.0/24 -j DROP
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

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 :

195.191.244.0/23
193.107.240.0/22
193.105.197.0/24
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

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

Concernant Transmission, ne l'utilisant pas, je n'ai pas automatisé la création du fichier de sortie, il suffira de se rendre sur RIPE, de rechercher trident mediaguard, hadopi, trident mediaguard, d'utiliser ipcalc puis de créer le fichier texte que l'on compressera ensuite en gz.

Voici à quoi ressemble le fichier texte au moment où j'écris :

hadopi:195.5.217.72-195.5.217.79
hadopi:5.23.42.12-5.23.42.15
hadopi:90.80.100.192-90.80.100.207
tmg:193.105.197.0-193.105.197.255
tmg:193.107.240.0-193.107.243.255
tmg:195.191.244.0-195.191.245.255
tmg:82.138.70.128-82.138.70.191
tmg:82.138.74.0-82.138.74.127

Le problème de Transmission c'est que le fichier ne peut être lu que depuis un serveur web, il ne vous reste donc plus qu'à compresser la liste et vous la mettre à disposition, par exemple :

[user@hostname ~]$ gzip transmission.wickedlist.txt

Vous obtiendrez donc transmission.wickedlist.txt.gz que vous mettrez à disposition pour vous même sur un serveur quelconque puis modifierez la ligne suivante de votre fichier de configuration transmission ~/.config/transmission-daemon/settings.json :

"blocklist-url": "https://domain.tld/transmission.wickedlist.txt.gz",

7. Références et remerciements