如何在Ubuntu上搭建一臺(tái)安全的Apache Web服務(wù)器?
譯文本教程假設(shè)你已有一臺(tái)在運(yùn)行的Ubuntu服務(wù)器,網(wǎng)絡(luò)方面已設(shè)置好,而且可以通過(guò)SSH進(jìn)行訪問(wèn)。
Apache2是許多安裝的Linux發(fā)行版使用的默認(rèn)Web服務(wù)器。它不是對(duì)所有環(huán)境來(lái)說(shuō)唯一可用的Web服務(wù)器,也不是最佳的Web服務(wù)器,但是它適合許多使用場(chǎng)景。在安裝過(guò)程中,系統(tǒng)可能會(huì)詢問(wèn)你哪個(gè)Web服務(wù)器要自動(dòng)重新配置。選擇“apache2”即可。
安裝Apache2
使用下面這個(gè)命令,安裝Apache2及其他庫(kù)。
$ sudo apt-get -y install apt-get install apache2 apache2.2-common apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-php5 php5 php5-common php5-gd php5-cli php5-cgi libapache2-mod-fcgid apache2-suexec php-pear php-auth php5-mcrypt mcrypt libapache2-mod-suphp libopenssl-ruby libapache2-mod-ruby
更新時(shí)區(qū)(TimeZone)和檢查正確時(shí)間
為了減小共享數(shù)據(jù)或鏡像數(shù)據(jù)方面的混淆,所有服務(wù)器在運(yùn)行時(shí)都應(yīng)該盡可能接近同步狀態(tài)。一些加密密鑰管理系統(tǒng)需要準(zhǔn)確的時(shí)間。最后,就企業(yè)服務(wù)器而言,《薩班斯-奧克斯利法案》(Sarbanes-Oxley)和《健康保險(xiǎn)可攜性及責(zé)任性法案》(HIPAA)的安全規(guī)則要求正確的時(shí)間戳機(jī)制。
$ sudo apt-get -y install openntpd tzdata $ sudo dpkg-reconfigure tzdata $ sudo service openntpd restart
禁止AppArmor沖突
雖然AppArmor這個(gè)套件的確提供了一層額外的安全,但在我看來(lái),需要為每個(gè)系統(tǒng)創(chuàng)建自定義配置文件。這不是本教程所探討的內(nèi)容。所以眼下,我們會(huì)禁用AppArmor,防止與任何默認(rèn)的配置發(fā)生沖突。
$ sudo /etc/init.d/apparmor stop $ sudo update-rc.d -f apparmor remove $ sudo apt-get remove apparmor apparmor-utils
注意:如果是生產(chǎn)環(huán)境下的Web服務(wù)器,不建議禁用AppArmor。如果有些人想創(chuàng)建自定義的AppArmor配置文件,請(qǐng)參閱官方說(shuō)明文檔(http://wiki.apparmor.net/index.php/Documentation)。
阻止分布式拒絕服務(wù)(DDoS)攻擊
DDoS攻擊是一種分布式拒絕服務(wù)攻擊。有一個(gè)Apache模塊可以阻止這類攻擊。
$ sudo apt-get -y install libapache2-mod-evasive $ sudo mkdir -p /var/log/apache2/evasive $ sudo chown -R www-data:root /var/log/apache2/evasive
把下面這個(gè)命令添加到mod-evasive.load的末尾處。
$ sudo nano /etc/apache2/mods-available/mod-evasive.load DOSHashTableSize 2048 DOSPageCount 20 # 請(qǐng)求同一頁(yè)面的最大數(shù)量 DOSSiteCount 300 # 同一偵聽(tīng)器上同一客戶端IP請(qǐng)求任何對(duì)象的總數(shù)量 DOSPageInterval 1.0 # 頁(yè)面數(shù)量閾值的間隔 DOSSiteInterval 1.0 # 站點(diǎn)數(shù)量閾值的間隔 DOSBlockingPeriod 10.0 # 客戶機(jī)IP被阻止的時(shí)間段 DOSLogDir “/var/log/apache2/evasive” DOSEmailNotify admin@domain.com
阻止Slowloris攻擊
還有一個(gè)Apache模塊可以阻止Slowloris攻擊,不過(guò)模塊名稱取決于你使用的Ubuntu的具體版本。如果是Ubuntu 12.10或以后版本:
$ sudo apt-get -y install libapache2-mod-qos
然后,檢查qos.conf中的配置:
$ sudo nano /etc/apache2/mods-available/qos.conf
## 服務(wù)質(zhì)量方面的設(shè)置
# 處理來(lái)自多達(dá)100000個(gè)不同IP的連接
QS_ClientEntries 100000
# 只允許每個(gè)IP僅50條連接
QS_SrvMaxConnPerIP 50
# 活動(dòng)TCP連接的最大數(shù)量限制在256條
MaxClients 256
# 當(dāng)70%的TCP連接被占用時(shí),禁用保持活動(dòng)連接狀態(tài)
QS_SrvMaxConnClose 180
# 最小請(qǐng)求/響應(yīng)速度(拒絕阻塞服務(wù)器的慢速客戶端,即slowloris保持連接開(kāi)啟,不提出任何請(qǐng)求):
QS_SrvMinDataRate 150 1200
# 并限制請(qǐng)求標(biāo)題和主體(注意,這還限制了上傳和發(fā)帖請(qǐng)求):
# LimitRequestFields 30 # QS_LimitRequestBody 102400
注意:如果你運(yùn)行12.04之前的Ubuntu版本,改而使用下面這個(gè)命令:
$ sudo apt-get -y install libapache2-mod-antiloris
檢查antiloris.conf中的配置
$ sudo nano /etc/apache2/mods-available/antiloris.conf
# 每個(gè)IP地址處于READ狀態(tài)的最大并行連接數(shù)量
IPReadLimit 5
阻止DNS注入攻擊
Spamhaus這個(gè)模塊使用域名系統(tǒng)黑名單(DNSBL),目的是為了阻止通過(guò)Web表單實(shí)現(xiàn)的垃圾郵件轉(zhuǎn)發(fā),防止URL注入攻擊,阻止來(lái)自機(jī)器人程序的http DDoS攻擊,通常保護(hù)服務(wù)器,遠(yuǎn)離已知的惡意IP地址。
$ sudo apt-get -y install libapache2-mod-spamhaus $ sudo touch /etc/spamhaus.wl Append the config to apache2.conf $ sudo nano /etc/apache2/apache2.conf MS_METHODS POST,PUT,OPTIONS,CONNECT MS_WhiteList /etc/spamhaus.wl MS_CacheSize 256
重啟Apache裝入新模塊
$ sudo service apache2 restart
現(xiàn)在Web服務(wù)器已安裝完畢,并在正常運(yùn)行。將Web瀏覽器指向你的域,即可看到證明你一切正常的默認(rèn)消息。作為最后的檢查機(jī)制,運(yùn)行下面這個(gè)命令,看看你的服務(wù)器有沒(méi)有任何錯(cuò)誤信息。要是有錯(cuò)誤信息,你需要上谷歌搜索一下,立馬解決這些錯(cuò)誤。
$ sudo tail -200 /var/log/syslog
原文地址:http://xmodulo.com/2013/11/secure-apache-webserver-ubuntu.html