分类: LINUX
在一次面试的时候被问到apache访问控制的问题。由于以前对apache的访问控制都是通过iptalbes来实现的,没有实际在apache上操作过访问控制。所以只知道个大概: 在主配置文件里的directory段里通过allow、deny等指令来实现。虽然答的也算对,但毕竟没有操作过,心理没底。所以今天就将apache 的访问控制详细操作记录下。以便以后使用。
apache2.2是通过模块mod_authz_host来实现访问控制的。在2.0版本中此模块叫做mod_access 。
下面以apache2.2版本来做介绍:
原理篇
Apache模块 mod_authz_host
说明 | 提供基于主机名、IP地址、请求特征的访问控制 |
---|---|
状态 | 基本(B) |
模块名 | authz_host_module |
源文件 | mod_authz_host.c (2.0版本中为mod_access.c) |
兼容性 | 仅在 Apache 2.1 及以后的版本中可用 |
mod_authz_host模块的指令用于<Directory> <Files> <Location>段以及.htaccess文件中来控制对服务器特定部分的访问。allow和deny指令指出允许那些客户以及不允许那些客户访问服务器。而
Order
指令设置默认的访问状态并配置Allow
和Deny
指令怎样相互作用。操作篇
首先,检查apache是否支持模块mod_authz_host ,如果不支持,重新编译安装以支持这个模块。
[root@localhost conf]# /usr/local/EDSV/apache/bin/apachectl -l | grep mod_authz_host.c mod_authz_host.c |
然后设置apache的访问控制。下面以主配置文件里的<Directory>为例:
比如要对默认网站进行访问控制。默认网站的DocumentRoot为/usr/local/EDSV/apache/htdocs
要允许所有人访问,只拒绝一个IP或者IP段访问:
<Directory "/usr/local/EDSV/apache/htdocs">
Order allow,deny
Allow from all
deny from 10.112.5.137
</Directory>
要拒绝所有人访问,只允许一个IP或者段访问。
<Directory "/usr/local/EDSV/apache/htdocs">
Order deny,allow
deny from all
allow from 10.112.5.195
</Directory>
设置网站的默认访问状态:
<Directory /www>
Order Allow,Deny
</Directory>
这样将会禁止所有对
/www
目录的访问,因为默认状态将被设置为拒绝。
Order Allow,Deny
Allow from apache.org
Deny from foo.apache.org
以上设置apache.org域中所有主机,除了foo.apache.org子域包含的主机被拒绝以外,其他都允许访问。而所有不在apache.org域中的主机都不允许访问,因为默认状态是拒绝对服务器的访问。
参考资料:http://man.chinaunix.net/newsoft/ApacheMenual_CN_2.2new/mod/mod_authz_host.html