當前位置:開發者網絡 >> 技術教程 >> 網管專欄 >> WEB服務 >> 內容
精彩推薦
分類最新教程
分類熱點教程
    
用SSL構建一個安全的Apache
作者:未知
日期:2004-06-11
人氣:
投稿:Andy.m(轉貼)
來源:未知
字體:
收藏:加入瀏覽器收藏
以下正文:

一、簡介
這篇文章要說明的是如何將阿帕奇與SSL(Secure Socket Layer)結合起來安裝配置。眾所周知,在網絡上以明文傳遞敏感信息是相當不安全的,因此SSL提供了一種加密手段,在底層上為上層協議提供服務和加密方案,因此當用戶在以HTTP協議傳輸數據時,窺探者將難以獲取數據的信息。當然加密只是在傳輸過程中的,對用戶是完全透明的。 ^^^^^^^^
那麼就開始吧……

二、準備工作
如果你的系統是從頭裝起的話,建議你留出一個叫/chroot的分區用來運行Apache。至於這個分區的大小,取決於你自已,一般來說,一個普通的網站有40M也就夠了。但你的系統如果早就運行了Apache,你可以另外開闢一個分區,或者選擇不用獨立分區來安裝,僅僅在根下面開一個目錄。
另外我假定你的系統已經通過了一定的安全檢測——在安裝Apache之前(如果有其它漏洞存在的話,你認為運行在其上的Apache會怎樣,所謂覆巢之下,焉有完卵:),檢測至少要包括(但不僅限於)——移除不安全的SUID程序、升級某些守護進程,去掉不必要的服務。還假定你是的WEB SERVER是運行TCP/IP而且有自己的地址。

三、平台
以下測試都在下列平台下通過:
1、Slackware 4.x distribution using gcc 2.7.2.3 and Perl v5.005_02
2、Solaris 7 on Sparc using gcc v2.8.1 and Perl v5.005_03

四、獲取所需要的軟件因為阿帕奇並沒有在她的包裡自己SSL,因此我們必須先下載到這些加密網頁所必需的部份:
1、Apache Web Server - http://www.apache.org/dist/
不必多說,我們當然需要獲得這個web server,現在的版本是1.3.11,阿帕奇是現在世界上使用最廣泛的web server。
2、mod_ssl - http://www.modssl.org
這是一個為Apache1.3.x web server提供強力加密的的軟件模塊,它使用的是SSL v2和v3以及TLS(Transport Layer Security)v1 協議。該軟件包是在BSD的license下開發的,在非商業的情況下,你可以自由地使用它,要判斷該使用哪一個版本的mod_ssl很簡單,它的版本號是-格式的,也就是說,你如果用的是1.3.11的Apache,那麼就該用2.50-1.3.11的mod_ssl。
3、mod_perl - http://perl.apache.org/dist/
4、Open SSL - http://www.openssl.org
這一軟件包提供了SSL v2/v3(Secure Sockets Layer)及TLS v1(Transport Layer Security)協議的加密保護。
5、RSAref - 用搜索引擎查找一下"rsaref20.tar.Z"應該就能找到了我們將把這些程序安裝於/usr/local目錄下 增加功能模塊可以給阿帕奇更強大的功能,如果你需要更多的模塊的話,自己去獲得它並且加載,比如mod_php這一模塊也是現在流行的,可以使阿帕奇提供php腳本支持……

五、軟件包的安裝
在實際安裝前我們要決定我們將把web server安裝在什麼環境下,對於一個對安全有相當高要求的人來說,可以將服務器和軟件安裝於chroot環境,chroot改變root 目錄並且僅在這一目錄中執行程序,這提供了一個內建的小環境,即使入侵者已經通過cgi程序或者其它辦法通過80端口獲得了系統的進入權限,它也只能夠在這一受限的環境中活動,從安全角度考量,這當然是最好的,但對系統管理員來說,這樣安裝相對麻煩一些,還必須把一些必要的庫,perl以及相關工具也搬到chroot中,所以——你自己決定吧,這裡我們介紹的是在chroot下安裝。
展開這些軟件包:
#gzip -d -c apache_1.3.11.tar.gz | tar xvf -
#gzip -d -c mod_ssl-2.5.0-1.3.11.tar.gz | tar xvf -
#gzip -d -c openssl-0.9.4.tar.gz | tar xvf -
#gzip -d -c mod_perl-1.21.tar.gz | tar xvf -
展開並且編譯rsaref
#mkdir rsaref
#cd rsaref
#gzip -d -c ../rsaref20.tar.Z | tar xvf -
#tar xvf rsaref.tar
#cp -rp install/unix temp
#cd temp
#make
#mv rsaref.a librsaref.a
#cd ../../
編譯OpenSSL
#cd openssl-0.9.4
#perl util/perlpath.pl /usr/bin/perl (Path to Perl)
#./config -L`pwd`/../rsaref/temp/
#make
#make test
#cd ..
將mod_perl加到Apache的編譯選項裡
#cd mod_perl-1.21
#perl Makefile.PL APACHE_PREFIX=/usr/local/apache \
APACHE_SRC=../apache_1.3.11/src \
USE_APACI=1
你會得到下面的提示:
Configure mod_perl with ../apache_1.3.11/src ? [y]
直接按enter就是默認的yes
然後Makefile會問你是否建立httpd,可以用n選擇不。
#make
#make install
#cd ..
將mod_ssl加到Apache中
#cd mod_ssl-2.5.0-1.3.11
#./configure --with-apache=../apache_1.3.11 \
--prefix=/usr/local/apache \
--with-ssl=../openssl-0.9.4 \
--with-rsa=../rsaref/temp \
--activate-module=src/modules/perl/libperl.a
#cd ..
編譯Apache:
#cd apache_1.3.11
在編譯以前我們可以再做一件事——編輯包含http server版本號的文件,使想得到它的入 侵者摸不著腦袋長哪兒:)
# src/include/httpd.h
尋找下面的行 (approx. 454)並且改變server的名字及版本號——可以隨便用你想改成的東西。
define SERVER_BASEVERSION "Apache/1.3.11"
現在你可以編譯阿帕奇了
#make
現在你可以生成一個CA了(actual certificate).
#make certificate
按照該授權書的安裝介紹做。
#make install
這將會把阿帕奇裝在/usr/local/apache。
測試web server (還沒裝SSL)是否運行正常 ----調用web server:
/usr/local/apache/bin/apachectl start
當WEB服務器運行起來後,你可以用 lynx或者任意什麼瀏覽器連接你的80端口,如果能看到apache的歡迎頁,就OK了。
停止server:
/usr/local/apache/bin/apachectl stop
測試web server (同時起SSL) - 調用帶SSL的WEB服務器
/usr/local/apache/bin/apachectl startssl
服務器運行時你用Netscape或者其它支持SSL的瀏覽器來看https://your.ip.here,看到歡迎頁了麼?
要停止SERVER:
/usr/local/apache/bin/apachectl stop

六、阿帕奇的配置
現在我們可以來看看阿帕奇的配置文件了——需要記住的是如果你對它做了更改,在未重新啟動httpd守護進程前,它是不會發生作用的。好,現在我們可以進目錄/usr/local/apache/conf看看了。
httpd.conf -這是阿帕奇的主要配置文件,你可以在這裡設定服務器啟動時的基本環境,比如服務器的啟動方式、端口號、允許的最多連接數等等,這一文件的註釋非常詳細,要看明白應該沒什麼問題。
access.conf - 這一文件是設定系統中的存取方式和環境的,但現在已經可以在httpd.conf中設定了,所以推薦你別動它,放空好了。
srm.conf - 這傢伙主要做的是資源上的設定,你也可以放空,僅僅設定httpd.conf中的相關項。
現在重啟web server來使改動生效:
#/usr/local/apache/bin/apachectl restart

七、將阿帕奇設定在chroot環境下
現在我們開始把剛才建立的東西移到chroot環境下——包括阿帕奇服務器以及所有需要的庫文件。當然如前面所說的,這部份是可選的,如果你怕麻煩的話就算了,但轉移後可以對你的web server多一個可靠的保護。
建立/chroot目錄
#mkdir /chroot
建立一些必需的子目錄
#mkdir /chroot/dev
#mkdir /chroot/lib
#mkdir /chroot/etc
#mkdir /chroot/bin
#mkdir /chroot/usr
#mkdir /chroot/usr/local
在我們的chroot建立/dev/null
#mknod -m 666 /chroot/dev/null c 1 3
將阿帕奇拷貝到/chroot目錄中
#cp -rp /usr/local/apache/ /chroot/usr/local
拷貝必需的二進制文件
#cp /bin/sh /chroot/bin
確定哪些庫是必需的——這取決於你編譯時內建了哪些模塊
#ldd /usr/local/apache/bin/httpd
將需要的庫拷貝到chroot目錄
#cp /lib/libm.* /chroot/lib/
#cp /lib/libgdbm.* /chroot/lib
#cp /lib/libdb.* /chroot/lib
#cp /lib/libdl.* /chroot/lib
#cp /lib/libc.* /chroot/lib
拷貝網絡連接所需要的函數庫
#cp /lib/libnss* /chroot/lib
拷貝必需的/etc下的文件到chroot
#cp /etc/passwd /chroot/etc
#cp /etc/shadow /chroot/etc
#cp /etc/group /chroot/etc
#cp /etc/resolv.conf /chroot/etc
#cp /etc/hosts /chroot/etc
#cp /etc/localtime /chroot/etc
#cp /etc/localtime /chroot/etc
#cp /etc/ld.so.* /chroot/etc
測試chroot下的阿帕奇
#chroot /chroot /usr/local/apache/bin/apachectl start
現在再 #chroot /chroot /usr/local/apache/bin/apachectl stop
服務器就停下來了,如果不行的話,再次確認是否所有需要的庫都拷到了/chroot/lib下了,如果仍然無幫助的話,或者可以以strace方式運行httpd,它的輸出可能會有一些有價值的內容可以幫助確定是丟失了哪些庫或者二進制文件。
然後我們可以做一些小工作了:默認情況下阿帕奇是以nobody用戶及用戶組運行的,不要更改它。
在passwd\shadow\group等文件中包含了大量系統信息,所以你可以替換掉它們。
建立一個用戶名為httpd,UID為80
建立一個組名為httpd,GID為80
用下面的命令來將/chroot下的passwd,shadow,group替換掉
#echo "httpd:x:80:100:,,,:/home/httpd:/bin/false" > /chroot/etc/passwd
#echo "httpd:*LK*:11010:0:99999:7:::" > /chroot/etc/shadow
#echo "httpd:x:80:" > /chroot/etc/group
設定好文件的許可權限
#chmod 600 /chroot/etc/passwd shadow group
現在我們可以編輯apache的配置文件並進行需要的配置,文件在/chroot/usr/local/apache/conf/httpd.conf,尋找到包含apache運行用戶及組的信息的行並改變它(approx. line 263),當然是改成httpd/httpd。
一切運行正常後我們可以刪除前面的那些服務器安裝的東西——/usr/local下的,包括服務器以及那些內建的模塊等等。
#rm -rf /usr/local/apache
#rm -rf /usr/local/mod_ssl-2.5.0-1.3.11/
#rm -rf /usr/local/mod_perl-1.21/
#rm -rf /usr/local/openssl-0.9.4/
#rm -rf /usr/local/rsaref
如果以後還想改變它們的配置,增加新的模塊,那麼將原先的apache留下來也行。將阿帕奇設定為在開機時自啟動,修改/etc/rc.d/rc.local並且加入以下行:
echo "Starting Apache-SSL"
/usr/sbin/chroot/apache/bin/apachectl startssl
如果一切都運行正常的話,那麼恭喜你,你已經成功地運行了帶SSL支持的阿帕奇了,這會使你的web server更加安全,如果你希望加入更多的模塊實現其它功能的話,自己動手吧,最後要說明的是:在chroot環境中最好只有必需的一些二進製程序,而SUID程序還是幹掉比較好些。

 

相關文章: