一、 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.
noproxy:不使用代理而直接連接
7. server的值:
host: 指定服務器的hostname,使用缺省服務端口
host:port:指定服務器的hostname和該服務的監聽端口
下面是一些例子:
auth ― - u
說明:對所有的客戶連接都使用username/password用戶認證方法
permit u - 192.