一、 SOCKS概述
SOCKS其實是一種網路代理協議。該協議所描述的是一種內部主機(使用私有ip地址)
通過SOCKS伺服器獲得完全的Internet訪問的方法。具體說來是這樣一個環境:用一台運行S
OCKS的伺服器(雙宿主主機)連接內部網和Internet,內部網主機使用的都是私有的ip地址
,內部網主機請求訪問Internet時,首先和SOCKS伺服器建立一個SOCKS通道,然後再將請求
通過這個通道發送給SOCKS伺服器,SOCKS伺服器在收到客戶請求后,向客戶請求的Internet
主機發出請求,得到相應后,SOCKS伺服器再通過原先建立的SOCKS通道將數據返回給客戶。
當然在建立SOCKS通道的過程中可能有一個用戶認證的過程。
SOCKS和一般的應用層代理伺服器是完全不同的。一般的應用層代理伺服器工作在應
用層,並且針對不用的網路應用提供不同的處理方法,比如HTTP、FTP、SMTP等,這樣,一旦
有新的網路應用出現時,應用層代理伺服器就不能提供對該應用的代理,因此應用層代理服
務器的可擴展性並不好;與應用層代理伺服器不同的是,SOCKS代理伺服器旨在提供一種廣義
的代理服務,它與具體的應用無關,不管再出現什麼新的應用都能提供代理服務,因為SOCK
S代理工作再線路層(即應用層和傳輸層之間),這和單純工作在網路層或傳輸層的ip欺騙(
或者叫做網路地址轉換NAT)又有所不同,因為SOCKS不能提供網路層網關服務,比如ICMP包
轉發等。這三種技術的比較如下表所示
類別
ip欺騙(NAT)
SOCKS v5
應用層代理
工作區域
網路層或傳輸層
線路層
應用層
用戶認證
無
有
有
應用可擴展性
好
好
無
網路服務
有
無
無
目前的SOCKS版本是第五版,第五版同第四版的區別主要在於第五版提供多種不同的用戶
認證方法和UDP代理。
二、 SOCKS v5的安裝
1. 軟體的獲取
對於非商業使用SOCKS是免費的,你可以從www.socks.nec.com/cgi-bin/download.pl
下載SOCKS v5的最新版,當前的最新版本是socks5-v1.0r11.tar.gz,使用RedHat的朋友也可
以到RedHat的官方站點下載相應的SOCKS v5的rpm包。下面我們以SOCKS v5 的最新版socks5
-v1.0r11.tar.gz為例講述SOCKS v5的安裝過程。
2. 將下載來的socks5-v1.0r11.tar.gz拷貝到/tmp目錄下
#cp socks5-v1.0r11.tar.gz /tmp
3. 解開壓縮包
#tar xvzf socks5-v1.0r11.tar.gz
4. 進入socks5-v1.0r11開始編譯
#cd socks5-v1.0r11
#./configure
#make
#make install
如果要更改預設的安裝選項,請仔細閱讀README和INSTALL文檔的相關說明。如
果編譯過程出現了問題,也可以到以下站點下載我編譯的binary包:
http://www.yxtc.edu.cn/soft/linux/socks/socks5.tar.gz
下載后將該socks5.tar.gz binary包拷貝到根目錄/,運行tar xvzf socks5.tar.gz即可。相
關的文件路徑如下:
#tar xvzf socks5.tar.gz
usr/bin/socks5
usr/bin/stopsocks
usr/bin/runsocks
usr/lib/libsocks5.a
usr/lib/libsocks5_sh.so
usr/man/man1/stopsocks.1
usr/man/man1/socks5.1
usr/man/man1/socks5.1.gz
usr/man/man1/socks5_clients.1
usr/man/man1/runsocks.1
usr/man/man5/socks5.conf.5
usr/man/man5/socks5.conf.5.gz
usr/man/man5/socks5.passwd.5
usr/man/man5/socks5.passwd.5.gz
usr/man/man5/libsocks5.conf.5
etc/socks5/libsocks5.conf
etc/socks5/passwd
etc/socks5/socks5.conf
etc/rc.d/init.d/socks5
三、 SOCKS v5的配置
我們主要通過socks5.conf文件來配置SOCKS v5伺服器。該配置文件的路徑可以在編
譯SOCKS v5時自行指定,預設路徑為:/etc/socks5.conf。SOCKS v5伺服器在每次啟動或收
到HUP信號時讀入該配置文件的內容。該配置文件通常由以下幾個方面的內容構成:
-ban host:定義拒絕服務的客戶列表
-authentication:定義SOCKS v5伺服器使用的用戶認證方法
-interface:定義SOCKS v5伺服器絆定的ip地址和服務埠
—variables and flags:定義SOCKS v5伺服器運行的環境
-proxies:定義客戶可以通過SOCKS v5伺服器訪問的地址列表以及SOCKS v5服務
器訪問這些地址的方法
-access control:定義SOCKS v5伺服器接受或拒絕客戶連接的規則
下面我們分別來講述這些條目對應的語法:
1. ban host:
語法:ban source-host source-port
說明:SOCKS v5伺服器將拒絕接受來自source-host:source-port的客戶連接。
2. authentication:
語法:auth source-host source-port auth-methods
說明:對於來自source-host:source-port的客戶連接,SOCKS v5伺服器將使用auth-method
s所定義的用戶認證方法。對於沒有定義認證方法的客戶將使用任何可以使用的認證方法。
3. interface:
語法:interface hostpatern portpattern interface-address
說明:來自source-host:source-port的客戶連接由interface-address處理;目的地址為so
urce-host:source-port的客戶連接由SOCKS v5 代理伺服器從 interface-address發出連接
請求。
4. variables:
語法:set variable value
說明:定義SOCKS v5運行參數,SOCKS v5有以下一些常用的運行參數:
SOCKS_BINDINTFC host:port:指定SOCKS v5綁定的ip地址和監聽的埠。如果
不指定綁定的ip地址,SOCKS v5將使用0.0.0.0。
5. proxies:
語法:proxy-type dest-host dest-port proxy-list
說明:當客戶請求的目的為dest-host:dest-port時,SOCKS v5將使用proxy-list中的代理服
務器請求數據。
6. 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]
說明:通過這兩條語句所定義的規則來進行客戶訪問控制。
我們再對以上語法作進一步的解釋:
1. 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的主機
2. port的表示方法:
-:表示任意埠
service name:用/etc/service中定義的服務名來表示,如telnet
port number:直接指定數字埠,如80
[port_start,port_end]:指定一個埠範圍,如[1024,6000]表示從埠1024到6000,
(1024,6000)表示從埠1025到5999
3. auth的值:
n:無用戶認證
u:使用username/password用戶認證方法
k:使用Kerberos用戶認證方法
-:使用任何可用的用戶認證方法
4. cmd的值:
-:任何命令
c:connect
b:bind
u:UDP
p:ping
t:traceroute
5. user的值:
-:任何用戶
6. proxy的值:
socks5: SOCKS v5
socks4: SOCKS 版本4
noproxy:不使用代理而直接連接
7. server的值:
host: 指定伺服器的hostname,使用預設服務埠
host:port:指定伺服器的hostname和該服務的監聽埠
下面是一些例子:
auth ? - u
說明:對所有的客戶連接都使用username/password用戶認證方法
permit u - 192.168.1. - - -
說明:允許來自192.168.1.的任何經過用戶認證的連接
更多的例子請參考以下資源:http://www.socks.nec.com/reference/socks5.html
四、 SOCKS v5一些常見問題的說明
1. windows客戶端的配置
有些windows的應用程序,如IE、OICQ等等本身就支持SOCKS代理伺服器,
但是更多的windows應用程序是不提供對SOCKS代理伺服器的支持的,這時候
我們就可以利用一些相應的工具來使得這些應用程序可以使用SOCKS代理服務
器。其中最常用的工具sockscap,可以從以下的網址下載sockscap:http://www.socks.nec
.com/cgi-bin/download.pl.
2. 用戶認證問題
SOCKS v5已經具有了用戶認證功能,諸如IE等應用程序雖然提供了對SOCKS
代理伺服器的支持,但是並不能進行用戶認證,這種情況下我們也只能用sockscap
等工具來提供IE的用戶認證介面。需要注意的是,SOCKS的認證過程並不會象
squid一樣彈出認證窗口。
3. 運行模式問題
SOCKS v5具有以下幾種運行模式:
standalont:這是SOCKS v5預設的運行模式
preforking:該模式適合伺服器資源有限的情況,因為我們可以事先指定運行的子
進程數。可以用-p選項指定SOCKS以preforking模式運行。
inetd:和telnet等服務一樣通過inetd超級伺服器運行SOCKS
threaded:在linux平台上,我們推薦使用該模式運行SOCKS,這樣能獲得最佳性能。
4. 超時問題
在一個客戶會話空閑超過15分鐘后,該會話將被斷開,可以使用SOCKS5_TIMEOUT 變數改變該
值。
5. 綁定失敗問題
有時候會出現Bind failed for xxx.xxx.xxx.xxx: ...的提示,通常這是因為SOCKS所綁定的
埠已被其他程序所使用的緣故,可以通過更改該埠的值來解決這類問題。
6. SOCKS v5的日子問題
SOCKS v5的日誌預設為/var/log/messages,我們可以通過重新編譯SOCKS v5來將SOCKS v5日
志單獨記錄到一個文件中。具體請參考README文件。
更多的配置實例請參考http://www.socks.nec.com/reference/socks5.html.