破別人的機器然後拿來賣 Proxy 的「雲端服務」

在「Huthos VPS Provider: Totally legit, 1000% not a criminal organization.」這篇文章裡,作者因為平常就有弄密罐 (Honeypot),意外發現這種「業務」:

作者發現有人打進他的 Honeypot 並且留下紀錄,一路追蹤後發現...

Apache 2.4 的 ProxyPass 對 Unix Domain Socket 的 FastCGI 界面設定

出自「High-performance PHP on apache httpd 2.4.x using mod_proxy_fcgi and php-fpm.」這邊的方法:

ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/var/run/php5-fpm.sock|fcgi://127.0.0.1:9000/var/www/www.example.com/public/

後面那個 127.0.0.1:9000 看起來變成裝飾用,有點奇怪... 不過至少會動?

架設 Tor 的 Hidden Service

會想要寫這篇是因為前陣子警察施暴影片YouTube 上一直被下架。

Tor 最常用到的是「隱藏使用者」的功能:使用者從 Internet 連到 Tor network 的進入節點 (entry node) 後,透過全世界的 Tor 節點加密傳輸,最後在出口節點 (exit node) 再連回 Internet 上的服務,藉此隱匿行蹤。

另外一個比較少被提到的用途是「架站」,也就是 Hidden Service。

在傳統的 Internet 架構上,知道 IP address 就容易發現機器所在地,要抄台或是在 ISP 端直接 ban IP address 也就相對容易。而 Hidden Service 就是想把服務藏到 Tor network 裡,讓外部不知道是哪一台伺服器,達成無法審查內容的目標。

官方的文件是「Configuring Hidden Services for Tor」這份。而這邊以 Ubuntu 12.04 的環境為例。

首先是先架設 web server,可以是 apache 或是 nginx,這不是本篇文章的重點 :p

然後在 /etc/tor/torrc 裡面加上:

HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 80 127.0.0.1:80

表示 hidden service 的相關資料會放在 /var/lib/tor/hidden_service/ 下,並且提供 port 80 的服務 (轉到本機 127.0.0.1 的 port 80)。

接下來重跑 tor:

service tor restart

然後看 hostname 是什麼:

cat /var/lib/tor/hidden_service/hostname

會看到一個 *.onion 格式的 hostname,像我架設的機器就會看到:

btyz5lgqirxipopo.onion

*.onion 的網址必須透過 Tor 的機制連,對一般人會比較麻煩。所以這邊要教的是透過 proxy 提供服務:

這樣就變得有很多用途...

Varnish 的 Super Fast Purger...

Reverse Proxy 的 Cache Infrastructure 在遇到 cache invalidate 都是很討厭的問題,不是不能做,而是效能不太好... 常見的作法是設計成不用 purge 的形式,只要是需要更新,就產生不同的 url,而舊的 url 在沒人 access 後會透過各種 Cache algorithms 自動回收掉,像是 LRU (Least Recently Used) 之類的演算法。

發展久了之後也因此衍伸出很多不同的架構,像是 groupcache 就是假設在同一個 address 的內容永遠不會變的前提。

Varnish Cache 這次發表的東西則是打算從根本問題解決,也就是想辦法讓 purge (cache invalidate) 的成本降低:「Simple scales better and faster in the real world」、「VAC 2.0.3 with high performance cache invalidation API (aka the Super Fast Purger)」。

官方的說法,在大台機器上可以到 60k reqs/sec:

Kristian nonchalantly mentioned that the Super Fast Purger did 60,000 requests per second, on a 6 core Xeon with 36GB memory, traffic over a gigabit network to a single Varnish Cache server, with httperf as test client. But we believe the Super Fast Purger can do a lot more with a little love and tuning.

Squid 效能不好,ATS 的文件很傷,是該找時間來測試看看...

Squid 3.1 的 forward proxy 設定...

因為打算給 portsnap 用,所以得用 Squid 3.1 架 forward proxy,可以避免大量對外抓同樣的資料...

由於是內部的機器,不需要擋 acl,設定起來超簡單... ports 裝完 www/squid31 後,把 squid.conf 寫成:

#
http_access allow all
#
access_log /home/squid/logs/access.log squid
cache_dir aufs /home/squid/cache1 1024 16 16
cache_effective_group squid
cache_effective_user squid
cache_log /home/squid/logs/cache.log
cache_mem 256 MB
http_port 3128

這樣就「會動」了... (先不管效率) 照 squid 的慣例,第一次必須先跑 /usr/local/sbin/squid -z 讓目錄建立出來,後面就是標準的 /usr/local/etc/rc.d/squid start

mCool 方案的帳單...

申請 mCool 方案後第一次收到生效月的帳單,厚厚的一包:

基本月租費率 383 加上 mCool 最高值 299 就是 682,看起來這個方法沒什麼問題。已經幾個月過去了,把想的到的注意事項寫起來:

  • 首先是開通 mCool 方案,並且關閉 3G APN internet 的能力 (避免出事),這兩個設定都可以透過客服幫你處理,請客服關的時候記得順便問什麼時候生效。
  • 另外,請客服幫你設定下次帳單要寄通話明細,如果發生意外的時候總是要有資料才知道發生什麼事情。
  • 除了基本的 APN Proxy 設定外 (這邊就不教學了,網路上很多),再來是裝 Transparent Proxy。這是因為有些應用程式可以直接吃 APN Proxy 設定,但遇到不吃的應用程式就要試著用這套軟體打通...

一時間想到的就這樣...

參考資料: