2016年6月7日 星期二

gfw.press大殺器的客戶端使用筆記

前言

搭建魚大爺家的大殺器服務器部份已經介紹過了,腳本也都放到Github代碼倉庫 ,
說實在搭建只是後端不同配搭,其他分別不大,再寫使用squid3作為後端自己也沒
興趣,反而在推上遇到不少推油詢問客戶端的問題,手機客戶端不知怎樣使用或
者是電腦客戶端連不上,很難逐一回答,還不如在網誌寫下來較好,不過我測試
的時間不多,錯漏必有,看這文時注意這只是參考,如果有錯誤請告訴我。謝謝。


電腦

Windows 10下載客戶端安裝,以Chrome + SwitchyOmega為例,填好大殺器客戶端
相關資料,啟動大殺器,在插件SwitchyOmega新增一個情景模式,代理選HTTP,
地址填入127.0.0.1,端口3128,儲存並轉到代理形式,正常可以使用了。




這個是Linux的,不過基本相同。

Ubuntu Linux需要下載大殺器源碼,在系統安裝openjdk-7-jre或Orcale Java,由於Java
加密有出口限制,須要在官網下載一個patch的jar替換原裝的,因為不翻牆的關係,
便沒有測試,這裡須自行Google

連接不上問題

通常分為下列幾點

1) 3128端口被其它程序佔用
    解決辦法:大殺器客戶端轉端口,或者佔用該端口的程序轉端口

2) 個人防火牆攔截客戶端對外連線
    解決方法:允許大殺器客戶端連接互聯網

3) 連接上服務器,但沒有內容或顯示錯誤
     解決辦法:檢查後端服務器是否正確設置,例如服務器3128端口被佔用,大殺器
     服務器是否運行,端口是否被佔用等等

4)  不要用IE,請盡量使用Chrome/Firefox/其他能設置HTTP代理的瀏覽器

手機

暫時大殺器只有2個安卓客戶端支援,一個是官方客戶端,另一個是@postern_overwal
推油開發的多協議第三方客戶端,支持大殺器,暫時是實驗性功能。

官方客戶端只支援能設置HTTP代理的apps,而Postern是VPN模式,可以使用類似iOS下
A.Big.T/Surge/Shadowrocket的規則,或者全局代理,就像影梳的使用方式。

先說石斑魚大爺官方客戶端,下載後安裝,填入所需資料,如圖






















然後前往安卓開源市場,下載客戶端,裡面有些可以設置代理的Apps,其中有Twidere
,這個和Twitter官方客戶端一樣,可以設置代理,在手機安裝好後,開啟大殺器客戶端
如圖























然後打開Twidere,撥開選單,點設定























按地球的圖示,點選高級






















開啟『為所有網絡請求使用代理』






















選取HTTP代理,選取『代理伺服器主機名』,填入127.0.0.1




選取『代理伺服器埠』,填入3128



正常便可通過官方客戶端連接推特

推特官方客戶端沒有測試,應大致相同,請自行摸索。


只有推特APP遠不足夠,但由於安卓支持設置HTTP代理的apps不多,這樣
有些網站須用瀏覽器訪問網站手機網頁版,在安卓開源市場已知有兩款可
以設置代理的瀏覽器

IceCatMobile + Proxy Mobile插件


安裝好icecatmobile,利用它打開Proxy Mobile插件網址安裝,點擊右上角的按鈕,
點選『工具』





















然後選取『附加元件』























選取Proxy Mobile























填入正確的資料























這時可以訪問這個網站,看看IP是否改變了?
























不過這個組合有時失靈,瀏覽器會不經代理接上網站,於是找了另一個代替


Lightning Browser


這個也是在安卓開源市場下載,它自帶代理設置,無須使用插件,按右上角
按鈕,找到"setting"





















點選"General Setting"






















點選『HTTP Proxy』






















選擇『Manual』






















填入資料






















按OK,訪問網站測試一下是否使用代理























以上這些都可以使用大殺器客戶端上網,可能有更多apps能設置代理,就等網友
慢慢找尋了。

不過官方客戶端還是限制多,幸好推油@postern_overwal,他也是商業梯子供應商
開發了PosternAndroid下的系统全局代理Proxifier,這個是用VPN模式,不須要在
客戶端設置代理使用,可以使用規則匹配網址,或者全局代理。

安裝好客戶端後,打開Postern,點選配置代理
























選取『大殺器GFW.Press(實驗性支持)』
























填入服務器的資訊,保存後點選『配置規則』,這裡選單有四個選項
























只測試了直連和通過代理連接的方式,現在使用規則,打開『通過代理連接』
裡面已有一些網址,可自行添加,減少便直接編輯

























代理選回已設置好的大殺器,如上圖,編輯不要用中文輸入法去刪除或增加,用
系統自帶的英文輸入法,設置後保存,如用規則型式應是這樣
























如果是使用全局的,設置好後是這樣,默認規則和通過代理都是『通過代理』
























我因為測試,只在規則加了這個網站測試































然後全局測試,使用HKGolden這個不能設置代理的app連接網站























在VPS上監察是否通過服務器連接
























正常連接,由於Postern只支援Connect方式,而Get未有支援,後端服務器必須配置
為可用CONNECT 方式才成,這看安裝的後端代理是那個。

另外建議設置DNS代理,不然會使用ISP的DNS,如圖

























然後訪問一下這個網站,測試有沒有使用ISP的DNS服務器












































這些測試非常簡陋,錯誤在所難免,另外因為無牆,不能測試它的智能DNS,據作
者說撞牆的網址會加入到代理規則,這得由網友測試了

最後感謝這些推友為抵抗資訊審查,做出各種工具做福人群,無私地分享,暫時iOS
上還未有可用的客戶端,不過相信很快出現了。

由於大殺器開始有點人氣,github上出現其他版本的GFW.Press,有興趣的網友自行
研究

:)

2016年5月31日 星期二

說說VPS和github的一些

最近對gfw.press這個項目感到有點興趣,由於這個項目由Java編寫,要有較高檔次的VPS
才能運行良好和發揮威力,手頭的VPS都是低檔次,最多RAM的只有256M/512M vSwap,
於是物色新的VPS,並準備重新編寫一個安裝腳本,把gfw.press3proxy設為系統服務。

一般都會到這些網站找尋便宜合適的VPS,通常會在下列網站找尋資料

http://vncoupon.com/
https://lowendbox.com/
https://lowendtalk.com/
http://lowendstock.com/

那天真是有鬼了,在推特看到一個外籍推友的圖片,是在http://cloudatcost.com/搭建
了一個服務器的截圖,於是上網站看一下,發覺價格便宜,頭腦一熱,沒在
google找尋一下用家評價,就購買了Developer CloudPRO 2的計劃,$70美元
one time pay, 付款後等收電郵,這段時間上網查找這公司資料,發覺負面評論很多
,有評論更指這家服務商有可能走路,不過反正價格不貴,心想用上2年都賺了,
於是沒理會。

收到電郵取得VPS資料,上它的CP安裝OS,順便測試一下速度和取得系統資訊,
一般會下載這個腳本,由本地上傳到VPS測速通常是使用這條命令

dd if=/dev/zero bs=1M count=100 | ssh root@vps_ip -p vps_port 'dd of=/dev/null'

輸入 100+0 個紀錄
輸出 100+0 個紀錄
複製了 104857600 個位元組 (105 MB), 26.1508 s, 4.0 MB/s
204800+0 records in
204800+0 records out
104857600 bytes (105 MB) copied, 21.1581 s, 5.0 MB/s

這就大約可以評估VPS上下行的速度

經測試後發覺http://cloudatcost.com的VPS速度非常一般,心想自己不翻牆,就算了,
反正是測試使用,就用舊腳本在這個KVM的VPS搭建了一個gfw.press ,速度一般,
算是穩定,在推上找了5位推友準備測試三個月,看看是否真的能有效躲過GFW,
誰知只用了六天,服務器就hang了,這些事很平常,只要向供應商發support ticket
要求修復便成,誰知發了2天還沒有收到回郵(自動回覆都沒有),服務器還是當掉
不能用,再發一次,整天沒有回音,不對頭了,因為是通過PayPal付款,於是通過
PayPal發出詢問,等了一天,還是沒回音,服務器依然不能使用,再上PayPal糾紛
中心,這次要求退貨,退款$65美元,PayPal限定供應商於27-5-2016之前必須回應,
這段時間依然沒有回音,直到26-5-2016忽然收到供應商電郵,謂我已close support 
ticket,請評價他們的服務,附上URL連結,我根本沒有close ticket,一看日期就猜
到他們希望我點選評價,那個也可以,用來作為27號答覆PayPal,於是不理會,
也不登陸VPS CP,ssh到VPS,是回復了,但所有資料全部消失,顯然是供應商自
行幫我安裝OS,也不做甚麼,退出後不理會,到了28號,收到PayPal來信謂栽決
把$70美元在五個工作天內退回到我賬戶,這事算是結束了。

這個事得出的教訓

1) 購買VPS之前須要在google查一下用家評價
2) 便宜沒好貨
3) 盡量使用PayPal付款,雖然手續費是高一點,但當有問題時可以通過糾紛中心申訴,
    可以追回款項。

以上是我的經驗,希望對選購VPS的網友有幫助


說完VPS的事,這就說說最近我在github開了的代碼倉庫 ,申請是因為網友說在Dropbox
取得腳本麻煩,建議在Github放置安裝腳本,方便使用,作為非IT佬的我就去申請了一
個免費賬號。

這段時間在代碼倉庫設了4個Repositories,並新增和改寫了一些安裝腳本,在readme.md
很難寫得太多,有須要在這說明一下安裝了甚麼,和安裝到那裡,怎樣使用等。


主要放置和gfw.press相關的腳本

1) gfw3proxy.sh

    這是以前文章gfw.press安裝腳本(使用3proxy作後端代理) 裡的腳本,修正了一些
    錯誤

2) gfwtiny.sh 

    全部改寫,並改名字,如在debian 7 | ubuntu 14.04使用大殺器配合tinyproxy,請使用
    這個新版安裝

3) gfw3proxy_init.sh

    這個是全新編寫的,安裝腳本會把大殺器和3proxy設為系統服務,安裝後大殺器的
    目錄在/usr/local/etc/gfw.press ,如需要更改user.txt新增端口或刪除端口,請轉到這目
    錄內,腳本預設了一個用戶。

    這個腳本不再使用大殺器的啟動腳本,改為由/etc/init.d/gfw.press 控制開關,系統
    啟動時會自動使用這腳本啟動服務,使用方式為

    /etc/init.d/gfw.press start 啟動大殺器
    /etc/init.d/gfw.press stop 停止大殺器
    /etc/init.d/gfw.press restart 重啟大殺器
    /etc/init.d/gfw.press status 查看大殺器的運行狀況

    由於不知道網友的VPS有多少RAM,和之前的腳本一樣,把gfw.press/server.sh內的
    參數-Xmn1024M -Xms1280M -Xmx1280M 全部刪除,照原裝的命令需要1.5GB RAM
    以上的VPS才可運行,但許除參數速度會下降很多,請根據你的VPS的RAM數量,
    編輯/etc/init.d/gfw.press ,例如512M RAM的VPS ,找到

     _java="${_java}-classpath `find ./lib/*.jar | xargs echo | sed 's/ /:/g'`:./bin"

     改為

    _java="${_java}-Xmn256M -Xms384M -Xmx384M -classpath `find ./lib/*.jar | xargs echo | sed 's/ /:/g'`:./bin"
 

      (補充:後來試了,在啟動腳本加入參數啟動不了,原因未找到,在server.sh更改正常)
      (補充:分拆了的獨立init腳本在這裡)
      (再補充:問題解決了。直接修改大殺器啟動腳本server.sh,init script
       使用server.sh啟動服務,並上傳一個修改server.sh的腳本到這裡,獨立
       設置大殺器為系統服務須用這腳本修改後,那個init script才有效,
       使用方式

       bash modify.sh /path/to/gfw.press/server.sh

       使用gfw3proxy_init.sh無須理會,代碼已修改)

      儲存後重啟大殺器即可生效,更多RAM如此類推,另外的兩個腳本則在server.sh改動

      3porxy的目錄在/usr/local/etc/3proxy ,如須查看log,更改3proxy.cfg ,請轉到這目錄
      內。3proxy的開機啟動腳本為 /etc/init.d/3proxyinit ,使用方式為

      /etc/init.d/3proxyinit start 啟動3proxy
      /etc/init.d/3proxyinit stop 停止3proxy

      和gfw3proxy.sh 安裝的元件相同
      

4) uninstall.sh

    由於大殺器對VPS要求高,很多網友在低配置VPS跑起來比shadowsocks還慢,就想
    刪除,於是避免重複回答,寫了這個腳本,執行後可把上述3個腳本任何一個安裝
    的元件全部刪除,回復到未安裝狀態,如須要刪除大殺器和後端代理,請使用這
    個腳本。

5) safepw.sh

    只是一個按大殺器要求隨機產生密碼的腳本,用來增加用戶時gen密碼



這目錄內就是之前文章shadowsock-libev一鍵安裝和升級腳本 , 
的腳本,少部份代碼改正



這目錄內的腳本有兩個,一個全新編寫,一個是以前文章stunnel+tinyproxy一鍵腳本
重新改寫

1) s3proxy.sh

    腳本已stunnel + 3proxy搭建一個HTTPS/SSL代理,使用用戶認證,3proxy的目錄和
    大殺器的相同,啟動腳本相同,如須增加或減少用戶,請在3proxy.cfg內找到
    users user1:CL:Mypassword1

    例如新增

    users user1:CL:Mypassword1

    在其下加一行

    users user1:CL:Mypassword1
    users user2:CL:Mypassword2

    然後重啟3proxy,執行

    /etc/init.d/3proxyinit stop && /etc/init.d/3proxyinit start

    即可生效

    此腳本為未來購買域名後以letsencrypt免費SSL證書取代自簽名證書的stunnel.pem

2) stiny.sh

    就是文章stunnel+tinyproxy一鍵腳本的腳本全面改寫,之前版本因有6年沒寫腳本,
    比較混亂,重新改寫並改名



這個目錄是文章來自CN的你裡的腳本,並新增一個用來釋放被鎖的IP

1) badip.sh

    用來封鎖錯誤連接ss-libev 51次以上的IP,放在cron job使用

2) counter.awk

    用來統計shadowsocks-libev產生的log內每個IP的錯誤連接數

3) ip_free.sh

    釋放被badip.sh封鎖的IP,在cron job使用

如果你有512M或以上的VPS,安裝大殺器請使用gfw3proxy_init.sh ,這個使用上較為
方便,其實舊的兩個版本已沒有甚麼用途了,如果之前安裝了由舊腳本安裝的大殺
器,請下載uninstall.sh,先刪除舊版本安裝的元件再次安裝。

另外請注意端口有否被佔用而導致安裝腳本失敗,須然我是盡量在一個範圍隨機挑
選端口,有時可能會用上相同端口而安裝失敗,不過沒有必要安裝太多梯子,只挑
一至兩個安裝足夠了。

最後付上由搬瓦工VPS編寫的shadowsocks一鍵安裝腳本 , 這個不是我編寫的,是供
應商編寫的腳本,所以只留在DropBox ,或者有光顧這個供應商的網友有用

:)

2016年5月25日 星期三

github開張

申請了github,上傳了部份腳本,及新增一個gfw.press+tinyproxy腳本,重新編寫版本,
不再支持NAT Share IPv4 VPS ,請訪問

小弟的github代碼倉庫

:)

2016年5月22日 星期日

來自CN的你

小弟部署的shadowsocks版本通常為shadowsocks-libev,通常安裝後會在/root目錄設置
一個名為ss-json,製造約干json的描述文件放到裡面,每一個不同端口和密碼,以腳本
一次啟動它們,並在 /etc/rc.local設為開機啟動,並會把ss-libev的日誌寫到/root/ss.log,
方便查找問題。

我有十個VPS以上,有時用戶報告服務器連不上,便會檢查ss.log看看是否服務器被牆,
還是用戶黏貼密碼,使行末多了\r (*nix行末是\n , windows是\n\r),這些看不到的字符,
服務器是看到的,便認為密碼不對,拒絕轉發流量,或是看看是否多天沒人使用,這
就要另找用戶測試是否被牆,通常三數個用戶不同地方連不上,IP是被牆了。

檢查的時候總會發現一些不明來歷的IP,通常來自CN,不斷嘗試連接服務器,日誌會
記錄下來,型式是這樣

2016-05-22 14:41:46 ERROR: invalid password or cipher
2016-05-22 14:41:46 ERROR: failed to handshake with 39.82.187.54

簡單執行 grep -B1 '39.82.187.54' ss.log 便能看到,於多枚VPS都有這樣的情況,不管有
沒有招收用戶,只要搭建起來這些不速之客便會探訪,這樣我寫了一個小腳本,統計
這些IP的錯誤連接數
這是其中一個服務器的數字,應該算是暴力破解了,到另一個服務器統計IP的錯誤連接
數字,並把IP導入文件,如圖

這枚服務器不算多,最高是200+ CN的IP,錯誤連接數達到10000+,直到我重灌系統之
前,於是找出這些IP來源,使用一個很久前在DDWRT寫的小腳本 ,執行後如是
這就不禁令人懷疑,這些IP是否來自GFW?很多都來自相同的IP段,而且似乎是自動
程式,那個嘗試連線,達到3000+錯誤的IP已經連續攻擊了3天,除了晚上會離開,
差不多是以7-11的時間不間斷攻擊。其實shadowsocks各版本開發者都已知這個情況,
並分別提出解決方案

以shadowsocks-libev解決方法是一次性認證,在運行時加入 -A 參數,開啟了OTA,沒通
過認證的拒絕連接,Python版的shadowsocks給出autoban.py ,封鎖這些惡意IP。

我是libev用戶,解決方法大約3個

1) 開啟OTA,執行時這樣

    nohup ss-server -A -u -v -c /path/to/whatever.json &>> /path/to/ss.log &

2) 足夠強度的密碼,無視這些惡意IP攻擊,反正破解不了
3) 寫一個類似autoban.py的腳本,達到某個數目的錯誤,便自動把該IP封鎖。

這三個方式以第一個官方給出的解決辦法最佳,直接拒絕連接,一了百了,杜絕這些惡意
IP的攻擊,也不知它們是否探針還是甚麼。不過我有超過100+用戶使用由我提供的免費ss
服務,不知道他們用的是甚麼客戶端,而目前的ss客戶端並不是每一個都支持,ios的客戶
端好像暫時(這篇文章發佈前)只有shadowrocket支援,總不可能每個人都問用甚麼客
戶端,個別開啟OTA,這也不能杜絕沒有開啟OTA的端口受到攻擊。

第二個方法是我目前使用的方式,不予理會這些惡意IP,在大部分客戶端沒有支援OTA之
前,會一直使用下去(非常無奈的辦法)。

第三個是仿效autoban.py ,寫一個簡單的bash腳本,放到cron裡,定時監測由ss-libev '-v'
參數產生的日誌文件,達到某一數目便調用系統iptables把該IP banned掉,到某一時間內
便給它們『出獄』,這樣可減緩攻擊的速度,反正閒著無事,寫了連測試也是花很少時間
,便寫了這個名為badip.sh放到cron裡實驗。

這個以封鎖為主的方式不能解決2個情況:『誤傷填錯密碼的用戶』和『分配到被封鎖IP
的用戶』,如果不能使用第一個和第二個解決辦法(不能無視被攻擊而不採取行動),那可
在vps以root下載我的腳本

wget --no-check-certificate -O badip.sh \

然後執行crontab -e ,例如每15分鐘檢查日誌一次,加入

*/15 * * * * /path/to/badip.sh

我測試時是這樣

*/15 * * * * /root/bin/badip.sh

如果改為20分鐘便這樣

*/20 * * * * /path/to/badip.sh

腳本預設錯誤疊加50次便封鎖該IP,如果不適合你的要求,請在腳本找到

if (ip[x] > 50)

把數字改為你覺得合理的,定50是因為考慮輸入錯誤密碼的用戶,如果不介意誤傷,可
設少些。另這腳本主要靠ss產生的日誌作為依據,我是在家目錄裏,如果文件不是在那
目錄,在腳本找到

logfile="$HOME/ss.log" #change if it is not your ss.log directory

改為你的儲存的目錄和正確的文件名,例如

logfile="/etc/shadowsocks-libev/ss.log" #change if it is not your ss.log directory

執行的ss-server命令必須有'-v'參數,例如

nohup ss-server -v -c /path/to/whatever.json &>> whatever &

我們再利用crontab -e 命令,把這些惡意IP一段時間便放監,同時清空日誌,重新計算,

0 3 * * * /sbin/iptables -F
0 3 * * * : > /path/to/ss.log

這就在凌晨3:00清空iptables列表和日誌,這可避免封鎖列表越來越長,令系統效率
減低。如果同時安裝了fail2ban程序,也會把由fail2ban投入『監獄』的IP釋放,不想這
樣,請自行參考iptables手冊設置cron job分別處理,這裡不囉嗦了。

這個腳本手動執行會是這樣
下圖是執行的結果,大於50錯誤次數的IP封鎖了,再運行它會檢查是否在封鎖列表中,
如果放在cron沒有提示顯示的
目前為止我是採取第二個方式,直到大部份ss客戶端支援shadowsocks-libev的OTA為止。
第三個方法只是給不能採用1和2方式的朋友多一個選擇,直到所有/大部份客戶端支
援shadowsocks-libev的OTA臨時解決方案。

:)

2016年5月18日 星期三

各種翻牆工具的個人淺見

前言

以前曾有一段日子旅居深圳,對GFW的理解和使用各種工具翻牆算是有點經驗,
雖然多年前已回到牆外,但偶爾也須要進入匪區,故此還是保持了解各種工具,
就曾經搭建過或使用過的說說


目前還有效的工具

1) shadowsocks

   這個還是現在最熱門的工具,暫時來說沒聽到大面積陣亡
   優點

   多平台,服務器可部署到由路由器到任何系統,版本眾多,輕盈的shadowsocks-libev
   可在64M/0 vswap的Linux VPS運行,而不會跑不動。客戶端也是多平台,路由器,
   電腦到移動裝置,幾乎涵蓋所有系統,可以說是install once, Fuck GFW everywhere
 
    缺點

    因為只使用預定密鑰作為客戶端和服務器的唯一辨別身份方式,有可能會遇上中間人
    攻擊,客戶端連上是偽造的目標服務器,在服務器方面的缺點更明顯,因為只用預定
    密鑰,於是錯誤的密碼或加密方式服務器照樣回應客戶端的請求,只是不連接到目標
    網站,有無聊者用字典窮舉密碼,而不是拒絕連線,日誌上就出現很多ERROR,我的最
    高萬多個錯誤,共二百多個來自CN的IP試著連線,shadowsocks-libev可以開啟一次性
    認證,但很多客戶端不支援,例如iOS的Surge,A.Big.T都沒有,變成無法使用這一方式
    ,如果寫個腳本紀錄日誌的錯誤次數,達到某一數目調動iptables封鎖,又會誤傷填錯
   密碼的用戶,或者是分配到被封的IP而連不上服務器。

    多用戶無法簡易控制用戶訪問的端口,一個人或三數好友使用時問題不大,但用戶有
    一定數目時,如果有不良用戶通過代理hack其他服務器的sshd,或者濫發郵件,端口掃
   描等等行為,有可能是收到VPS供應商投訴或封權才知道,要防止可能要設置複雜的
   iptables規則作限制,另外限制連接數也要用上iptables,例如要限制14701端口的連
   接數,你得輸入,例如32個
 
   iptables -A INPUT -p tcp --syn --dport 14701  \
   -m connlimit --connlimit-above 32 -j REJECT --reject-with tcp-reset

   這是shadowsocks-libev官網的舉例,由於shadowsocks一端口一用戶方式,
   如果有20個端口要輸入20次或寫腳本自動化,相當麻煩,也不是一般用
   戶處理得了。

   結論

   還是推薦為首選搭建的工具,原因還是那個,輕盈,有效,多平台,不論低端VPS到
   高端VPS都可部署,應對無聊人士窮舉密碼方式是設置16位以上字符長度的密碼,不
   要理會就成,用命令隨機產生比較難以破解的密碼,例如:

    head -c 512 /dev/urandom | md5sum | base64 | cut -c3-18

   每一端口配上不同密碼

2) HTTPS/SSL 代理

   這個方式存在很久,暫時仍然有效

   優點

   通常以stunnel作為加密隧道,後端可自由配搭不同的代理,只要支援CONNECT方式
   的都行,我就搭建過配合squid3,3proxy和tinyproxy,這些後端已很成熟,能控制用戶訪
   問的端口,或是服務器接受的連接數,也可設置用戶認證方式,電腦上無須使用客戶
   端,現在大多數browser支援HTTPS代理,在一些限制嚴格的公司內,如不能下載安裝
   軟件,控制用戶訪問的網站,端口,可以購買商業用的SSL證書,設置用戶認證,把
   代理設置在443端口,公司不能封這端口,只須在browser設置代理就能突破公司封鎖,
   而且網管不知你去了那裡。

   這個方式也是多平台,路由器刷了第三方韌體,例如Asuswrt-Merlin,又能擴展entware
   環境,就可搭建服務器在路由器,使用的資源也不多,也可以設置stunnel為客戶端連
   接服務器。移動設備也有支援,ios的Surge和A.Big.T都有支援http with tls ,安卓也有
   tls-tunnel等app,只是不太好用。

  缺點

  部署麻煩,如果使用IP + 自簽名證書,須要自己gen,同時要把證書導入browser或系統
  ,非常麻煩,而且據說GFW能分辨證書,會按照類型封殺服務器,據說現在還包括免費
   的有效證書,例如Letsencrypt ,通常商業不會用這些,不能混跡其中,危險性便
   增加了。
   另外有說SSL握手特徵明顯,GFW容易察覺,shadowsocks的作者clowwindy
   就不建議使用SSL翻牆, 按我看原文 。
   個人淺見以數據安全和防止中間人攻擊就高於shadowsocks,對於窮舉密碼的無聊人仕
   直接拒絕連接,有效得多,而且有網友使用還沒見到大量被封。

   搭建成本高昂,為了比較難被封鎖,除了VPS的費用,還要購買域名和証書,這無疑比
   較其他方式使費較多,使用域名連接一旦遇到DNS污染,還得修改hosts文件把域名指向
   IP抵禦,如果封的是服務器IP,全部投資報銷。

  結論

  我還是推薦搭建作為輔助工具,原因是少數用戶使用我搭建的SSL代理至今還沒有連接
  不上的報告,這些有用Letsencrypt證書或自簽名證書,如果條件許可,請購買商業用的
  SSL證書配合域名搭建,可以混跡其中使GFW不會亂封,openvpn之所以失效就是特徵
  明顯,公司不會以這個協議的VPN作為數據安全通道,於是便大面積失效。使用這類
  SSL代理最好是三兩好友算了,我經常懷疑GFW會根據加密連接數目主動檢測是否翻牆
 ,為了長久翻牆,不要超過三個用戶,最好自己私用。

  另外前端可改為較新的nghttp2 點我 點我 據說速度驚人,但我未搭建過。

3) Cisco IPSec VPN

    目前算是很流行的VPN,暫時有效

    優點

    以StrongSwan搭建服務器,多平台,由路由器到各種*nix系統都可搭建,客戶端也是
    涵括各種系統,移動系統2大主流還原生支援,使用共用密鑰配合用戶認證,連客戶
    端都不用安裝,而且穩定性高,兼容性好,使用方便加設置容易,數據安全性高。這
    個VPN協議為商業公司使用的方案之一,混跡其中可使GFW不敢亂封,當然在共匪開
    大會時會有嚴重干擾。

    缺點

    全局代理,不能分流,訪問匪區網站時等如繞了地球一圈,多用戶的時候難以防範不
    良用戶,例如作為BT代理,hack其他服務器等等,如要限制有可能要設置複雜的規則
    ,限制用戶訪問的端口和下載的文件。

   搭建麻煩,單是那一堆iptables規則足夠麻煩,使用固定端口,點我看官方論壇討論
   這被封鎖機會大增,現在是GFW無法檢測關鍵字,而且是商業上公司常用VPN,才
   得以不死,據說GFW的IT狗已著手研究檢測IPSec VPN協議,以求檢測到流量特徵和
   關鍵詞。

   小弟第一次搭建時看了多篇中英文教學,搞了兩天才搭好,後來發現有人寫了一鍵
   安裝腳本,第二個服務器干脆用人家的腳本好了,免頭痛 點我取得腳本

   結論

   一般我會在服務器搭建2種工具,shadowsocks-libev是主力,如果是用窮鬼級NAT VPS
   ,就配上自簽名證書+IP的SSL代理,因為搭建不了IPSec,端口不能改,獨立IP的正常
   VPS,則選擇IPSec VPN 作為第二工具,以ss-libev和IPSec配搭,使用資源不多,一枚
   openvz 128M/128 vswap 的vps已經足夠有餘,在iOS下會隨時遇到奇怪的shadowsocks
   客戶端問題,這時較穩定的IPSec便會派上用場,對於使用iPhone的朋友,分享給他們
   使用,客戶端不須要付款,不必下載,對於女性朋友,0技術更是恩物,只要截一張
   設置的圖,她們就會使用。故此我是推薦搭建的選擇方案之一。

4) Cisco AnyConnect VPN

    在iOS裝置上,未有shadowsocks客戶端出現前,幾乎是ifans的標配工具,目前還是有
    效,未聞有大面積陣亡案例。

    優點

    以ocserv搭建,非常穩定,無論客戶端還是服務器,可以分流,在iDevice下載了 Cisco
    Anyconnect 客戶端,可以使用證書連接,也可以用戶認證連接,或是兩者相加,不同
    於IPSec,端口可以自定,可用域名+有效SSL證書搭建,商業上公司常用VPN協議,據
    說是Cisco力推的VPN協議,混跡其中,GFW不敢亂封,我自己搭建了一枚,用域名加
    Letsencrypt證書,以用戶認證登錄連接,端口設在443,客戶端也是多平台,由路由器
    的vpnc客戶端到任何主流系統都能使用

    缺點

    搭建困難,須有一定技術,這也是花了我不少時間搭建的貨色(技術不好的原因),幸
    好有好人寫好了一鍵安裝腳本,如果不想頭痛 點我免頭痛 ,第一次搭建時我自己手動
    搭建,重灌系統後使用上面腳本搭建,並自行配上letsencrypt免費證書取代自簽名
    證書。速度不是特別出眾,感覺上部署在同一服務器上的shadowsocks比它還快速。

    結論

    這也是推薦的輔助工具,在一個服務器上除shadowsocks外可考慮部署,可因應不同情
    況使用,在一枚openvz vps 128M/128M vswap 運行它與shadowsocks,
    在debian 7 x86下綽綽有餘,耗用資源不多

5) gfw.press大殺器

    最新出品的工具,號稱除白名單外,再也不能破解的協議,開發者是推特趙國劣紳石
    斑魚大爺 @chinashiyu ,其官網是http://gfw.press ,這是他的github代碼倉庫

    優點

    確實非常穩定,我搭建了一枚在cloudatcost,順便測試自己的腳本,有5位推友幫忙
    測試,多天正常使用,直到服務器挂了前都沒有受到任何干擾,有測試用戶連續
    使用10小時沒有斷線一次。
    附上推友@FWT_T_O_O源碼分析,後端自由配搭,相當靈活。

    缺點

    以Java編寫的程序,對VPS有一定要求,少於512M/512M vswap的openvz vps最好
    不要嚐試,跑不動的機會極高。文檔不足不利第三方開發和搭建,
    除電腦系統客戶端外,移動系統只有安卓客戶端,iOS用戶暫時無緣。
    部署並不十分困難,由於它只是一條類似stunnel的加密隧道,搭建的麻煩在於
    後端代理,如果是debian base 用戶,或者可以試試小弟編寫的簡陋腳本安裝

    結論

    如果shadowsocks失效的話,小弟首選轉戰這個,再配搭HTTPS/SSL代理或
    IPSec VPN在電腦上和iDevice使用,有較強勁VPS的朋友,
    甚麼虛擬方式的VPS也可以試試搭建,如果有高手志願者以Python/C/C++等等
    較少資源改寫,相信會火起來。

6) V2Ray

    這也是較新的工具,也是新一代配上混淆流量,躲避GFW流量特徵檢測,並且兼容
    shadowsocks協議的工具,部署它可除可使用V2Ray外,也可使用shadowsocks而無須
    另外安裝 手冊在這裡 v2ray project官方github代碼倉庫

    優點

    這個我部署了一個在低階VPS上,後來因使用不常使用,且低階VPS跑起來吃力,就
    把它刪除了,搭建非常簡單,在Linux VPS上以root執行以下命令就完事了

    bash <(curl -L -s https://raw.githubusercontent.com/v2ray/v2ray-core/master/release/install-release.sh)

    配置文件類似shadowsocks,如果有搭建ss服務器的朋友,很容易就會配置服務器文件,
    算是無痛轉移,這個在搭建後測試期間相當穩定,也沒有受到任何干擾或失靈。

    缺點

    和gfw.press一樣,對於VPS要求較高,由於以golang編寫,官方建議一人使用VPS最少
    128M RAM,更多用戶如此類推,2 vcore的VPS較能發揮速度優勢,客戶端暫時只有電
    腦系統,在移動裝置只能使用兼容的shadowsocks

    結論

    同樣,如果shadowsocks失效,這也是我會轉戰的目標,配搭其他的工具,在電腦和移
    動裝置使用,電腦上主力使用,移動裝置使用IPSec,AnyConnect或HTTPS/SSL代理,如
    果網友的VPS夠強勁,建議搭建一枚,即可使用v2ray和shadowsocks兩件工具,
    電腦和移動裝置都可使用

7) lightsword

    以nodejs編寫的代理,客戶端支援電腦和iOS,iOS客戶端售8元港幣,
    官方github代碼倉庫

    優點
   
    小弟在一枚256/512 vswap openvz vps搭建過,並購買了iOS客戶端測試,抱歉,完全
    沒有發現有任何優勢,大概是shadowsock的nodejs改寫版本,客戶端並不兼容SS

    缺點

    以nodejs編寫的程序,和Java一樣,RAM Eater ,低階VPS相當不利,功能上沒有
    出彩的特點,用於混淆流量的加密只支援aes-128/192/256-cfb , 而沒有較輕量的
    chacha20和rc4-md5, 安卓沒有客戶端,iOS客戶端售價便宜,
    本來是針對當時ios的ss客戶端Surge,後者達到天價的$99美元,但隨著
    shadowrocket,A.Big.T只售8元港幣,這個優勢也沒有了,ios客戶端到我刪除之前,
    就只支援全局代理。
    服務器方面,以python shadowsock連系統70個連接只用3X RAM左右,但lightsword在
    同一VPS相同條件下,已經使用80M以上記憶體,而且還不斷增加,其實以前也是有
    shadowsocks nodejs版本,後來clowwindy停止開發,原因 ,nodejs官方解釋
    服務器沒有UDP轉發,沒有一次性認證,沒有輕巧的加密方式,官方文檔不全,配置
    描述文件在我刪除服務器前沒看見,我是把命令行參數寫到腳本使用,唯一是搭建不
    難,官方有一鍵安裝腳本,自行搭建只要安裝了nodejs,以npm即可安裝。
   
    結論

    在沒有大改變之前,不建議搭建或使用。

8) shadowsocks-R

    號稱根據shadowsocks弱點加以「改良」的版本,支援電腦客戶端和部份移動裝置,
    這是官方github代碼倉庫

    優點

    沒有使用或搭建,說不出來

    缺點

    移動裝置客戶端支援不多,其他同上

    結論

    本人不會作出推薦或者不推薦的個人建議,作為用家未來也不會部署服務器或使用,
    如果網友有興趣,自行往官網看手冊文檔,這裡給出shadowsocks和shadowsocks-R的
    網絡事件和安裝腳本
    关于ShadowsocksR和Shadowsocks的安全性
    ShadowSocks协议的弱点分析和改进 #38
    对GPL协议的违反 #28
    ShadowsocksR一键安装脚本

最後,這裡並沒涵蓋所有工具,這些意見非常主觀,而小弟也非IT人,只是普通用家
的個人體會,錯誤和偏見是絕對的,不須要用來參考,當作是笑話閱讀最好,然後給
出「哦」一個字就可以了。

:)

 
 

2016年5月15日 星期日

shadowsock-libev一鍵安裝和升級腳本

安裝腳本 ss-libev-install.sh 用來安裝,是把文章Shadowsocks + TOR 一鍵安裝腳本
的shadowsocks分拆出來改寫,已測試,在nat share ipv4 vps或獨立ipv4的vps上安裝
成功。

使用方法

以root登錄VPS,執行

wget --no-check-certificate -O ss-libev-install.sh \
https://www.dropbox.com/s/mtare61xbd7brim/ss-libev-install.sh?dl=0

完成後,chmod +x ss-libev-install.sh ,根據你的VPS類型,如果是獨立IPv4的VPS,
執行

./ss-libev-install.sh -s

如果是窮鬼級NAT share IPv4 vps,就是只有20個指定端口轉發,共用IPv4的VPS,執行

./ss-libev-install.sh -n

源碼按這裡

shadowsocks-libev是用源碼編譯成deb安裝,原因是debian base os的源更新落後,
所以從github取得源碼編譯,這樣版本會是最新的,由於沒通過apt-get從軟件源
安裝,不會自動升級,這就寫了升級腳本 ss-libev-upgrade.sh

使用方法

以root登錄VPS,執行

wget --no-check-certificate -O ss-libev-upgrade.sh \
https://www.dropbox.com/s/2w23k175e1zm8mb/ss-libev-upgrade.sh?dl=0

完成後,chmod +x ss-libev-upgrade.sh && ./ss-libev-upgrade.sh

腳本會檢測現時版本是否最新,並自動執行更新程序,已測試,ss-libev 2.4.5成功
升級到2.4.6

源碼按這裡

:)

2016年5月9日 星期一

gfw.press安裝腳本(使用3proxy作後端代理)

gfw.press + tinyproxy 一鍵腳本發表後,有小部分網友使用安裝,
在腳本差不多完成時,會卡在./server.sh &這個代碼,使得用戶
按Ctrl-C中斷腳本運行,其實腳本已經安裝好了服務,是因為
gfw.press/server.sh使用nohup java ......XXX &,把stderr導向stdout
再寫入server.log,而在腳本執行變成了sub shell無法按Enter鍵繼續
執行餘下代碼。

由於gfw.press使用Java,一般VPS較少記憶體應付不了,根據項目
作者石斑魚大爺@chinashiyu 以為我們的VPS最少2GB記憶體
(高估網友和他一樣,錢多),server.sh腳本有java參數-Xmn1024M
-Xms1280M -Xmx1280M ,他說刪除就可以,反正還是低檔VPS
跑不起來,就不改之前的腳本,重新編寫,後端以3proxy作為
代理,也就比Tinyproxy花多一點點記憶體,但好處是多用戶可
以控制用戶訪問的端口,有效避免不良用戶通過代理進行非法
行為,如濫發郵件,端口掃描等等。

使用方法

以root登陸VPS,執行

wget -O gfw3proxy.sh --no-check-certificate \
https://www.dropbox.com/s/vuj2rpfpjlnkawu/gfw3proxy.sh?dl=0

然後輸入

chmod +x gfw3proxy.sh && ./gfw3proxy.sh

按這裡檢視原碼

這腳本不再支援NAT VPS,原因是基本跑不了,所以干脆連代碼
也省去,另外根據作者建議,腳本會把記憶體相關參數刪除,原
版未改動的server.sh會變為server.org,在gfw.press/ 目錄內,如果網
友的VPS夠強勁,可以用回原版的server.sh,在其目錄下輸入命令

mv -f server.org server.sh

這次腳本不再執行./server.sh ,而改為腳本完成後由用戶輸入,執行

gfw.press/server.sh

即可,這是因為避免運行腳本卡在這點上,也不清楚Java的標準
輸入/輸出是怎樣,把server.sh代碼抄到腳本內執行還是要用戶
按Enter鍵,那干脆由用戶輸入執行server.sh好了,執行後它還是不
會回到命令行介面,按一下Enter鍵即可。

3proxy會登記成為系統服務,如要停止運行輸入

/etc/init.d/3proxyinit stop

須要運行輸入

/etc/init.d/3proxyinit start

這個3proxyinit是沒有restart選項,如要停止再運行服務請執行上述
兩條命令。

3proxy的執行檔案和設置文件都在/usr/local/etc/3proxy/目錄內,如須
要更改設定在那裡編輯3proxy.cfg

3proxy設置用戶可訪問的端口為

80-88,8080-8088 #http
443,8443               #https
5222,5223,5228    # whatsapps,skype等等即時通訊語音服務器端口
465,587,995          # 電郵服務器端口 TLS AUTH

正常用戶應該足夠。

腳本預定一位使用者,要增加用戶,編輯gfw.press/user.txt ,格式是
端口【空格一個】密碼 ,每個描述一行,例如要增加為3個用戶

14401 xyz123MN
14402 XYZ456bc
14403 789lKpOH

這樣,編輯後儲存須要重啟gfw.press使其生效,假設沒有其他Java
程序在運行,在命令列輸入

kill $(ps aux | grep 'java' | grep -v grep | awk '{print $2}')

即可終止gfw.press運行,再次運行server.sh便可生效。
gfw.press的windows客戶端在這裡下載

這腳本在VMware VPS Debian 8 jessie x86_64通過測試,系統資訊如下

System Info
-----------
Processor : Intel(R) Xeon(R) CPU           X7560  @ 2.27GHz
CPU Cores : 2
Frequency : 2261.000 MHz
Memory : 1000 MB
Swap : 1483 MB
Uptime : 10 min,

OS : Debian GNU/Linux 8
Arch : x86_64 (64 Bit)
Kernel : 3.16.0-4-amd64
Hostname : localhost

腳本以之前的debian 7 部署 gfw.press + 3proxy 輕鬆翻牆作為藍本編寫,
故此在Debian 7 x86/x86_64正常是可成功安裝,而Ubuntu 14.04/15.04
沒有測試,不過估計也可使用安裝,因為3proxy是編譯安裝的,軟件
源沒有,所以路徑問題應該不存在,Ubuntu的啟動服務和Debian相同,
正常也可使用,但不保證

Java是非常吃記憶體的,如果VPS的記憶體沒有512MB或以上,還是
建議放棄,跑不動的機會極高,當系統假死時可看server.log是否出現
記憶體不足的警告。

低檔VPS最好還是使用shadowsocks-libev或者stunnel+tinyproxy作為個
人梯子,這些可以在很少資源的系統上運行的

之前編寫的gfw.press+tinyproxy腳本請不要使用,有空會改寫一下避免
做成用戶誤會,這個腳本設有trap命令,如果用戶按Ctrl-C中斷腳本會
清理檔案和文件。

腳本須要安裝所需檔案,編譯原碼和更新系統,需時較久,請耐心等
待完成,完成後會給出客戶端所需資訊,記得手動輸入 gfw.press/server.sh
運行gfw.press

:)