Apache 访问控制

Apache 访问控制

 

Apache访问控制

  • 版本:Apche 2.3 前

通过设置访问控制,可对网站进行权限管理,提高安全性。

参数介绍

<Directory />: 行为对根目录的限制
 
Options:允许使用控制目录特征的指令.他们包括Options 和XBitHack
参数:
       1、All:准许以下除MultiViews以外所有功能
       2、MultiViews:允许多重内容被浏览,如果你的目录下有一个叫做foo.txt的文件,那么你可以通过/foo来访问到它,这对于一个多语言内容的站点比较有用
       3、Indexes:当用户访问该目录时,如果用户找不到DirectoryIndex指定的主页文件(例如index.html),则返回该目录下的文件列表给用户。
       4、IncludesNOEXEC:准许SSI,但不可使用#exec和#include功能
       5、Includes:准许SSI
       6、FollowSymLinks:在该目录中,服务器将跟踪符号链接。注意,即使服务器跟踪符号链接,它也不会改变用来匹配不同区域的路径名,如果在<Local>;标记内设置,该选项会被忽略
       7、SymLinksIfOwnerMatch:在该目录中仅仅跟踪本站点内的链接
       8、ExecCGI:在该目录下准许使用CGI
       9、FollowSymLinks:在该目录下允许文件系统使用符号连接,默认为禁用。 
     10、SymLinksIfOwnerMatch:当使用符号连接时,只有当符号连接的文件拥有者与实际文件的拥有者相同时才可以访问。
 
AllowOverride:AllowOverride参数就是指明Apache服务器是否去找.htacess文件作为配置文件,如果设置为none,那么服务器将忽略.htacess文件,如果设置为All,那么所有在.htaccess文件里有的指令都将被重写。对于AllowOverride,还可以对它指定如下一些能被重写的指令类型.
参数: 
    1、None:当AllowOverride被设置为None时。不搜索该目录下的.htaccess文件(可以减小服务器开销)。
    2、All:在.htaccess文件中可以使用所有的指令。
    3、AuthConfig:允许使用所有的权限指令,他们包括AuthDBMGroupFile AuthDBMUserFile  AuthGroupFile  AuthName AuthTypeAuthUserFile和Require
 
FileInfo:允许使用文件控制类型的指令。
参数:
    1、AddEncoding
    2、AddLanguage 
    3、AddType 
    4、DEfaultType
    5、ErrorDocument
    6、LanguagePriority
 
Indexes:允许使用目录控制类型的指令。
参数:
   1、AddDescription 
   2、AddIcon 
   3、AddIconByEncoding
   4、AddIconByType 
   5、DefaultIcon 
   6、DirectoryIndex 
   7、FancyIndexing 
   8、HeaderName 
   9、IndexIgnore 
 10、IndexOptions
 11、ReadmeName
 
Limit:允许使用权限控制指令。
参数:
   1、Allow Deny
   2、Order
 
 
Order:控制在访问时Allow和Deny两个访问规则哪个优先:
参数:
   1、Allow:允许访问的主机列表(可用域名或子网,例如:Allow from 192.168.0.0/16)。
   2、Deny:拒绝访问的主机列表。
 
AuthName:在出现输入帐号与密码的对话框中,出现的提示字符
 
Authtype:认证类型
 
AuthUserFile:保护目录所使用的帐号密码的设置文件,可以随意设置此文件,注意,此文件不要放置在apache可浏览的目录内,以免被窃取;
 
require: 网页访问限制
参数:
   1、valid-user:后面接可以使用的帐号,若只想设置一个帐号认证用,则在require user 后面直接接用户名,此处的例子是适用于多个用户名;
   2、all granted:允许所有授权
 
<Directory />:结尾
Order 定义顺序
<Directory /usr/local/apache/install>:指定控制目录
Order deny,allow:先执行deny,后执行allow
deny from all:全不匹配
allow from 127.0.0.1:指定127匹配
</Directory>

1.deny与allow有先后顺序的。
2.后面的参数会覆盖掉前面的参数。

Order 解释
举例1:
Order allow,deny
deny from all
allow from 127.0.0.1
注:先allow,后deny 127不会被匹配,因为deny会覆盖allow。

举例2:
Order deny,alow
deny from all
注:全部不能通行。

举例3:
Order alow,deny
deny from all
注:全部不能通行。

举例4:
Order deny,all
注:全部都可以通行(默认)

举例5:
Order allow,deny
注:全部不能通行(默认)

Order 举例说明

访问控制配置

如下配置都可在主配置文件、虚拟主机配置文件配置

  • 配置目录1:vim httpd-vhosts.conf
  • 配置目录2:vim httpd.conf

指定IP或IP段不可以访问网页、其他人可以访问

<Directory /usr/local/apache/install>
   Order allow,deny
   Allow from all
   Deny from 127.0.0.1
   Deny from 192.168.1.0/24
</Directory>

配置

指定IP或IP段可以访问网页、其他人不可访问

<Directory /usr/local/apache/install>
   Order deny,allow
   Allow from 127.0.0.1
   Allow from 192.168.1.0/24
   Deny from all
</Directory>

配置

指定IP或IP段可以访问指定网页URL包含存在字段文件,其他人都不可访问

# 指定admin文件类型
<filesmatch "(.*)admin(.*)">
   Order deny,allow
   Deny from all
   Allow from 127.0.0.1
   Allow from 192.168.1.0/24
</filesmatch>

配置

限制某个目录下的php类型文件没有执行权限

<Directory /usr/local/apache/>
   # 定义php不能解析
   php_admin_flag engine off
   <filesmatch "(.*)php">
         Order deny,allow
         Deny from all
         Allow from 127.0.0.1
   </filesmatch>
</Directory>

配置

其他禁止访问了解

1.禁止访问某些文件/目录
增加Files选项来控制,比如要不允许访问.inc扩展名的文件,保护php类库:
<Files ~ ".insc$">

2.禁止访问某些指定目录:(可以用<DirectoryMatch>来进行正则匹配)
<Directory ~ "/var/www/(.+)*[0-9]{3}">
当然可以写目录全局路径
<Directory /var/www/111>

3.通过文件匹配来进行禁止,比如禁止所有针对图片的访问
<Filesmatch (.*)php>

4.针对URL相对路径的禁止访问
<Location /dir/>

说明案例

用户验证配置

注:用户登陆验证,指定某一个网站需要用户登陆才可以访问。

1.修改虚拟主机配置文件

# 配置用户验证
<Directory /usr/local/html>
    Allowoverride AuthConfig
    AuthName "123"
    AuthType "Basic"
    AuthUserFile /usr/local/.htpasswd
    require valid-user
</Directory>

配置文件

 2.创建验证用户

# 创建用户 第二次添加用户不需要用-c参数
apache/bin/htpasswd -c /usr/local/.htpasswd xsk
 
参数:
 
-c 创建create
 
-m md5加密方法

3.重新加载配置文件

/usr/local/apache2/bin/apachectl graceful

Apache访问控制

  • 版本:apache 2.4+ 新增
  • Apache2.4中开始使用mod_authz_host这个新的模块来进行访问控制和其他的授权检查。
  • 原来在Apache2.2版本下用以实现网站访问控制的Order,Allow,Deny指令需要替换为新的Require访问控制指令。

使用格式:

<Directory ...>

    <RequireAll>
        xxx
    </RequireAll>
 
</Directory>

常用参数:

# 允许所有
Require all granted 

# 拒绝所有
Require all denied 

# 允许匹配环境变量中任意一个
Require env env-var [env-var] ... 

# 允许特定的HTTP方法(GET/POST/HEAD/OPTIONS)
Require method http-method [http-method] ... 

# 允许,表达式为true
Require expr expression 

# 允许特定用户
Require user userid [ userid ] ... 

# 允许特定用户组
Require group group-name [group-name] ... 

# 允许,有效用户
Require valid-user # 

# 允许特定IP或IP段,多个IP或IP段间使用空格分隔
Require ip 192.100 192.168.100 192.168.100.5
<Directory xxx>
 
    <RequireAll>
        Require all denied
    </RequireAll>
 
</Directory>

拒绝所有访问请求
<Directory xxx>
 
    <RequireAll>
        Require all granted
    </RequireAll>
 
</Directory> 

允许所有访问请求
<Directory xxx>
 
    <RequireAll>
        Require host xxx.com
    </RequireAll>
 
</Directory>

只允许指定域名主机访问请求,其他请求拒绝
<Directory xxx>
 
    <RequireAll>
        Require ip 172.18 192.168.1.1 192.168.1.2
    </RequireAll>
 
</Directory>

只允许指定IP网段或指定IP访问请求
<Directory xxx>
 
    <RequireAll>
        Require all granted
        Require not ip 192.168.1.1
        Require not ip 192.120 192.168.100
    </RequireAll>
 
</Directory>

允许所有访问请求,但拒绝指定IP或IP段的请求(组织恶意IP或爬虫网段访问)
说明:使用mod_setenvif通过正则表达式匹配来访请求的User-Agent,并设置内部环境变量BADBOT,最后拒绝BADBOT的访问请求。

<Directory xxx>
 
    SetEnvIfNoCase User-Agent ".*(FeedDemon|JikeSpider|AskTbFXTV|CrawlDaddy|Feedly|Swiftbot|ZmEu|oBot).*" BADBOT
    SetEnvIfNoCase User-Agent "brandwatch" BADBOT
    SetEnvIfNoCase User-Agent "rogerbot" BADBOT
    <RequireAll>
        Require all granted
        Require not env BADBOT
        Require not ip 192.168.100.1
    </RequireAll>
 
</Directory>

允许所有访问请求,但拒绝某些User-Agent的访问请求(通过User-Agent屏蔽垃圾网络爬虫)
原文地址:https://www.cnblogs.com/liujunjun/p/12498033.html