apache配置黑名单和白名单的两个方法
为项目需要,部署之后客户需要实现白名单功能。以前一般使用iis服务器或者是网上的DZ或CP面板,而且也仅仅操作过黑名单。百度搜索,基本都是黑名单的操作方法,本文章主要是讲使用apache来规则实现黑白名单,从程序角度实现的就不在陈述,PHP程序可以直接获取客户端IP在初始化class或者login方法实现禁止或仅允许区段IP通过访问。
方法1:通过apache的虚拟主机配置文件httpd.conf来控制,本方法适用于自己架设的服务器,一般虚拟主机是不能接触到httpd.conf文件的。
#白名单,仅允许192.168.0.1以及192.168.1.1-192.168.1.255访问
<Directory "D:/htdocs">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
#以下为关键代码
Order Deny,Allow
Allow from 192.168.0.1
Allow from 192.168.1.0/24
Deny from All
</Directory>
#黑名单,禁止192.168.0.1以及192.168.1.1-192.168.1.255访问
<Directory "D:/htdocs">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
#以下为关键代码
order allow,deny
allow from all
deny from 192.168.0.1
deny from 192.168.1.
</Directory>
方法2:通过apache的虚拟主机的伪静态文件.htaccess来控制,本方法适用于支持.htaccess的所有主机。
#白名单,仅允许192.168.0.1以及192.168.1.1-192.168.1.255访问
Order Deny,Allow
Allow from 192.168.0.1
Allow from 192.168.1.0/24
Deny from All
#黑名单,禁止192.168.0.1以及192.168.1.1-192.168.1.255访问
order allow,deny
allow from all
deny from 192.168.0.1
deny from 192.168.1.
PS:192.168.1.0/24与192.168.1. 等价,仅为不同书写格式。
apache层的账户权限控制,以及apache黑名单白名单过滤功能
1. 修改虚拟主机配置
<Directory /var/www>#目录路径
...
AllowOverride All #允许.htaccess覆盖配置文件,使.htaccess生效
...
</Directory(允许)
2.在需要权限控制的目录下创建.htaccess
#比如要控制 /var/www/quanxian 目录,在/var/www/quanxian目录中创建.htaccess文件,填写如下内容
AuthUserFile /var/www/quanxian/.htpwd #[权限控制文件]
AuthType Basic
AuthName "[描述信息]"
ErrorDocument 401 /var/www/err_401.html #这句话是可以没有的
require valid-user #认证方式:用户认证(valid-user)或组认证(valid-group).
3.生成加密文件
sudo htpasswd -bc /var/www/quanxian/.htpwd wangdatestuser wangdatestpwd #
htpasswd的命令详解网上有好多,copy一个过来(http://hi.baidu.com/luoxiandong99/item/bd14b7462fe61ef7bdf45140)
##################################################################################################
apache htpasswd命令选项参数说明
-c 创建一个加密文件
-n 不更新加密文件,只将apache htpasswd命令加密后的用户名密码显示在屏幕上
-m 默认apache htpassswd命令采用MD5算法对密码进行加密
-d apache htpassswd命令采用CRYPT算法对密码进行加密
-p apache htpassswd命令不对密码进行进行加密,即明文密码
-s apache htpassswd命令采用SHA算法对密码进行加密
-b 在apache htpassswd命令行中一并输入用户名和密码而不是根据提示输入密码
-D 删除指定的用户
apache htpasswd命令用法实例
1、利用htpasswd命令添加用户
htpasswd -bc D:\licang\passwd yingzi 1234
2、在原有密码文件中增加下一个用户
htpasswd -b D:\licang\passwd ludi 1234
3、如何不更新密码文件,只显示加密后的用户名和密码
htpasswd -nb yingzi 1234
4、利用htpasswd命令删除用户名和密码
htpasswd -D D:\licang\passwd yingzi
5、利用htpasswd命令修改密码
htpasswd -D D:\licang\passwd yingzi
htpasswd -b D:\licang\passwd yingzi 5678
##################################################################################################
4.以上就配置完整体的基于apache层的账户访问权限控制,
a.创建白名单,只有(192.168.1.1, 和 192.168.1.2)能访问这个目录
在.htaccess中加入下面的内容
Order Deny,Allow#(1)
Allow from 192.168.1.1 192.168.1.2#(2)
Deny from All#(3)
#注意(1)的顺序,它很重要,(2),(3)的顺序不重要,意思是先拒绝所有的访问,再看看是否在Allow的明白里,如果在的话,就通过
b.创建黑名单,(192.168.1.1, 和 192.168.1.2)不能能访问这个目录
在.htaccess中加入下面的内容
Order Allow,Deny #(1)
Allow from all#(2)
Deny from 192.168.1.1 192.168.1.2#(3)
#注意(1)的顺序,它很重要,道理同白名单
apache rewrite规则实现白名单
今天弄了半天apache 的rewrite 规则,还是没有配置出符合的规则。后一同事,研究了半个小时弄出来,很是惭愧。
需求:
六个文件的入口,其他都重定向到index
自己的思路:
正则找出不是六个文件的URL的模式,进行过滤。
对比同事的结果,自己思路的问题:
1. 想找出所有不符合规则的,越想越多,无法下手。---------------- 思路错误,应该 制定白名单,
2. 概念错误, 弄错 REQUEST_URI 和 REQUEST_STRING 的概念 基础知识不牢固。
最后结果:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^/(.*) /index.asp$1 [L]
RewriteCond %{REQUEST_URI} ^/index.asp [NC,OR]
RewriteCond %{REQUEST_URI} ^/o.asp [NC,OR]
RewriteCond %{REQUEST_URI} ^/s.asp [NC,OR]
RewriteCond %{REQUEST_URI} ^/error.asp [NC,OR]
RewriteCond %{REQUEST_URI} ^/favicon.ico [NC,OR]
RewriteCond %{REQUEST_URI} ^/status.taobao [NC,OR]
RewriteCond %{REQUEST_URI} ^/app/thirdparty/webbox.asp [NC,OR]
RewriteCond %{REQUEST_URI} ^/static/ [NC]
RewriteRule ^.* - [L]
RewriteCond %{REQUEST_URI} !^/index.asp$
RewriteRule ^.* ? [F,L]
</IfModule>