SOCKS 是基于TCP應用層協定穿透防火牆的代理伺服器,即使防火牆阻止了一些應用端口,也能通過SOCKS代理穿透。SOCKS協定是獨立于應用層的,是以可以用于WWW、FTP、Telnet等等。
來至百度解釋:Socks不要求應用程式遵循特定的作業系統平台,Socks 代理與應用層代理、 HTTP 層代理不同,Socks代理隻是簡單地傳遞資料包,而不必關心是何種應用協定(比如FTP、HTTP和NNTP請求)。是以,Socks代理比其他應用層代理要快得多。它通常綁定在代理伺服器的1080端口上。如果您在企業網或校園網上,需要透過防火牆或通過代理伺服器通路Internet就可能需要使用SOCKS。
首先,一個應用層用戶端連接配接到SOCKS代理伺服器,這時代理伺服器會檢視通路清單(access list)是否允許用戶端通路遠端的應用資源。如果允許,代理伺服器将資料包傳遞給應用伺服器,并建立一個應用伺服器與用戶端的連接配接。
注意:配置你的應用用戶端必須使用SOCKS v4版本
安全的SOCKS代理應該是通過通路清單和防火牆控制通路外部應用,例如防火牆禁止FTP的TCP/21端口,通過SOCKS代理允許指定用戶端IP通路。如果不安全的代理伺服器引入網絡,可能為垃圾郵件發送者通過路由器發送垃圾郵件提供條件。
屬性描述
§ connection-idle-timeout (時間; 預設: 2m) – 連接配接空閑逾時時間,即連接配接空閑後多長時間關閉
§ enabled (yes | no; 預設: no) – 是否啟用SOCKS代理
§ max-connections (整型: 1..500; 預設: 200) – 同時建立最大連接配接數
§ port (整型: 1..65535; 預設: 1080) – SOCKS伺服器監聽連接配接的TCP端口
通路清單(Access List)
操作路徑: /ip socks access
在SOCKS通路清單中,你能添加通路政策控制通路SOCKS伺服器。SOCKS通路清單類似于防火牆清單政策。
屬性描述
§ action (allow | deny; 預設: allow) – 選擇此規則的執行方式。
allow – 比對這個規則将允許資料包轉發,并進一步處理
deny - 比對這個規則将拒絕資料通路
§ dst-address (IP address/netmask) – 目标IP位址(對端伺服器)
§ dst-port (port) – 目标TCP端口
§ src-address (IP address/netmask) – 源IP位址(用戶端)
§ src-port (port) – 源TCP端口
活動連接配接(Active Connections)
操作路徑: /ip socks connections
活動連接配接清單顯示了所有已經建立TCP連接配接,用于SOCKS代理伺服器連接配接維護
屬性描述
§ dst-address (隻讀: IP位址) – 目标IP位址
§ rx (隻讀: 整型) – 接收位元組
§ src-address (隻讀: IP位址) – 源IP位址
§ tx (隻讀: 整型) – 發送位元組
§ type (隻讀: in | out | unknown) – 連接配接類型
in – 向内連接配接
out – 向外連接配接
unknown – 連接配接正被發起
事例
檢視目前TCP連接配接清單
[admin@MikroTik] ip socks connections> print
# SRC-ADDRESS DST-ADDRESS TX RX
0 192.168.0.2:3242 159.148.147.196:80 4847 2880
1 192.168.0.2:3243 159.148.147.196:80 3408 2127
2 192.168.0.2:3246 159.148.95.16:80 10172 25207
3 192.168.0.2:3248 194.8.18.26:80 474 1629
4 192.168.0.2:3249 159.148.95.16:80 6477 18695
5 192.168.0.2:3250 159.148.95.16:80 4137 27568
6 192.168.0.2:3251 159.148.95.16:80 1712 14296
7 192.168.0.2:3258 80.91.34.241:80 314 208
8 192.168.0.2:3259 80.91.34.241:80 934 524
9 192.168.0.2:3260 80.91.34.241:80 930 524
10 192.168.0.2:3261 80.91.34.241:80 312 158
11 192.168.0.2:3262 80.91.34.241:80 312 158
[admin@MikroTik] ip socks connections>
應用執行個體
FTP服務通過SOCKS代理伺服器
假設一個内網192.168.0.0/24,并做了nat僞裝(masqueraded),RouterOS網絡接口配置一個公網IP 10.1.0.104/24 和内網網關192.168.0.1/24,網際網路中有一台FTP伺服器IP位址是10.5.8.8。我們希望讓内網用戶端IP位址192.168.0.2通路這個FTP伺服器
首先,确認nat僞裝規則已經配置
[admin@MikroTik] ip firewall nat> print
Flags: X - disabled, I - invalid, D - dynamic
0 chain=srcnat action=masquerade src-address=192.168.0.0/24
[admin@MikroTik] ip firewall nat>
然後确認通路公網的FTP服務已經被防火牆拒絕,即通路FTP服務是不能直接通過正常應用協定通路:
[admin@MikroTik] ip firewall filter> print
Flags: X - disabled, I - invalid, D - dynamic
0 chain=forward action=drop src-address=192.168.0.0/24 dst-port=21 protocol=tcp
[admin@MikroTik] ip firewall filter>
這裡就需要使用SOCKS代理伺服器去通路,首先啟用SOCKS伺服器:
[admin@MikroTik] ip socks> set enabled=yes
[admin@MikroTik] ip socks> print
enabled: yes
port: 1080
connection-idle-timeout: 2m
max-connections: 200
[admin@MikroTik] ip socks>
接下來配置通路清單,添加用戶端IP位址192.168.0.2/32到SOCKS通路清單中,允許資料傳輸從FTP伺服器到用戶端(且允許目标端口從1024到65535的所有IP位址),然後拒絕所有:
[admin@MikroTik] ip socks access> add src-address=192.168.0.2 dst-port=21 \
\... action=allow
[admin@MikroTik] ip socks access> add dst-port=1024-65535 action=allow
[admin@MikroTik] ip socks access> add action=deny
[admin@MikroTik] ip socks access> print
Flags: X - disabled
0 src-address=192.168.0.2 dst-port=21 action=allow
1 dst-port=1024-65535 action=allow
2 action=deny
[admin@MikroTik] ip socks access>
這樣,SOCKS伺服器已經配置完成,檢視Connctions中斷資料傳輸和連接配接情況:
[admin@MikroTik] ip socks connections> print
# SRC-ADDRESS DST-ADDRESS TX RX
0 192.168.0.2:1238 10.5.8.8:21 1163 4625
1 192.168.0.2:1258 10.5.8.8:3423 0 3231744
[admin@MikroTik] ip socks connections>
注意:為了讓用戶端正确連接配接SOCKS代理伺服器,你必須在用戶端應用配置上指定IP位址和端口到你的FTP用戶端,在這個執行個體中IP位址設定為192.168.0.1,TCP端口為1080。
