為了更好的控制對網站資源的通路,可以為特定網站目錄添加通路授權,本篇文章将給大家介紹 HTTPD 服務的通路控制,主要針對:基于用戶端位址限制、基于使用者進行限制、基于域名的虛拟主機限制、基于 IP 位址、端口的虛拟主機限制。
一、基于用戶端位址限制
Deny from 和 Allow from 配置項用于設定具體限制内容,使用 Deny from 和 Allow from 配置項時,需設定用戶端位址等來進行限制政策,address1 / 2 可以是 IP 位址、網絡位址、主機名和域名,通常情況下,網站伺服器是對所有使用者開放的,網頁文檔目錄也未做任何限制,是以可使用“all”來表示拒絕或允許所有任意位址的通路等;
Deny from address1 address2 ...
Allow from address1 address2 ...
Order 配置項可以設定“allow,deny”或“deny,allow”來決定主機應用“允許”或“拒絕”政策的先後順序。
- “allow,deny”:先“允許”後“拒絕”預設拒絕所有未明确允許的用戶端位址。
- “deny,allow”:先“拒絕”後“允許”預設允許所有未明确拒絕的用戶端位址。
<Directory "/usr/local/httpd/htdocs">
...... # 省略部分内容
Order allow,deny
Allow from all
</Directory>
使用“僅允許”的限制政策時,将按處理順序改為“allow,deny”,并明确設定允許政策,隻允許一部分主機進行通路。若隻希望 IP 位址為:192.168.3.123 的終端能夠通路 AWStats 分析系統,則針對 AWStats 分析系統的目錄區域配置以下部分;
<Directory "/usr/local/awstats/wwwroot">
Options None
AllowOverride None
Order allow,deny
Allow from 192.168.3.123 # 允許 192.168.3.123 位址通路
</Directory>
使用“僅拒絕”的限制政策時,将按處理順序改為“deny,allow”,并明确設定拒絕政策,隻拒絕一部分主機進行通路。若隻希望 192.168.3.0/24 該網段的終端能夠通路 AWStats 分析系統,但允許其他任何終端通路,則針對 AWStats 分析系統的目錄區域配置以下部分;
<Directory "/usr/local/awstats/wwwroot">
Options None
AllowOverride None
Order deny,allow
deny from 192.168.3.0/24 # 拒絕 192.168.3.0/24 網站的位址通路
</Directory>
該上述配置好後,可通過浏覽器通路将會顯示如下報錯頁面。

二、基于使用者進行授權限制
基于使用者的通路控制包含認證和授權。
認證:指使用者身份的過程;
授權:指允許特定使用者通路特定目錄區域;
httpd 的基本認證是通過校驗使用者名、密碼組合來判斷是否允許使用者通路。授權通路的使用者賬号需要先建立,并儲存在固定的資料檔案中。
可使用工具:htpasswd,來建立授權使用者資料檔案,并進行維護其中的使用者賬号。必須指定使用者資料檔案的位置,結合參數“-c”選項來表示建立立此檔案。
建立資料檔案 /usr/local/httpd/conf/.awspwd ,webjacktian 和 webjacktian1 為使用者資訊。
# cd /usr/local/httpd/
# bin/htpasswd -c /usr/local/httpd/conf/.awspwd webjacktian
New password: # 設定密碼
Re-type new password:
Adding password for user webjacktian
# cat /usr/local/httpd/conf/.awspwd
webjacktian:u5Mq.qjrDfsvA
若不使用“-c”選項,指定的使用者資料檔案已存在,使用者添加新的使用者或修改現有的使用者密碼。
# bin/htpasswd /usr/local/httpd/conf/.awspwd webjacktian1
New password:
Re-type new password:
Adding password for user webjacktian1
# cat /usr/local/httpd/conf/.awspwd # 确認使用者資料檔案
webjacktian:1.wTyxw9/pItY
webjacktian1:zG4sQXO/HveOc
授權使用者賬号後,需修改 httpd.conf 配置檔案,在特定的目錄區域中添加授權配置,并啟用基本認證設定允許哪些使用者可進行通路。
vi /usr/local/httpd/conf/httpd.conf
...... # 省略部分内容
<Directory "/usr/local/awstats/wwwroot">
Options None
AllowOverride None
Order deny,allow
deny from 192.168.3.124
AuthName "http web" # 定義受保護的領域名稱,将在浏覽器彈出的認證對話框中顯示。
AuthType Basic # 設定認證的類型,Basic表示基本認證。
AuthUserFile /usr/local/httpd/conf/.awspwd # 設定用于儲存使用者賬号、密碼的認證檔案路徑。
require valid-user # 隻有認證檔案中的合法使用者才能通路,valid-user表示所有合法使用者,若隻授權單個使用者,可改為指定的使用者名。比如:webjacktian / webjacktian1
</Directory>
# /usr/local/httpd/bin/apachectl restart # 重新開機服務将新配置進行生效。
驗證使用者授權通路 AWStats 分析系統,浏覽器會彈出如下對話框,這裡隻需要輸入正确的使用者名密碼即可登入 AWStats 分析系統,檢視相應的分析報告,若輸入的賬号密碼不比對,将拒絕通路該分析系統。
三、基于域名的虛拟主機通路
基于域名:為每個虛拟主機使用不同的域名,但其對應的 IP 位址是一樣的。
例如:www.baidu.com 和 www.taobao.com 的 IP 位址都是 192.168.3.123,這是最普遍類型的 web 主機類型。基于域名的通路需搭建 DNS 服務來提供 web 站點通路,關于 DNS 服務的部署,詳細請參考:《Linux環境下DNS域名解析服務》搭建成功後,需在主配置檔案 named.conf 中添加 baidu.com 和 taobao.com 兩個區域的配置,如下圖所示。
修改 baidu 的檔案
修改檔案的所在組,複制 baidu.jack 檔案的 /var/named/ 下,名字修改為 taobao.jack
# chgrp named /var/named/baidu.jack # 修改檔案的所在組
# cp -v /var/named/baidu.jack /var/named/taobao.jack # 複制 baidu.jack文 件的 /var/named/ 下,名字修改為 taobao.jack,-p:保留檔案原有權限
# ll /var/named/ # 檢視 baidu.jack 和 taobao.jack 檔案是否都已經建立成功
總用量 40
-rw-r--r--. 1 root named 149 7月 28 16:10 baidu.jack
drwxr-x---. 6 root named 4096 7月 28 03:42 chroot
drwxrwx---. 2 named named 4096 7月 28 07:04 data
drwxrwx---. 2 named named 4096 7月 28 16:10 dynamic
-rw-r-----. 1 root named 1892 2月 18 2008 named.ca
-rw-r-----. 1 root named 152 12月 15 2009 named.empty
-rw-r-----. 1 root named 152 6月 21 2007 named.localhost
-rw-r-----. 1 root named 168 12月 15 2009 named.loopback
drwxrwx---. 2 named named 4096 8月 27 2013 slaves
-rw-r--r--. 1 root root 307 7月 28 06:56 taobao.jack
進入 taobao.jack 的檔案中修改其配置;
重新開機 named 服務。
# service named stop
停止 named:. [确定]
# service named start
啟動 named: [确定]
修改 nameserver 配置項,指向DNS伺服器位址;
使用 nslookup 指令來進行解析所配置的兩個域名是否成功;
[[email protected] named]# nslookup www.baidu.com # 使用 nslookup 進行驗證域名是否成功
Server: 192.168.3.123
Address: 192.168.3.123#53
Name: www.baidu.com
Address: 192.168.3.123
[[email protected] named]# nslookup www.taobao.com
Server: 192.168.3.123
Address: 192.168.3.123#53
Name: www.taobao.com
Address: 192.168.3.123
為每個虛拟 web 主機準備網站目錄及網頁文檔,并為每個虛拟 web 主機提供包含不同内容的首頁檔案。在 /usr/local/httpd/htdocs 目錄下建立兩個子檔案夾 baidu 和 taobao,分别作為 www.baidu.com 和 www.taobao.com 的網站根目錄來測試網頁檔案。
# mkdir /usr/local/httpd/htdocs/baidu # 在虛拟主機下準備網頁文檔
# mkdir /usr/local/httpd/htdocs/taobao
# ls /usr/local/httpd/htdocs/ # 檢視剛建立的 baidu 和 taobao 目錄是否已建立好
abc.html baidu index.html taobao
# echo "<h1>www.baidu.com</h1>" > /usr/local/httpd/htdocs/baidu/index.html # 分别在 baidu 和 taobao 目錄下建立 index.html 檔案
# echo "<h1>www.taobao.com</h1>" > /usr/local/httpd/htdocs/taobao/index.html
# cat /usr/local/httpd/htdocs/baidu/index.html # 驗證是否已經建立成功
<h1>www.baidu.com</h1>
# cat /usr/local/httpd/htdocs/taobao/index.html
<h1>www.taobao.com</h1>
添加虛拟主機配置,需在 httpd 伺服器的主配置檔案中,啟用基于域名的虛拟 web 主機。
- 使用 <Directory “目錄位置”> + 區域配置 為每個 web 主機的網站目錄設定通路權限。
- 使用 NameVirtualHost 配置項指定提供虛拟主機服務的 IP 位址;
- 使用 <VirtualHost 監聽位址> + 區域配置 為每個虛拟 web 主機建立獨立的配置内容,主要包括:網頁根目錄的路徑,虛拟主機的網站名稱,通路日志等相關配置項;
# vi /usr/local/httpd/conf/extra/httpd-vhosts.conf # 建立獨立的配置檔案
# <Directory "/var/www/html"> # 設定目錄通路權限
# Order allow,deny
# Allow from all
# </Directory>
NameVirtualHost 192.168.3.123:80 # 設定虛拟主機監聽位址
<VirtualHost 192.168.3.123:80> # 設定 baidu 虛拟站點區域
DocumentRoot "/usr/local/httpd/htdocs/baidu"
ServerName www.baidu.com
ErrorLog "logs/www.baidu.com-error_log"
CustomLog "logs/www.baidu.com-access_log" common
</VirtualHost>
<VirtualHost 192.168.3.123:80> # 設定 taobao 虛拟站點區域
DocumentRoot "/usr/local/httpd/htdocs/taobao"
ServerName www.taobao.com
ErrorLog "logs/www.taobao.com-error_log"
CustomLog "logs/www.taobao.com-access_log" common
</VirtualHost>
當虛拟 web 主機的數量較多時,可使用獨立的虛拟主機配置檔案,在 httpd.conf 中添加 Include conf/extra/httpd-vhosts.conf 來加載配置。
# vim /usr/local/httpd/conf/httpd.conf
<Directory "/usr/local/awstats/wwwroot">
Options None
AllowOverride None
Order deny,allow
deny from 192.168.3.124
AuthName "http web"
AuthType Basic
AuthUserFile /usr/local/httpd/conf/.awspwd
require valid-user
</Directory>
Include conf/extra/httpd-vhosts.conf # 在文末添加此行配置來加載獨立的配置檔案
重新開機 HTTPD 服務
# service httpd restart # 重新開機 httpd 服務
在用戶端配合同網段的 IP 位址,并将 DNS 指向 httpd 伺服器。
測試連通性;
在用戶端浏覽器中,使用網站名稱分别通路不同的虛拟 web 主機,來進行确認看到的頁面是否不同,若無法檢視頁面顯示的結果,則需要檢查兩個站點的首頁檔案,或根據其他配置進行排查。
四、基于 IP 位址的虛拟主機
在 httpd 伺服器上新添加一塊虛拟接口并配置好 IP 位址;
對于基于 IP 位址的虛拟主機,每個虛拟 web 主機将使用不同的 IP 位址,都将通過同一台 httpd 伺服器來對外提供服務,配置基于 IP 位址的虛拟 web 主機時,不在使用 NameVirtualHost 配置項來指定監聽服務的 IP 位址,隻需要在每個虛拟 web 主機的 VirtualHost 配置項中指定各域名所對應的 IP 位址即可。
站點:www.baidu.com 的 IP 位址為:192.168.3.123,站點:www.taobao.com 的 IP 位址為:192.168.3.126,實作基于 IP 位址的虛拟 web 主機,則将以下配置項配在 httpd 伺服器上即可。
# vi /usr/local/httpd/conf/extra/httpd-vhosts.conf
...... # 省略部分内容
NameVirtualHost 192.168.3.123:80 # 此 www.baidu.com 區域的配置保持不變
<VirtualHost 192.168.3.123:80>
DocumentRoot "/usr/local/httpd/htdocs/baidu"
ServerName www.baidu.com
ErrorLog "logs/www.baidu.com-error_log"
CustomLog "logs/www.baidu.com-access_log" common
</VirtualHost>
<VirtualHost 192.168.3.126:80> # 将 www.taobao.com 區域的配置将 VirtualHost IP:端口号,IP 改為添加的虛拟接口 eth1:0 的 IP 位址
DocumentRoot "/usr/local/httpd/htdocs/taobao"
ServerName www.taobao.com
ErrorLog "logs/www.taobao.com-error_log"
CustomLog "logs/www.taobao.com-access_log" common
</VirtualHost>
配置加載獨立的配置檔案;
# vi /usr/local/httpd/conf/httpd.conf
Include conf/extra/httpd-vhosts.conf # 加載獨立的配置檔案
重新開機 httpd 服務;
# service httpd restart # 重新開機 httpd 服務
在用戶端浏覽器位址欄中輸入 http://192.168.3.123 将顯示 www.baidu.com 的頁面,輸入 http://192.168.3.126 将顯示 www.taobao.com 的頁面則表示無誤。
示範效果圖
五、基于端口的虛拟主機
基于端口的虛拟主機隻需要同一個 web 站點,其網站名稱、IP 位址可不變,唯一不同的是 TCP 端口通路不同的網頁内容。是以我們在浏覽器中通路非 80 端口的 web 伺服器時,需明确指出伺服器的端口号。例如:www.taobao.com:81/ 在配置基于端口的虛拟 web 主機時,不需要使用 NameVirtualHost 配置項,隻需通過多個監聽配置項來指定 TCP 的端口号,每個虛拟 web 主機的 VirtualHost 配置項中應指定 IP 位址和端口号。
若實作通過 80 端口來通路 www.baidu.com 站點時,則顯示的結果為 baidu 站點内容,當通過 81 端口來通路 www.taobao.com 站點時,則顯示的結果為 taobao 站點内容。
# vi /usr/local/httpd/conf/extra/httpd-vhosts.conf
NameVirtualHost 192.168.3.123:80
<VirtualHost 192.168.3.123:80> # www.baidu.com 虛拟站點區域的配置保持不變
DocumentRoot "/usr/local/httpd/htdocs/baidu"
ServerName www.baidu.com
ErrorLog "logs/www.baidu.com-error_log"
CustomLog "logs/www.baidu.com-access_log" common
</VirtualHost>
<VirtualHost 192.168.3.123:81> # 設定 www.taobao.com 虛拟站點區域的端口号為:81
DocumentRoot "/usr/local/httpd/htdocs/taobao"
ServerName www.taobao.com
ErrorLog "logs/www.taobao.com-error_log"
CustomLog "logs/www.taobao.com-access_log" common
</VirtualHost>
原加載的獨立配置檔案和 80 端口保持不變,需新添加一條監聽 www.taobao.com 的虛拟站點端口。
# vi /usr/local/httpd/conf/httpd.conf
...... # 省略部分内容
40 Listen 80 # 原有的 80 端口不變
41 Listen 81 # 新添加一條監聽端口
# service httpd restart # 重新開機 httpd 服務
驗證結果:在用戶端浏覽器中輸入:http://192.168.3.123 将顯示 baidu 站點内容,輸入 http://192.168.3.123:81 将顯示 taobao 站點内容,則表示無誤。
示範效果圖
針對目錄來設定對baidu來做基于客戶位址的通路控制,修改虛拟主機配置檔案并配置關于 Directory 部分的配置項,配置無誤後,檢查文法并重新開機服務。
# vi /usr/local/httpd/conf/extra/httpd-vhosts.conf
NameVirtualHost 192.168.3.123:80
<VirtualHost 192.168.3.123:80> # 對 baidu 來做通路控制(基于客戶位址的通路控制)修改虛拟主機配置檔案
DocumentRoot "/usr/local/httpd/htdocs/baidu"
ServerName www.baidu.com
ErrorLog "logs/www.baidu.com-error_log"
CustomLog "logs/www.baidu.com-access_log" common
<Directory "/usr/local/httpd/htdocs/baidu"> # 在www.baidu.com裡添加
order allow,deny
allow from 192.168.3.125 # 通路端 IP 位址
</Directory>
</VirtualHost>
<VirtualHost 192.168.3.123:81>
DocumentRoot "/usr/local/httpd/htdocs/taobao"
ServerName www.taobao.com
ErrorLog "logs/www.taobao.com-error_log"
CustomLog "logs/www.taobao.com-access_log" common
</VirtualHost>
# httpd -t # 檢查文法
Syntax OK
# service httpd restart # 重新開機 httpd 服務
根據以上配置項,隻允許 IP 位址為:192.168.3.125 的主機進行通路,是以當你在非 IP 位址為:192.168.3.125 的用戶端中進行通路,将顯示如下拒絕顯示。
如果在 httpd-vhosts.conf 配置檔案中設定 allow from 192.168.3.0/24 網段的配置,則說明該網段下的所有主機都可以通路;
# vi /usr/local/httpd/conf/extra/httpd-vhosts.conf
...... # 省略部分内容
<Directory "/usr/local/httpd/htdocs/baidu">
order allow,deny
allow from 192.168.3.0/24
</Directory>
# service httpd restart # 重新開機 httpd 服務
驗證結果如下。
使用者授權限制通路
建立使用者 -c:第一次建立使用者時使用,第二次則不需要添加,并檢視使用者的檔案;
# htpasswd -c /usr/local/httpd/conf/.user jacktian # 建立使用者
New password: # 設定密碼
Re-type new password:
Adding password for user jacktian
You have new mail in /var/spool/mail/root
# cat /usr/local/httpd/conf/.user # 檢視使用者檔案
jacktian:Kga/Hy/OZ2Bnw
修改虛拟機主機配置檔案需在 www.baidu.com 裡添加 AuthName 配置部分;
# vi /usr/local/httpd/conf/extra/httpd-vhosts.conf # 修改虛拟機主機配置檔案
NameVirtualHost 192.168.3.123:80
<VirtualHost 192.168.3.123:80>
DocumentRoot "/usr/local/httpd/htdocs/baidu"
ServerName www.baidu.com
ErrorLog "logs/www.baidu.com-error_log"
CustomLog "logs/www.baidu.com-access_log" common
<Directory "/usr/local/httpd/htdocs/baidu">
order allow,deny
allow from 192.168.3.0/24
AuthName "baidu login" # 在 www.baidu.com 裡添加使用者授權設定配置項
AuthType Basic
AuthUserFile /usr/local/httpd/conf/.user
Require valid-user
</Directory>
</VirtualHost>
<VirtualHost 192.168.3.123:81>
DocumentRoot "/usr/local/httpd/htdocs/taobao"
ServerName www.taobao.com
ErrorLog "logs/www.taobao.com-error_log"
CustomLog "logs/www.taobao.com-access_log" common
</VirtualHost>
# httpd -t # 檢查文法
Syntax OK
# service httpd restart # 重新開機 httpd 服務
驗證結果:在用戶端浏覽器輸入 www.baidu.com 時,将彈出如下對話框輸入使用者名密碼即可登入;
使用者名及密碼正确時的通路結果如下。
示範效果圖
使用者名及密碼不正确時的通路結果如下。
示範效果圖
最後小編在學習過程中整理了一些學習資料,可以分享給做軟體測試工程師的朋友們,互相交流學習,需要的可以加入我的學習交流群 323432957 或加微dingyu-002即可免費擷取Python自動化測開及Java自動化測開學習資料(裡面有功能測試、性能測試、python自動化、java自動化、測試開發、接口測試、APP測試等多個知識點的架構資料)