Solaris下安裝socks5代理伺服器
剛開始找了一下,發現全是在linux下安裝的文件, 我按照readme步驟在rh9下作了一遍,用系統預設的gcc很容易的就搞定了。這裡強調的gcc編譯器是一個比較關鍵環節。先用gcc3.3是沒有裝過去主要問題出在<varvars.h>和ftp上面。沒辦法,找個gcc3.4準備看一下,結果解壓的時候出現校驗和錯誤,後來仔細瞭解後發現gcc2。9系列的在 rh9下沒有問題。對於for-solaris-sparc而言,先找到一個接近版本gcc-2.95.3-pkg.zip。
下載編譯器gcc-2.95.3-pkg.zip(www.sunfreeware.com),解壓後得到安裝套件SFWgcc(這個編譯器是要SFW支持)的。安裝這個包:
#pkgadd –d SFWgcc
預設的安裝目錄是/opt/sfw,為正確使用這個編譯器而設置環境變數:
#PATH=/opt/sfw/bin:/usr/local/bin:/usr/ccs/bin:/usr/bin:/usr/ucb:/etc:.
#export
1.下載socks5安裝套件,一搜一大堆,現在可能有兩個大的區別一個是在win下一個是u下的,後面我給出的這個套件名字有的網站上說只在 linux下能用,不要管他這一套,繼續就是了(其實for solaris8也就是這個了。另外據我所知socks5幾乎可以在任何系統下實現的,自己去實驗吧)。將socks5安裝套件socks5-v1.0r11.tgz 以bin方式上傳到RH9/solaris9伺服器上。
2.解壓縮套裝軟體
#gunzip socks5-v1.0r11.tgz
#tar xvf socks5-v1.0r11.tar
or
#tar –zxvf socks5-v1.0r11.tgz
3.開始編譯
#cd socks5-v1.0r11
#./configure --with-threads
說明:可以根據需要參考readme來作配置,也可在安裝後進行配置(推薦這樣就可以了,搞了幾個別的配置出錯了,怕怕啊)
#make
#make install
4.建立/etc/socks5.conf(許多檔都自己建吧,裝完後我是沒有看到自動生成的)
需要達到的目的:在局域網段(192.168.0)內提供代理服務,要求提供使用者名和密碼。
要使用使用者驗證,首先要建立/etc/socks5.pwsswd文件
內容為:
# vi /etc/socks5.passwd
userA passwdA (userA代表使用者名。passwdA代表使用者userA的密碼)
完成/etc/socks5.conf配置檔:
#vi /etc/socks5.conf
auth - - u
permit u - 192.168.0. - - -
注:若改變u和192.168.0.為-,則允許任何使用者(不需要使用者名和密碼)的任意ip使用代理服務;192.168.0.等同於192.168.0.0/255.255.255.0,這個欄位同樣可以設定某一個ip來使用代理服務。
在解壓目錄socks5-v1.0r11下的examples目錄下提供了幾個常用的配置檔內容,可以參考使用。
#cd examples
#ls
sock5.conf.dualhomed sock5.conf.gssapi
sock5.conf.multipleservers sock5.conf.server2server sock5.conf.singlehomed 。。。。
每一個配置檔的尾碼說明瞭它所面向的服務內容,需要時可根據其內容作適當更改。
5.執行代理服務:
#socks5
在第一次裝好socks5之後可以通過運行
#/usr/local/bin/socks5 –f –s來測試代理服務能否正常運行,如果出現02716: Socks5 starting at Thu May 20 20:33:58
6.停止socks5,只要執行stopsocks -KILL就行,socks5就會停止!
7.進階配置
7.1使用非預設埠:如果想讓socks5服務啟動的時候不啟動預設監聽埠1080,比如為8888,可以運行如下命令
# socks5 -b 8888
相應的關服務命令為:
# stopsocks -p 888 -KILL
7.2為了密碼檔的安全,使用自建的密碼檔,比如/etc/myc.passwd。這時,只要修改/etc/socks5.conf檔,在其中新加一條項數:
set SOCKS5_PWDFILE /etc/myc.passwd
7.3指定SOCKS
v5綁定的ip位址和監聽的埠。如果不指定綁定的IP將使用
set SOCKS5_BINDINTFC 192.168.0.8:1080
7.4忽略ident請求。當客戶機沒有運行identd時,使用SOCKS5_NOIDENT將降低超時值
set SOCKS5_NOIDENT
7.5指定連接停頓最長時間。超過最大值後,socks5斷開連接
set SOCKS5_TIMEOUT 15
7.6socks5將接受SOCKS V4 協議的請求,預設不接受
set SOCKS5_V4SUPPORT
7.7指定同時存在的最大子進程數,Socks5預設為64
set SOCKS5_MAXCHILD 4
8.添加自動啟動服務和日誌記錄
# /usr/local/bin/socks5 -t -s 2> /var/log/socks5
#echo "/usr/local/bin/socks5 -t -s 2> /var/log/socks5" >> /etc/rc2.d/rc.local
如果是linux則改rc2.d為rc.d
附錄,socks5 server配置檔(只要定制好自己的配置方式後,將條目寫到/etc/socks5.conf中即可。有人用cp example目錄下的檔方法來生成配置檔,個人不提倡這樣,反正我也出現過錯,自己按格式來保證不出錯)
socks5.conf通常由以下幾個方面的內容構成:
-ban host:定義拒絕服務的客戶列表
-authentication:定義Socks5伺服器使用的使用者認證方法
-interface:定義Socks5伺服器綁定的ip位址和服務埠
-variables and flags:定義Socks5伺服器運行的環境
-proxies:定義客戶可以通過Socks5伺服器訪問的位址列表以及Socks5伺服器訪問這些位址的方法
-access control:定義Socks5伺服器接受或拒絕客戶連接的規則
下面我們分別來講述這些條目對應的語法:
ban host
語法:ban source-host source-port
說明:Socks5伺服器將拒絕接受來自source-host:source-port的客戶連接。
authentication
語法:auth source-host source-port auth-methods
說明:對於來自source-host:source-port的客戶連接,Socks5伺服器將使用
auth-methods所定義的使用者認證方法。對於沒有定義認證方法的客戶將使用任何可以使用的認證方法。
interface
語法:interface hostpatern portpattern interface-address
說明:來自source-host:source-port的客戶連接由interface-address處理;目的地址為source-host:
source-port的客戶連接由Socks5 代理伺服器從
interface-address發出連接請求。
variables
語法:set variable value
說明:定義Socks5運行參數,Socks5有以下一些常用的運行參數:
SOCKS5_BINDINTFC host:port
host:port 指定socks5運行的主機和埠號,用於代替預設的埠。忽略時,socks5用
SOCKS5_CONFFILE filename
Filename 指定配置檔。在許多系統中,預設是/etc/socks5.conf。在運行socks5之前,設置這個變數。如果有多個socks5 daemon運行,為每個daemon使用不同的配置檔。
SOCKS5_DEMAND_IDENT
當客戶沒有回應ident 請求時,認證失敗。使用SOCKS5_DEMAND_IDENT確認每個連接有一個關聯的使用者名。
SOCKS_ENCRYPT
如果可能的話,請求下一個socks5進程加密資料。SOCKS5_ENCRYPT
僅僅在編譯socks5時包括了GSS-API認證時,才有意義。
SOCKS5_FORCE_ENCRYPT
當認證方式支援加密時,強迫客戶加密資料。
SOCKS5_IDENTFILE filename
Filename指定存儲ident資訊的檔案名。在許多系統中,預設是/tmp/socks5.ident。當有多個socks5 daemon運行時,SOCKS5_IDENTFILE非常有用。
SOCKS5_MAXCHILD val
val指定同時存在的最大子進程數。Socks5預設為64。可以降低預設置。不能超過64。Socks5運行線上程模式時,忽略此參數。當運行在oneshot或inetd模式時,此參數不發生作用。
SOCKS_NOIDENT
忽略ident請求。當客戶機沒有運行identd時,使用SOCKS5_NOIDENT將降低超時值。
SOCKS_NOINTCHK
請求下一個socks5進程執行沒有完整檢查的代理請求。只有在編譯時加入GSS-API認證時,SOCKS5_NOINTCHK才發生作用。
SOCKS_NONETMASKCHECK
指示daemon忽略檢查主機的子網路遮罩。預設時,daemon檢查遮罩,如果在同一子網時,在檢查配置檔之前,直接連接。
SOCKS5_REVERSEMAP
總是試圖影射位址到主機名。預設時,socks5只有當主機名或功能變數名稱在配置檔中使用時才影射。設置後,log檔將紀錄主機名,這將降低性能。
SOCKS5_SERVICENAME
總是影射埠號到服務名。預設時,socks5只有當服務名在配置檔中使用時才影射。設置後,log檔將紀錄服務名,這將降低性能。
SOCKS5_PASSWD [password]
當socks5 daemon連接到其他socks伺服器時,如果採用Username/Password 認證,用它來指定密碼。
SOCKS5_PIDFILE filename
指定存儲socks5進程ID的檔案名。Socks5預設存貯PID在
/tmp/socks5.pid。你可以用—bindintfc參數或設置SOCKS5_BINDINTFC環境變數運行socks5在不同於預設埠的 其他埠。當運行在不同於預設埠的其他埠時,socks5存貯PID在/tmp/socks5.pid-port。
SOCKS5_PWDFILE filename
指定密碼檔。在許多系統中,預設是/etc/socks5.passwd。
SOCKS5_TIMEOUT minutes
指定連接停頓最長時間。超過最大值後,socks5斷開連接。忽略此值時,預設是15。
SOCKS5_UDPPORTRANGE port1-port2
指定一個Socks5用來發送UDP包的UDP埠範圍。
SOCKS5_USER [user id]
當socks5 daemon連接到其他socks
server時,如果採用Username/Password認證,用此變數指定使用者名。
SOCKS5_V4SUPPORT
預設時,socks5只接受SOCKS5協議(rfc 1928)的請求。設此變數後,socks5將接受SOCKS V4 協議的請求。
proxies
語法:proxy-type dest-host dest-port proxy-list
說明:當客戶請求的目的為dest-host:dest-port時,Socks5將使用proxy-list中的
代理伺服器請求資料。
access control
語法:permit auth cmd src-host dest-host src-port
dest-port [user-list]
deny auth cmd src-host dest-host src-port dest-port
[user-list]
說明:通過這兩條語句所定義的規則來進行客戶訪問控制。
我們再對以上語法作進一步的解釋:
host的表示方法:
-:表示任意主機
n1.:表示n
n1.n2.:表示n1.n2.0.0/255.255.0.0
n1.n2.n3.:表示n1.n2.n3.0/255.255.255.0
.domain.name:表示主機名以.domain.name結尾的主機
some.domain.name:表示主機名為some.domain.name的主機
port的表示方法
-:表示任意埠
service name:用/etc/service中定義的服務名來表示,如telnet
port number:直接指定數字埠,如80
[port_start,port_end]:指定一個埠範圍,如[1024,6000]表示從埠1024到6000,(1024,6000)表示從埠1025到5999
auth的值
n:無使用者認證
u:使用username/password使用者認證方法
k:使用Kerberos使用者認證方法
-:使用任何可用的使用者認證方法
cmd的值
-:任何命令
c:connect
b:bind
u:UDP
p:ping
t:traceroute
user的值
-:任何使用者
proxy的值
socks5: Socks 5
socks4: SOCKS 版本4
noproxy:不使用代理而直接連接
server的值
host: 指定伺服器的hostname,使用預設服務埠
host:port:指定伺服器的hostname和該服務的監聽埠