Apache访问控制和Web虚拟主机

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache访问控制和Web虚拟主机相关的知识,希望对你有一定的参考价值。

一、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虚拟主机的主要内容,如果未能解决你的问题,请参考以下文章

Apache配置与应用,虚拟目录;访问控制;虚拟Web主机(多域名;多端口),

APache网站服务配置访问控制和构建虚拟主机

Apache----web服务器软件

Apache----web服务器软件

Apache----web服务器软件

Apache----web服务器软件