Apache httpd 2.4 访问控制

Apache访问控制可以由几个不同的模块完成。其中最重要的是mod_authz_core和mod_authz_host。Apache使用Require指令进行授权来确保用户被允许或拒绝访问资源。其中mod_authz_host模块可以使用ip,host,forward-dns和local扩展授权类型。其他授权类型也可以使用,但可能需要加载额外的授权模块。这些授权提供程序会影响哪些主机可以访问服务器的某个区域。访问可以通过主机名,IP地址或IP地址范围进行控制。

一、基于主机的访问控制

由mod_authz_host实现的授权提供者是使用Require指令注册的。
该指令作用域
    <Directory>
    <Files>
    <Location>部分
    .htaccess文件中

通常,访问限制指令适用于所有访问方法(GET,PUT,POST等)。 这在大多数情况下是需要的行为。
但是,通过将指令放在<Limit>部分中,可以限制某些方法,而使其他方法不受限制。

二、特定上下文环境常见的访问控制

Require all granted
  允许所有

Require all denied
  拒绝所有

Require env env-var [env-var] …
  只有在给定的环境变量被设置的情况下才允许访问

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

Require expr expression
  允许特定表达式为true时

Require user userid [userid] …
  允许特定用户

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

Require valid-user
  允许有效的用户

Require ip 10 172.20 192.168.2
  允许特定IP或IP段,多个IP或IP段间使用空格分隔

三、基于IP地址的访问控制

单个或多个IP
  Require ip 10.1.2.3
  Require ip 192.168.1.104 192.168.1.205

基于部分IP地址的访问控制
  Require ip 10.1
  Require ip 10 172.20 192.168.2

基于网络/子网掩码的访问控制
  Require ip 10.1.0.0/255.255.0.0
  Require ip 10.1.0.0/16

基于IPv6的访问控制
  Require ip 2001:db8::a00:20ff:fea7:ccea
  Require ip 2001:db8:1:1::a #Author : Leshami
  Require ip 2001:db8:2:1::/64 #Blog :http://blog.csdn.net/leshami
  Require ip 2001:db8:3::/48

基于主机名的访问控制
  Require host example.org
  Require host .net example.edu

基于forward-dns方式的访问控制
  forward-dns允许根据简单的主机名来访问服务器。 当指定require forward-dns host-name时,所有与主机名对应的IP地址都被允许访问。该方法不依赖于反向DNS查询:它仅查询DNS的主机名,并允许客户端的IP匹配。 因此,它只适用于主机名,而不是域名。 但是,由于不使用反向DNS,它将与使用动态DNS服务的客户端协同工作。

  Require forward-dns bla.example.org
  能够被bla.example.org解析的IP地址将被允许访问

仅允许本机访问
  Require local

四、混合配置

黑名单方法
<RequireAll>
    Require all granted
    Require not ip 10.252.46.165
</RequireAll>

Require not ip 192.168.205
Require not host phishers.example.com moreidiots.example
Require not host gov

白名单方法
Require ip 192.168.1.104 192.168.1.205

基于变量和表达式的访问控制方法
<If "%{HTTP_USER_AGENT} == 'BadBot'">
    Require all denied
</If>

Require expr %{HTTP_USER_AGENT} != 'BadBot'

五、配置示例

环境
[root@centos7-router ~]# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:  Nov 19 2015 21:43:13

配置允许所有客户端访问
注释原有的DocumentRoot,并添加下列内容到httpd.conf
[root@centos7-router ~]# tail -8 /etc/httpd/conf/httpd.conf
DocumentRoot "/u01/web"
<Directory "/u01/web">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

# echo "This is a access privileges test page.">>/u01/web/index.html
[root@centos7-router ~]# systemctl reload httpd
[root@centos7-router ~]# curl http://localhost:90
This is a access privileges test page.

配置拒绝所有客户端访问
Require all granted 成 Require all denied并reload httpd
# curl http://localhost:90
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /
on this server.</p>
</body></html>

配置允许192.168.1.0网段访问,注意,此处使用RequireAll容器
DocumentRoot "/u01/web"

<Directory "/u01/web">
    Options Indexes FollowSymLinks
    AllowOverride None
    <RequireAll>
        Require ip 192.168.1
    </RequireAll>
</Directory>

从1.253服务器上进行访问
[robin@ydq4 ~]$ ip addr |grep inet|grep global
    inet 192.168.1.253/24 brd 192.168.1.255 scope global eth0
[robin@ydq4 ~]$ curl http://192.168.1.175:90
This is a access privileges test page.

五、更多参考

https://httpd.apache.org/docs/2.4/mod/mod_authz_core.html#require
http://httpd.apache.org/docs/2.4/mod/mod_authz_core.html

时间: 2024-11-03 11:56:36

Apache httpd 2.4 访问控制的相关文章

Linux下配置Apache httpd

httpd是Apache超文本传输协议(HTTP)服务器的主程序.它被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池对外提供服务.httpd支持基于 虚拟主机,以及基于HOST.IP.PORT实现虚拟主机,反向代理,负载均衡,路径别名,用户认证,basic,支持第三方模块等众多特性.本文主要描述了Linux下httpd(2.2版本)的相关基本配置. 1.配置文件概述 配置文件,主要分为3个部分: # grep "Section" /etc/httpd/conf/h

Linux下编译安装Apache httpd 2.4

Apache是世界使用排名第一的Web服务器软件.它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一.当前Apache版本为2.4,本文主要描述基于CentOS 6.5以源码方式安装Apache httpd. 一.编译安装的优势 源码的编译安装一般由3个步骤组成: 配置(configure),通常依赖gcc编译器,binutils,glibc.配置软件特性,检查编译环境,生成 Makefile文件 编译(make) 安装(make ins

我是如何通过fuzz apache httpd服务发现CVE-2017-7668

本文讲的是我是如何通过fuzz apache httpd服务发现CVE-2017-7668, 目标 在fuzz过程中发现apache httpd服务在AFL下崩溃掉了,导致出现了很多问题,比如模糊测试程序稳定性下降,模糊测试之外的程序不会崩溃等等.在这篇文章中,我会在展示漏洞的同时尝试解释这些问题,最后再对崩溃本身进行一定的说明. 测试用例 由于这只是我自己用AFL来模拟继续程序的网络模糊测试,所以我没有考虑太多复杂以及覆盖范围广的例子. 所以,为了获得大量安装apache httpd服务的案例

Apache httpd 目录列表禁用配置(options indexes)

Apache httpd服务器在缺省的情况下,开启了基于目录列表的访问,这是一个存在安全隐患的问题,因此可以关闭这个功能.在Apache 2.4的版本中,不在支持使用-indexes来配置,需要注释该功能.本文对此给出演示,供大家参考. 一.缺省情况目录列表可查看示例 当前环境 [root@centos7-web ~]# more /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@centos7-web ~]# apac

绿盟科技网络安全威胁周报2017.25 关注多个Apache httpd安全漏洞CVE-2017-3167等

绿盟科技发布了本周安全通告,周报编号NSFOCUS-17-25,绿盟科技漏洞库本周新增40条,其中高危11条.本次周报建议大家关注 多个Apache httpd安全漏洞 .Apache官方已经针对2.2.x以及2.4.x发布了相应的2.2.33-dev以及2.4.26新版本修复了上述各漏洞,请受影响的用户及时下载更新至最新版本来防护漏洞. 焦点漏洞 多个Apache httpd安全漏洞 NSFOCUS ID 36932 36933 36934 36935 36936 CVE ID CVE-201

Linux(CentOS)系统下安装好apache(httpd)服务后,其他电脑无法访问的原因

原文:Linux(CentOS)系统下安装好apache(httpd)服务后,其他电脑无法访问的原因 今天试了下在虚拟机上利用CentOS系统的yum命令安装好了httpd(apache2.4.6),然后在windows系统下访问此虚拟机的ip地址,却访问不了. 因为前段时间有知道过iptable的限制,所以在想是不是因为iptable限制了80端口呢! 所以在网上找了下iptable的命令,并且把tcp的80端口设置成允许任何IP都可以访问: iptables -I INPUT -p TCP

Apache httpd 出现多个漏洞 可能引发DoS攻击 2.2.x及2.4.x版本受影响

近日,Apache 官方发布了httpd的新版本修复了多个安全漏洞,涉及CVE-2017-3167,CVE-2017-3169,CVE-2017-7659,CVE-2017-7668,CVE-2017-7679,可以造成身份验证被绕过以及拒绝服务攻击等.大部分Apache httpd 2.2.x以及2.4.x版本均受影响.相关漏洞信息如下: CVE编号 漏洞描述 CVE-2017-3167 第三方模块在验证阶段以外调用ap_get_basic_auth_pw()时有可能导致验证要求被绕过 CVE

漏洞预警:Apache httpd 出现多个重要安全漏洞

漏洞编号: CVE-2017-3167 CVE-2017-3169 CVE-2017-7659 CVE-2017-7668 CVE-2017-7679 漏洞名称: Apache httpd 多个安全漏洞 官方评级: 高危 漏洞描述: CVE-2017-3167 第三方模块在身份验证阶段使用ap_get_basic_auth_pw(),会导致绕过身份验证要求. CVE-2017-3169 第三方模块在HTTP请求HTTPS端口时,若调用ap_hook_process_connection(),则m

Apache httpd 安装module mod_expires、mod_deflate的方法_Linux

编译安装好apache httpd以后,可以继续添加扩展 mod_expires 用于发送header,设置静态文件的过期时间 复制代码 代码如下: cd httpd-2.2.19/modules/metadata sudo /usr/local/apache2/bin/apxs -i -a -c mod_expires.c sudo vi /usr/local/apache2/conf/httpd.conf ExpiresActive On FileEtag none mod_deflate