來源:modsecurity handbook second edition
在安裝ModSecurity之前烁挟,您需要決定是否要從源代碼編譯它掠河,還是使用二進(jìn)制版本——要么是包含在您的操作系統(tǒng)中肥照,要么是由第三方生成的败富。每個(gè)選項(xiàng)都有優(yōu)點(diǎn)和缺點(diǎn)舟山,如表2.1所列。
? ? ? 在某些情況下谎碍,你沒有選擇的余地鳞滨。例如,如果您已經(jīng)從源代碼安裝了Apache蟆淀,那么您也需要從源代碼中安裝ModSecurity(當(dāng)然拯啦,您將能夠重用系統(tǒng)包)澡匪。以下的問題可以幫助你做出決定:
?你打算認(rèn)真使用ModSecurity嗎?
?從源代碼中編譯程序是否合適?
?你有足夠的時(shí)間花在編譯和連續(xù)維護(hù)一個(gè)定制的程序上嗎?
?您是否需要更改ModSecurity或編寫自己的擴(kuò)展?
普通用戶通常應(yīng)盡量使用二進(jìn)制包(在大多數(shù)分布情況下都可用)。
2.1? 從源代碼安裝
當(dāng)我們構(gòu)建專用的反向代理安裝時(shí)褒链,我們傾向于從源代碼構(gòu)建所有的東西唁情,因?yàn)檫@允許我們?cè)L問最新的Apache和ModSecurity版本,并且在我們想要的時(shí)候更容易調(diào)整元素(通過更改Apache或ModSecurity的源代碼)碱蒙。
2.1.1下載發(fā)布
要下載ModSecurity荠瘪,請(qǐng)?jiān)L問其網(wǎng)站或GitHub項(xiàng)目頁面。您將需要源代碼的主要發(fā)行版和它的加密簽名:
$ wget https://www.modsecurity.org/tarball/2.9.1/modsecurity-2.9.1.tar.gz
$ wget https://www.modsecurity.org/tarball/2.9.1/modsecurity-2.9.1.tar.gz.asc
在做其他事情之前先驗(yàn)證簽名赛惩,確保你剛剛下載的包不包含第三方植入的特洛伊木馬,并且在傳輸過程中沒有被損壞趁餐。
$ gpg --verify modsecurity-2.9.1.tar.gz.asc
gpg: Signature made Wed 09 Mar 2016 19:48:15 CET using DSA key ID E8B11277
gpg: Can't check signature: public key not found
您的第一次嘗試可能沒有提供預(yù)期的結(jié)果喷兼,但是可以通過從一個(gè)密鑰服務(wù)器導(dǎo)入引用的密鑰輕松地解決這個(gè)問題:
$ gpg --keyserver pgp.mit.edu --recv-keys E8B11277gpg: requesting key E8B11277 from hkp server pgp.mit.edugpg: key E8B11277: public key "Felipe Zimmerle da Nobrega Costa ..." imported
gpg: 3 marginal(s) needed, 1 complete(s) needed, classic trust model
gpg: depth: 0 valid:3 signed:5 trust: 0-, 0q, 0n, 0m, 0f, 3u
gpg: depth: 1 valid:5 signed:5 trust: 2-, 0q, 0n, 2m, 1f, 0u
gpg: depth: 2 valid:4 signed:0 trust: 1-, 0q, 0n, 0m, 3f, 0u
gpg: next trustdb check due at 2018-09-26
gpg: Total number processed: 1
gpg:imported: 1
現(xiàn)在你可以再試一次:
$ gpg --verify modsecurity-2.9.1.tar.gz.ascgpg: Signature made Wed 09 Mar 2016 19:48:15 CET using DSA key ID E8B11277gpg: Good signature from "Felipe Zimmerle da Nobrega Costa ..."
gpg:aka "Felipe Zimmerle"gpg:aka "Felipe Costa"gpg:aka "Felipe Zimmerle (gmail)"
gpg:aka "[jpeg image of size 7280]"
gpg:aka "[jpeg image of size 14514]"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:There is no indication that the signature belongs to the owner.
Primary key fingerprint: 190E FACC A1E9 FA46 6A8E CD9C E6DF B08C E8B1 1277
前面代碼片段中的警告可能看起來很嚴(yán)重,但通常不是問題;這與gpg希望你驗(yàn)證個(gè)人身份的方式有關(guān)后雷。這個(gè)警告基本上告訴你季惯,你從某個(gè)地方下載了斐利貝的鑰匙,但你并不真正知道它是屬于他的臀突。就gpg而言勉抓,唯一能確定的方法就是在現(xiàn)實(shí)生活中與斐利貝見面,或者與認(rèn)識(shí)他的人見面候学。如果你想了解更多藕筋,在維基百科上查一下信任網(wǎng)。
2.1.2從存儲(chǔ)庫下載
如果您希望處于最前沿梳码,直接從GitHub存儲(chǔ)庫下載最新的開發(fā)版本(ModSecurity項(xiàng)目使用的源代碼控制系統(tǒng))是可行的隐圾。當(dāng)你這樣做的時(shí)候,你會(huì)得到新的功能掰茶,甚至是在他們正式發(fā)布之前的幾個(gè)月就可獲得最新功能暇藏。話雖如此,但我們稱某些版本為“穩(wěn)定”是有原因的濒蒋。當(dāng)您使用存儲(chǔ)庫版本的ModSecurity時(shí)盐碱,您需要接受沒有任何保證可以確保它能夠正常工作。
在安裝ModSecurity的開發(fā)版本之前沪伙,您需要知道在哪里找到它瓮顽。存儲(chǔ)庫由GitHub托管,可以通過瀏覽器查看焰坪。GitHub上的默認(rèn)視圖是主源代碼樹趣倾,它顯示了最新的開發(fā)版本和最新的已被接受的更改。提議的更改可以通過pull請(qǐng)求或通過它們自己的分支來訪問某饰。這些活動(dòng)分支有時(shí)可能包含一個(gè)未被主源代碼所接受的特性或修復(fù)儒恋。如果您想下載一個(gè)發(fā)布候選版本或測(cè)試版本善绎,您可以通過一個(gè)單獨(dú)的子菜單訪問這些存檔。
一旦確定了要使用的ModSecurity版本的位置诫尽,就可以使用Git的克隆命令來獲得它:
$ git clone https://github.com/SpiderLabs/ModSecurity.git modsecurity-master
在modsecurity主文件夾中禀酱,您可以使用與下載版本時(shí)獲得的內(nèi)容相同的內(nèi)容。不過牧嫉,有些文件需要首先通過一個(gè)特殊的命令生成剂跟。此外,文檔可能不同步酣藻。主文檔保存在一個(gè)wiki中曹洽,其中包含了發(fā)布的wiki副本。
2.1.3在Unix下安裝
在開始編譯ModSecurity之前辽剧,您必須確保已經(jīng)安裝了完整的開發(fā)工具鏈送淆。請(qǐng)參考您正在使用的操作系統(tǒng)的文檔。如果您要將ModSecurity添加到操作系統(tǒng)提供的Apache中怕轿,您可能還需要安裝特定的Apache開發(fā)包偷崩。例如,在Debian和Ubuntu中撞羽,您需要使用apache2-dev阐斜。
如果已經(jīng)安裝了Apache,則只需要處理libcurl诀紊、libxml2谒出、Lua、ssdeep和YAJL渡紫。通過從源代碼編譯的Apache到推,您還需要PCRE庫。Apache不再與它捆綁在一起惕澎。要解決這個(gè)問題莉测,請(qǐng)分別安裝PCRE,然后告訴Apache使用外部副本;我將在本節(jié)后面解釋如何做唧喉。
如果您是從源代碼安裝捣卤,請(qǐng)?jiān)L問包的web站點(diǎn)并下載并安裝tarball。如果您使用的是托管包八孝,那么您只需要確定調(diào)用了哪些缺失的包董朝。在Debian家族的發(fā)行版中,以下命令安裝缺失的包:
# apt-get install libcurl3-dev liblua5.3-dev libxml2-dev libfuzzy-dev libyajl-dev
請(qǐng)參閱您的平臺(tái)使用的包管理系統(tǒng)的文檔干跛,以確定如何搜索包數(shù)據(jù)庫子姜。
請(qǐng)注意
用于遠(yuǎn)程登錄的Libcurl,可以被編譯為使用OpenSSL或GnuTLS楼入。建議您使用OpenSSL哥捕,因?yàn)楫?dāng)使用GnuTLS時(shí)牧抽,存在關(guān)于遠(yuǎn)程登錄問題的投訴。APR-Util通常是在不支持加密操作的情況下編譯的遥赚。如果您想要使用帶有參數(shù)密碼的指令秘密扬舒,您需要自己編譯APR-Util。
從這里開始凫佛,這個(gè)過程應(yīng)該很簡(jiǎn)單讲坎。如果您克隆了GitHub存儲(chǔ)庫并沒有下載一個(gè)版本,那么您需要生成配置腳本愧薛,該腳本用于準(zhǔn)備編譯過程:
$ ./autogen.sh
如果您下載了一個(gè)版本晨炕,那么您可以跳過這一步并直接執(zhí)行以下命令:
$ ./configure
$ make
這組命令假設(shè)您不需要任何編譯時(shí)選項(xiàng)。如果有毫炉,請(qǐng)參見下面的小節(jié)府瞄。
請(qǐng)注意
在編譯后運(yùn)行額外的測(cè)試(make test和make test-regression)始終是一個(gè)好主意,在使用ModSecurity的開發(fā)版本時(shí)尤其是個(gè)好主意碘箍。如果您有任何問題,您希望在安裝之前發(fā)現(xiàn)他們鲸郊,而不是之后丰榴。
在構(gòu)建完ModSecurity之后,還需要進(jìn)行安裝:
$ sudo make install
該命令將模塊添加到Apache安裝中秆撮,但不激活它;你必須手動(dòng)操作四濒。(當(dāng)您這樣做時(shí),請(qǐng)確認(rèn)是否啟用了mod_unique_id;ModSecurity需要它职辨。)該命令還將創(chuàng)建一個(gè)文件夾(默認(rèn)為/usr/local/modsecurity)盗蟆,并存儲(chǔ)其中的各種運(yùn)行時(shí)文件。以下是你得到的:
bin/
? ? ? mlogc
? ? ? ? mlogc-batch-load.pl
? ? ? ? rules-updater.pl
lib/
? ? ? ? mod_security2.so
編譯時(shí)選擇
前一節(jié)的配置示例假設(shè)這些依賴項(xiàng)都是作為系統(tǒng)庫安裝的舒裤。它還假設(shè)configure腳本將自己處理所有事情喳资。它可能會(huì),也可能不會(huì)腾供,但很有可能你偶爾需要做一些不同的事情;這就是表2.3中列出的編譯時(shí)選項(xiàng)派上用場(chǎng)的地方仆邓。
對(duì)于ModSecurity的審計(jì)日志格式,還有一些其他選項(xiàng)伴鳖。它們很少在實(shí)踐中使用节值,但請(qǐng)查看configure腳本以獲得概述。
自定義編譯Apache安裝
使用帶有定制編譯版本的Apache的ModSecurity非常簡(jiǎn)單榜聂。在Apache 2.2中搞疗,曾經(jīng)出現(xiàn)過PCRE和mod_unique_id模塊在默認(rèn)情況下無法啟用的問題须肆,但是這些問題都是在Apache 2.4中解決了匿乃。
要配置ModSecurity桩皿,可以使用- with_apxs編譯時(shí)選項(xiàng)來指定Apache安裝的位置。在下面的例子中扳埂,我假設(shè)Apache安裝在/usr/local/apache:
$ ./configure \
? ? ? ? ? --with-apxs=/usr/local/apache/bin/apxs
從這里開始业簿,按照上一節(jié)的描述安裝ModSecurity。
在安裝了Apache和ModSecurity之后阳懂,您應(yīng)該確認(rèn)兩個(gè)產(chǎn)品都鏈接到同一個(gè)PCRE庫梅尤,使用ldd:
$ ldd /usr/local/apache/bin/httpd | grep pcre
libpcre.so.3 => /lib64/libpcre.so.3 (0x00007ff2a11fd000)
編譯ModSecurity時(shí),應(yīng)該得到相同的結(jié)果:
$ ldd /usr/local/apache/modules/mod_security2.so | grep pcre
libpcre.so.3 => /lib64/libpcre.so.3 (0x00007f85995c5000)
提示
Mac OS X沒有l(wèi)dd岩调,但是您可以通過運(yùn)行otool與選項(xiàng)-L來獲得等價(jià)的功能巷燥。如果您確實(shí)遇到了瓶頸,請(qǐng)考慮使用install_name_tool在ModSecurity編譯后更改庫依賴項(xiàng)号枕。
很可能有一個(gè)配置缰揪,在這個(gè)配置中,Apache使用其綁定的PCRE葱淳,而ModSecurity使用系統(tǒng)上可用的另一個(gè)PCRE版本钝腺。
ModSecurity報(bào)告在啟動(dòng)時(shí)檢測(cè)到的庫版本號(hào)(在錯(cuò)誤日志中),并將它們與編譯時(shí)使用的數(shù)據(jù)進(jìn)行比較赞厕。如果發(fā)現(xiàn)不匹配艳狐,將發(fā)出一個(gè)或多個(gè)警告。這個(gè)特性對(duì)于解決各種庫沖突(可能發(fā)生在奇怪的情況下)來說特別方便皿桑。
ModSecurity for Apache/2.9.1 (http://www.modsecurity.org/) configured.
ModSecurity: APR compiled version="1.5.2"; loaded version="1.5.2"
ModSecurity: PCRE compiled version="8.39 "; loaded version="8.39 2016-06-14"
ModSecurity: LUA compiled version="Lua 5.2"
ModSecurity: YAJL compiled version="2.0.4"
ModSecurity: LIBXML compiled version="2.9.1"
2.2從二進(jìn)制文件安裝
正如前面所討論的毫目,使用ModSecurity的二進(jìn)制版本通常是最簡(jiǎn)單的選擇,因?yàn)樗怯行У幕逦辍2恍业氖嵌婆埃诎惭b時(shí)所獲得的便利,有時(shí)會(huì)被限制在較舊版本上沟绪。此外刮便,packager通常不包括mlogc,這有助于遠(yuǎn)程日志集中化近零。一般來說诺核,如果您對(duì)模塊的編譯方式?jīng)]有問題,那么您就可以使用二進(jìn)制包了久信。
2.3Fedora Core, CentOS窖杀,紅帽企業(yè)Linux。
如果您是Fedora用戶裙士,您可以直接從官方發(fā)行版安裝ModSecurity入客,使用yum:
# yum install mod_security
在CentOS和Red Hat Enterprise Linux上,您必須使用來自企業(yè)Linux的額外軟件包(EPEL)的包,這是Fedora社區(qū)的一部分桌硫。安裝過程與Fedora相同夭咬。
2.4Debian和Ubuntu
Debian是第一個(gè)包含ModSecurity的發(fā)行版。Alberto Gonzalez Iniesta一直是Debian的ModSecurity的長(zhǎng)期支持者铆隘,在他自己的(非官方的)存儲(chǔ)庫中支持ModSecurity卓舵,后來成為官方的包裝器。
如果您運(yùn)行的是Debian家族的版本膀钠,安裝很簡(jiǎn)單:
# apt-get install libapache2-mod-security2
此單個(gè)命令將下載軟件包并安裝掏湾,然后激活A(yù)pache配置中的模塊。
請(qǐng)注意
不要忘記Debian使用了一個(gè)特殊的命名配置文件系統(tǒng)來管理Apache模塊和站點(diǎn)肿嘲。要激活和停用模塊融击,分別使用a2enmod和a2dismod。為了管理Apache雳窟,使用apache2ctl尊浪。
2.5在Windows上安裝
ModSecurity早在2003年就被移植到Windows上,此后一直運(yùn)行良好封救。Windows二進(jìn)制包的ModSecurity由Steffen Land維護(hù)拇涤,他管理Apache Lounge,這個(gè)社區(qū)是為那些在Windows上運(yùn)行Apache的人提供的誉结,除了ModSecurity之外工育,Steffen還維護(hù)了他自己的Apache版本,以及許多第三方模塊搓彻。
您可能想在Windows上運(yùn)行。ModSecurity二進(jìn)制包一直都是最新的嘱朽,所以如果你想運(yùn)行最新版本旭贬,你會(huì)遇到一點(diǎn)麻煩。下載包括ModSecurity和mlogc搪泳。
請(qǐng)注意
雖然可以使用其他地方生成的Apache版本來運(yùn)行Steffen的ModSecurity二進(jìn)制文件稀轨,但您實(shí)際上應(yīng)該只使用那些打算一起使用的單個(gè)位置的包。否則岸军,您可能會(huì)遇到異常行為和web服務(wù)器崩潰奋刽。
安裝很簡(jiǎn)單。首先艰赞,下載包并將動(dòng)態(tài)庫復(fù)制到模塊/文件夾(Apache安裝)中佣谐。然后,修改Apache配置以激活ModSecurity:
LoadModule security2_module modules/mod_security2.so
您還需要激活mod_unique_id方妖。這個(gè)模塊可能沒有被激活狭魂,但是在您的配置中應(yīng)該已經(jīng)有一個(gè)注釋了的行。你只需要找到它并取消注釋。如果沒有雌澄,只需添加以下內(nèi)容:
LoadModule unique_id_module modules/mod_unique_id.so
2.6總結(jié)
安裝ModSecurity從來都不是件容易的事斋泄,因?yàn)樗嗽S多操作系統(tǒng)和發(fā)行版。雖然從源代碼安裝可以保證訪問最新版本镐牺,也可以訪問尚未發(fā)布的代碼炫掐,但是如果您不習(xí)慣使用它,它可能會(huì)很費(fèi)時(shí)間;每個(gè)人都有不同的習(xí)慣睬涧。使用提供的版本有一些事情需要說明募胃,不必考慮升級(jí)(并節(jié)省升級(jí)所需的時(shí)間)。
在下一章中宙地,我將解釋每一個(gè)配置選項(xiàng)摔认,教你如何設(shè)置每一個(gè)選項(xiàng),一步一步地宅粥,讓一切都是你喜歡的方式参袱。