====== Torrent: Установка Transmission в CentOS 7 ======
{{ :linux:transmission_logo.png?200&nolink|Transmission }}
===== Установка и базовая настройка =====
Смотрим доступные пакеты
# yum search transmission
---CUT---
transmission-cli.x86_64 : Transmission command line implementation
transmission-common.x86_64 : Transmission common files
transmission-daemon.x86_64 : Transmission daemon
transmission-gtk.x86_64 : Transmission GTK interface
transmission-qt.x86_64 : Transmission Qt interface
transmission.x86_64 : A lightweight GTK+ BitTorrent client
Устанавливаем transmission
# yum install transmission-daemon transmission-common
Запускаем и останавливаем transmission. При первом запуске будет создан конфигурационный файл ''/var/lib/transmission/.config/transmission-daemon/settings.json''
# systemctl start transmission-daemon
# systemctl stop transmission-daemon
Важное замечание. Если перед внесением изменений в конфигурацию не остановить демон, то после рестарта демона ваши изменения будут заменены данными, которые были ранее. Поэтому перед тем, как начать менять настройки остановите transmission.
После перезапуска в ''settings.json'' вместо пароля будет указан его хэш.
По-умолчанию transmission сохраняет файлы в каталог ''/var/lib/transmission/Downloads''
Все настройки связанные с web-доступом имеют префикс ''rpc-*''.
rpc-bind-address: для тех у кого несколько интерфейсов или адресов
rpc-enabled: включает веб-доступ
rpc-whitelist-enabled: поставьте false или добавьте ваши адреса разделенные запятой в rpc-whitelist
rpc-authentication-required: требовать аутентификацию
rpc-password: пароль
rpc-username: логин
Снова запускаем transmission и добавляем в автозагрузку
# systemctl start transmission-daemon
# systemctl enable transmission-daemon
Смотрим через ''lsof'' работает ли демон
# lsof -i tcp:9091
Пробуем перейти по адресу http://torrents.example.com:9091
Если вам не нужен SSL, но хочется заходить в веб-интерфейс без указания порта, то можно изменить ''rpc-port'' в ''settings.json'', указав вместо 9091 порта стандартный http 80 порт.
Но тут нас ждёт сюрприз. Это не сработает, т.к. порты <1024 являются привилегированными портами и доступны только пользователю root. Об этом можно почитать в [[https://www.ietf.org/rfc/rfc4340.txt|RFC4340]] (пункт 19.9 Port Numbers Registry) или на [[http://unix.stackexchange.com/questions/16564/why-are-the-first-1024-ports-restricted-to-the-root-user-only|stackexchange]].
Поэтому запускаем сервис от root'а либо разрешаем работать на привилегированном порту через [[http://man7.org/linux/man-pages/man7/capabilities.7.html|CAP_NET_BIND_SERVICE]]
# setcap cap_net_bind_service+ep /usr/bin/transmission-daemon
Если вам нужен SSL, то смотрите ниже пример для Apache и Nginx.
===== Firewall =====
iptables -A INPUT -m state --state RELATED,ESTABLISHED -p udp --dport 51413 -j ACCEPT
iptables -A OUTPUT -p udp --sport 51413 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 9091 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 51413 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 49153:65534 -j ACCEPT
==> /etc/firewalld/services/transmission.xml <==
Transmission Daemon
Transmission Daemon provides an interface to manage Transmission BitTorrent client.
===== Apache SSL =====
1) torrents.example.com
''/etc/httpd/conf.d/transmisssion.conf''
Self-signed сертификат создаём командой
# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -out /etc/ssl/certs/torrent.crt -keyout /etc/ssl/certs/torrent.key
ServerAdmin admin@example.com
ServerName torrents.example.com
ErrorLog logs/torrents.example.com-error_log
CustomLog logs/torrents.example.com-access_log common
RewriteEngine On
RewriteCond %{SERVER_PORT} =80
RewriteRule ^/(.*)$ https://%{SERVER_NAME}:443/$1 [R,L]
ServerAdmin admin@example.com
ServerName torrents.example.com
ErrorLog logs/torrents.example.com-ssl_error_log
CustomLog logs/torrents.example.com-ssl_access_log common
SSLEngine On
SSLCertificateFile "/etc/ssl/certs/torrent.crt"
SSLCertificateKeyFile "/etc/ssl/certs/torrent.key"
ProxyPass / http://torrents.example.com:9091/
ProxyPassReverse / http://torrents.example.com:9091/
2) https://example.com/torrents/
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://example.com/torrents
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://example.com/transmission
RewriteEngine on
RewriteRule /transmission[/]?$ /transmission/web/ [R=permanent]
SSLEngine on
SSLCertificateFile /etc/ssl/certs/torrent.crt
SSLCertificateKeyFile /etc/ssl/certs/torrent.key
SSLProxyEngine On ???
SSLProxyCheckPeerCN on ???
SSLProxyCheckPeerExpire on ???
ProxyRequests On
ProxyPreserveHost Off
Order allow,deny
Allow from all
ProxyPass /transmission http://127.0.0.1:9091/transmission
ProxyPassReverse /transmission http://127.0.0.1:9091/transmission
Дополнительная защита паролем
AuthType Basic
AuthName "Password Required"
AuthUserFile
Require valid-user
# a2enmod proxy proxy_http rewrite ssl
SSLStrictSNIVHostCheck off
SSL
* https://doc.ubuntu-fr.org/transmission#transmission-daemon_et_ssl_via_apache
* http://phil.writesthisblog.com/seedbox-basee-sur-transmission/
* https://blog.flo.cx/2014/03/adding-ssl-to-transmissions-web-interface/
* https://www.aaflalo.me/2015/01/transmission-bt-nginx-as-reverse-proxy-ssl/
* https://gist.github.com/Belphemur/47f76c40defef0269615
===== nginx SSL/HTTP2 =====
upstream transmission {
server 127.0.0.1:9091;
}
server {
listen 443 ssl http2;
server_name example.com;
auth_basic "No pasaran!";
auth_basic_user_file /var/www/myWebSite/web/.htpasswd;
# Path to the root of your installation
error_log /var/www/myWebSite/logs/error.log;
access_log /var/www/myWebSite/logs/access.log;
### SSL files ###
ssl_certificate /var/www/myWebSite/ssl/advert.crt;
ssl_certificate_key /var/www/myWebSite/ssl/advert.key;
### Add SSL specific settings here ###
ssl_session_timeout 10m;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
ssl_prefer_server_ciphers on;
location / {
return 301 https://$server_name/transmission/;
}
location ^~ /transmission {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_pass_header X-Transmission-Session-Id;
add_header Front-End-Https on;
location /transmission/rpc {
proxy_pass http://transmission;
}
location /transmission/web/ {
proxy_pass http://transmission;
}
location /transmission/upload {
proxy_pass http://transmission;
}
location /transmission/web/style/ {
alias /usr/share/transmission/web/style/;
}
location /transmission/web/javascript/ {
alias /usr/share/transmission/web/javascript/;
}
location /transmission/web/images/ {
alias /usr/share/transmission/web/images/;
}
location /transmission/ {
return 301 https://$server_name/transmission/web;
}
}
}
===== Transmission Remote GUI =====
https://sourceforge.net/projects/transgui/
Вот так выглядит remote GUI
{{:linux:transmission_1.png?nolink&700|}}
Веб-интерфейс
{{:linux:transmission_2.png?nolink&700|}}
При работе по httpS на 443 порту возникает ошибка **Connection reset by peer**. При работе на стандартном порту 9091 такой ошибки нет.
Нашел [[https://sourceforge.net/p/transgui/tickets/820/|аналогичную проблему]] на sourceforge. В качестве решения предлагают увеличить ''Data refresh interval''.