[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 應用技術 > SSL > 正文
用SSL構建一個安全的Apache
http://magazine.nsfocus.com/ 作者:quack (2001-04-19 17:04:46)
    參考資料:Installing and Securing the Apache Webserver with SSL

一、簡介

這篇文章要說明的是如何將阿帕奇與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程序還是幹掉比較好些。 (http://www.fanqiang.com)
    進入【UNIX論壇

相關文章

======
 

★  樊強制作 歡迎分享  ★