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