在上一篇文章中,我們講了如何自己編譯一套Transmission並調整他的設定。
但是你應該有發現,Transmission的遠端介面(RPC)是沒有加密的,在某些地方變成你完全不能使用遠端管理。像是台灣的教育單位就對P2P很過敏,既使你只是用BT抓個Debian或Raspberry Pi的映像檔,依然有被關注的風險,甚至到現在依然很多學校的公告是「禁止使用P2P軟體」而不是「禁止使用各種軟體取得未經授權之檔案」。
雖然在上一篇文章我們使用的Transmission Remote GUI有支援SSL,但是如果有試著在Pi或是其他Transmission-daemon伺服器上尋找設定要修改,沒錯:沒有這個設定、Transmission的RPC介面不支援SSL。
所以在這裡,我們需要一台反向代理伺服器(Reverse Proxy)。一般代理伺服器(http Proxy)是任何網站都可以透過他連線到目標伺服器的,而且客戶端知道他使用了代理。而反向代理則是針對特定網站用的,不需要再使用這電腦做設定。對使用者而言,反向代理不像代理反而像真的主機。使用者連過去後,反向代理伺服器再將http的請求(request)PASS到真正的伺服器。好處是可以隱藏真正的伺服器位置,而真正伺服器如果不支援加密,我們也可以透過反向代理的技術幫他加密,如下面的圖。而未加密的那一段通常是私人區段,除了你以外沒有人可以知道這裡發生了甚麼事。*1
了解以上的架構後,我們就可以開工拉(不了解為什麼要這樣,或是這樣做可以幹嘛的話,建議你可以停手了XD)。
- 安裝nginx還有製作證書的工具(SSL還是要有證書,就算沒有要驗證身分)
這裡我們用Nginx當反向代理,安裝在Pi、其他Transmission主機或是同一個網段的電腦裡吧# apt-get install openssl nginx
- 製作一份自己做的證書(無法驗證身分、無公信力)
# cd /etc/nginx/
# mkdir ssl
# openssl genrsa -des3 -out ssl/privkey.key 1024 //製作私鑰
Generating RSA private key, 1024 bit long modulus
..++++++
………….++++++
e is 65537 (0x10001)
Enter pass phrase for privkey.key: //在這裡輸入你這份私鑰的使用密碼(不會顯示)
Verifying – Enter pass phrase for privkey.key: //再輸入一次免得打錯# openssl req -new -key ssl/privkey.key -out ssl/cert.csr //製作證書的CSR
Enter pass phrase for ssl/privkey.key: //輸入私鑰剛剛的密碼
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [AU]:TW //輸入兩碼的國碼
State or Province Name (full name) [Some-State]:Taiwan //輸入州、省的名稱
Locality Name (eg, city) []:Taipei //輸入城市名稱
Organization Name (eg, company) [Internet Widgits Pty Ltd]: //輸入公司名稱
Organizational Unit Name (eg, section) []:Admin //輸入單位名稱
Common Name (e.g. server FQDN or YOUR name) []:dd-han.tw //輸入網址
Email Address []: //輸入e-mailPlease enter the following ‘extra’ attributes //以下都是額外的選項,可以不輸入
to be sent with your certificate request
A challenge password []:
An optional company name []:# openssl rsa -in ssl/privkey.key -out ssl/cert.key
Enter pass phrase for ssl/privkey.key: //輸入你的私鑰使用密碼//製作一份自己簽證的CA證書
# openssl x509 -req -days 365 -in ssl/cert.csr -signkey ssl/privkey_nopass.key -out ssl/cert.pem
Signature ok
subject=/C=TW/ST=Taiwan/L=Taipei/O=dd-han’s Company/OU=Admin/CN=dd-han.tw/emailAddress=
Getting Private key - 複製一份預設設定檔
首先,我們先複製一份nginx預設的設定檔(裡面有很多設定可以參考)# cd /etc/nginx/
# cp sites-available/default sites-available/transmission - 把原本的預設伺服器關掉
如果你沒有要用的話,當然是關掉搂(Pi的資源不多,不要浪費)# rm sites-enabled/default
- 設定一台https的伺服器
# pico sites-available/transmission
# You may add here your
…
…
//把預設的http伺服器整個註解掉
#server {
#listen 80 ; ## listen for ipv4; this line is default and implied
#…
#…
#location /doc/ {
#alias /usr/share/doc/;
#autoindex on;
#allow 127.0.0.1;
#allow ::1;
#deny all;
#} 註解區段結束*************/
# another virtual host using mix of IP-, name-, and port-based configuration
#
…
…
# HTTPS server
# 把以下的#號刪掉取消註解
server {listen 443;
server_name localhost;## SSL log files 加入存取紀錄,免得被別人連線都沒紀錄查
access_log /var/log/nginx/trans-ssl-access.log;
error_log /var/log/nginx/trans-ssl-error.log;root /usr/share/nginx/www; //改掉這行預設的跟目錄資料夾,讓網站跟目錄出現welcome to nginx,不然會出現409 ERROR
index index.html index.htm;ssl on;
ssl_certificate ssl/cert.pem; #改成我們剛剛做的CA證書
ssl_certificate_key ssl/cert.key; #改成我們剛剛輸出的cert.key
ssl_session_timeout 5m;# ssl_protocols SSLv3 TLSv1; #這三行不用取消註解,讓他保持預設就好
…
# ssl_prefer_server_ciphers on;location / {
try_files $uri $uri/ =404;
}
location /transmission/ { //這一段自己加入
#把transmission這個資料夾Pass給RPC
proxy_pass http://127.0.0.1:9091/transmission/;
proxy_redirect off; #不要讓他轉址過去}
}
- 啟用設定檔
# ln -s /etc/nginx/sites-available/transmission sites-enabled/
- 重開nginx
# /etc/init.d/nginx restart
- 測試一下,安心的遙控吧
前往https://127.0.0.1/transmission/web (務必加上/web,不然很會出現409錯誤)
備註:這一段只是講解技術細節,看不懂就算了沒關係XD
參考資料:http://linux-guys.blogspot.tw/2010/12/nginx-reverse-proxyweb-cache.html
您好,我遇到一個小問題,網址的最後面,
如果不自己加上斜線也會有 409 錯誤的問題!
https://127.0.0.1/transmission/web 要改成
https://127.0.0.1/transmission/web/ 這樣才行,
請問要怎麼設定成不用再手動加上最後那個斜線呢?謝謝!
暫時我也還沒研究出這個解…..
不過我都是用Transmission Remote GUI,說實話也很少開瀏覽器去管理Transmission…..
期中考結束來試試看有沒有辦法用ReWrite規則修正好了