Security for Apache2

1. mod_security
描述:
這個模組可以有效防止XSS(or CSS)及SQL Injection的攻擊(當然也包含防止盜連),搭配官方或適當的規則,可大幅提昇Apahce的安全性,
並且也有獨立的稽核及除錯紀錄,方便管理員追蹤。(但是不知道為什麼沒有被Apache基金會包進去?)
因為我們要讓mod_security跟httpd整合編譯,所以先下載到適當位置就好。

wget http://www.modsecurity.org/download/modsecurity-apache_1.9.4.tar.gz
wget http://www.modsecurity.org/download/modsecurity-rules-current.tar.gz

2. httpd-2.2.2
描述:
我們要手動編譯,把有些內定開啟的模組關閉,並同時將mod_security一起編譯進去。
參考:http://httpd.apache.org/

wget http://apache.cdpa.nsysu.edu.tw/httpd/httpd-2.2.2.tar.gz
tar xzvf httpd-2.2.2.tar.gz
mkdir -p httpd-2.2.2/modules/security
tar xzvf modsecurity-apache_1.9.4.tar.gz
cd modsecurity-apache_1.9.4/apache2/
cp mod_security.c Makefile.in config.m4 /tmp/httpd-2.2.2/modules/security/
cd /tmp/httpd-2.2.2
./buildconf 

(這個指令會跑一陣子,讓apache編譯程式搜尋到你剛剛建立的modules/security,並且建立設定檔)

./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 沒辦法,沒機器了~湊合著點)

wget http://dev.mysql.com/get/Downloads/MySQL-4.1/mysql-max-4.1.20-pc-linux-gnu-i686-icc-glibc23.tar.gz
tar xzvf mysql-standard-4.1.20-pc-linux-gnu-i686-glibc23.tar.gz
mv mysql-standard-4.1.20-pc-linux-gnu-i686-glibc23 /usr/local/mysql/ 

是的,目前你只需要把它解壓縮,然後搬到/usr/local就好了。

4. zlib
描述:
我想我的系統一定有zlib,也許是版本太舊了,但是既然PHP5跟我要求,那只好去抓新版的回來裝了:

wget http://www.zlib.net/zlib-1.2.3.tar.gz
tar xzvf zlib-1.2.3.tar.gz
cd zlib-1.2.3
./configure --prefix=/usr/local
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個步驟再一起設定。

wget ftp://tw.php.net/php/distributions/php-5.1.4.tar.gz
tar xzvf php-5.1.4.tar.gz
cd php-5.1.4
./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 裝起來)

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 modulephp5′ 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/ 

(為了方便往後的設定,建議您將這個畫面的資料拷貝下來。)
依照安裝程式的建議,我們再跑一次(雖然我也不知道這樣是否需要,呵呵):

./libtool --finish /root/php-5.1.4/libs

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

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 

看起來好像還是太多不必要的Modules,不太符合安全標準,有空再來瘦身一下。
到這裡為止,我們需要的軟體套件已經具備好了,接下來就準備建立chroot的環境了。

About the Author

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

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