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。