Apache访问控制
2016-01-01 16:22
543 查看
有时候我们会把站点,做一个白名单或者黑名单的限制比如说我们发现一个来源的IP会有非法的请求,那我们通过访问日志可以发现其中某一个IP一直在进行尝试攻击我的站点,这个时候我就可以把这个IP禁掉,我们可以在配置文件里去实现,怎么做呢我们先去主配置文件里去拷贝一个模板
[root@zhangmengjunlinux ~]# vim /usr/local/apache2/conf/httpd.conf
<Directory "/usr/local/apache2/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
拷贝到虚拟主机的配置文件里面去
[root@zhangmengjunlinux ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
具体位置放在哪了都行
<Directory "/data/www">
AllowOverride None 这是一个控制语句
Options None
Order allow,deny
Allow from all
Deny from 2.2.2.2
</Directory>
这里又一个讲究这个Order我们可以先deny也可以先Allow,哪一个在前面就先看哪一个,比如我们这个地方先写 Order Deny,allow那么在下面的时候,就要先看Deny的语句了,先后它们是有影响的
Deny from 1.1.1.1 所以先看这个规则
Allow from all 所有的IP网段
如果写成这个样子deny是不生效的,最终所有都被允许,如果是 Order allow,deny 那么就是先允许所有的通过,但是后来又发现一条规则把 1.1.1.1给deny了,所以关键的我们要看它们的顺序,哪一个在前,哪一个在后,然后根据这个顺序去看规则,不分上下分的是先后顺序
<Directory "/data/www"> AllowOverride None Options None Order allow,deny Allow from all Deny from 127.0.0.1</Directory>那么意味着我们访问127.0.0.1的时候是403[root@zhangmengjunlinux ~]# curl -x127.0.0.1:80 www.test.com -I
HTTP/1.1 403 Forbidden
Date: Thu, 31 Dec 2015 09:33:36 GMT
Server: Apache/2.2.31 (Unix) PHP/5.3.27
Content-Type: text/html; charset=iso-8859-1
除了这种写法还有根据URI forum.php或者是admin.php 这样的访问,他是我们的后台,那我们完全可以根据admin.php去做一个简单的白名单限制,只允许某一些人访问我,怎么做呢,可以这样写 filesmatch 用这个来实现
<filesmatch "(.*)admin(.*)">
Order deny,allow
Deny from all
Allow from 192.168.140.100
</filesmatch>
[root@zhangmengjunlinux ~]# apachectl -t
Syntax OK
[root@zhangmengjunlinux ~]# apachectl restart
[root@zhangmengjunlinux ~]# curl -x192.168.140.100:80 www.test.com/admin.php -I
HTTP/1.1 200 OK
Date: Thu, 31 Dec 2015 10:23:09 GMT
Server: Apache/2.2.31 (Unix) PHP/5.3.27
X-Powered-By: PHP/5.3.27
Set-Cookie: YQdF_2132_saltkey=MyWNr2Ex; expires=Sat, 30-Jan-2016 10:23:09 GMT; path=/; httponly
Set-Cookie: YQdF_2132_lastvisit=1451553789; expires=Sat, 30-Jan-2016 10:23:09 GMT; path=/
Set-Cookie: YQdF_2132_sid=WMOQJg; expires=Fri, 01-Jan-2016 10:23:09 GMT; path=/
Set-Cookie: YQdF_2132_lastact=1451557389%09admin.php%09; expires=Fri, 01-Jan-2016 10:23:09 GMT; path=/
Cache-Control: max-age=0
Expires: Thu, 31 Dec 2015 10:23:09 GMT
Content-Type: text/html; charset=gbk
[root@zhangmengjunlinux ~]# vim /usr/local/apache2/conf/httpd.conf
<Directory "/usr/local/apache2/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
拷贝到虚拟主机的配置文件里面去
[root@zhangmengjunlinux ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
具体位置放在哪了都行
<Directory "/data/www">
AllowOverride None 这是一个控制语句
Options None
Order allow,deny
Allow from all
Deny from 2.2.2.2
</Directory>
这里又一个讲究这个Order我们可以先deny也可以先Allow,哪一个在前面就先看哪一个,比如我们这个地方先写 Order Deny,allow那么在下面的时候,就要先看Deny的语句了,先后它们是有影响的
Deny from 1.1.1.1 所以先看这个规则
Allow from all 所有的IP网段
如果写成这个样子deny是不生效的,最终所有都被允许,如果是 Order allow,deny 那么就是先允许所有的通过,但是后来又发现一条规则把 1.1.1.1给deny了,所以关键的我们要看它们的顺序,哪一个在前,哪一个在后,然后根据这个顺序去看规则,不分上下分的是先后顺序
<Directory "/data/www"> AllowOverride None Options None Order allow,deny Allow from all Deny from 127.0.0.1</Directory>那么意味着我们访问127.0.0.1的时候是403[root@zhangmengjunlinux ~]# curl -x127.0.0.1:80 www.test.com -I
HTTP/1.1 403 Forbidden
Date: Thu, 31 Dec 2015 09:33:36 GMT
Server: Apache/2.2.31 (Unix) PHP/5.3.27
Content-Type: text/html; charset=iso-8859-1
除了这种写法还有根据URI forum.php或者是admin.php 这样的访问,他是我们的后台,那我们完全可以根据admin.php去做一个简单的白名单限制,只允许某一些人访问我,怎么做呢,可以这样写 filesmatch 用这个来实现
<filesmatch "(.*)admin(.*)">
Order deny,allow
Deny from all
Allow from 192.168.140.100
</filesmatch>
[root@zhangmengjunlinux ~]# apachectl -t
Syntax OK
[root@zhangmengjunlinux ~]# apachectl restart
[root@zhangmengjunlinux ~]# curl -x192.168.140.100:80 www.test.com/admin.php -I
HTTP/1.1 200 OK
Date: Thu, 31 Dec 2015 10:23:09 GMT
Server: Apache/2.2.31 (Unix) PHP/5.3.27
X-Powered-By: PHP/5.3.27
Set-Cookie: YQdF_2132_saltkey=MyWNr2Ex; expires=Sat, 30-Jan-2016 10:23:09 GMT; path=/; httponly
Set-Cookie: YQdF_2132_lastvisit=1451553789; expires=Sat, 30-Jan-2016 10:23:09 GMT; path=/
Set-Cookie: YQdF_2132_sid=WMOQJg; expires=Fri, 01-Jan-2016 10:23:09 GMT; path=/
Set-Cookie: YQdF_2132_lastact=1451557389%09admin.php%09; expires=Fri, 01-Jan-2016 10:23:09 GMT; path=/
Cache-Control: max-age=0
Expires: Thu, 31 Dec 2015 10:23:09 GMT
Content-Type: text/html; charset=gbk
相关文章推荐
- Centos 6安装完美搭建mysql、php、apache之旅
- Apache加载curl_init 失败 php_curl.dll
- 运行XAMPP中的apache出现 Error: Apache shutdown unexpectedly
- Apache配置静态缓存
- Apache不记录指定类型日志
- Apache日志切割
- Apache源码包添加启动脚本到系统服务
- Apache找不到服务错误
- 报错: org.apache.commons.pool2.impl.GenericObjectPoolConfig not found
- 升级win10 ,apache 80端口被占用
- wamp apache配置伪静态
- apache ftp server 64位无法启动的问题
- apache做端口转发
- 在Apache上安装mod_wsgi
- springmvc json java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntim
- php,apache伪静态(1转)
- [页面模板框架对比] Apache Tiles VS Sitemesh
- java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory
- apicloud打包html5的apk所遇错误(org.apache.subversion.javahl.ClientException:)
- Win7 x64系统下PHP开发环境搭建(Apache2.4.18+PHP5.6.16+MySQL5.7.10+phpMyAdmin4.5.3.1)