linux下製作socks5代理服務器

---- 1. 下載Socks 5軟件包

---- 用戶可以到中國自由軟件庫(http://freesoft.cei.gov.cn)站點去下載。假設socks5-server-1_0r6-1_i386.rpm 軟件包已下載到當前目錄下。

---- 2. 安裝

---- # rpm -i socks5-server-1_0r6-1_i386.rpm

cp socks5.conf.singlehomed /etc/socks5.conf

 

---- 3. 配置參數

---- Socks 5的配置文件爲/etc/socks5.conf。在這個文件裏,用戶可以對Socks 5服務的多種功能進行設置,有興趣的讀者可以到網上閱讀一些相關資料,也可以簡單地在服務器上執行命令"man socks5.conf",以便學習它的幫助文檔,本文在此不做詳細介紹。

---- 這裏只假設Socks 5代理服務器要對位於192.168.1.0/24網段的主機做完全代理,配置如下:

# vi /etc/socks5.conf
permit --192.168.1.---

---- 4. 啓動

---- 用偵聽方式(daemon)啓動服務進程效率最高,啓動命令如下:

---- # /usr/sbin/socks5

---- 在服務器重啓時,爲使Socks 5服務能自動啓動,還要執行如下命令:

# cd /etc/rc.d/rc3.d
# ln -s ../init.d/socks5.init ./S86socks5
需要注意的是,在Linux平臺上,

---- /etc/rc.d/init.d/socks5.init 文件在安裝Socks 5軟件包時能夠自動生成。若該文件不存在,用戶可以用"vi"命令簡單編輯一個文本文件,比如:

# cd /etc/rc.d/rc3.d
# vi S86socks5
#!/bin/sh
/usr/sbin/socks5
# chmod 755 S86socks5

 

要使用用戶驗證,首先要建立/etc/socks5.pwsswd文件

內容爲:(userA代表用戶名。passwdA代表用戶userA的密碼)
#/etc/socks5.passwd
userA passwdA
userB passwdB
userC passwdC

然後修改/etc/socks5.conf
添加下列語句
auth - - u
或者把:
auth - - -改成auth - - u

添加:
把默認permit - - - - - - 改成permit u - 192.168.0. - - -
即允許來自192.168.0.0/255.255.255.0網段的任何經過用戶認證的連接

如果你不想把密碼文件存在默認的/etc/socks5.passwd裏。想存在自定義的文件,比如/etc/qq.passwd

那就得修改/etc/socks5.conf.添加一項參數

set SOCKS5_PWDFILE /etc/qq.passwd

 

5.運行代理服務:
#socks
在第一次裝好socks5之後可以通過運行#/usr/local/bin/socks5 –f –s來測試代理服務能否正常運行,如果出現02716: Socks5 starting at Thu May 20 20:33:58 2004 in normal mode,則表示可以正常運行。

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將使用0.0.0.0
set SOCKS5_BINDINFC 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

嚴重聲明:後面的部分與linux下的實現幾乎一樣,如有雷同重屬知識重疊,並向參考過的文章致謝了



 fwizard 回覆於:2004-05-21 16:19:37

附錄,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用0.0.0.0作爲主機值。 
 
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.:表示n1.0.0.0/255.0.0.0
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和該服務的監聽端口

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章