Debian.pro

Про Debian


seedbox на коленке: deluged+deluge-web

Всем хороша связка rtorrent+rutorrent. Только настраивать её очень уж геморрно, да и уязвимость там нашли, помнится.
Я давно уже использую deluge. Да и вообще мне интерфейс deluge-web больше нравится — выглядит посовременнее, сам он читаемый, да и вообще «не PHP и ладненько». Поэтому сегодня и расскажу, как настроить связку из deluged и родного вебинтерфейса к нему — deluge-web. В принципе, там ничего сложного, но всё же. Вдруг кто-то ещё не знает?

Под deluge-web лучше выделить отдельное доменное имя (я пытался настроить отдельный location, но оно там не очень хочет работать). Очень сильно советую использовать для server{} с делюгом https, дабы всякие личности не смотрели, что вы там качать решите.
В качестве подготовки нам нужно поставить и подготовить nginx, получить ssl-сертификат в letsencrypt.
Ставим пакеты, необходимые для deluge:

root@server:~# apt-get install deluged deluge-web deluge-console deluge-common

Создаём пользователя, под которым будем запускать связку:

root@server:~# adduser torrents

Создаём каталог, в котором будем хранить скачанные торренты:

root@server:~# mkdir /home/torrents/downloads

Заводим 2 systemd-unit‘a:
/etc/systemd/system/deluged.service:

[Unit]
Description=Deluge Bittorrent Client Daemon
Documentation=man:deluged
After=network-online.target

[Service]
Type=simple
User=torrents
Group=torrents
UMask=000
ExecStart=/usr/bin/deluged -d
Restart=on-failure
TimeoutStopSec=300

[Install]
WantedBy=multi-user.target

/etc/systemd/system/deluge-web.service:

[Unit]
Description=Deluge Bittorrent Client Web Interface
Documentation=man:deluge-web
After=network-online.target deluged.service
Wants=deluged.service

[Service]
Type=simple
User=torrents
Group=torrents
UMask=022
ExecStart=/usr/bin/deluge-web
Restart=on-failure

[Install]
WantedBy=multi-user.target

В unit-ах я бы обратил внимание на то, что у deluged указан Umask=000, что позволяет читать скачанные файлы любому пользователю в системе (всяким dlna, ftp, nginx-ам, owncloud-ам, или как вы ещё потом будете эти файлы забирать). Если вы не качаете каких-то приватных данных — то такое решение вполне сойдет.
Собственно, запускаем созданные сервисы.

При первом запуске deluge-web должен сгенерироваться файл /home/torrents/.config/deluge/web.conf
В этом файле (для удобства) нужно заменить:

"default_daemon": "",

на

"default_daemon": "127.0.0.1:58846",

Чтобы при каждом входе в deluge-web он не спрашивал, к какому deluged-серверу подключаться.
Есть, правда, грустная новость. Deluge-web версии 1.3 (он в stretch и ранее) не умеет биндиться на localhost-only. Если ваша машинка торчит всеми портами наружу, то нужно через iptables закрыть порт 8112 отовсюду, кроме localhost:

root@server:~# iptables -I INPUT -p tcp --dport 8112 ! -s 127.0.0.1 -j REJECT

(не забудьте как-то прибить это правило гвоздями, чтобы оно не потерялось при перезагрузке — через iptables-persistence, например).
Теперь сделаем конфиг для nginx для нашего хоста (/etc/nginx/sites-enabled/torrents.conf , например):

server {
  listen 80;
  include includes/letsencrypt;
  server_name torrents.example.com;
  location / { return 301 https://torrents.example.com; }
}

server {
  listen 443 ssl;

  ssl_certificate /etc/nginx/ssl/cert.pem;
  ssl_certificate_key /etc/nginx/ssl/cert.pem;

  ssl_dhparam /etc/nginx/ssl/dhparam.pem;

  ssl_prefer_server_ciphers on;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers kEECDH+AES128:kEECDH:kEDH:-3DES:kRSA+AES128:kEDH+3DES:DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!MD5:!EXPORT:!LOW:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv2;
  ssl_session_cache shared:SSL:64m;
  ssl_session_timeout 28h;

  server_name torrents.example.com;

  location / {
    proxy_pass http://192.168.14.12:8112/;
    proxy_set_header Host $host;
    add_header X-Frame-Options SAMEORIGIN;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_connect_timeout 59s;
    proxy_send_timeout 600;
    proxy_read_timeout 36000s; ## Timeout after 10 hours
    proxy_buffer_size 64k;
    proxy_buffers 16 32k;
    proxy_pass_header Set-Cookie;
    proxy_hide_header Vary;

    proxy_busy_buffers_size 64k;
    proxy_temp_file_write_size 64k;

    proxy_set_header Accept-Encoding '';
    proxy_ignore_headers Cache-Control Expires;
    proxy_set_header Referer $http_referer;
    proxy_set_header Host $host;
    proxy_set_header Cookie $http_cookie;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Port '443';
    proxy_set_header X-Forwarded-Ssl on;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Authorization '';

    proxy_buffering off;
    proxy_redirect off;

    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
}

Честно говоря, кучу всего из этого конфига я просто скопипиздил и расписывать все настройки лень =)
Для чего nginx? В принципе, можно и без него — twisted не самый хреновый в плане безопасности сервер (под ним запущен deluge-web), как-то даже поддерживает https. Но неплохо всё же сделать какую-нибудь дополнительную авторизацию, чего twisted уже не умеет. При этом сделать её достаточно удобной, чтобы она быстро не задолбала. Себе я сделал так:

# пишем в /etc/nginx/sites-enabled/torrents.conf до server{}
geo $access_geo {
  192.168.0.0/24 off;
  203.0.113.3/32 off;
  default Deluge;
}

# пишем внутри server {
server {
...
  location / {
    ...
    auth_basic $access_geo;
    auth_basic_user_file /etc/nginx/htpasswd;
  }
}

С такой конструкцией nginx не будет спрашивать пароль из htpasswd, если я пришел на вебморду deluge из внутренней сети или с рабочего внешнего IP (взятого, конечно же, из TEST-NETS-3).
Рестартим всё, что нужно:

root@server:~# /etc/init.d/nginx restart
root@server:~# service deluge-web restart
root@server:~# service deluged restart

И заходим на https://torrents.example.com
Пароль по умолчанию на сам deluge-web — deluge, потом его попросят поменять. Ну а всякие настройки самого торрент-клиента можно сменить уже внутри вебморды (не забудьте сменить каталог для скачанных файлов).
Ах да, отвечая на популярный вопрос — а куда это положить? Внезапно, но можно на digitalocean, если трекеры у вас в основном российские, а русские фильмы вы с них не качаете (в общем, если абуз не ждёте). При условии, что вы не используете block storage и не используете «подарочные» аккаунты из первых(отличаются они полностью безлимитным трафиком). Но это скорее для случая «я раз в месяц качаю старую богом забытую игрушку 98-го года выпуска» или «раз в неделю качаю альбом группы, у которой меньше 10 тысяч слушателей». Если качаете много — то лучше гуглить «seedbox vps». Ну и пока в РФ нет ответственности для качателей — можно прямо с домашнего сервера.


Комментарии (4):

  1. Ну во-первых там и вовсе centos (/me хмуро посмотрел на адрес блога).
    Во-вторых, про ssl и авторизацию опять ничего.

    Но в закрытой сети — вариант. Хотя и NAT пробить при желании можно.

  2. newbee :

    Добрый вечер!

    Пример ограничения доступа извне не работает, но спасибо за мысль! У меня заработало так:

    # пишем в /etc/nginx/sites-enabled/torrents.conf до server{}
    geo $access_geo {
    192.168.0.0/24 off;
    203.0.113.3/32 off;
    default Deluge;
    }

    # пишем внутри server {
    server {

    location / {

    auth_basic $access_geo;
    auth_basic_user_file /etc/nginx/htpasswd;
    }
    }

  3. Ну это я как обычно дописывал хвост статьи и думал «да ну, зачем проверять, уж здесь то я не смогу ошибиться!» =)

    Спасибо, поправил.

Написать комментарий