On iki kurulum

50 TB depolama düğümünde, izinleri korunan bir seedbox

S-50 üzerinde NVMe hazırlama katmanına sahip qBittorrent, sağlamlaştırılmış bir birim, her yeni indirmede geçerli olan grup izinleri ve arayüzü genel internetten uzak tutan bir vekil sunucu.

Bu neyi kurar

Bir depolama düğümü üzerinde ayrıcalıksız bir hizmet olarak çalışan qBittorrent: tamamlanmamış veriler NVMe katmanına yazılır, tamamlanan veriler elli terabaytlık toplu katmana taşınır, her şey ortak bir gruba ait olur, böylece ikinci bir hesap SFTP üzerinden herhangi bir chmod arkeolojisi yapmadan okuyabilir ve yalnızca kimliği doğrulanmış bir proxy üzerinden erişilebilen bir web arayüzü.

Bariz yaklaşım paketi kurmak, arayüzde tıklamak ve güne devam etmektir. Bu bir hafta çalışır; ta ki ilk dosya yanlış grupla gelene ve senkron kullanıcınız onu okuyamayana kadar ve o zamana kadar kırk bin dosya yanlış grupla gelir.

Başlamadan önce

  • Bir S-50: on gigabitlik bir bağlantı noktasında bir terabaytlık NVMe katmanının arkasında elli terabayt toplu depolama. Trafik, adil kullanım kapsamında ölçülmez ve kabul edilebilir kullanım politikası, üzerinden ne geçebileceği konusunda kısa ve spesifiktir. Dağıtım hakları sizin sorununuz, bir dipnot değil.
  • Debian 13, root ve box.example.com gibi bir ana bilgisayar adı.

1. Kullanıcılar, gruplar, düzen

apt update && apt install -y qbittorrent-nox nginx apache2-utils acl
groupadd -g 3000 media
useradd -r -g media -u 3000 -d /srv/qbt -m -s /usr/sbin/nologin qbt
useradd -m -G media sync

İki hesap, bir grup. Arka plan hizmeti qbt olarak çalışır ve asla giriş yapmaz; sync dosyaları çektiğiniz hesaptır ve hiçbir şey yazamaz. Şimdi dizinler ve bunu kalıcı olarak çalıştıran iki bayrak:

install -d -o qbt -g media -m 2775 /srv/nvme/incomplete
install -d -o qbt -g media -m 2775 /srv/bulk/complete
setfacl -d -m g:media:rwx /srv/bulk/complete
setfacl -d -m g:media:rwx /srv/nvme/incomplete

Mod 2775 setgid bitini ayarlar, böylece içinde oluşturulan her dosya, oluşturan kullanıcının birincil grubu yerine media grubunu devralır. Varsayılan ACL daha sonra işlem umask'ından bağımsız olarak bu gruba yeni girdilerde okuma ve yazma izni verir. Birlikte, izin sorununun her indirmeden sonra değil, bir kez yanıtlandığı anlamına gelir.

Bir S-50'de toplu katman ve NVMe ayrı blok aygıtlarıdır. Yollara bağlanmadan önce hangisinin hangisi olduğunu doğrulayın:

lsblk -o NAME,SIZE,ROTA,MOUNTPOINT

2. Arka plan hizmeti

Bir yapılandırma dosyası yazması için bir kez başlatın, ardından durdurun ve bu dosyayı düzenleyin. Bir metin dosyasında bulunan ayarlar için arayüzle savaşmak öğleden sonranızı boşa harcar.

sudo -u qbt qbittorrent-nox --webui-port=8080 &
sleep 5 && pkill -u qbt qbittorrent-nox

/srv/qbt/.config/qBittorrent/qBittorrent.conf dosyasını düzenleyin, böylece [BitTorrent] ve [Preferences] bölümleri şunları içersin:

[BitTorrent]
Session\DefaultSavePath=/srv/bulk/complete
Session\TempPath=/srv/nvme/incomplete
Session\TempPathEnabled=true
Session\Port=51413
Session\DiskCacheSize=2048
Session\MaxConnections=800
Session\MaxUploads=40
Session\GlobalMaxSeedingMinutes=-1
Session\Preallocation=true

[Preferences]
WebUI\Address=127.0.0.1
WebUI\Port=8080
WebUI\LocalHostAuth=false
WebUI\CSRFProtection=true
Downloads\UseIncompleteExtension=true

NVMe üzerinde aşamalandırma tüm püf noktasıdır. Torrent yazımları küçük ve dağınıktır, bu da toplu katman için en kötü olası düzendir; NVMe onları emer ve tamamlanan dosya tek bir sıralı kopya olarak karşıya taşınır. Ön tahsis, girerken parçalanmayı önler.

3. Başıboş kalamayan bir birim

/etc/systemd/system/qbittorrent.service:

[Unit]
Description=qBittorrent
After=network-online.target
Wants=network-online.target

[Service]
User=qbt
Group=media
UMask=0002
ExecStart=/usr/bin/qbittorrent-nox
Restart=on-failure
NoNewPrivileges=yes
PrivateTmp=yes
PrivateDevices=yes
ProtectSystem=strict
ProtectHome=yes
ProtectKernelTunables=yes
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX
ReadWritePaths=/srv/qbt /srv/nvme/incomplete /srv/bulk/complete
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

UMask=0002 ve Group=media yeni dosyaların grup tarafından yazılabilir kalmasını sağlar. Birincisi olmadan, setgid size o gruptaki hiç kimsenin yazamadığı dosyalarda doğru grubu verir; bu, ince ve sinir bozucu bir yarı başarıdır.

systemctl daemon-reload && systemctl enable --now qbittorrent

4. Çekirdek ve güvenlik duvarı

Birkaç yüz eş ile on gigabit, daha büyük soket arabellekleri ve dolmayacak bir bağlantı tablosu gerektirir:

cat > /etc/sysctl.d/70-seedbox.conf <<EOF
net.core.rmem_max = 33554432
net.core.wmem_max = 33554432
net.ipv4.tcp_rmem = 4096 87380 33554432
net.ipv4.tcp_wmem = 4096 65536 33554432
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
net.netfilter.nf_conntrack_max = 524288
EOF
sysctl --system

Güvenlik duvarı: torrent bağlantı noktası her iki ailede de açık, SSH ve HTTPS açık, web arayüzü yalnızca geri döngüye bağlı ve bu nedenle hiçbir şey gerektirmiyor.

table inet filter {
  chain input {
    type filter hook input priority filter; policy drop;
    ct state established,related accept
    iif lo accept
    ip6 nexthdr icmpv6 accept
    ip protocol icmp accept
    tcp dport { 22, 443 } accept
    tcp dport 51413 accept
    udp dport 51413 accept
  }
}

5. Arayüz, bir proxy arkasında

certbot certonly --standalone -d box.example.com
htpasswd -c /etc/nginx/qbt.htpasswd you
server {
  listen 443 ssl;
  server_name box.example.com;
  ssl_certificate     /etc/letsencrypt/live/box.example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/box.example.com/privkey.pem;
  client_max_body_size 100m;

  location / {
    auth_basic "closed";
    auth_basic_user_file /etc/nginx/qbt.htpasswd;
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header X-Forwarded-Host $http_host;
    proxy_http_version 1.1;
  }
}

Doğrulayın

Büyük, iyi tohumlanmış bir sürüye ve net bir lisansa sahip bir şey kullanın. Güncel bir Debian kurulum imajı geleneksel seçimdir ve yasal olarak test edebileceğiniz diğer her şeyden daha ikna edici bir şekilde on gigabitlik bir bağlantıyı doyurur.

Torrent'i arayüz aracılığıyla ekleyin, ardından aşamalı katmanın dolmasını izleyin:

watch -n2 "du -sh /srv/nvme/incomplete /srv/bulk/complete"

Çalışırken, bağlantı noktasının yalnızca kendi güvenlik duvarınızda açık olmadığından gerçekten erişilebilir olduğunu doğrulayın; çünkü erişilemeyen bir bağlantı noktası, kabul edilebilir şekilde indiren ve kimseye tohumlamayan bir seedbox üretir:

ss -tn state established sport = :51413 | wc -l

Bu bağlantı noktasındaki gelen bağlantılar, eşlerin sizi bulduğu anlamına gelir. Bol miktarda giden bağlantıyla sıfır, yalnızca sizin dışarı aradığınız anlamına gelir.

İndirme tamamlandığında, bu kurulumun var olduğu üç şeyi kontrol edin:

ls -l /srv/nvme/incomplete
ls -ln /srv/bulk/complete
sudo -u sync cat /srv/bulk/complete/*.iso > /dev/null && echo "sync can read"

Aşamalı dizin boş, tamamlanan dosyalar grup 3000'yi grup okuma ve yazma ile gösteriyor ve sync hesabı bunları manuel izin düzeltmesi olmadan okuyabiliyor. Bu üçüncü komut, setgid ve ACL çalışmasının karşılığını verdiğini kanıtlar.

Son olarak arayüzün açık olmadığını kanıtlayın:

curl -m5 http://box.example.com:8080/ ; echo "exit $?"
curl -sI https://box.example.com/ | head -1

Birincisi bağlantıda başarısız olmalı, ikincisi 401 döndürmeli. Başka bir şey, ikinci adımdaki adres bağlamanın gerçekleşmediği anlamına gelir.

Sonrasında

Her şeyi sonsuza kadar tohumlamayı düşünmüyorsanız, genel bir tohumlama oranı veya paylaşım süresi sınırı belirleyin; çünkü elli terabayt, herkesin beklediğinden daha hızlı dolar. Örneğinizden gelen trafikle ilgili bir şikayet bize ulaşırsa, süreç kötüye kullanım sayfasında açıklanmıştır: size iletilir ve diskinize bakmayız.

Hazır olduğunda

Bir şehir seç. Bir boyut seç. Kripto ile öde.

Kim olduğunuzla ilgili formlar yok, onay için insan bekleme yok, doğrulama için telefon görüşmesi yok. Ödeme onaylanır ve kimlik bilgileri gelen kutunuza düşer.