佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > FreeBSD下創(chuàng)建安全的Web服務器

FreeBSD下創(chuàng)建安全的Web服務器

熱門標簽:集時通訊 檢查注冊表項 免費建站 蘋果 呼叫外包 呼叫中心解決方案 美團 IT外包

序言

一、系統(tǒng)和服務程序的安裝
1. 系統(tǒng)安裝
2. 服務程序安裝

二、系統(tǒng)安全設置
1. 用戶控制
2. 文件訪問控制
3. 系統(tǒng)服務和端口控制
4. 日志管理和控制
5. 文件指紋檢測
6. 系統(tǒng)指紋泄露和防范
7. 系統(tǒng)內(nèi)核安全
8. 系統(tǒng)安全優(yōu)化

三、服務程序的安全設置
1. Apache安全設置
2. PHP安全設置
3. Mysql安全設置
4. vsFTPd安全設置
5. SSH的安全設置

四、防火墻的安裝和設置
1. 安裝ipfw
2. 配置ipfw

五、Unix/Linux上的后門技術和防范
1. 帳號后門
2. shell后門
3. cron服務后門
4. rhosts后門
5. Login后門
6. Bind后門
7. 服務后門
8. rootkit后門
9. 內(nèi)核后門
10. 其他后門

六、結束語

附錄


序言

在我們跑Web服務器的時候,大家可能都會一致認為使用Linux+Mysql+Apache+PHP整個開源的系統(tǒng)是比較好的選擇,但是我個人認為這是不合理的,首先要根據(jù)你的應用來覺得你使用什么服務。假如你需要跑Oracle等大型應用的話,而且Oracle在Linux下是支持的比較好的,那么使用Linux是個好的選擇,因為在FreeBSD下安裝Oracle是個非常麻煩的事情。那么如果是跑普通的網(wǎng)站應用的話,我覺得使用FreeBSD+ Mysql+Apache+PHP是個好的選擇,因為對于一個網(wǎng)站來講,穩(wěn)定安全是第一位的,否則你的網(wǎng)站什么時候被人修改了都不知道怎么回事,或者被黑客入侵,把數(shù)據(jù)修改或者刪除,那就糟糕了,畢竟現(xiàn)在什么紅客、黑客的一堆,不能不防。當然,不是說Linux不安全,但是在Linux下集成了很多不安全的程序,導致了它的不安全,但如果設置的好,Linux一樣可以很安全。在中國網(wǎng)絡應急響應中心(http://www.cert.org.cn)這幾個月的數(shù)據(jù)來看,每個月被入侵成功最高的是Linux系統(tǒng),占百分之六十多,然后過來是Windows系統(tǒng),占百分之三十多,而FreeBSD的入侵比例是百分之幾。

任何系統(tǒng)都可以很安全,也可以很不安全,關鍵是管理員怎么做的,世界上沒有最安全的系統(tǒng),只有更安全的系統(tǒng)。下面的文章就是
在FreeBSD平臺上構建一個比較安全的Web服務器,希望對網(wǎng)管和網(wǎng)絡安全愛好者能有一些啟發(fā),權當拋磚引玉,希望能夠有更好闡述的文章。


一、系統(tǒng)和服務程序的安裝


1. 系統(tǒng)安裝

為了保證系統(tǒng)的安全,我們系統(tǒng)準備采用最新的FreeBSD版本,首先是安全,系統(tǒng)兼容性也比較好,這個主要是個人習慣和需求,為了簡單起見,這里我們選用了最新的FreeBSd5.3版本進行安裝。整個安裝過程我就不講了,如果不清楚的朋友可以參考FreeBSD中文手冊(http://www.freebsd.org.cn),整個過程不是很復雜,雖然沒有Windows/Linux的系統(tǒng)安全簡單,但是比起有些Unix的安裝來講是人性許多的。安裝中必須把基本包和內(nèi)核源代碼都裝上,為了以后編譯內(nèi)核方便,如果另外,如果喜歡使用ports安裝軟件的話,還要把ports裝上,但是盡量一些沒有必要的程序不要裝。如果要安裝 Webmin等,還要把perl等包裝上。系統(tǒng)文件拷貝完以后,會要求配置一些設置,比如把IP地址、名字服務器等設好,不要打開IPv6,不需要 DHCP等服務,不要系統(tǒng)默認的FTP服務,配置 /etc/inetd.conf 時把SSH服務打開,方便我們進行遠程管理,如果不想使用inetd這個超級服務來管理的話,可以關閉它,在/etc/rc.conf中添加 inetd_enable="NO",然后設置sshd_enable="YES"一樣可以打開SSH服務,后面我們會詳細談到SSH的設置。

系統(tǒng)裝完后,在 /etc/inetd.conf 中把除了ssh之外的服務全部關閉,特別是telnet和rlogin等服務,一定要慎重,否則很可能每幾天系統(tǒng)就被入侵了。安裝完系統(tǒng)后,建議對系統(tǒng)進行升級,比如使用 make world 或 cvsup 把系統(tǒng)內(nèi)核和ports進行升級。這個步驟和Windows裝完后打補丁差不多。


2. 服務程序安裝

系統(tǒng)裝完以后,就開始安裝我們的應用軟件,我們的方針還是最新的軟件是最安全的,比如能夠防止一些老版本中的溢出等等。我們基本就是要讓我們的系統(tǒng)有數(shù)據(jù)庫,同時能夠處理Web服務,同時能夠遠程對網(wǎng)站進行文件管理的FTP服務。我們基本選擇的程序都是比較通常的程序。另外,為了有個可視化的管理工具,我們同時也可以安裝一個基于瀏覽器的管理工具Webmin,方便沒有ssh客戶端等等的時候進行管理。

首先我們選用的Web服務是Apache httpd 2.0.53,這是目前的最新版本,當然你也可以考慮1.3的版本,主要是看個人習慣。我們網(wǎng)站是PHP程序編寫,所以要安裝PHP,版本是 4.3.11,也是最新的版本,如果你的網(wǎng)站程序需要PHP5的支持,那么可以下載php5.0.4。數(shù)據(jù)庫還是最快速的Mysql,選擇的版本是最新的 4.0.23,如果你需要外鍵、事務、子查詢、存儲過程等的支持,那么你可以考慮4.1和5.0的版本。最后我們的FTP選擇最安全的vsFTPd,因為它是最安全快速的,我在局域網(wǎng)中測試它的最高創(chuàng)數(shù)速率能夠達到10MB/S,proFTPd只有8MB/S,vsFTPd針對小型FTP服務器支持非常好,畢竟我用戶不多,幾個更新網(wǎng)站而已,當然,如果你喜歡簡單方便,也可以考慮使用FreeBSD自帶的FTPd,功能和易用性也是不錯的。如果你用戶比較多,并且功能要求比較高,建議使用proFTPd、pure-FTPd、wu-FTPd等,但有些FTPd不是非常安全,選擇時候一定要慎重考慮。

服務器程序列表:
Apache 2.0.53 下載地址:http://httpd.apache.org
PHP 4.3.11 下載地址:http://www.php.net
Mysql 4.0.23 下載地址:http://dev.mysql.com
vsFTPd 2.0.2 下載地址:http://vsftpd.beasts.org

反正最少的服務+最少的端口+安全的設置 = 最大的安全,盡量能夠不需要使用的服務就不要安裝,比如telnetd、rlogind等,那么相反會對服務器安全構成威脅。

安裝以上程序你可以采用手工編譯安裝,也可以采用FreeBSD的ports 來進行安裝,這看個人愛好,我個人比較喜歡使用手工安裝,如果不明白具體安裝的朋友可以參考我的Blog上關于安裝Apache+PHP+Mysql的方法。



二、系統(tǒng)安全設置


1. 用戶控制

盡量少的用戶,我們的FTP帳戶是和系統(tǒng)帳戶綁定在一起的,所以我們添加用戶的時候先建立一個目錄,然后把新建的用戶主目錄指向到該目錄下。假設我需要一個用戶能夠管理我的網(wǎng)站,而我網(wǎng)站的目錄是在 /usr/www 目錄下,那么我們新建立的用戶 www_user 的主目錄就指向 /usr/www 目錄,同時它的shell是沒有的:/usr/sbin/nologin ,主要是為了防止它通過ssh登陸到系統(tǒng)。同時FTP的密碼也要設置的非常復雜,防止黑客通過暴力破解獲得FTP權限。另外還要說道我們的root用戶的密碼,我想最少應該不要少于10位的數(shù)字+字母+字符的密碼(我的密碼是18位),否則是非常不安全的,如果密碼簡單,那么黑客通過短時間的暴力破解 SSH中的root帳戶,不用幾天,系統(tǒng)就可能被攻破了,同時也建議最少一個月更改一次root用戶的密碼。(強烈建議一般帳戶不要有登陸系統(tǒng)的權限,就是把shell設為/usr/sbin/nologin)
一般如果要使用root權限建議建立一個屬于wheel組的小用戶,然后登陸后通過su命令提升為root用戶進行管理,如果黑客通過破解了我們普通用戶的權限后登陸系統(tǒng),也不能直接通過root權限進行管理,這是一種安全防范的簡單方法。


2. 文件訪問控制

有時候被黑客入侵后拿到了小權限用戶,比如傳了一個WebShell到系統(tǒng)中,那么對方很可能會把 /etc/passwd 等內(nèi)容直接讀取出來,同時查看/etc/master.passwd中對加密后的root用戶的密碼hash進行破解,最后拿到密碼進行登陸系統(tǒng)。那么我們就要控制部分文件只有root能夠訪問,其他用戶無權訪問。比如uname,gcc等,如果黑客拿到小權限用戶后就會查看系統(tǒng)版本,然后找到該版本系統(tǒng)對應的溢出程序,使用gcc來進行編譯,如果我們能夠限制黑客訪問uname和gcc等程序,能在一定程度上減緩黑客入侵的腳步。
使用chmod來改變某個文件的權限信息,比如我要 /etc/passwd 和 /etc/master.passwd 文件只能允許root訪問:
使用八進制數(shù)字來設置
# chmod 700 /etc/passwd
# chmod 700 /etc/master.passwd
使用字符標記來進行設置
# chmod u+w+r+x,go-w-r-x /etc/passwd
# chmod u+w+r+x,go-w-r-x /etc/master.passwd
系統(tǒng)中有多個重要文件需要設置控制訪問權限,一定要控制好,否則將會構成重要威脅。


3. 系統(tǒng)服務和端口控制

端口開的越多就越給黑客多一個入侵的機會,服務越多,危險越大,因為你不知道那些服務是不是有潛在的漏洞或者又發(fā)現(xiàn)了新的漏洞,所以盡量少的服務,比如sendmail默認是打開的,那么些建議你把sendmail關閉,關閉防范是在 /etc/rc.conf中加上:
sendmail_enable = "NONE",如果設為"NO"那么只能夠關閉掉pop3服務,不能關閉smtp的服務,所以要設置為"NONE"。
系統(tǒng)中最好除了我們能夠看到的Apache、Mysql、vsFTPd、SSH之外不要打開其他任何端口和服務?;镜姆绞绞鞘褂胣etstat -a 查看打開的端口,然后從對應的端口來找相關的服務,比如我們這里應該只允許開的端口有 21, 22, 80, 3306等,如果有其他端口,那么一定要仔細檢查,很可能是黑客的后門或者是會對系統(tǒng)安全構成威脅的服務。同時有些服務不需要****網(wǎng)絡連接的話,只是需要本地的連接,比如Mysql,那么就可以關閉Socket****,這個將在Mysql安全設置中講解,另外,可以通過防火墻來控制部分端口訪問和連接狀況,比如Mysql的3306端口只允許192.168.0.1訪問,那么我們就在ipfw里添加規(guī)則:
ipfw add 10001 allow tcp from 192.168.0.1 to 10.10.10.1 80 in
這樣就能夠防止黑客來訪問服務器上的Mysql服務。具體防火墻的設置將在下面“防火墻設置”中詳細講解。


4. 日志管理和控制 (未完)


5. 文件指紋檢測

文件指紋就是我們文件的基本信息,比如文件權限、文件所屬用戶/組、文件最后修改日期、文件大小等等,這些都是重要信息,一般黑客入侵后都可能修改文件,那么文件指紋就不一樣了。另外,文件的md5校驗值也屬于文件的指紋的一種。
為了防止黑客篡改系統(tǒng)中的部分核心文件,比如 /etc/passwd, /etc/shadow, /etc/inetd.conf 等等,那么我們就可以考慮把部分重要文件進行備份,同時做一份目前有的文件的一個指紋保留,比如把 /etc,/bin, /usr/bin 目錄下的文件進行指紋保留:
# ls -l /etc > /var/back/etc.txt
# ls -l /bin > /var/back/bin.txt
# ls -l /bin > /var/back/usrbin.txt
當然,還有就是給每個重要的文件加上md5校驗值,如果覺得不對勁的時候就進行匹配,保證文件的安全。
你可以給你覺得需要做指紋備份的目錄進行備份,一般這是為了以后被黑客入侵后的系統(tǒng)檢測和系統(tǒng)恢復。比如可以通過文件被修改的時間來確定是不是被入侵,比如可以對比看 /etc/inetc.conf文件和備份的文件有什么不同來確定是不是安裝了服務型后門等。


6. 系統(tǒng)指紋泄漏和防范 (未完)

一般黑客為了入侵某個系統(tǒng),一定會先進行掃描等工作,掃描包括目標系統(tǒng)的端口開放情況和服務器使用服務程序和操作系統(tǒng)情況。比如很簡單的手工檢測Web服務的指紋:
# telnet target.com 80
那么就很可能返回Apache和PHP的版本信息,那么同時也可能使用掃描工具對Mysql、vsFTPd、SSH等服務的端口進行掃描,獲取這些服務的指紋。多暴露一份系統(tǒng)信息,那么系統(tǒng)就多一份危險。那么解決辦法就是把服務器上服務程序的Banner全部修改掉,從而能夠迷惑黑客。

下面簡單的說一些修改那些服務Banner的方法。

* Apache
修改httpd.conf文件,設置以下選項:
ServerSignature Off
ServerTokens Prod
上面的適用apache1***, apache 2.0這些都是默認 , 不過還是有server=Apache字樣, 若要完全去掉需重新編譯。
徹底地去掉banner, 修改httpd.h:
Include/httpd.h
Define SERVER_BASEVENDOR "Apache Group"
Define SERVER_PRODUCTVENDOR "Apache"
Define SERVER_BASEVERSION "1.3.27"
后從新編譯Apache就能夠完全去掉了。


* PHP
在php.ini中設置 expose_php = Off ,那么將無法在 http頭信息中看到php的版本信息。

* Mysql


* vsFTPd
vsFTPd基本上是無法獲取到一些關于vsFTPd的banner信息的,不過因為vsFTPd默認的banner信息是"Welcome to FTP Server!"對于高手來說,還是能夠猜測到一點,所以我們要徹底改掉。修改vsFTPd的配置文件 vsftpd.conf 中的下面選項:
Ftpd_banner=xxxxx
把后面的xxxxx改為你想要的banner信息。


* SSH
好象FreeBSD下默認安裝的SSH被telnet target.com 22 的時候會顯示SSH和FreeBSD的信息,簡直是個大禍害,什么都告訴別人了,但是目前為止我還不知道怎么修改,知道的高手請指點。


7. 系統(tǒng)內(nèi)核安全

FreeBSD有個比較強的功能,就是能夠定義系統(tǒng)內(nèi)核的安全等級,主要是為了防止內(nèi)核后門專門定制的,能通過不同的等級限制對內(nèi)核的訪問和對防火墻等的修改。我們首先要開啟系統(tǒng)的安全等級,然后設定安全等級,我們打開 /etc/rc.conf:
# ee /etc/rc.conf
加入下面的內(nèi)容:
kern_securelevel_enable="YES"
kern_securelevel="-1"
第一句是打開安全等級,第二句是定義等級。它一共五個等級,下面說說不同之處。
* kern_securelevel -1:這是系統(tǒng)默認級別,沒有提供任何內(nèi)核的保護錯誤;
* kern_securelevel 0:基本上作用不多,當你的系統(tǒng)剛啟動就是0級別的,當進入多用戶模式的時候就自動變成1級了。
* kern_securelevel 1:在這個級別上,有如下幾個限制:
a. 不能通過kldload或者kldunload加載或者卸載可加載內(nèi)核模塊;
b. 應用程序不能通過/dev/mem或者/dev/kmem直接寫內(nèi)存;
c. 不能直接往已經(jīng)裝在(mounted)的磁盤寫東西,也就是不能格式化磁盤,但是可以通過標準的內(nèi)核接口執(zhí)行寫操作;
d. 不能啟動X-windows,同時不能使用chflags來修改文件屬性;
* kern_securelevel 2:在 1 級別的基礎上還不能寫沒裝載的磁盤,而且不能在1秒之內(nèi)制造多次警告,這個是防止DoS控制臺的;
* kern_securelevel 3:在 2 級別的級別上不允許修改IPFW防火墻的規(guī)則。
如果你已經(jīng)裝了防火墻,并且把規(guī)則設好了,不輕易改動,那么建議使用3級別,如果你沒有裝防火墻,而且還準備裝防火墻的話,不建議使用。我們這里推薦使用 2 級別,能夠避免比較多對內(nèi)核攻擊。


8. 系統(tǒng)安全優(yōu)化

一般優(yōu)化系統(tǒng)主要是重新編譯內(nèi)核,去掉一些不要的驅(qū)動等等,你可以參考我在我Blog上寫的關于編譯內(nèi)核的文章。我們這里對網(wǎng)絡和內(nèi)核一些選項進行優(yōu)化和安全設置。編輯 /etc/sysctl.conf 文件,在里面加入如下內(nèi)容:(有注釋)

#最大的待發(fā)送TCP數(shù)據(jù)緩沖區(qū)空間
net.inet.tcp.sendspace=65536

#最大的接受TCP緩沖區(qū)空間
net.inet.tcp.recvspace=65536

#最大的接受UDP緩沖區(qū)大小
net.inet.udp.sendspace=65535

#最大的發(fā)送UDP數(shù)據(jù)緩沖區(qū)大小
net.inet.udp.maxdgram=65535

#本地套接字連接的數(shù)據(jù)發(fā)送空間
net.local.stream.sendspace=65535

#加快網(wǎng)絡性能的協(xié)議
net.inet.tcp.rfc1323=1
net.inet.tcp.rfc1644=1
net.inet.tcp.rfc3042=1
net.inet.tcp.rfc3390=1

#最大的套接字緩沖區(qū)
kern.ipc.maxsockbuf=2097152

#系統(tǒng)中允許的最多文件數(shù)量
kern.maxfiles=65536

#每個進程能夠同時打開的最大文件數(shù)量
kern.maxfilesperproc=32768

#當一臺計算機發(fā)起TCP連接請求時,系統(tǒng)會回應ACK應答數(shù)據(jù)包。該選項設置是否延遲ACK應答數(shù)據(jù)包,把它和包含數(shù)據(jù)的數(shù)據(jù)包一起發(fā)送,在高速網(wǎng)絡和低負載的情況下會略微提高性能,但在網(wǎng)絡連接較差的時候,對方計算機得不到應答會持續(xù)發(fā)起連接請求,反而會降低性能。
net.inet.tcp.delayed_ack=0

#屏蔽ICMP重定向功能
net.inet.icmp.drop_redirect=1
net.inet.icmp.log_redirect=1
net.inet.ip.redirect=0
net.inet6.ip6.redirect=0

#防止ICMP廣播風暴
net.inet.icmp.bmcastecho=0
net.inet.icmp.maskrepl=0

#限制系統(tǒng)發(fā)送ICMP速率
net.inet.icmp.icmplim=100

#安全參數(shù),編譯內(nèi)核的時候加了options TCP_DROP_SYNFIN才可以用
net.inet.icmp.icmplim_output=0
net.inet.tcp.drop_synfin=1

#設置為1會幫助系統(tǒng)清除沒有正常斷開的TCP連接,這增加了一些網(wǎng)絡帶寬的使用,但是一些死掉的連接最終能被識別并清除。死的TCP連接是被撥號用戶存取的系統(tǒng)的一個特別的問題,因為用戶經(jīng)常斷開modem而不正確的關閉活動的連接
net.inet.tcp.always_keepalive=1

#若看到net.inet.ip.intr_queue_drops這個在增加,就要調(diào)大net.inet.ip.intr_queue_maxlen,為0最好
net.inet.ip.intr_queue_maxlen=1000

#防止DOS攻擊,默認為30000
net.inet.tcp.msl=7500

#接收到一個已經(jīng)關閉的端口發(fā)來的所有包,直接drop,如果設置為1則是只針對TCP包
net.inet.tcp.blackhole=2

#接收到一個已經(jīng)關閉的端口發(fā)來的所有UDP包直接drop
net.inet.udp.blackhole=1

#為網(wǎng)絡數(shù)據(jù)連接時提供緩沖
net.inet.tcp.inflight.enable=1

#如果打開的話每個目標地址一次轉發(fā)成功以后它的數(shù)據(jù)都將被記錄進路由表和arp數(shù)據(jù)表,節(jié)約路由的計算時間,但會需要大量的內(nèi)核內(nèi)存空間來保存路由表
net.inet.ip.fastforwarding=0

#kernel編譯打開options POLLING功能,高負載情況下使用低負載不推薦SMP不能和polling一起用
#kern.polling.enable=1

#并發(fā)連接數(shù),默認為128,推薦在1024-4096之間,數(shù)字越大占用內(nèi)存也越大
kern.ipc.somaxconn=32768

#禁止用戶查看其他用戶的進程
security.bsd.see_other_uids=0

#設置kernel安全級別
kern.securelevel=0

#記錄下任何TCP連接
net.inet.tcp.log_in_vain=1

#記錄下任何UDP連接
net.inet.udp.log_in_vain=1

#防止不正確的udp包的攻擊
net.inet.udp.checksum=1

#防止DOS攻擊
net.inet.tcp.syncookies=1

#僅為線程提供物理內(nèi)存支持,需要256兆以上內(nèi)存
kern.ipc.shm_use_phys=1

# 線程可使用的最大共享內(nèi)存
kern.ipc.shmmax=67108864

# 最大線程數(shù)量
kern.ipc.shmall=32768

# 程序崩潰時不記錄
kern.coredump=0

# lo本地數(shù)據(jù)流接收和發(fā)送空間
net.local.stream.recvspace=65536
net.local.dgram.maxdgram=16384
net.local.dgram.recvspace=65536

# 數(shù)據(jù)包數(shù)據(jù)段大小,ADSL為1452。
net.inet.tcp.mssdflt=1460

# 為網(wǎng)絡數(shù)據(jù)連接時提供緩沖
net.inet.tcp.inflight_enable=1

# 數(shù)據(jù)包數(shù)據(jù)段最小值,ADSL為1452
net.inet.tcp.minmss=1460

# 本地數(shù)據(jù)最大數(shù)量
net.inet.raw.maxdgram=65536

# 本地數(shù)據(jù)流接收空間
net.inet.raw.recvspace=65536

#ipfw防火墻動態(tài)規(guī)則數(shù)量,默認為4096,增大該值可以防止某些病毒發(fā)送大量TCP連接,導致不能建立正常連接
net.inet.ip.fw.dyn_max=65535

#設置ipf防火墻TCP連接空閑保留時間,默認8640000(120小時)
net.inet.ipf.fr_tcpidletimeout=864000



三、 服務程序的安全設置

到這里就是本文的重點所在了,我們將花費比較多的文字進行描述,當然,所以描述不一定是非常正確的,也希望能夠?qū)δ阌幸恍椭?。我們系統(tǒng)默認是運行了包括Apache、Mysql、vsFTPd,SSH等服務,我們以下進行一一講解。


1. Apache的安全設置

Apache的核心設置就是在 httpd.conf 里面,我們安裝的Apache的目錄是在 /usr/local/apache2/ 下,那么我們的配置文件就是在 /usr/local/apache2/conf/httpd.conf ,如果你是使用ports等安裝的,配置文件應該是在/etc或/usr/local/etc目錄下。使用ee或者vi打開配置文件:
# ee /usr/local/apache2/conf/httpd.conf
下面我們就要進行比較多的安全設置了,基本的服務、端口、主目錄等等設置就不說了,只講與安全有關的設置。

(1)指定運行Apache服務的用戶和組
這是比較重要的,因為權限是繼承的,如果運行Apache服務的用戶權限太高,那么很可能使得入侵者通過WebShell等就會對系統(tǒng)構成嚴重威脅。一般我們運行Apache的是nobody用戶和nobody組。在httpd.conf的250-275行之間找到User和Group選項,比如我們默認設置如下(去掉了注釋信息):


User nobody
Group #-1



(2) Apache的日志文件
Apache的日志文件是非常重要的,可以發(fā)現(xiàn)apache的運行狀況和訪問情況,對于判斷入侵等有重要幫助。它的默認選項是:
# 錯誤日志存放目錄,默認是存放在apache安裝目錄的logs下
ErrorLog logs/error_log
# 日志記錄的級別,級別有debug, info, notice, warn, error, crit等,默認是“warn”級別
LogLevel warn
# 訪問日志記錄的格式,每一種格式都有不同的內(nèi)容,根據(jù)你的需要進行定制,以獲取最多訪問信息
LogFormat "%h %l %u %t \&;%r\&; %>s %b \&;%{Referer}i\&; \&;%{User-Agent}i\&;" combined
LogFormat "%h %l %u %t \&;%r\&; %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
# 使用上面格式的那一種,默認是使用common
CustomLog logs/access_log common

文件格式預定義的格式內(nèi)容:
%a 遠程用戶IP
%A 本地httpd服務器的ip
%f 傳送的文件名
%h 遠程主機
%m 請求方式
%l identd給出的遠程名
%p 連接的httpd端口號
%P 請求的httpd進程
%t 時間
%T 服務請求時間
你可以定制自己的日志格式,然后通過CustomLog logs/access_log common來進行調(diào)用。

注意,日志文件是由運行Apache的用戶進行打開的,要注意該文件的安全,防止被黑客改寫或者刪除。

(3) Apache服務信息顯示控制
在配置文件中有個選項是控制是否顯示apache版本信息、主機名稱、端口、支持的cgi等信息的:
ServerSignature On
默認為On,那么將顯示所有信息:
我故意訪問一個不存在的文件:http://www.target.com/404.html
那么就會在給的錯誤提示中顯示如下信息:
Apache/2.0.53 (Unix) PHP/4.3.11 Server at target.com Port 80

所有Apache和PHP的信息暴露無遺,這是很不安全的。當然同時還有Off和EMail選項,Off將不顯示任何信息,EMail將顯示管理員的郵箱地址,建議設為Off或者EMail,這樣能夠避免泄漏Apache服務器的信息給黑客。

(4) 目錄瀏覽
在httpd.conf中可以設置apache能夠?qū)σ恍]有索引文件的網(wǎng)頁目錄進行目錄瀏覽:

Options Indexes FollowSymLinks
AllowOverride None

這是不合適也不安全的,建議不需要目錄瀏覽:

Options FollowSymLinks
AllowOverride None


(5) 用戶主頁
設置httpd.conf中的:
UserDir public_html
能夠使得每個使用系統(tǒng)的用戶在自己的主目錄下建立 public_html 目錄后就能夠把自己的網(wǎng)頁放進該目錄,然后通過:
http://www.target.com/~用戶名/網(wǎng)頁 就能夠顯示自己的網(wǎng)頁,這是不安全的,而且對于我們服務器來講,這沒有必要,所以我們直接關閉該功能:
UserDir disabled
或者把該內(nèi)容改名,改成 一個黑客比較不容易猜到的文件名,比如:
UserDir webserver_public_htmlpath
也可以只允許部分用戶具有該功能:
UserDir enabled user1 user2 user3

(6) CGI執(zhí)行目錄
如果你的apache要執(zhí)行一些perl等cgi程序,那么就要設置一下選項:
ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"
但是這也給了黑客利用一些不安全的cgi程序來進行破壞,所以如果你不需要cgi的話,建議關閉該選項:
#ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"

(7) 控制PHP腳本只能訪問指定目錄
在httpd.conf添加如下內(nèi)容:
php_admin_value open_basedir /usr/www
后面的路徑是你需要PHP腳本能夠訪問的目錄,如果PHP腳本想要訪問其他目錄將出項錯誤提示

標簽:營口 眉山 宿遷 泰州 信陽 安康 邢臺 韶關

巨人網(wǎng)絡通訊聲明:本文標題《FreeBSD下創(chuàng)建安全的Web服務器》,本文關鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    阳谷县| 灌南县| 项城市| 潮安县| 雷波县| 武威市| 绿春县| 景谷| 宁乡县| 大同市| 永昌县| 东至县| 唐海县| 泌阳县| 揭阳市| 德令哈市| 怀化市| 剑阁县| 清水县| 全椒县| 大丰市| 桂阳县| 志丹县| 西乡县| 长阳| 同德县| 南投县| 阿拉尔市| 昭通市| 吴堡县| 青川县| 兴城市| 宜兰县| 青神县| 准格尔旗| 平阴县| 大埔区| 丰城市| 通许县| 邹城市| 深圳市|