天天看點

Linux之apache服務搭建以及淺析web安全

WEB伺服器的架設,在linux有一個很著名的架構叫lamp:linux+apache+mysql+php,就知道apache的分量了。

在搭建apache服務錢需要做DNS伺服器

apache

背景程序:httpd

腳本:/etc/rc.d/init.d/httpd

預設使用端口:80(http),443(https) 

所需RPM包:httpd 

配置路徑:/etc/httpd/* 

預設網站存放路徑:/var/www/*

優點:免費,穩定,速度快

先安裝apache

<a href="http://s5.51cto.com/wyfs02/M01/87/5E/wKioL1fegRbRABIUAADF3XYxRxM604.png" target="_blank"></a>

etc/httpd存放着apache的所有配置檔案,/var/www是網頁檔案存放目錄,一般在HTML内

<a href="http://s2.51cto.com/wyfs02/M02/87/5E/wKioL1fegVKCbsZfAABrhWNwheA041.png" target="_blank"></a>

vim /etc/httpd/conf/httpd.conf appach的主配置檔案

httpd.conf配置檔案主要由全局環境、主伺服器配置和虛拟主機3個部分組成。每部分都有相應的配置語句,該檔案所有配置語句的文法為“配置參數名稱 參數值”的形式。

httpd.conf中每行包含一條語句,行末使用反斜杠“\”可以換行,但是反斜杠與下一行中間不能有任何其他字元(包括空白)

httpd.conf的配置語句除了選項的參數值以外,所有選項指令均不區分大小寫,可以在每一行前用“#”号表示注釋。 

<a href="http://s1.51cto.com/wyfs02/M01/87/5E/wKioL1fegXmTf0FYAACgEQGBUB4972.png" target="_blank"></a>

如果能看見紅色的redhat的測試頁面,就證明你的安裝沒有問題,如果看不見,你就要從新安裝,或者調試你的網絡了,網頁檔案預設是放在/var/www/html中的,我們現在就自己去寫個網頁,簡單的測試下

documentRoot 就是定義網站的預設網站存放目錄

<a href="http://s5.51cto.com/wyfs02/M00/87/5E/wKioL1fegZrhJdi6AAAt0ThzKJQ782.png" target="_blank"></a>

配置DNS,将位址解析到linux的ip位址(上篇的DNS已經解析過了)

<a href="http://s4.51cto.com/wyfs02/M01/87/61/wKiom1fegczwE511AAAkdDLZrGg866.png" target="_blank"></a>

虛拟目錄

每個 Internet服務可以從多個目錄中釋出。通過以通用命名約定 (UNC) 名、使用者名及用于通路權限的密碼指定目錄,可将每個目錄定位在本地驅動器或網絡上。虛拟伺服器可擁有一個宿主目錄和任意數量的其它釋出目錄。其它釋出目錄稱為虛拟目錄。

apache的config檔案中documentRoot 後面的是apache在解析頁面時候的根目錄,如果在本機上同時存在兩個工作目錄那麼如果不虛拟(alias)目錄的話,需要不斷修改documentroot的路徑,然後重新開機apache,相當麻煩,解決這個問題的辦法之一就是設定虛拟目錄

虛拟目錄虛拟目錄有以下優點。

(1)便于通路。

(2)便于移動站點中的目錄。

(3)能靈活加大磁盤空間。

(4)安全性好。

(5)使用Alias選項可以建立虛拟目錄。

<code> </code> 

<code>mkdir /</code><code>var</code><code>/www/dns/</code>

<code>echo /</code><code>var</code><code>/www/dns &gt; /</code><code>var</code><code>/www/dns</code>

<code>并在最後加上Alias/dns “/</code><code>var</code><code>/www/dns”</code>

/dns是在url裡輸入的時候起個名字,“/var/www/dns”是/dns名字的具體存放路徑,中間的空格是TAB出來的。

<a href="http://s2.51cto.com/wyfs02/M01/87/5E/wKioL1fegk7BV5G7AAAOV_A1vHE900.png" target="_blank"></a>

service httpd restart重新開機httpd服務并進行測試。

<a href="http://s1.51cto.com/wyfs02/M01/87/61/wKiom1fegmXjaOTYAAAV5ENVsPw545.png" target="_blank"></a>

虛拟主機

是在一台伺服器上運作多個Web站點。

三種設定虛拟主機的方式

基于名稱的虛拟主機

隻需伺服器有一個IP位址即可,所有的虛拟主機共享同一個IP,各虛拟主機之間通過域名進行區分。

但需要新版本的HTTP 1.1浏覽器支援。這種方式已經成為建立虛拟主機的标準方式。

基于IP的虛拟主機

需要在伺服器上綁定多個IP位址,然後配置Apache,把多個網站綁定在不同的IP位址上,通路伺服器上不同的IP位址,就可以看到不同的網站。

基于端口号的虛拟主機

隻需伺服器有一個IP位址即可,所有的虛拟主機共享同一個IP,各虛拟主機之間通過不同的端口号進行區分。在設定基于端口号的虛拟主機的配置時,需要利用Listen語句設定所監聽的端口。

1.配置基于域名的虛拟主機

建立步驟:

① 注冊虛拟主機所要使用的域名

實作域名解析可以有兩種方法:

在客戶機上通過修改/etc/hosts檔案實作。這是一種比較簡單的方法,隻需在/etc/hosts檔案中加入下面兩行

172.16.1.117   www. baidu.com

172.16.1.117   www.qq.com

(2) 在DNS伺服器上通過配置DNS實作。

<a href="http://s3.51cto.com/wyfs02/M02/87/61/wKiom1fegomTd-rCAAAxQeUJCa0431.png" target="_blank"></a>

上次的dns配置,已經配置好了百度的域名解析,進行簡單的添加和修改,就把qq的域名解析也配置好了。

② 建立所需的目錄和預設首頁檔案

在/usr目錄下建立四個目錄,分别用來存放兩主機的網頁和日志檔案。操作如下:

<code>mkdir /</code><code>var</code><code>/www/baidu</code><code>.</code><code>com</code>

<code>echo “this </code><code>is</code> <code>www</code><code>.</code><code>baidu</code><code>.</code><code>com’s web “&gt; / </code><code>var</code><code>/www/baidu</code><code>.</code><code>com/index</code><code>.</code><code>html</code>

<code>mkdir /</code><code>var</code><code>/www/qq</code><code>.</code><code>com</code>

<code>echo “this </code><code>is</code> <code>www</code><code>.</code><code>qq</code><code>.</code><code>com’s web “&gt; / </code><code>var</code><code>/www/qq</code><code>.</code><code>com/index</code><code>.</code><code>html</code>

③編輯/etc/httpd/conf/httpd.conf配置檔案

ServerAdmin

你的位址如果伺服器有任何問題将發信到這個位址, 這個位址會在伺服器産生的某些頁面中出現,例如,錯誤報告

DocumentRoot

放置服務文檔的目錄, 預設狀态下,所有的請求都以這個目錄為基礎, 但是直接符号連接配接和别名可用于指向其他位置。

ServerName sss.dev

允許設定主機名如果與程式獲得的不同,主機名将傳回用戶端(例如,用"www"代替主機真實的名字)。預設情況下,并不需要指定這個ServerName參數,伺服器将自動通過名字解析過程來獲得自己的名字,但如果伺服器的名字解析有問題(通常為反向解析不正确),或者沒有正式的DNS名字,也可以在這裡指定IP位址。當ServerName設定不正确的時候,伺服器不能正常啟動。 

修改配置檔案,在httpd.conf檔案最後添加以下兩台虛拟機

<a href="http://s5.51cto.com/wyfs02/M00/87/61/wKiom1fegxewryT8AABlej0PBIk876.png" target="_blank"></a>

重新啟動httpd服務

service  httpd  restart ,進行測試

<a href="http://s4.51cto.com/wyfs02/M02/87/61/wKiom1fegzWxVOPVAAAdliwQZIk383.png" target="_blank"></a>

<a href="http://s4.51cto.com/wyfs02/M01/87/5E/wKioL1feg0fx4733AAAaLI0J8Qc922.png" target="_blank"></a>

2.基于IP位址的虛拟主機

①為一塊網卡綁定多個IP位址

<code>cd   /etc/sysconfig/network-scripts</code>

<code>cp  ifcfg-eth0   ifcfg-eth0:</code><code>0</code>

<code>vim   ifcfg-eth0:</code><code>0</code>

<code>DEVICE=eth0:</code><code>0</code>

<code>IPADDR=</code><code>172.16.102.121</code>

<a href="http://s4.51cto.com/wyfs02/M02/87/5E/wKioL1feg2ThD0WDAAAuQuj2Ypg397.png" target="_blank"></a>

重新開機網卡服務

<a href="http://s1.51cto.com/wyfs02/M00/87/5E/wKioL1feg4bSd33DAAC3I4iSfnc378.png" target="_blank"></a>

②注冊虛拟主機所使用的域名

向基于名稱的虛拟主機配置類似,配置DNS服務,将測試的網址分别指向到192.168.1.117和192.168.1.18兩個IP位址上,當然也可以編輯/etc/hosts檔案

<a href="http://s4.51cto.com/wyfs02/M01/87/61/wKiom1feg5uwQOYXAAAc39G4xos755.png" target="_blank"></a>

③建立web站點根目錄和預設首頁檔案

<code>mkdir  /</code><code>var</code><code>/www/ip1 /</code><code>var</code><code>/www/ip2</code>

<code>echo “ this </code><code>is</code> <code>172.16.1.117</code><code>’s  web”&gt;/</code><code>var</code><code>/www/ip1/index</code><code>.</code><code>html</code>

<code>echo “ this </code><code>is</code> <code>172.16.1.118</code><code>’s  web”&gt;/</code><code>var</code><code>/www/ip2/index</code><code>.</code><code>html</code>

<a href="http://s5.51cto.com/wyfs02/M01/87/5E/wKioL1feg7GSxO19AAA_R3_hYWc922.png" target="_blank"></a>

④編輯/etc/httpd/conf/httpd.conf配置檔案

<code>&lt;VirtualHost  </code><code>192.168.1.117</code><code>&gt;  </code>

<code>ServerName    www</code><code>.</code><code>ip1</code><code>.</code><code>com </code>

<code>DocumentRoot  /</code><code>var</code><code>/www/ip1</code>

<code>&lt;/VirtualHost&gt;  </code>

<code>&lt;VirtualHost </code><code>192.168.1.118</code><code>&gt; </code>

<code>ServerName    www</code><code>.</code><code>ip2</code><code>.</code><code>com </code>

<code>DocumentRoot   /</code><code>var</code><code>/www/ip2</code>

<code>&lt;/VirtualHost&gt;</code>

<a href="http://s3.51cto.com/wyfs02/M01/87/61/wKiom1feg82zL3v2AAA9JIrdJi4067.png" target="_blank"></a>

⑤重新啟動httpd服務進行測試

<a href="http://s4.51cto.com/wyfs02/M00/87/62/wKiom1fehByiX2rtAAA_OLxcjOM353.png" target="_blank"></a>

3.配置基于端口号的虛拟主機

把基于域名的配置完,剩下的兩種配置基本也相似

<a href="http://s3.51cto.com/wyfs02/M01/87/5F/wKioL1fehECStYrGAABT9zGSxtc144.png" target="_blank"></a>

編輯配置檔案,

保證有以下Listen指令,并配置虛拟主機

<a href="http://s4.51cto.com/wyfs02/M00/87/5F/wKioL1fehJWzYBHZAAA6rSMTi4M668.png" target="_blank"></a>

重新開機httpd服務測試

<a href="http://s2.51cto.com/wyfs02/M00/87/60/wKioL1fenVvjcE8mAABETr5q63o459.png" target="_blank"></a>

搭建完web服務,可以使用之外,就該考慮安全性了。

随着Web2.0、社交網絡、微網誌等等一系列新型的網際網路産品的誕生,基于Web環境的網際網路應用越來越廣泛,企業資訊化的過程中各種應用都架設在Web平台上web安全也迅速得到強烈關注。

現狀原因

  由于TCP/IP的設計是沒有考慮安全問題的,這使得在網絡上傳輸的資料是沒有任何安全防護的。攻擊者可以利用系統漏洞造成系統程序緩沖區溢出,攻擊者可能獲得或者提升自己在有漏洞的系統上的使用者權限來運作任意程式,甚至安裝和運作惡意代碼,竊取機密資料。而應用層面的軟體在開發過程中也沒有過多考慮到安全的問題,這使得程式本身存在很多漏洞,諸如緩沖區溢出、SQL注入等等流行的應用層攻擊,這些均屬于在軟體研發過程中疏忽了對安全的考慮所緻。

  使用者對某些隐秘的東西帶有強烈的好奇心,一些利用木馬或病毒程式進行攻擊的攻擊者,往往就利用了使用者的這種好奇心理,将木馬或病毒程式捆綁在一些豔麗的圖檔、音視訊及免費軟體等檔案中,然後把這些檔案置于某些網站當中,再引誘使用者去單擊或下載下傳運作。或者通過電子郵件附件和QQ、MSN等即時聊天軟體,将這些捆綁了木馬或病毒的檔案發送給使用者,利用使用者的好奇心理引誘使用者打開或運作這些檔案。

  管理者的配置不當,基于使用者輸入的一切都是不可靠的,很多的漏洞是管理者設定不當,過濾不嚴造成,當然,永遠沒有完美的程式。

web安全的範圍太廣,出于小白階段的我也正在學習研究,後面後對每個漏洞進行研究,但是基本上每個網站都存在以下的漏洞。

(1)跨站腳本攻擊(XSS)

 XSS攻擊,通常指黑客通過“html注入” 篡改了網頁,插入了惡意的腳本,進而在使用者浏覽網頁的時候,控制使用者浏覽器的一種攻擊。

最常見的XSS攻擊就是通過讀取浏覽器的Cookie對象,進而發起“cookie劫持”,目前使用者的登入憑證存儲于伺服器的session中,而在浏覽器中是以cookie的形式進行存儲的,cookie被劫持後,意味着攻擊者可以不通過密碼而直接登入系統。我們也可以直接在浏覽器中輸入腳本javascript:alert(document.cookie)來擷取目前cookie值。

目前防止“cookie劫持”的方法大緻有:a. 輸入檢查,使用filter來過濾敏感的關鍵字;b. 将cookie與使用者ip位址進行綁定;c. 為cookie植入HttpOnly辨別。

(2)SQL注入攻擊

<a href="http://wt7315.blog.51cto.com/10319657/1828167" target="_blank">http://wt7315.blog.51cto.com/10319657/1828167</a>

http://wt7315.blog.51cto.com/10319657/1841241

關于sql注入,寫過兩篇很詳細的sql注入和sql注入神器sqlmap的介紹。

Sql注入的的兩個關鍵條件:第一個是使用者能夠控制輸入;第二個是原本程式要執行的代碼,拼接了使用者輸入的資料。

根據上面兩個關鍵條件,系統為防止sql注入使用了以下方法:

第一:使用預編譯語句,這也是防禦sql注入最有效的方法,完全摒棄代碼的直接拼接所帶來的危險。

第二:關閉web伺服器的錯誤回顯功能,這樣可以防止攻擊者對系統進行攻擊後,通過回顯的詳細錯誤資訊對攻擊内容進行調整,對攻擊者提供極大的便利。我們在項目的web.xml檔案中添加以下示例代碼:

第三:資料庫自身使用最小權限原則,系統程式不使用最高權限的root對資料庫進行連接配接,而是使用能滿足系統需求的最小權限賬戶進行資料庫連接配接,而且多個資料庫之間使用不同的賬戶,保證每個資料庫都有獨立對應的賬戶。

(3)檔案上傳漏洞

檔案上傳漏洞是指使用者上傳了一個可執行的腳本檔案,并通過腳本檔案獲得了執行伺服器端指令的能力,這樣将會導緻嚴重的後果。而本系統内涉及到大量的圖檔格式檔案上傳,是以對于上傳問題的處理非常謹慎,并盡可能的達到安全标準。

本系統主要通過對上傳檔案詳細的格式驗證:

第一步:通過字尾名來簡單判斷檔案的格式。

第二步:通過讀取檔案的前兩個字元進行對比,例如png格式圖檔的前兩個字元為8950,而jpg格式的圖檔前兩個字元為ffd8。

第三步:如果上傳的為圖檔,則擷取相應的高度和寬度,如果存在相應的寬度和高度則可認為上傳的是圖檔。

本文轉自 wt7315 51CTO部落格,原文連結:http://blog.51cto.com/wt7315/1853791

繼續閱讀