Найти в Дзене
Linux от Дмитрия

TorrServer на вашей VDS, обманем провайдера на запрет торрентов

Плейлист на Youtube
https://www.youtube.com/playlist?list=PLOp6AT9LJS_OZK4LbRV9WpJXFRbmSg9Mh Это видео на Дзен
https://dzen.ru/video/watch/6526e8994d4ed96c760a5d01 Плейлист на RUTUBE
https://rutube.ru/plst/328739 Виртуальный сервер, желательно выбрать с двумя ядрами, двумя гигабайтами памяти, диск не важно. Желательно проверить наличие IPv6, это может помочь работе торрентов. ping -c3 -6 google.com Обязательно добавьте swap, часто на VDS нет подкачки, а без него может не работать. dd if=/dev/zero of=/swapfile bs=1M count=2048
chown root:root /swapfile && chmod 0600 /swapfile
mkswap /swapfile && swapon /swapfile
free -h
echo -e '/swapfile swap swap defaults 0 0' >> /etc/fstab Для того, что бы боты не пытались подбирать пароль от вашего сервера, давайте поменяем порт SSH на другой nano /etc/ssh/sshd_config Port 122 systemctl restart sshd Сразу настроим nftables. В нашем случае, TorrServer будет слушать все сетевые интерфейсы на порту 8090. Без логина и парол

Плейлист на Youtube
https://www.youtube.com/playlist?list=PLOp6AT9LJS_OZK4LbRV9WpJXFRbmSg9Mh

Это видео на Дзен
https://dzen.ru/video/watch/6526e8994d4ed96c760a5d01

Плейлист на RUTUBE
https://rutube.ru/plst/328739

Виртуальный сервер, желательно выбрать с двумя ядрами, двумя гигабайтами памяти, диск не важно.

Желательно проверить наличие IPv6, это может помочь работе торрентов.

ping -c3 -6 google.com

Обязательно добавьте swap, часто на VDS нет подкачки, а без него может не работать.

dd if=/dev/zero of=/swapfile bs=1M count=2048
chown root:root /swapfile && chmod 0600 /swapfile
mkswap /swapfile && swapon /swapfile
free -h
echo -e '/swapfile swap swap defaults 0 0' >> /etc/fstab

Для того, что бы боты не пытались подбирать пароль от вашего сервера, давайте поменяем порт SSH на другой

nano /etc/ssh/sshd_config
Port 122
systemctl restart sshd

Сразу настроим nftables. В нашем случае, TorrServer будет слушать все сетевые интерфейсы на порту 8090. Без логина и пароля, ваш сервер будет доступен всему миру и это плохо. Мы откроем только те порты нам потребуются для SSH и nginx, а уже в nginx настроим авторизацию.

В случае с Debian и Ubuntu, конфигурационный файл nftables.conf находится в одном и том же месте.

nano /etc/nftables.conf

Сейчас копирование работает нормально.

#!/usr/sbin/nft -f
flush ruleset

table inet filter {
chain input {
type filter hook input priority 0; policy drop;
ct state vmap { invalid : drop, established : accept, related : accept } comment "Разрешим established,related и удалим invalid, входящие"
meta l4proto { tcp, udp } th dport { 80, 122, 443 } ct state new counter accept comment "Разрешим TCP и UDP"
icmp type { destination-unreachable, 9-12 } accept comment "Разрешим не все ICMP"
icmpv6 type { 1-4, 130-136, 141-143 } accept comment "Разрешим не все ICMP6"
iifname lo accept
}
}

В нашем случае, мы настроили только входящий трафик (INPUT), но больше нам и не потребуется ни чего настраивать.

Включаем nftables

systemctl enable --now nftables.service

Проверяем

nft list ruleset

Обновим систему

apt update && apt -y dist-upgrade

И давайте сразу установим все нужные пакеты.

apt -y install wget curl htop nginx certbot apache2-utils logrotate

По желанию, можно немного раскрасить консоль, так будет чутка удобнее пользоваться сервером. Это не обязательно.

wget https://gitlab.com/edmitry2010/bash-scripts/-/raw/main/bash.mody.sh
echo 1 | bash bash.mody.sh; rm -f bash.mody.sh

Если модифицировали bash, тогда надо будет пере логиниться на сервере.

Для получения сертификата, нам потребуется домен, предлагаю сделать его бесплатно и привязать его к нашему серверу.

Переходим на сайт https://freemyip.com/ в белом поле пишем какой хотим домен третьего уровня и жмём кнопочку ниже. Только не используйте мой torrser, а придумайте свой, т.к. даже если я его освобожу, то он может быть занять кем-то ещё.

После этого, вам выдадут ссылку которая потребуется нам на сервере.

curl https://freemyip.com/update?token=368f61???9ad???ce97&domain=torrser.freemyip.com

Проверить можно так

nslookup torrser.freemyip.com

Когда домен уже привязан к нашему серверу, можно настроить nginx и получить Let’s Encrypt сертификат.

Сделаем папочку для получения сертификата

mkdir -p /var/lib/letsencrypt/.well-known

Укажем этой папочке нужные права. Но для начала нужно посмотреть от какого пользователя запускается nginx в файле /etc/nginx/nginx.conf

-2
chown www-data:www-data /var/lib/letsencrypt/.well-known

Удалим дефолтный сайт nginx

rm -f /etc/nginx/sites-enabled/default

Создаём/заполняем файл, где у нас будет описание домена в nginx

nano /etc/nginx/sites-enabled/torrser.freemyip.com
server {
listen 80;
server_name torrser.freemyip.com;

# Это нужно для получения/обновления сертификата
location ^~ /.well-known/acme-challenge {
allow all;
root /var/lib/letsencrypt/.well-known;
default_type "text/plain";
try_files $uri =404;
}
}

Проверяем всё ли правильно заполнили

nginx -t

И если всё ОК, можно перезапустить nginx

systemctl restart nginx

Получаем сертификат

certbot certonly --webroot --agree-tos --email etest@mailoe.ru --webroot-path /var/lib/letsencrypt/.well-known -d torrser.freemyip.com
Удачное получение сертификата
Удачное получение сертификата

В дальнейшем, служба certbot будет обновлять ваш сертификат самостоятельно, каждые три месяца вроде).

Однако, что бы новый сертификат подгружался в nginx, nginx потребуется перечитать настройки. Это можно настроить в logrotate, добавлением одной строчки.

nano /etc/logrotate.d/nginx
nginx -s reload
-4

Если честно, ни разу не пользовался этим приёмом, но если подумать, то ротация логов происходит ежедневно и так же ежедневно он будет перечитывать настройки.

Дальше, нам потребуется файл с нашими логин/пароль, мы его укажем в location / нашего сайта.

htpasswd -nb dmitry dmitry12345678 > /etc/nginx/htpasswd

Если будет желание поменять логин/пароль, просто повторите эту команду с другими логин/пароль. Только у меня просьба, не делайте таких простых паролей).

htpasswd -nb dmitry 1234 > /etc/nginx/htpasswd

После удачного получения сертификата и создания логин/пароль, меняем наш конфиг для nginx на такой.

nano /etc/nginx/sites-enabled/torrser.freemyip.com

server {
listen 80;
server_name torrser.freemyip.com;

# Это нужно для получения/обновления сертификата
location ^~ /.well-known/acme-challenge {
allow all;
root /var/lib/letsencrypt/.well-known;
default_type "text/plain";
try_files $uri =404;
}

# Принудительное перенаправление на https
location / {
return 301 https://$host$request_uri;
}
}

server {
listen 443 ssl http2;
server_name torrser.freemyip.com;

access_log /var/log/nginx/torrser.freemyip.com_access.log;
error_log /var/log/nginx/torrser.freemyip.com_error.log;

ssl_session_cache shared:le_nginx_SSL:1m;
ssl_session_timeout 1440m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
add_header Strict-Transport-Security "max-age=31536000";
ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:RSA+3DES:!NULL:!RC4;
ssl_early_data on;
# Включаем ответы OCSP
resolver 127.0.0.1;
ssl_stapling on;
ssl_stapling_verify on;

ssl_certificate /etc/letsencrypt/live/torrser.freemyip.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/torrser.freemyip.com/privkey.pem;

# Это нужно для получения/обновления сертификата, пописываем повторно, т.к. у нас включено перенаправление на https
location ^~ /.well-known/acme-challenge {
allow all;
root /var/lib/letsencrypt/.well-known;
default_type "text/plain";
try_files $uri =404;
}

location / {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/htpasswd;

proxy_pass http://127.0.0.1:8090;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
}

Проверяем всё ли правильно заполнили

nginx -t

И если всё ОК, можно перезапустить nginx

systemctl restart nginx

или перечитаем настройки, можно и так

nginx -s reload

Проверим какие порты у нас работают на сервере

ss -tulnp

Установку TorrServer, будем делать от другого пользователя, у которого не будет ни пароля, ни прав на сервере.

Создадим такого пользователя

useradd -m torrserver

Для удобства, укажем этому пользователю bash при авторизации (bash в конце строки)

nano /etc/passwd
torrserver:x:1001:1001::/home/torrserve:/bin/bash

Авторизуемся под новым пользователем

su - torrserver

Мы сразу попадаем в домашний каталог нового пользователя, убедиться можно так

pwd
-5

TorrServer находится на github вот здесь. Можете перейти туда и взять от туда ссылку https://github.com/YouROK/TorrServer/releases

Качаем последнюю версию

wget https://github.com/YouROK/TorrServer/releases/download/MatriX.125/TorrServer-linux-amd64

Делаем его исполняемым

chmod +x TorrServer-linux-amd64

И переименуем для удобства

mv TorrServer-linux-amd64 torrserver

Выходим из под пользователя torrserver, возвращаемся под root и уберём возможность логиниться по пользователем torrserver

nano /etc/passwd
torrserver:x:1001:1001::/home/torrserve:/bin/nologin

Теперь ни кто не сможет залогиниться под torrserver

Если вам потребуется опять зайти под пользователем torrserver, потребуется опять поменять nologin на bash

Напишем службу для запуска

nano /etc/systemd/system/torrserver.service

[Unit]
Description=torrserver
After=network.target nginx.service

[Service]
User=torrserver
Group=torrserver
Type=simple
NonBlocking=true WorkingDirectory=/home/torrserver
ExecStart=/home/torrserver/torrserver --path /home/torrserver
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

Включим службу автозапуск, за одно и активируем

systemctl enable --now torrserver.service

Проверим какие порты у нас работают на сервере

ss -tulnp
-6

В итоге, для работы сайта, должны быть заняты порты 80, 443 и 8090

Всё, переходим в браузере по нашему домену, вводим логин/пароль и пользуемся.

Как пользоваться, я показал в видео.

Для того что бы была возможность пользоваться этим сервером на телевизоре, нам потребуется настроить L2 сеть с этим сервером, а это уже не просто и совсем другая история).