VPN sûr et efficace pour son NAS
VPN sûr et efficace pour son NAS
Comme beaucoup ^^, j’utilise mon NAS pour stocker mes données (non, sérieux ?), mais aussi, notamment, pour télécharger des « films de vacances » et des ISO de distro NuNux 😉
Et comme on est jamais trop prudent à l’heure actuelle, que ce soit niveau vie privée, sécurité pure et simple, ou s’éviter des problèmes avec les Inquisiteurs de la Propriété intellectuelle, il m’était donc apparu nécessaire de palier à toute une série de problèmes/inconvénients.
Je me suis donc attelé à chercher des solutions existantes, sans toutefois trouver mon bonheur « clé sur porte », mais j’ai néanmoins trouvé une base de départ dans mes pérégrinations : le script de e-raw [@] e-raw.be (sur NAS-Forum si ma mémoire est bonne)
Remarque
Ce script est adapté aux versions de Debian basée sur Init
Détails concernant mon NAS et adaptations possibles à votre NAS
J’utilise un NAS home-made (je détaillerai une fois pour le fun la partie hardware), tournant sur OpenMediaVault (basé sur Debian 🙂 ), avec pour la partie téléchargement, les outils suivants : Transmission-BT, SabNZBd et JDownloader. Et pour le VPN : OpenVPN, cela va sans dire 😉
Vous allez me dire, c’est pas tout le monde qui fonctionne sous OpenMediaVault, etc etc…Effectivement 😉
La solution présentée dans ce tuto est très facilement adaptable à un NAS du commerce comme Synology, QNAP, … De même, le script est construit autour des 3 outils précédemment cités, mais s’adapte comme rien à tout autres outils ou services.
Mais que fait le script ?!
Ce script va vous permettre de (périodiquement) :
- Vérifier que votre connexion OpenVPN est UP et la re-démarrer si nécessaire
- Arrêter l’ensemble des outils/services lié au téléchargement (Transmission-BT, SabNZBd, JDownloader) en cas de déconnexion du VPN et les re-démarrer une fois la connexion VPN à nouveau UP
- Ajouter dynamiquement à chaque (re)connexion du VPN, des règles iptables (Firewall), vous protégeant également avec cette connexion spécifique
- Conserver une trace de toutes les opérations réalisées dans un fichier LOG dans /var/log/mycheck.log
Vous allez me dire, mais mon fournisseur VPN a déjà un Firewall !?
Effectivement, c’est sans doute le cas (il vaudrait mieux d’ailleurs ^^), mais d’une part, cela implique que vous avez une confiance aveugle en votre fournisseur et ses compétences, et d’autre part, dans un contexte post Snowden, il me paraît pas inutile de vous protéger également de votre fournisseur de VPN…On est jamais trop prudent 😉
De quoi avons-nous besoin ?
Je ne vais pas détailler comment configurer un connexion OpenVPN, ou l’installation des outils Transmission-BT/SabNZBd/JDownloader dans cet article. De plus, cette solution se voulant la plus « universelle » possible, je ne peux pas couvrir le cas de tout les NAS et de leurs spécificités.
Je vais donc supposer que tout cela est déjà fonctionnel sur votre NAS et détailler le tuto sur base d’une configuration OpenMediaVault standard.
Nous avons donc besoin de :
- Une connexion OpenVPN configurée correctement avec les fichiers de configuration présents dans /etc/openvpn
- Une authentification automatique pour OpenVPN : mot de passe contenu dans un fichier texte (auth.txt) + paramètre auth-user-pass auth.txt dans votre configuration OpenVPN
- Transmission-BT, SabNZBd et JDownloader installés et configurés
Mise en place du script
Faites un copié/collé du script fourni en fin d’article dans un fichier texte sur votre NAS dans /usr/local/bin sous le nom mychecktun0.sh
nano /usr/local/bin/mychecktun0.sh
On le rend exécutable
chmod +x /usr/local/bin/mychecktun0.sh
Configuration du script
Nous allons maintenant configurer le script en lui-même.
Si vous fonctionnez avec OpenMediaVault, il n’y que les numéros de port et le nom de l’interface réseau de la connexion VPN à adapter.
Et éventuellement le chemin des outils si vous avez une config custom.
Pour les autres, chaque paramètre devra éventuellement être adapté.
Toute la partie configuration du script est en tout début de script, donc pas la peine de chercher partout.
Néanmoins, j’invite chacun, en fonction de ses connaissances, à parcourir celui-ci et à en comprendre le fonctionnement. Le script est abondement commenté, cela devrais faciliter les choses 😉
Pour déterminer le nom de l’interface réseau de votre VPN
ifconfig | grep -i link
Et cela donne
docker0 Link encap:Ethernet HWaddr 02:42:f6:9f:0a:77
eth0 Link encap:Ethernet HWaddr AA:AA:AA:AA:AA:AA
lo Link encap:Boucle locale
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
Une autre méthode, plus propre
ip link
Et cela donne
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1503 qdisc mq state UP mode DEFAULT qlen 1000
link/ether AA:AA:AA:AA:AA:AA brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
link/ether BB:BB:BB:BB:BB:BB brd ff:ff:ff:ff:ff:ff
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT
link/ether 02:42:f6:9f:0a:77 brd ff:ff:ff:ff:ff:ff
5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT qlen 100
link/none
L’interface du VPN est ici tun0 (tun, comme tunnel).
Remarque : l’adresse MAC des interfaces
eth0/1
sont fictives
Adaptez la configuration du script au besoin (c’est tun0
par défaut)
# interface réseau du VPN
interface="tun0"
Adapter les outils/services (Transmission-BT,SabNZBd,JDownloader,iptables)
Les paramètres service1/2/3 correspondent au noms des scripts init permettant de démarrer/stopper/… ces services (par exemple : service transmission-daemon start
).
Ces scripts se trouvent dans /etc/init.d
.
Les paramètres process1/2/3 correspondent aux noms des processus tel que vous les verrez apparaître dans un ps auxw ou un top)
Voici les paramètres par défaut pour OpenMediaVault
# service Transmission
service1="transmission-daemon"
process1="transmission-daemon"
# service JDownloader
service2="jdownloader"
process2="JDownloader.jar"
# service SabNZBd
service3="sabnzbd"
process3="sabnzbd"
Et pour iptables
# chemin vers le binaire d'iptables
iptables=&quot;/sbin/iptables&quot;
Adapter le port pour Transmission-BT
Vous devez adapter le port pour Transmission-BT en fonction du port alloué à celui-ci par votre fournisseur VPN.
Remarque : n’oubliez-pas de modifier le port dans Transmission-BT également 😉
Modifiez le paramètre suivant
# port ouvert chez le provider du VPN pour Transmission
portTransmissionBT="24152"
Adapter si besoin, le chemin vers le fichier LOG + configurer un logrotate
Par défaut, le fichier log est créé dans /var/log (conseillé), mais vous pouvez le mettre où vous voulez.
Modifiez si besoin le paramètre suivant
# chemin vers le fichier de log
logfile="/var/log/mycheck.log"
Configurez un logrotate de ce fichier afin de ne pas vous retrouver un jour (quoi que peu probable vu la petite quantité de données) avec un fichier gigantesque et les problèmes qui pourraient en découler.
Pour cela, créez un fichier dans /etc/logrotate.d/
et nommez le mycheck
nano /etc/logrotate.d/mycheck
Et collez-y ceci
/var/log/mycheck.log
{
rotate 4
weekly
size 20M
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
invoke-rc.d rsyslog restart > /dev/null
endscript
}
Re-démarrez le service de log (rsyslog dans ce cas, mais cela peut-être un autre si vous n’êtes pas sous OpenMediaVault)
service rsyslog restart
Configuration de la vérification périodique via crontab
Afin que le script puisse être exécuté régulièrement (toutes les minute dans mon cas), il faut ajouter celui-ci dans crontab.
Pour cela
nano /etc/crontab
Et ajoutez-ci cette ligne
* * * * * root /usr/local/bin/mychecktun0.sh
Le script
Conclusion
J’espère que ce script et ce tuto vous ont été utiles et, surtout, abordables et clairs.
N’hésitez pas à réagir dans les commentaires s’il y a une coquille ou simplement si vous avez une question ou une suggestion 😉