廖光忠 劉思遠
(1.武漢科技大學計算機科學與技術(shù)學院 武漢 430065)(2.智能信息處理與實時工業(yè)系統(tǒng)湖北省重點實驗室 武漢 430065)
隨著我國證券行業(yè)的發(fā)展,計算機在券商交易中起到的作用越來越大,程序化交易在券商交易中起著越來越大的作用。計算機輔助交易或者程序化交易給證券行業(yè)帶來方便的同時,風險也隨之增大[1~2]。因此,如何控制交易過程中交易數(shù)據(jù)產(chǎn)生的風險,是當前需要考慮和解決的重要問題之一。針對交易數(shù)據(jù)存在的風險問題,設(shè)計和實現(xiàn)基于FTD 協(xié)議的風險控制網(wǎng)閘系統(tǒng),建立“實時報備、實時監(jiān)控、實時熔斷”的風險控制機制[3]。
防火墻是一種保護計算機網(wǎng)絡(luò)安全的技術(shù)性措施,它通過在網(wǎng)絡(luò)邊界上建立相應(yīng)的網(wǎng)絡(luò)通信監(jiān)控系統(tǒng)來隔離內(nèi)部和外部網(wǎng)絡(luò),以阻擋來自外部的網(wǎng)絡(luò)入侵[4]。按照實現(xiàn)的層次上來進行分類,防火墻可分為IP 級防火墻,應(yīng)用級防火墻和Socks 防火墻。Socks 防火墻并不針對專門的應(yīng)用協(xié)議,而是一種通用的TCP(UDP)連接中繼服務(wù),連接的發(fā)起方不直接與響應(yīng)方建立連接,而是與Socks 防火墻交互,再由Socks 防火墻與響應(yīng)方建立連接[5~6]。IP級代理對靜態(tài)的通信管理是有用的,但是不提供強壯的安全機制或者動態(tài)的靈活性,反之Socks 兩者都提供。Socks 同樣彌補了應(yīng)用程序代理的不足,因為Socks支持任何應(yīng)用而不是為每一個特定的應(yīng)用程序?qū)懸粋€特定的代理,所以它在應(yīng)用透明性上是優(yōu)于應(yīng)用程序代理的[7]。從上面的比較可以看出Socks 防火墻克服了IP 級防火墻和應(yīng)用級防火墻的不足,是一種比較理想的防火墻方案。因此,本文選擇將Socks代理技術(shù)應(yīng)用于風控網(wǎng)閘系統(tǒng)。
FTD 協(xié)議是期貨數(shù)據(jù)交換協(xié)議,是一種基于TCP 協(xié)議的應(yīng)用層協(xié)議。該協(xié)議由中國證券監(jiān)督管理委員會發(fā)布,所有的期貨交易軟件都遵循該協(xié)議規(guī)定的通訊方式和數(shù)據(jù)格式[8]。該協(xié)議是期貨數(shù)據(jù)交易時會員系統(tǒng)和交易所系統(tǒng)之間的一種約束,包括通訊的方式,傳輸數(shù)據(jù)的格式,數(shù)據(jù)字典的定義,交易數(shù)據(jù)的內(nèi)容等,是交易系統(tǒng)軟件終端和交易所對接的橋梁[14]。FTD 協(xié)議通訊工作過程如圖1所示。
圖1 FTD協(xié)議通訊工作過程
目前,風控網(wǎng)閘系統(tǒng)實現(xiàn)方式主要為網(wǎng)絡(luò)過濾路由模式,即基于IP 級防火墻過濾模式。路由模式的設(shè)計采用Netfilter[11~12]用戶態(tài)程序設(shè)計,用戶態(tài)程序設(shè)計易于變更和維護,有較強的可操作[3]?;緲I(yè)務(wù)處理邏輯如圖2所示,通過iptables[13]制定過濾策略,從IP QUEUE 隊列中獲取相關(guān)的數(shù)據(jù)報文,對數(shù)據(jù)報文的內(nèi)容按照FTD(期貨數(shù)據(jù)交換)協(xié)議進行解析,把解析的信息進行規(guī)則匹配處理,返回處理結(jié)果記錄日志,根據(jù)處理結(jié)果判斷報文的合法性:如果合法,給出放行指令;否則,按照FTD 協(xié)議規(guī)定的報文格式構(gòu)造相關(guān)的請求報文對應(yīng)的響應(yīng)報文,提示請求數(shù)據(jù)報文非法被風控系統(tǒng)攔截,然后發(fā)送TCP 重置的報文RST=1,重置TCP 連接中的傳輸序列號,保證會員系統(tǒng)和CTP平臺的連通。
風控系統(tǒng)路由模式攔截交易數(shù)據(jù)包在TCP 協(xié)議上的反應(yīng)如圖3 所示,服務(wù)端并不知道報文被響應(yīng),又TCP 是面向連接的可靠的傳輸協(xié)議,當我們在進行數(shù)據(jù)報文的攔截和偽造響應(yīng)時,交易所系統(tǒng)不知道請求報文seq=x+1 的存在,而會員系統(tǒng)會認為發(fā)送請求成且得到響應(yīng),此時TCP連接兩端數(shù)據(jù)傳輸?shù)男蛄刑枙l(fā)生沖突,服務(wù)器會向客戶端請求ack=x+1 的報文,而客戶端會響應(yīng)的時seq=x+2,此時客戶端會重傳seq=x+1 的報文,該報文一樣會被風控過濾系統(tǒng)攔截,進入死循環(huán),會造成seq=x+1的報文在TCP 鏈接中多次重傳而得不到正確的響應(yīng)。當重傳的次數(shù)超過TCP協(xié)議規(guī)定的次數(shù)后,該鏈接會斷開,要求重新建立TCP 連接,重傳和重新建立TCP連接會耗費多余的時間,影響數(shù)據(jù)傳輸速率。
圖2 路由模式數(shù)據(jù)基本流程示意圖
圖3 網(wǎng)閘系統(tǒng)攔截交易數(shù)據(jù)在TCP層的效果對比
為了解決TCP 連接中斷的問題,本文將使用Socks5代理技術(shù)來實現(xiàn)風控網(wǎng)閘系統(tǒng),以取代傳統(tǒng)的基于Netfilter設(shè)計實現(xiàn)的網(wǎng)絡(luò)過濾路由模式。
本文實現(xiàn)風控網(wǎng)閘系統(tǒng)的方式為網(wǎng)絡(luò)過濾代理模式,即Socks 防火墻代理模式。代理服務(wù)器分別與會員系統(tǒng)和交易所系統(tǒng)建立獨立的TCP連接,相互獨立,互不影響。如圖4 所示,該模式以中介者的身份分別與客戶端和目標服務(wù)器連接,可以輕松地避開TCP連接重置同步的問題。
本文提出的風控網(wǎng)閘系統(tǒng)是一種基于Socks5代理的證券交易的風控網(wǎng)閘系統(tǒng)。該閘系統(tǒng)設(shè)計的目的是通過對交易數(shù)據(jù)報文的攔截,利用FTD協(xié)議解析交易數(shù)據(jù)報文,快速匹配給定的風險控制規(guī)則,判斷報文中的交易數(shù)據(jù)是否合法。如果合法,放行;否則,攔截、記錄、報警、更新信息等。系統(tǒng)的設(shè)計需要兼容不同的交易客戶端和其工作模式。系統(tǒng)的運用不能對原有的網(wǎng)絡(luò)結(jié)構(gòu)有大的影響,不能影響原有系統(tǒng)的正常運行。該系統(tǒng)總體框架如圖5所示。
圖4 代理模式相互獨立的TCP序列號
圖5 系統(tǒng)總體框架示意圖
會員系統(tǒng)、交易所為最初證券行業(yè)程序化交易系統(tǒng)的客戶端和服務(wù)端,共同完成期貨的自動化交易功能。
該風控網(wǎng)閘通過開源代理軟件ss5二次開發(fā)來過濾指定協(xié)議的數(shù)據(jù)報,數(shù)據(jù)來源通過分析相關(guān)數(shù)據(jù)報文的特征攔截。該系統(tǒng)通過代理和交易所平臺連接,避免了TCP協(xié)議對系統(tǒng)攔截報文出現(xiàn)中斷的現(xiàn)象,同時也提高了內(nèi)網(wǎng)的安全級別,這是代理模式的優(yōu)勢,但是通過代理軟件連接,需要客戶端支持代理模式和進行相關(guān)的配置,同時需要搭建和管理代理服務(wù)器。
該系統(tǒng)數(shù)據(jù)基本流程如圖6 所示,可以看出代理模式數(shù)據(jù)基本流程和路由模式基本相同,但兩者所用核心技術(shù)卻不相同。一個基于Socks 防火墻,一個基于IP級防火墻。
圖6 代理模式數(shù)據(jù)基本流程示意圖
如圖7 所示,Socks5 代理風控網(wǎng)閘數(shù)據(jù)流主要包括兩個部分:Socks 數(shù)據(jù)流和應(yīng)用數(shù)據(jù)數(shù)據(jù)流。Socks 數(shù)據(jù)流主要完成客戶端的請求認證及解析、綁定客戶端和應(yīng)用服務(wù)器的映射關(guān)系。應(yīng)用數(shù)據(jù)流主要完成客戶端和應(yīng)用服務(wù)端之間的數(shù)據(jù)交互,即客戶端向應(yīng)用服務(wù)端請求的數(shù)據(jù)。這些數(shù)據(jù)流分別有Socks5 各模塊協(xié)同完成,主要包括認證模塊、Socks5 模塊、代理模塊、過濾模塊、帶寬模塊和日志模塊,各模塊具體功能描述如下。
圖7 Socks5代理數(shù)據(jù)流及模塊接口
1)認證模塊:用來處理Socks5 的認證方法協(xié)商。
2)Socks5模塊:主要完成對Socks5數(shù)據(jù)包的解析和響應(yīng)。
3)代理模塊:實現(xiàn)對代理數(shù)據(jù)的轉(zhuǎn)發(fā)功能。
4)過濾模塊:根據(jù)本地的過濾規(guī)則,按照客戶端的地址信息進行過濾。
5)帶寬模塊:根據(jù)配置信息,對客戶端進行帶寬控制。
6)日志模塊:記錄系統(tǒng)運行時各種狀態(tài)信息。
其中,實現(xiàn)系統(tǒng)風控過濾的核心功能模塊是過濾模塊。在過濾模塊識別出FTD 數(shù)據(jù)包文并對其按照FTD數(shù)據(jù)格式進行解析,分析出報文各字段數(shù)據(jù),然后按照事先定義的風控規(guī)則,結(jié)合RFC 分類算法[9~10]匹配出該FTD數(shù)據(jù)報文是否合法。
本系統(tǒng)部署在單機環(huán)境下做了交易數(shù)據(jù)的測試,測試環(huán)境:服務(wù)器-阿里云主機(CPU:1 核2.5G,內(nèi)存:2 GB,帶寬:1M),操作系統(tǒng)-CentOS 7.4 64 位,報單請求數(shù)據(jù)報文大小-654Bytes、報單響應(yīng)數(shù)據(jù)報文大小-801Bytes。測試環(huán)境如圖8所示。
圖8 實驗測試網(wǎng)絡(luò)示意圖
本文為了測試需求,根據(jù)上海期貨信息技術(shù)有限公司提供的相關(guān)API(http://www.sfit.com.cn/5_2_DocumentDown.htm)開發(fā)了簡單的模擬交易軟件。在交易終端安裝模擬交易軟件和wireshark 抓包工具,并在網(wǎng)閘系統(tǒng)中嵌入程序運行計時工具。
本次實驗除了測試系統(tǒng)能夠完成交易風控功能外,還需測試系統(tǒng)各模塊對整個交易過程的延遲影響。系統(tǒng)主要包含的模塊:FTD 過濾攔截模塊、代理數(shù)據(jù)模塊和規(guī)則匹配模塊。
經(jīng)測試本系統(tǒng)能夠滿足正常風控需求。本次實驗測試多組數(shù)據(jù),如表1,記錄4次成功交易中系統(tǒng)各流程耗時(單位ms)情況作為實驗的測試結(jié)果,最后取多組實驗結(jié)果的平均值。其中,其他耗時包括網(wǎng)絡(luò)延遲和交易所處理報單響應(yīng)時間,且基本等于未嵌入風控系統(tǒng)時報單交易時間。
表1 網(wǎng)閘各功能模塊耗時及交易總耗時(ms)
從實驗結(jié)果可知,網(wǎng)閘系統(tǒng)雖然對交易延遲產(chǎn)生了比較明顯的影響,約占33%,但延遲任處于正常交易延遲范圍內(nèi)。當然,相對于控制交易風險,對交易延遲的消耗是不可避免的。但由于證券交易畢竟是一種高頻交易,且對交易延遲有比較嚴格的要求[15]。因此,本系統(tǒng)后期工作將針對規(guī)則匹配模塊做進一步優(yōu)化,提高匹配效率,降低匹配耗時。
本文研究和設(shè)計了基于Socks 防火墻來實現(xiàn)FTD 協(xié)議證券交易風控網(wǎng)閘系統(tǒng)。本系統(tǒng)的設(shè)計和實現(xiàn)從協(xié)議入手,屏蔽了不同交易終端的兼容性問題,并且該系統(tǒng)不改變原有的網(wǎng)絡(luò)結(jié)構(gòu)和軟件結(jié)構(gòu)。本系統(tǒng)使用Socks代理技術(shù)在傳輸層攔截交易數(shù)據(jù),克服了基于IP 級防火墻實現(xiàn)風控網(wǎng)閘的不足,并提供了更高的靈活性和更強的安全機制。后期,將著手優(yōu)化該系統(tǒng)風控規(guī)則的匹配過程,進一步提高系統(tǒng)的執(zhí)行效率。