用SSL構建一個安全的Apache
這篇文章要說明的是如何將阿帕奇與SSL(Secure Socket Layer)結合起來安裝
配置。眾所周知,在網絡上以明文傳遞敏感信息是相當不安全的,因此SSL提供
了一種加密手段,在底層上為上層協議提供服務和加密方案,因此當用戶在以
HTTP協議傳輸數據時,窺探者將難以獲取數據的信息。當然加密只是在傳輸過程
中的,對用戶是完全透明的。
那么就開始吧……
二、準備工作
如果你的系統是從頭裝起的話,建議你留出一個叫/chroot的分區用來運行Apache。
至于這個分區的大小,取決于你自已,一般來說,一個普通的網站有40M也就夠了。
但你的系統如果早就運行了Apache,你可以另外開辟一個分區,或者選擇不用獨立
分區來安裝,僅僅在根下面開一個目錄。
另外我假定你的系統已經通過了一定的安全檢測——在安裝Apache之前(如果有其它
漏洞存在的話,你認為運行在其上的Apache會怎樣,所謂覆巢之下,焉有完卵icon_smile.gif,檢
測至少要包括(但不僅限于)——移除不安全的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很簡單,它的
版本號是<mod_ssl-version>-<apache-version>格式的,也就是說,你如果用的是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版本號的文件,使想得到它的入
侵者摸不著腦袋長哪兒icon_smile.gif
#<your favorite text editor> 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的瀏覽器來看
要停止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用戶及用戶組運行的,不
要更改它。
在passwdshadowgroup等文件中包含了大量系統信息,所以你可以替換掉它們。
建立一個用戶名為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程序還是干掉比較好些。
關鍵字:SSL 構建 安全 Apache
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解