Security for Aapache2

1. mod_security

描述:

這個模組可以有效防止XSS(or CSS)及SQL Injection的攻擊(當然也包含防止盜連),搭配官方或適當的規則,可大幅提昇Apahce的安全性,

並且也有獨立的稽核及除錯紀錄,方便管理員追蹤。(但是不知道為什麼沒有被Apache基金會包進去?)

因為我們要讓mod_security跟httpd整合編譯,所以先下載到適當位置就好。
 代碼: 
 [ root@saycoo] wget [url]http://www.modsecurity.org/download/modsecurity-apache_1.9.4.tar.gz[/url]

[ root@saycoo] wget [url]http://www.modsecurity.org/download/modsecurity-rules-current.tar.gz[/url]
 
 

2. httpd-2.2.2

描述:

我們要手動編譯,把有些內定開啟的模組關閉,並同時將mod_security一起編譯進去。

參考:http://httpd.apache.org/
 
 代碼: 
 
 [root@saycoo] wget [url]http://apache.cdpa.nsysu.edu.tw/httpd/httpd-2.2.2.tar.gz[/url]

[root@saycoo] tar xzvf httpd-2.2.2.tar.gz

[root@saycoo] mkdir -p httpd-2.2.2/modules/security

[root@saycoo] tar xzvf modsecurity-apache_1.9.4.tar.gz

[root@saycoo] cd modsecurity-apache_1.9.4/apache2/

[root@saycoo] cp mod_security.c Makefile.in config.m4 /tmp/httpd-2.2.2/modules/security/

[root@saycoo] cd /tmp/httpd-2.2.2

[root@saycoo] ./buildconf 
 
(這個指令會跑一陣子,讓apache編譯程式搜尋到你剛剛建立的modules/security,並且建立設定檔)
 
 代碼: 
 
 [root@saycoo] ./configure

–prefix=/usr/local/apache2 –with-mpm=prefork –disable-charset-lite

–disable-include –disable-env –disable-setenvif –disable-status

–disable-autoindex –disable-asis –disable-cgi –disable-negotiation

–disable-imap –disable-actions –disable-userdir –disable-alias

–enable-so –enable-security –enable-vhost-alias 
 
(以上請自行參酌開啟或關閉,我是照原作的設定下去跑的,不過我有開so,

因我只知道用libphp5.so,呵~不知有沒有人可以提供可以完全把so關掉的方法?cgi ???)

3. mysql-binary

描述:

編譯php時需要用的,所以要比PHP早安裝,但請特別注意,MySQL官方也是建議您使用Binary套件,

也就是你下載之後的MySQL 套件,只要是適合你的系統版本,就可以直接執行,而不需要任何編譯的動作。

所以一定要找到適合您的系統的套件,一般只要選擇standard的套件,再看看你的glibc是那一版的。

(一開始的時候用MySQL 5,但是花了我太多時間,卡在一個問題而裝不起來,所以後來才改用4.1.20)

下載網址:http://dev.mysql.com/downloads/mysql/4.1.html

(這裡的範例是RedHat Enterprise 4 on Celeron 500 沒辦法,沒機器了~湊合著點)
 
 代碼: 
 
 [root@saycoo] [url]http://dev.mysql.com/get/Downloads/MySQL-4.1/mysql-max-4.1.20-pc-linux-gnu-i686-icc-glibc23.tar.gz[/url]

[root@saycoo] tar xzvf mysql-standard-4.1.20-pc-linux-gnu-i686-glibc23.tar.gz

[root@saycoo] mv mysql-standard-4.1.20-pc-linux-gnu-i686-glibc23 /usr/local/mysql/ 
 
是的,目前你只需要把它解壓縮,然後搬到/usr/local就好了。

4. zlib

描述:

我想我的系統一定有zlib,也許是版本太舊了,但是既然PHP5跟我要求,那只好去抓新版的回來裝了:
 
 代碼: 
 
 [root@saycoo] wget [url]http://www.zlib.net/zlib-1.2.3.tar.gz[/url]

[root@saycoo] tar xzvf zlib-1.2.3.tar.gz

[root@saycoo] cd zlib-1.2.3

[root@saycoo] ./configure –prefix=/usr/local

[root@saycoo] make ; make install 
 
這個步驟應該不會有問題,如果有的話,請詳讀README或INSTALL,或請將錯誤訊息丟給google處理。

5. php-5.1.4

描述:

最後才編譯PHP,說真的我覺得蠻難裝的,有些套件其實我也不確定是否可以不要,萬一以後想用GD的話怎麼辦呢?

只好想說,先讓基本的功能都先跑起來最重要。

在這裡編譯完之後,libphp5.so會自己放到httpd的modules目錄底下,並且增加一行LoadModule的設定到httpd.conf,

但是你需要手動加一行 AddType application/x-httpd-php .php ,不急,反正還要一下子,等會到第8個步驟再一起設定。
 
 代碼: 
 
 [root@saycoo] wget [url]ftp://tw.php.net/php/distributions/php-5.1.4.tar.gz[/url]

[root@saycoo] tar xzvf php-5.1.4.tar.gz

[root@saycoo] cd php-5.1.4

[root@saycoo] ./configure –prefix=/usr/local

–with-mysql=/usr/local/mysql

–with-apxs2=/usr/local/apache2/bin/apxs

–enable-mbstring –with-zlib-dir=/usr/local 
 
(從上面的設定看來,我們一定先把 apache 及 mysql 裝起來)
 
 代碼: 
 
 [saycoo@Linux php-5.1.4]# make install

Installing PHP SAPI module: apache2handler

/usr/local/apache2/build/instdso.sh SH_LIBTOOL=’/usr/local/apache2/build/libtool’ libphp5.la /usr/local/apache2/modules

/usr/local/apache2/build/libtool –mode=install cp libphp5.la /usr/local/apache2/modules/

cp .libs/libphp5.so /usr/local/apache2/modules/libphp5.so

cp .libs/libphp5.lai /usr/local/apache2/modules/libphp5.la

libtool: install: warning: remember to run `libtool –finish /root/php-5.1.4/libs’

chmod 755 /usr/local/apache2/modules/libphp5.so

[activating module `php5′ in /usr/local/apache2/conf/httpd.conf]

Installing PHP CLI binary: /usr/local/bin/

Installing PHP CLI man page: /usr/local/man/man1/

Installing build environment: /usr/local/lib/php/build/

Installing header files: /usr/local/include/php/

Installing helper programs: /usr/local/bin/

program: phpize

program: php-config

Installing man pages: /usr/local/man/man1/

page: phpize.1

page: php-config.1

Installing PEAR environment: /usr/local/lib/php/

[PEAR] Archive_Tar – installed: 1.3.1

[PEAR] Console_Getopt – installed: 1.2

pear/PEAR can optionally use package “pear/XML_RPC” (version >= 1.4.0)

[PEAR] PEAR – installed: 1.4.9

Wrote PEAR system config file at: /usr/local/etc/pear.conf

You may want to add: /usr/local/lib/php to your php.ini include_path

Installing PDO headers: /usr/local/include/php/ext/pdo/ 
 
(為了方便往後的設定,建議您將這個畫面的資料拷貝下來。)

依照安裝程式的建議,我們再跑一次(雖然我也不知道這樣是否需要,呵呵):

[root@saycoo] ./libtool –finish /root/php-5.1.4/libs

本來我也是想照原文把大部分的模組關掉,但老是編不起來,加上對PHP又沒有很熟,後來只好退而求其次。

我把我編譯好的模組列出來:
 
 代碼: 
 
 bash-3.00# php -m

[PHP Modules]

ctype

date

dom

hash

iconv

libxml

mbstring

mysql

pcre

PDO

posix

Reflection

session

SimpleXML

SPL

SQLite

standard

tokenizer

xml

xmlreader

xmlwriter

zlib 
 
看起來好像還是太多了,不太符合安全標準,有空再來瘦身一下。

到這裡為止,我們需要的軟體套件已經具備好了,接下來就準備建立chroot的環境了。

在開始複製之前,記得一件事情,就是要善用 ldd (print shared library dependencies)這個工具,

(當然你也一定要熟悉tail工具的用法,常用的還是 tail -f /xxx/yyy/zzz.log )

因為我們要從一個完全沒有Library程式庫的環境之下,來讓這些工具跑起來,也只有藉由這樣的工具,

才讓你可以正確的建置你需要的chroot環境。
 

Facebook 留言

About the Author

Leave a Reply

Please Login to comment

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料

  Subscribe  
Notify of
wpDiscuz