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 如何處理網站訪客的留言資料

%d 位部落客按了讚: