■ 河南 劉進京
編者按:Linux系統并非無懈可擊,同樣存在各種漏洞。在很多Linux服務器上運行各種Web服務,如何提高其安全性,是管理員必須重視的事情。相比之下,使用WAF(即Web應用防護系統)可以有效提高其安全性。WAF是基于網站應用級別的入侵防御系統,通過執行一些針對HTTP/HTTPSDE安全策略,專門為Web應用提供保護。
Nginx服務器目前應用的極為廣泛,WAF就可以通過專門的模塊,對其進行安全保護。
例如,WAF能夠實現黑白名單功能,禁止黑名單的IP訪問。可以使用URL白名單功能定義無需過濾的URL。WAF支持User-Agent過濾,并與自定義規則進行匹配,其支持CC攻擊保護,可以有效限制單個URL在指定時間內的訪問次數。
此外,WAF還支持Cookie和URL過濾,而且支持URL參數過濾,利用預設的規則防止惡意攻擊。利用日志記錄功能,WAF可以將可疑的訪問行為全部記錄下來。
WAF能夠對HTTP請求進行異常檢測,過濾異常的HTTP請求,而且可以只允許HTTP協議的部分選項通過,來有效較小攻擊的范圍。
對于高級的WAP應用防火墻來說,還可以嚴格限制HTTP協議中不常用的或者沒有被完全規范的選項。對于諸如網頁篡改、竊取數據、安裝后門等入侵行為,WAF可以通過輸入驗證技術來加以防范。
任何網站都有可能存在各種漏洞,如果不及時將漏洞補上,很容易招致黑客的攻擊。WAF可以利用各種漏洞信息,并在盡可能短的時間內修補漏洞。
WAF是基于安全規則進行運作的,利用各種Web應用的規則可以對網站進行全面的檢測,通過建立基于應用數據的模型,可以準確判斷應用數據是否存在異常。利用WAF的狀態管理功能,可以有效檢測諸如登錄失敗等異常事件,并對對超過極限值的行為進行管控,這對于防御各種暴力破解行為非常有用。
當用戶首次訪問時,WAF可以將其重定向到默認登錄頁面,并對用戶的整體行為進行識別和記錄,這有利于判別該行為是否具有攻擊性。
此外,WAF還具有響應監視和保護信息泄露、隱藏表單域、抗擊入侵規避技術等功能。因為有些開發人員對于輸入信息并沒有進行有效的安全監測,而WAF恰恰可以有效增強其安全性。
WAF和防火墻是存在區別的,防火墻的主要作用是控制網絡訪問,其工作在OSI模型的三層和四層。防火墻是基于報文進行檢測的,可以對端口訪問進行管理,但是其無法處理HTTP會話,無法理解各種Web應用應用程序語句。所以防火墻無法對HTTP通訊進行輸入驗證和攻擊方式分析。現在很多針對Web訪問的攻擊(例如SQL注入、跨站腳本、Cookie欺騙等),都會將惡意數據包封裝為看似合法HTTP請求,通過TCP 80/443等端口通過防火墻檢測。
當然,對于比較高級的防火墻(下一代防火墻),也可以在一定程度上提供應用層防御功能。例如,可以根據異常的TCP會話分析其攻擊特征并阻止網絡層攻擊,將IP報文進行拆分組合來判斷是否隱藏有惡意攻擊數據包等。
但是,從原理上說防火墻是無法理解HTTP會話的,難以完美應對各種基于應用的攻擊行為。與之對應的是,WAF可以在應用層很好的理解HTTP會話,可以有效防御基于應用層的攻擊。
WAF的組成包括協議解析模塊、規則管理模塊、動作處理模塊、防御模塊、配置模塊和錯誤處理模塊等,可以依次實現解析HTTP請求、檢測訪問以及防御和記錄惡意攻擊等功能。
例如,在Linux服務器上下 載Nginx、PCRE、LuaJIT、Ngx_Devel_Kit,以及Lua_Nginx_Module等軟件包,使用Tar命令將其全部解壓到特定的目錄中(例如“/usr/local/src”)。執行以下命令安裝Lua即時編譯器LuaJIT:

執 行“useradd nguser-s/sbin/nologin -M”命令,創建名為“nguser”的用戶,使用其運行Nginx,并且禁止其擁有登錄權限。
執行“tar xvf nginx-1.x.x.tar.gz”命令,對Nginx包進行解壓,其中的“x”表示具體的版本號。執行以下命令安裝Nginx:


注意其中使用“–addmodule”,“–with-pcre”等參數指定了PCRE、LuaJIT、Ngx_Devel_Kit和Lua_Nginx_Module等軟件的路徑。進入Nginx安裝路徑中的“conf”目錄,執行“ln -s/usr/local/lib/libluajit-5.x.so.x/lib/libluajit-5.x.so.x”,創建符號鏈接。
執行“vi nginx.conf”命令,在其配置文件中添加:

執行“/usr/local/nginx/sbin/nginx -t”命令,會顯示Nginx的配置文件語法正確的提示。執行“/usr/local/nginx/sbin/nginx”命令啟動Nginx服務,在瀏覽器中訪問“http://xxx.xxx.xxx.xxx/test”,其中的“xxx”表示Nginx服務器的地址,會顯示“Test OK”的內容,這說明配置文件是正確的。

使用WAF保護網絡應用安全,必須使用到合適的規則。這里從網上下載名為“ngx_lua_waf”的規則庫,這是一個壓縮包,將其解壓復制到Nginx的“conf”目錄中,并將目錄名更名為“waf”。
該規則庫可以用于過濾利用Post、Get以及Cookie方式進行的Web攻擊,可以防止SQL注入、本地包含、溢出攻擊、Fuzzing等壓力測試,XSS和SSRF跨站攻擊等非法行為,能夠有效防止敏感文件泄漏,屏蔽黑客掃描和非法提權,防御異常的網絡請求,防止WebShell上傳操作等。
在Nginx配置文件中的指定的“http{}”段中添加:


打開上述“WAF”目錄,執 行“vi config.lua”命令,在該配置文件中的“RulePath=”行中確保其內容 為“"/usr/local/nginx/conf/waf/wafconf/"”。
為了便于測試,執行:

創建指定的目錄,并賦予Nginx、賬戶讀寫執行該目錄的權限。
執 行“vi config.lua”命令,在其配置文件中輸入“attacklog="off"”行,開啟記錄攻擊日志功能。輸入“logdir=/data/logs/”行,設置日志存儲路徑。依次輸入:


實現開啟URL攔截訪問、攔截后重定向、攔截Cookie欺騙攻擊、攔截Post攻擊、開啟URL白名單功能、設置禁止上傳的文件類型、開啟IP白名單功能、開啟黑名單功能、開啟防御CC攻擊功能、設置CC攻擊頻率、設置警告信息等。
可以根據實際情況進行靈活的調整,例如添加更多的禁止上傳文件類型,設置更多的IP黑白名單,多個IP以逗號分隔,對于CC攻擊頻率默認為一分鐘同一個IP只能請求同一個地址100次,您可以適當修改。
之后可執行諸如“curl http://localhost/test.php?id=../etc/passwd”之類的命令,會觸發WAF保護功能,提示該訪問請求帶有不合法參數已經被攔截。
打開Nginx的“access.log”日志,根據時間信息進行查找,可以看到服務器針對該訪問返回HTTP 403代碼。
這樣,當黑客試圖對Nginx服務器進行各種攻擊時,都會觸發對應的WAF規則并被屏蔽或者攔截。
當然,對于Linux服務器進行安全保護,必須從更多的方面著手。
例如,首先必須保證Root管理員密碼的安全,必須將密碼設置的足夠長足夠復雜,而且Root密碼不能讓更多人知曉,如果發生危及密碼安全的情況,必須及時修改Root密碼等。
在執行遠程管理時,需要禁止Root賬號,只能配置一個具有Sudo權限的賬戶。對于系統賬戶來說,應該盡可能的減少其數量,對于應用程序的執行賬戶,需要將它的登錄Shell設置為Nologin狀態,禁止其登錄系統。對于無用的的賬戶,應該定期進行清理。對于vsftpd、MySQL等賬戶,需要嚴格控制其權限。
因為SSH服務使用的比較廣泛,可以實現安全的遠程連接,因此,必須采取各種措施保護其連接密碼的安全。例如使用內置的NetFilter防火墻模塊模設置IPTable規則,利用Recent參數限制連接登錄數,使用DenyHost工具等方法,防范暴力破解SSH密碼。為了有效提高SSH訪問的安全性,可以使用跳板機來進行訪問,而跳板機只允許合法的地址進行訪問。例如在線主機不開啟針對公網的SSH端口,訪問者只能通過指定的跳板機,才可以通過SSH連接訪問目標主機。
對于系統日志進行及時的查看和分析,可以有效發現黑客的蹤跡,例如,使用“last”命令可以查看非授權用戶登錄事件信息。該命令依靠的是“/var/log/wtmp”文件,如果發現該文件被刪除,就很有可能說明黑客已經光顧過。
對日志文件進行分析,如果發現其中存在沒有退出的操作和對應的登錄操作,就說明黑客惡意刪除了上述文件。
對于狡猾的黑客來說,當其入侵之后,會在系統中設置RootKIt級別的后門,讓用戶無法查找。為此可以定期使 用CHKrootkit、RKHunter等工具對系統進行掃描,來及時發現并清除這類后門。當黑客侵入系統后,必然會對一些系統文件進行篡改,這就導致文件系統的完整性遭到破壞。
因此,管理員通過檢測文件系統的異常變化,就可以發現黑客活動的蹤跡。使用Tripwire之類的軟件,可以針對文件系統拍攝快照,為當前的系統狀態創建數據庫。當文件發生變化(例如新建、刪除、修改等),Tripwire可以將現在的文件系統信息和之前創建數據庫進行比對,來發現文件的變動情況。
對于一些不需要的系統服務,最好及時將其關閉。系統內核的重要性不言自喻,因為很多攻擊都是針對特定內核的,因此升級到穩定的新內核版本,是提高系統安全性的好方法。
對于系統軟件要及時進行更新,防止黑客利用潛在的漏洞進行滲透。網絡安全不僅僅要重視來自外網的訪問,對于內網的安全同樣不可忽視。

例如可以將一些服務器放置到DMZ區域,將其和內網分隔開,這可以有效防止來之內部的破壞活動。為了進一步提高安全性,可以在網絡中的關鍵服務器上安裝Snort等入侵檢測系統,來對整個網段進行監控,提高內網的安全性。在部署入侵檢測系統時,可以采取靈活的策略。例如可以將入侵檢測檢測主機連接到防火墻和交換機之間串接一個集線器上,也可以將其安裝到交換機下的某臺主機上,或者直接將其安裝到防火墻主機上,對進出整個內網的所有數據包進行分析監控等。