Configurer NzbDrone et NzbGet avec Nginx
Après avoir installé NzbGet et NzbDrone (récemment renommé sonar), il ne reste plus qu’à les configurer et à en sécuriser l’accès. Pour ce faire, le principe de base consiste à utiliser Nginx en reverse proxy ssl devant ces deux applicatifs.
Quel est l’intérêt ? Nginx va permettre de « masquer » NzbGet et NzbDrone en évitant de les rendre accessibles directement depuis Internet. Nginx est un serveur connu et fiable, est-ce que l’on peut en dire autant des deux autres ? Personnellement, j’éviterai de parier la sécurité de mon serveur là-dessus.
* La version de Sonarr/NzbDrone 2.0.0.2663 a apporté pas mal de changements et la configuration nginx ci-dessous doit-être modifiée en conséquence. L’article reflète maintenant ces changements
Environnement
OS : Debian 7.7 stable (Wheezy) 64bits
Nginx : nginx/1.6.2
NzbDrone : 2.0.0.2500 2.0.0.2663
Mono : 3.10
NzbGet : 13.0
Configuration Nginx
Pour faire simple, j’ai rajouté les 3 « blocs locations » à la fin de la configuration du Nginx de ma seedbox. Je renvoie à l’article en question qui explique pas à pas la configuration complète avec la terminaison SSL. Mais fondamentalement, on a quelque chose qui ressemble à cela :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | server { listen 443 ssl; server_name www.mondomaine.com; access_log /var/log/nginx/transmission_access.log; error_log /var/log/nginx/transmission_error.log; # gere le controle d acces a l interface auth_basic "Veuillez-vous authentifier"; auth_basic_user_file /etc/nginx/secu/password-transmission; # See https://wiki.mozilla.org/Security/Server_Side_TLS#Nginx ssl_certificate /etc/nginx/secu/transmission.crt; ssl_certificate_key /etc/nginx/secu/transmission.key; ssl_session_timeout 5m; ssl_protocols TLSv1.1 TLSv1.2; ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK:!MD5:!DSS; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; # ici toute la configuration pour transmission ou autre ou rien [...] # configuration pour NzbGet location /nzbget/ { include /etc/nginx/proxy_params; proxy_pass http://127.0.0.1:6789/; proxy_http_version 1.1; proxy_set_header Accept-Encoding ""; } # configuration pour NzbDrone location /nzbdrone { proxy_pass http://127.0.0.1:8989/nzbdrone; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header Accept-Encoding ""; } # configuration pour les backups de NzbDrone location /backup/ { alias /var/lib/nzbdrone/.config/NzbDrone/Backups/; } } |
Il s’agit d’une configuration très classique de reverse proxy avec terminaison SSL et authentification. Seule bizarrerie, l’accès au répertoire contenant les backups de configuration de NzbDrone.
Configuration de NzbGet
Si vous avez suivi le tuto de NzbGet, le fichier de configuration se trouve /usr/local/etc/nzbget.conf
. Pour peu que Nzbget ait accès en écriture à son fichier de configuration, on peut réaliser cette dernière à l’aide de l’interface graphique. Ce n’est pas le plus sécurisé, mais par contre le plus simple. Normalement, le « home directory » a déjà été créé et hébergera le « MainDir ».
1 2 3 4 | # pour donner à nzbget l'accès au fichier de conf root@server:~# chown nzbget. /usr/local/etc/nzbget.conf root@server:~# service nzbgetd start [ ok ] Starting NZBGet: nzbgetd. |
Il ne reste plus qu’à rentrer dans son navigateur préféré l’adresse https://www.mondomaine.com/nzbget
. Je renvoie de manière éhontée à ce guide de configuration. Seuls 3 éléments sont importants dans notre cas.
Configuration de NzbDrone
Le principe de configuration de NzbDrone reste le même. A ceci près qu’il n’est pas possible, pour le moment, de forcer NzbDrone à écouter sur une adresse IP spécifique. C’est maintenant chose faite avec la version 2.0.0.2663.
Les principaux éléments de configuration de NzbDrone se trouvent dans un fichier xml créé au premier démarrage. Le point principal est de bien configurer la balise UrlBase. Laissez, dans un premier temps, la balise BindAddress égale à * pour faciliter le debug.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | root@server:~# service nzbdrone start [ ok ] Starting NZBDrone: nzbdrone. root@server:~# cat /var/lib/nzbdrone/.config/NzbDrone/config.xml <?xml version="1.0" encoding="utf-8" standalone="yes"?> <Config> <Port>8989</Port> <SslPort>9898</SslPort> <EnableSsl>False</EnableSsl> <LaunchBrowser>False</LaunchBrowser> <ApiKey>43e1b1caeb7a4bb6ad4f82b36360b332</ApiKey> <AuthenticationEnabled>False</AuthenticationEnabled> <Branch>master</Branch> <Username> </Username> <Password> </Password> <LogLevel>Info</LogLevel> <SslCertHash> </SslCertHash> <UrlBase>/nzbdrone/</UrlBase> <UpdateMechanism>BuiltIn</UpdateMechanism> <BindAddress>127.0.0.1</BindAddress> </Config> root@server:~# service nzbdrone restart [ ok ] Stopping NZBDrone: nzbdrone. [ ok ] Starting NZBDrone: nzbdrone. |
Une fois cette configuration initiale réalisée, on peut se connecter via Nginx avec https://www.mondomaine.com/nzbdrone
. En cas de soucis, il est toujours possible de se connecter directement à l’interface graphique : http://www.mondomaine.com:8989
.
Une fois que l’accès via Nginx fonctionne, on verrouille l’accès direct à NzbDrone depuis internet en passant la balise BindAddress à « 127.0.0.1 ».
Une dernière chose à noter. NzbDrone permet une mise à jour depuis l’interface graphique. Il nécessite juste un accès en écriture au répertoire /opt/NzbDrone
ce qui peut poser des problèmes de sécurité. En même temps, si la configuration SSL de Nginx est solide, cela ne devrait pas être gênant. Au choix donc :
1 | root@server:~# chown nzbdrone. /opt/NzbDrone/ -vR |
Il ne reste plus maintenant qu’à réaliser la configuration générale de NzbDrone à l’aide de ce tuto.
Sécurité et Conclusion
Toute la sécurisation du serveur repose sur le fait que les applicatifs NzbGet et NzbDrone ne sont accessibles que via Nginx, qui dispose d’un mécanisme d’authentification protégé par SSL. La sécurité est a donc priori solide, mais il faudra bien vérifier plusieurs points.
NzbGet et NzbDrone ne sont accessibles uniquement sur le localhost
- vérifier que NzbGet n’écoute que sur le localhost :
netstat -ntpul | grep nzbget
- vérifier que NzbDrone (via mono) n’écoute que sur le localhost :
netstat -ntpul | grep mono
Verrouiller les droits des fichiers en local
Selon son degré de paranoïa, on peut restreindre les modifications sur les fichiers du système :
- accès au fichier de conf de nzbget :
chown root. /usr/local/etc/nzbget.conf
- accès au fichier de conf de nzbdrone :
chown root. /var/lib/nzbdrone/.config/NzbDrone/config.xml
- accès à l’applicatif NzbDrone :
chown root. /opt/NzbDrone -vR
Bien sûr, ces restrictions empêchent les modifications de config ou les MAJ depuis la GUI.
Configuration SSL et Autorisations
Je renvoie vers ce tuto pour une bonne configuration SSL. Attention à bien remettre à jour sa config par rapport aux dernières recommandations. Bien évidemment, choisissez un mot de passe fort!
La base de la configuration système est maintenant faite. Il ne reste plus qu’à finir la configuration depuis la GUI et commencer à télécharger des œuvres libres de droits! Encore une fois, le site htpcguides.com fourni de très bonnes explications pas à pas. A noter qu’il est possible de monter son propre indexeur privé de newsgroups, ce qui sera peut-être l’occasion de rédiger un prochain article.