Apache訪問控制和Web虛擬主機
阿新 • • 發佈:2018-07-31
處理 erro 網站服務 ocs 目錄 創建用戶 2.x 創建 1.2 一、httpd服務的訪問控制
- 可對特定的網站目錄添加訪問授權,對客戶機地址限制、用戶授權做限制;兩種控制方式都應用與httpd.conf配置文件中的目錄區域<Directory 目錄位置>...</Directory>範圍內
1.客戶機地址限制
- 通過配置項Order、Deny from、Allow from,根據客戶機的主機名或IP地址決定是否允許客戶端訪問;其中Order配置項用於設置限制順序,Deny from和Allow from用於設置具體限制內容
Apache-2.2.x
- Allow,deny:先“允許”後“拒絕”,默認拒絕所有未明確允許的客戶機地址
-
Deny,allow:先“拒絕”後“允許”,默認允許所有未明確拒絕的客戶機地址
-
使用Allow from和Deny from配置項時,需要設置客戶機地址以構成完整的限制策略,地址的形式可以是IP地址、網絡地址、主機名或域名,使用名稱“all”時表示任意地址。限制策略格式如下
Deny from address1 address2 ...
Allow from address1 address2 ... - 通常情況,網站服務器對所有客戶機開放,網頁文檔未作任何限制,因此使用的是“Allow from all”的策略,表示允許從任何客戶機訪問,策略格式如下
<Directory “/usr/local/httpd/htdocs”> .. //省略部分內容 Order Allow,deny Allow from all </Directory>
- 需要使用“僅允許”的限制策略時,應將處理順序改為“allow,deny”,並明確設置允許策略,只允許一部分主機訪問。例如,若只希望IP地址為173.17.17.173的網管工作用機能夠訪問AWStats系統,則針對AWStats系統的目錄區域做如下設置
<Directory “/usr/local/awstats/wwwroot:”> ... //省略部分內容 Order allow,deny //先允許後拒絕 Allow from 173.17.17.173 //只允許此IP訪問 </Directory>
- 反之,需要使用“僅拒絕”的限制策略時,應將處理順序改為“deny,allow”,並明確設置拒絕策略,只禁止一部分主機訪問。例如,若只希望禁用來自兩個內網網段192.168.0.0/24和192.168.1.0/24的主機訪問,但允許其它任何主機訪問,可以使用如下限制策略
<Directory “/usr/local/awstats/wwwroot”> ... //省略部分內容 Order deny,allow Deny from 192.168.0.0/24 192.168.1.0/24 </Directory>
當通過未被授權的客戶機訪問網站目錄時,將會被拒絕訪問
Apache-2.4.x
(1)允許所有
Require all granted
(2)拒絕所有
Require all denied
(3)只允許指定IP訪問
Require ip <允許的IP地址>
(4)只拒絕指定IP訪問
<RequireAll>
Require all granted
Require not ip xxx
</RequireAll>
例:
- 允許所有人訪問/usr/local/httpd/htdocs/
<Directory “/usr/local/httpd/htdocs”>
Require all granted
</Directory> - 拒絕所有人訪問/usr/local/httpd/htdocs/
<Directory “/usr/local/httpd/htdocs”>
Require all denied
</Directory> - 只允許192.168.1.10主機訪問/usr/local/httpd/htdocs/,相當於白名單
<Directory “/usr/local/httpd/htdocs”>
Require ip 192.168.1.10
</Directory> - 拒絕192.168.1.10主機訪問/usr/local/httpd/htdocs/,其余主機全部允許,相當於黑名單
<Directory “/usr/local/httpd/htdocs”>
<RequireAll>
Require all granted
Require not ip 192.168.1.10
</RequireAll>
</Directory>
2.用戶授權限制
- httpd服務器支持使用摘要認證(Digest)和基本認證(Basic)兩種方式。使用摘要認證需要在編譯httpd之前添加“--enable-auth-digest”選項,但並不是所有的瀏覽器都支持摘要認證。而基本認證是httpd服務的基本功能,不需要預先配置特別選項
- 基於用戶的訪問控制包括認證(Authentication)和授權(Authorization)兩個過程。認證是指識別用戶身份的過程,授權是指允許特定用戶訪問特點目錄區域的過程
(1)創建用戶認證數據文件
- httpd的基本認證通過校驗用戶名、密碼組合來判斷是否允許用戶訪問。授權訪問的用戶賬號需要事先建立,並保存在固定的數據文件中。使用專門的htpasswd工具程序,可以創建授權用戶數據文件,並維護其中的用戶賬號。
- 使用htpasswd時,必須指定用戶數據文件的位置,添加“-c”選項表示新建立此文件。例如,執行以下操作可以新建數據文件/usr/local/httpd/conf/.awspwd,其中包含一個名為webadmin的用戶信息
cd /usr/local/httpd //進入httpd安裝目錄方便執行命令
bin/htpasswd -c /usr/local/httpd/conf/.awspwd webadmin //創建用戶賬號webadmin(只能用於登錄web界面)
cat /usr/local/httpd/conf/.awspwd //查看用戶賬號數據文件
- 若省略“-c”選項,則表示指定的用戶數據文件已經存在,用於添加新的用戶或修改現有用戶的密碼。例如,需要向.awspwd數據文件中添加一個新用戶tsengyia時,可以執行以下操作
bin/htpasswd /usr/local/httpd/conf/.awspwd tsengyia cat /usr/local/httpd/conf/.awspwd
(2)添加用戶授權配置
- 有授權用戶賬號以後,還需修改httpd.conf配置文件,在特定的目錄區域中添加授權配置,以啟用基本認證並設置允許哪些用戶訪問。例如,若只允許.awspwd數據文件中的任一用戶訪問AWStats系統,可以執行以下操作
vim /usr/local/httpd/conf/httpd.conf <Directory "/usr/local/awstats/wwwroot"> ··· AuthName "AWStats Directory" AuthType Basic AuthUserFile /usr/local/httpd/conf/.awspwd require valid-user </Directory>
註釋
AuthName:定義受保護的領域名稱,該內容將在瀏覽器彈出的認證對話框中顯示
AuthType:設置認證的類型,Basic表示基本認證
AuthUserFile:設置用戶保存用戶賬號、密碼的認證文件路徑
required valid-user:要求只有認證文件中的合法用戶才能訪問。其中valid-user表示所有合法用戶,若只授權給單個用戶,可改為指定的用戶名(如require user webadmin)
(3)驗證用戶訪問授權 - 再次訪問AWStats系統時,瀏覽器會首先彈出認證對話框。只有輸入正確的用戶名和密碼後才能查看日誌分析報告,否則將拒絕訪問
二、構建虛擬Web主機
- 虛擬Web主機指的是在同一臺服務器中運行多個Web站點。其中的每個站點實際上並不獨立占用整個服務器,因此被稱為“虛擬Web主機”,通過虛擬Web主機服務可以充分利用服務器的硬件資源,降低網絡構建及運行程序
- 基於域名:為每個虛擬主機使用不同的域名,但是對應IP地址相同;同IP、同端口、不同域名
- 基於IP地址:為每個虛擬主機使用不同的域名,且各自對應的IP地址也不相同,需要為服務器配置多個網絡接口;不同IP、同端口、不同域名
- 基於端口:不使用域名、IP來區分不同站點內容,使用不同TCP端口號;同域名、同IP、不同端口
1.基於域名的虛擬主機
(1)為虛擬主機提供域名解析(搭建DNS,測試使用)
yum -y install bind bindg -chroot bind-utils //安裝bind軟件包
vim /etc/named.conf //修改named服務主配置文件
cp /var/named/named.empty /var/named/hiahia.org.zone //拷貝模板文件
vim /var/named/hiahia.org.zone //編輯正向解析文件
chown named:named /var/named/hiahia.org.zone //設置文件屬主和屬組為named
/etc/init.d/named start && 8mchkconfig --level 35 named on
(2)為虛擬主機準備網頁文檔
每個虛擬Web主機準備網站目錄及網頁文檔。mkdir -p /usr/local/httpd/htdocs/www mkdir -p /usr/local/httpd/htdocs/blog echo "<h1>www.xueluo.org</h1>">/usr/local/httpd/htdocs/www/index.html echo "<h1>blog.xueluo.org</h1>">/usr/local/httpd/htdocs/blog/index.html
(3)添加虛擬主機配置
- 監聽地址:使用NameVirtualHost配置項指定提供虛擬主機服務的IP地址,也就是進行域名查詢時各虛擬Web主機的IP地址
- 虛擬主機區域:使用<VirtualHost 監聽地址>...</VirtualHost>區域配置,為每一個虛擬Web主機建立獨立的配置內容。其中至少應包含虛擬主機的網站名稱、網頁根目錄的配置項
- 目錄權限:使用<Directory 目錄位置>...</Directory>區域配置,為每一個虛擬Web主機的網站目錄設置訪問權限;目錄訪問可繼承其父目錄的授權許可
vim /usr/local/httpd/conf/extra/httpd-vhosts.conf <Directory "/usr/local/httpd/htdocs/"> Order allow,deny Allow from all (httpd2.4.x這裏的兩行換成Require all granted) </Directory> <VirtualHost 192.168.1.151> DocumentRoot "/usr/local/httpd/htdocs/www" ServerName www.hiahia.com ErrorLog "logs/www.hiahia.com_error_log" CustomLog "logs/www.hiahia.com_access_log" common </VirtualHost> <VirtualHost 192.168.1.151> DocumentRoot "/usr/local/httpd/htdocs/blog" ServerName blog.hiahia.com ErrorLog "logs/blog.hiahia.com_error_log" CustomLog "logs/blog.hiahia.com_access_log" common </VirtualHost>
vim /usr/local/httpd/conf/httpd.conf Include conf/extra/httpd-vhosts.conf //刪除開頭#號,讀取虛擬主機配置文件
/etc/init.d/httpd restart
(4)客戶機中訪問虛擬Web主機
2.基於IP地址的虛擬主機
(1)添加虛擬接口IP或新增加網卡配置IP地址
(2)添加虛擬主機配置
vim /var/named/xueluo.org.zone //修改dns正向解析文件,更改其中一個IP地址為新增網卡IP
/etc/init.d/named restart //重啟namd服務
vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
<Directory "/usr/local/httpd/htdocs/">
Order allow,deny
Allow from all
(httpd2.4.x這裏的兩行換成Require all granted)
</Directory>
<VirtualHost 192.168.1.151>
DocumentRoot "/usr/local/httpd/htdocs/www"
ServerName www.hiahia.com
ErrorLog "logs/www.hiahia.com_error_log"
CustomLog "logs/www.hiahia.com_access_log" common
</VirtualHost>
<VirtualHost 192.168.1.152>
DocumentRoot "/usr/local/httpd/htdocs/blog"
ServerName blog.hiahia.com
ErrorLog "logs/blog.hiahia.com_error_log"
CustomLog "logs/blog.hiahia.com_access_log" common
</VirtualHost>
/etc/init.d/httpd restart //重啟httpd服務
(3)客戶機訪問虛擬Web
3.基於端口的虛擬主機
(1)添加虛擬主機配置
vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
<Directory "/usr/local/httpd/htdocs/">
Order allow,deny
Allow from all
(httpd2.4.x這裏的兩行換成Require all granted)
</Directory>
<VirtualHost 192.168.1.100:80>
DocumentRoot "/usr/local/httpd/htdocs/www"
ServerName www.xueluo.org
ErrorLog "logs/www.xueluo.org_error_log"
CustomLog "logs/www.xueluo.org_access_log" common
</VirtualHost>
<VirtualHost 192.168.1.200:81>
DocumentRoot "/usr/local/httpd/htdocs/blog"
ServerName blog.xueluo.org
ErrorLog "logs/blog.xueluo.org_error_log"
CustomLog "logs/blog.xueluo.org_access_log" common
</VirtualHost>
(2)加載額外配置文件,並設置監聽端口
vim /usr/local/httpd/conf/httpd.conf
Listen 192.168.1.151:999
Listen 192.168.1.152:888
/etc/init.d/httpd restart
(3)客戶機訪問虛擬Web
Apache訪問控制和Web虛擬主機