■ 河南 劉進(jìn)京
編者按:Linux系統(tǒng)并非無(wú)懈可擊,同樣存在各種漏洞。在很多Linux服務(wù)器上運(yùn)行各種Web服務(wù),如何提高其安全性,是管理員必須重視的事情。相比之下,使用WAF(即Web應(yīng)用防護(hù)系統(tǒng))可以有效提高其安全性。WAF是基于網(wǎng)站應(yīng)用級(jí)別的入侵防御系統(tǒng),通過(guò)執(zhí)行一些針對(duì)HTTP/HTTPSDE安全策略,專門(mén)為Web應(yīng)用提供保護(hù)。
Nginx服務(wù)器目前應(yīng)用的極為廣泛,WAF就可以通過(guò)專門(mén)的模塊,對(duì)其進(jìn)行安全保護(hù)。
例如,WAF能夠?qū)崿F(xiàn)黑白名單功能,禁止黑名單的IP訪問(wèn)??梢允褂肬RL白名單功能定義無(wú)需過(guò)濾的URL。WAF支持User-Agent過(guò)濾,并與自定義規(guī)則進(jìn)行匹配,其支持CC攻擊保護(hù),可以有效限制單個(gè)URL在指定時(shí)間內(nèi)的訪問(wèn)次數(shù)。
此外,WAF還支持Cookie和URL過(guò)濾,而且支持URL參數(shù)過(guò)濾,利用預(yù)設(shè)的規(guī)則防止惡意攻擊。利用日志記錄功能,WAF可以將可疑的訪問(wèn)行為全部記錄下來(lái)。
WAF能夠?qū)TTP請(qǐng)求進(jìn)行異常檢測(cè),過(guò)濾異常的HTTP請(qǐng)求,而且可以只允許HTTP協(xié)議的部分選項(xiàng)通過(guò),來(lái)有效較小攻擊的范圍。
對(duì)于高級(jí)的WAP應(yīng)用防火墻來(lái)說(shuō),還可以嚴(yán)格限制HTTP協(xié)議中不常用的或者沒(méi)有被完全規(guī)范的選項(xiàng)。對(duì)于諸如網(wǎng)頁(yè)篡改、竊取數(shù)據(jù)、安裝后門(mén)等入侵行為,WAF可以通過(guò)輸入驗(yàn)證技術(shù)來(lái)加以防范。
任何網(wǎng)站都有可能存在各種漏洞,如果不及時(shí)將漏洞補(bǔ)上,很容易招致黑客的攻擊。WAF可以利用各種漏洞信息,并在盡可能短的時(shí)間內(nèi)修補(bǔ)漏洞。
WAF是基于安全規(guī)則進(jìn)行運(yùn)作的,利用各種Web應(yīng)用的規(guī)則可以對(duì)網(wǎng)站進(jìn)行全面的檢測(cè),通過(guò)建立基于應(yīng)用數(shù)據(jù)的模型,可以準(zhǔn)確判斷應(yīng)用數(shù)據(jù)是否存在異常。利用WAF的狀態(tài)管理功能,可以有效檢測(cè)諸如登錄失敗等異常事件,并對(duì)對(duì)超過(guò)極限值的行為進(jìn)行管控,這對(duì)于防御各種暴力破解行為非常有用。
當(dāng)用戶首次訪問(wèn)時(shí),WAF可以將其重定向到默認(rèn)登錄頁(yè)面,并對(duì)用戶的整體行為進(jìn)行識(shí)別和記錄,這有利于判別該行為是否具有攻擊性。
此外,WAF還具有響應(yīng)監(jiān)視和保護(hù)信息泄露、隱藏表單域、抗擊入侵規(guī)避技術(shù)等功能。因?yàn)橛行╅_(kāi)發(fā)人員對(duì)于輸入信息并沒(méi)有進(jìn)行有效的安全監(jiān)測(cè),而WAF恰恰可以有效增強(qiáng)其安全性。
WAF和防火墻是存在區(qū)別的,防火墻的主要作用是控制網(wǎng)絡(luò)訪問(wèn),其工作在OSI模型的三層和四層。防火墻是基于報(bào)文進(jìn)行檢測(cè)的,可以對(duì)端口訪問(wèn)進(jìn)行管理,但是其無(wú)法處理HTTP會(huì)話,無(wú)法理解各種Web應(yīng)用應(yīng)用程序語(yǔ)句。所以防火墻無(wú)法對(duì)HTTP通訊進(jìn)行輸入驗(yàn)證和攻擊方式分析?,F(xiàn)在很多針對(duì)Web訪問(wèn)的攻擊(例如SQL注入、跨站腳本、Cookie欺騙等),都會(huì)將惡意數(shù)據(jù)包封裝為看似合法HTTP請(qǐng)求,通過(guò)TCP 80/443等端口通過(guò)防火墻檢測(cè)。
當(dāng)然,對(duì)于比較高級(jí)的防火墻(下一代防火墻),也可以在一定程度上提供應(yīng)用層防御功能。例如,可以根據(jù)異常的TCP會(huì)話分析其攻擊特征并阻止網(wǎng)絡(luò)層攻擊,將IP報(bào)文進(jìn)行拆分組合來(lái)判斷是否隱藏有惡意攻擊數(shù)據(jù)包等。
但是,從原理上說(shuō)防火墻是無(wú)法理解HTTP會(huì)話的,難以完美應(yīng)對(duì)各種基于應(yīng)用的攻擊行為。與之對(duì)應(yīng)的是,WAF可以在應(yīng)用層很好的理解HTTP會(huì)話,可以有效防御基于應(yīng)用層的攻擊。
WAF的組成包括協(xié)議解析模塊、規(guī)則管理模塊、動(dòng)作處理模塊、防御模塊、配置模塊和錯(cuò)誤處理模塊等,可以依次實(shí)現(xiàn)解析HTTP請(qǐng)求、檢測(cè)訪問(wèn)以及防御和記錄惡意攻擊等功能。
例如,在Linux服務(wù)器上下 載Nginx、PCRE、LuaJIT、Ngx_Devel_Kit,以及Lua_Nginx_Module等軟件包,使用Tar命令將其全部解壓到特定的目錄中(例如“/usr/local/src”)。執(zhí)行以下命令安裝Lua即時(shí)編譯器LuaJIT:
執(zhí) 行“useradd nguser-s/sbin/nologin -M”命令,創(chuàng)建名為“nguser”的用戶,使用其運(yùn)行Nginx,并且禁止其擁有登錄權(quán)限。
執(zhí)行“tar xvf nginx-1.x.x.tar.gz”命令,對(duì)Nginx包進(jìn)行解壓,其中的“x”表示具體的版本號(hào)。執(zhí)行以下命令安裝Nginx:
注意其中使用“–addmodule”,“–with-pcre”等參數(shù)指定了PCRE、LuaJIT、Ngx_Devel_Kit和Lua_Nginx_Module等軟件的路徑。進(jìn)入Nginx安裝路徑中的“conf”目錄,執(zhí)行“l(fā)n -s/usr/local/lib/libluajit-5.x.so.x/lib/libluajit-5.x.so.x”,創(chuàng)建符號(hào)鏈接。
執(zhí)行“vi nginx.conf”命令,在其配置文件中添加:
執(zhí)行“/usr/local/nginx/sbin/nginx -t”命令,會(huì)顯示Nginx的配置文件語(yǔ)法正確的提示。執(zhí)行“/usr/local/nginx/sbin/nginx”命令啟動(dòng)Nginx服務(wù),在瀏覽器中訪問(wèn)“http://xxx.xxx.xxx.xxx/test”,其中的“xxx”表示Nginx服務(wù)器的地址,會(huì)顯示“Test OK”的內(nèi)容,這說(shuō)明配置文件是正確的。
使用WAF保護(hù)網(wǎng)絡(luò)應(yīng)用安全,必須使用到合適的規(guī)則。這里從網(wǎng)上下載名為“ngx_lua_waf”的規(guī)則庫(kù),這是一個(gè)壓縮包,將其解壓復(fù)制到Nginx的“conf”目錄中,并將目錄名更名為“waf”。
該規(guī)則庫(kù)可以用于過(guò)濾利用Post、Get以及Cookie方式進(jìn)行的Web攻擊,可以防止SQL注入、本地包含、溢出攻擊、Fuzzing等壓力測(cè)試,XSS和SSRF跨站攻擊等非法行為,能夠有效防止敏感文件泄漏,屏蔽黑客掃描和非法提權(quán),防御異常的網(wǎng)絡(luò)請(qǐng)求,防止WebShell上傳操作等。
在Nginx配置文件中的指定的“http{}”段中添加:
打開(kāi)上述“WAF”目錄,執(zhí) 行“vi config.lua”命令,在該配置文件中的“RulePath=”行中確保其內(nèi)容 為“"/usr/local/nginx/conf/waf/wafconf/"”。
為了便于測(cè)試,執(zhí)行:
創(chuàng)建指定的目錄,并賦予Nginx、賬戶讀寫(xiě)執(zhí)行該目錄的權(quán)限。
執(zhí) 行“vi config.lua”命令,在其配置文件中輸入“attacklog="off"”行,開(kāi)啟記錄攻擊日志功能。輸入“l(fā)ogdir=/data/logs/”行,設(shè)置日志存儲(chǔ)路徑。依次輸入:
實(shí)現(xiàn)開(kāi)啟URL攔截訪問(wèn)、攔截后重定向、攔截Cookie欺騙攻擊、攔截Post攻擊、開(kāi)啟URL白名單功能、設(shè)置禁止上傳的文件類(lèi)型、開(kāi)啟IP白名單功能、開(kāi)啟黑名單功能、開(kāi)啟防御CC攻擊功能、設(shè)置CC攻擊頻率、設(shè)置警告信息等。
可以根據(jù)實(shí)際情況進(jìn)行靈活的調(diào)整,例如添加更多的禁止上傳文件類(lèi)型,設(shè)置更多的IP黑白名單,多個(gè)IP以逗號(hào)分隔,對(duì)于CC攻擊頻率默認(rèn)為一分鐘同一個(gè)IP只能請(qǐng)求同一個(gè)地址100次,您可以適當(dāng)修改。
之后可執(zhí)行諸如“curl http://localhost/test.php?id=../etc/passwd”之類(lèi)的命令,會(huì)觸發(fā)WAF保護(hù)功能,提示該訪問(wèn)請(qǐng)求帶有不合法參數(shù)已經(jīng)被攔截。
打開(kāi)Nginx的“access.log”日志,根據(jù)時(shí)間信息進(jìn)行查找,可以看到服務(wù)器針對(duì)該訪問(wèn)返回HTTP 403代碼。
這樣,當(dāng)黑客試圖對(duì)Nginx服務(wù)器進(jìn)行各種攻擊時(shí),都會(huì)觸發(fā)對(duì)應(yīng)的WAF規(guī)則并被屏蔽或者攔截。
當(dāng)然,對(duì)于Linux服務(wù)器進(jìn)行安全保護(hù),必須從更多的方面著手。
例如,首先必須保證Root管理員密碼的安全,必須將密碼設(shè)置的足夠長(zhǎng)足夠復(fù)雜,而且Root密碼不能讓更多人知曉,如果發(fā)生危及密碼安全的情況,必須及時(shí)修改Root密碼等。
在執(zhí)行遠(yuǎn)程管理時(shí),需要禁止Root賬號(hào),只能配置一個(gè)具有Sudo權(quán)限的賬戶。對(duì)于系統(tǒng)賬戶來(lái)說(shuō),應(yīng)該盡可能的減少其數(shù)量,對(duì)于應(yīng)用程序的執(zhí)行賬戶,需要將它的登錄Shell設(shè)置為Nologin狀態(tài),禁止其登錄系統(tǒng)。對(duì)于無(wú)用的的賬戶,應(yīng)該定期進(jìn)行清理。對(duì)于vsftpd、MySQL等賬戶,需要嚴(yán)格控制其權(quán)限。
因?yàn)镾SH服務(wù)使用的比較廣泛,可以實(shí)現(xiàn)安全的遠(yuǎn)程連接,因此,必須采取各種措施保護(hù)其連接密碼的安全。例如使用內(nèi)置的NetFilter防火墻模塊模設(shè)置IPTable規(guī)則,利用Recent參數(shù)限制連接登錄數(shù),使用DenyHost工具等方法,防范暴力破解SSH密碼。為了有效提高SSH訪問(wèn)的安全性,可以使用跳板機(jī)來(lái)進(jìn)行訪問(wèn),而跳板機(jī)只允許合法的地址進(jìn)行訪問(wèn)。例如在線主機(jī)不開(kāi)啟針對(duì)公網(wǎng)的SSH端口,訪問(wèn)者只能通過(guò)指定的跳板機(jī),才可以通過(guò)SSH連接訪問(wèn)目標(biāo)主機(jī)。
對(duì)于系統(tǒng)日志進(jìn)行及時(shí)的查看和分析,可以有效發(fā)現(xiàn)黑客的蹤跡,例如,使用“l(fā)ast”命令可以查看非授權(quán)用戶登錄事件信息。該命令依靠的是“/var/log/wtmp”文件,如果發(fā)現(xiàn)該文件被刪除,就很有可能說(shuō)明黑客已經(jīng)光顧過(guò)。
對(duì)日志文件進(jìn)行分析,如果發(fā)現(xiàn)其中存在沒(méi)有退出的操作和對(duì)應(yīng)的登錄操作,就說(shuō)明黑客惡意刪除了上述文件。
對(duì)于狡猾的黑客來(lái)說(shuō),當(dāng)其入侵之后,會(huì)在系統(tǒng)中設(shè)置RootKIt級(jí)別的后門(mén),讓用戶無(wú)法查找。為此可以定期使 用CHKrootkit、RKHunter等工具對(duì)系統(tǒng)進(jìn)行掃描,來(lái)及時(shí)發(fā)現(xiàn)并清除這類(lèi)后門(mén)。當(dāng)黑客侵入系統(tǒng)后,必然會(huì)對(duì)一些系統(tǒng)文件進(jìn)行篡改,這就導(dǎo)致文件系統(tǒng)的完整性遭到破壞。
因此,管理員通過(guò)檢測(cè)文件系統(tǒng)的異常變化,就可以發(fā)現(xiàn)黑客活動(dòng)的蹤跡。使用Tripwire之類(lèi)的軟件,可以針對(duì)文件系統(tǒng)拍攝快照,為當(dāng)前的系統(tǒng)狀態(tài)創(chuàng)建數(shù)據(jù)庫(kù)。當(dāng)文件發(fā)生變化(例如新建、刪除、修改等),Tripwire可以將現(xiàn)在的文件系統(tǒng)信息和之前創(chuàng)建數(shù)據(jù)庫(kù)進(jìn)行比對(duì),來(lái)發(fā)現(xiàn)文件的變動(dòng)情況。
對(duì)于一些不需要的系統(tǒng)服務(wù),最好及時(shí)將其關(guān)閉。系統(tǒng)內(nèi)核的重要性不言自喻,因?yàn)楹芏喙舳际轻槍?duì)特定內(nèi)核的,因此升級(jí)到穩(wěn)定的新內(nèi)核版本,是提高系統(tǒng)安全性的好方法。
對(duì)于系統(tǒng)軟件要及時(shí)進(jìn)行更新,防止黑客利用潛在的漏洞進(jìn)行滲透。網(wǎng)絡(luò)安全不僅僅要重視來(lái)自外網(wǎng)的訪問(wèn),對(duì)于內(nèi)網(wǎng)的安全同樣不可忽視。
例如可以將一些服務(wù)器放置到DMZ區(qū)域,將其和內(nèi)網(wǎng)分隔開(kāi),這可以有效防止來(lái)之內(nèi)部的破壞活動(dòng)。為了進(jìn)一步提高安全性,可以在網(wǎng)絡(luò)中的關(guān)鍵服務(wù)器上安裝Snort等入侵檢測(cè)系統(tǒng),來(lái)對(duì)整個(gè)網(wǎng)段進(jìn)行監(jiān)控,提高內(nèi)網(wǎng)的安全性。在部署入侵檢測(cè)系統(tǒng)時(shí),可以采取靈活的策略。例如可以將入侵檢測(cè)檢測(cè)主機(jī)連接到防火墻和交換機(jī)之間串接一個(gè)集線器上,也可以將其安裝到交換機(jī)下的某臺(tái)主機(jī)上,或者直接將其安裝到防火墻主機(jī)上,對(duì)進(jìn)出整個(gè)內(nèi)網(wǎng)的所有數(shù)據(jù)包進(jìn)行分析監(jiān)控等。