KrISS feed 8.7 - A simple and smart (or stupid) feed reader. By Tontof
  • Wednesday 24 December 2014 - 18:20

    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 :

    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 ».

    # 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.

    Configurer le MainDir

    Configurer le MainDir


    Passer le ControlIP sur le localhost et désactiver le ssl et l’authentification


    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.

    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.
    nzbdrone_config_ini
    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 :

    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.

    The post Configurer NzbDrone et NzbGet avec Nginx appeared first on Le Blog d'un Geek.