1. 程式人生 > >Apache訪問控制和Web虛擬主機

Apache訪問控制和Web虛擬主機

處理 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虛擬主機