歡迎您光臨本站 註冊首頁

在Linux上配置和實現SOCKSv5

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  一、 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.


[火星人 ] 在Linux上配置和實現SOCKSv5已經有400次圍觀

http://coctec.com/docs/linux/show-post-67954.html