配置防盗链、 访问控制Directory 、访问控制FilesMatch
2019独角兽企业重金招聘Python工程师标准>>>
5月31日任务
11.25 配置防盗链
11.26 访问控制Directory
11.27 访问控制FilesMatch
扩展
几种限制ip的方法 http://ask.apelearn.com/question/6519
apache 自定义header http://ask.apelearn.com/question/830
apache的keepalive和keepalivetimeout http://ask.apelearn.com/question/556
配置防盗链目录概要
- 通过限制referer来实现防盗链的功能
- 配置文件增加如下内容
Directory针对目录进行<Directory /data/wwwroot/www.123.com> //用于定义作用于那个目录SetEnvIfNoCase Referer “http://www.123.com” local_ref //定义白名单SetEnvIfNoCase Referer “http://123.com” local_ref //定义白名单SetEnvIfNoCase Referer “^$” local_ref //定义空的页面的白名单<filesmatch “.(txt|doc|mp3|zip|rar|jpg|gif|png)”> //定义规则Order Allow,Deny //定义访问控制Allow from env=local_ref </filesmatch></Directory>
- curl -e "http://www.aminglinux.com/123.html" 自定义referer
防盗链
- 防盗链的定义
- 此内容不在自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己的有广告有利益的页面上向最终用户提供此内容。 常常是一些名不见经传的小网站来盗取一些有实力的大网站的地址(比如一些音乐、图片、软件的下载地址)然后放置在自己的网站中,通过这种方法盗取大网站的空间和流量。
- 为什么会产生盗链
- 一般浏览有一个重要的现象就是一个完整的页面并不是一次全部传送到客户端的。如果请求的是一个带有许多图片和其它信息的页面,那么最先的一个Http请求被传送回来的是这个页面的文本,然后通过客户端的浏览器对这段文本的解释执行,发现其中还有图片,那么客户端的浏览器会再发送一条Http请求,当这个请求被处理后那么这个图片文件会被传送到客户端,然后浏览器会将图片安放到页面的正确位置,就这样一个完整的页面也许要经过发送多条Http请求才能够被完整的显示。基于这样的机制,就会产生一个问题,那就是盗链问题:就是一个网站中如果没有起页面中所说的信息,例如图片信息,那么它完全可以将这个图片的连接到别的网站。这样没有任何资源的网站利用了别的网站的资源来展示给浏览者,提高了自己的访问量,而大部分浏览者又不会很容易地发现,这样显然,对于那个被利用了资源的网站是不公平的。一些不良网站为了不增加成本而扩充自己站点内容,经常盗用其他网站的链接。一方面损害了原网站的合法利益,另一方面又加重了服务器的负担。
配置防盗链
- 打开虚拟主机配置文件
- 需要添加的配置文件
Directory针对目录进行<Directory /data/wwwroot/www.111.com> //用于定义作用于哪个目录,配置防盗链,就是定义本站点SetEnvIfNoCase Referer “http://www.111.com” local_ref //定义Referer白名单SetEnvIfNoCase Referer “http://aaa.com” local_ref //定义白名单SetEnvIfNoCase Referer “^$” local_ref //定义空的Referer页面为白名单<filesmatch “.(txt|doc|mp3|zip|rar|jpg|gif|png)”> //定义规则,这里的filesmatch中f 和 m 可以大写可以小写Order Allow,Deny //定义访问控制,order用来定义访问顺序Allow from env=local_ref </filesmatch></Directory>
- 未更改前的配置文件
<VirtualHost *:80>DocumentRoot "/data/wwwroot/abc.com"ServerName abc.comServerAlias www.abc.com www.123.comErrorLog "logs/abc.com-error_log"CustomLog "logs/abc.com-access_log" common
</VirtualHost><VirtualHost *:80>DocumentRoot "/data/wwwroot/111.com"ServerName 111.comServerAlias www.example.com 2111.com.cn# <Directory /data/wwwroot/111.com> # <FilesMatch 123.php># AllowOverride AuthConfig# AuthName "111.com user auth"# AuthType Basic# AuthUserFile /data/.htpasswd# require valid-user# </FilesMatch>#</Directory><IfModule mod_rewrite.c>RewriteEngine onRewriteCond %{HTTP_HOST} !^111.com$RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]
</IfModule>
<IfModule mod_expires.c>ExpiresActive onExpiresByType image/gif "access plus 1 days"ExpiresByType image/jpeg "access plus 24 hours"ExpiresByType image/png "access plus 24 hours"ExpiresByType text/css "now plus 2 hour"ExpiresByType application/x-javascript "now plus 2 hours"ExpiresByType application/javascript "now plus 2 hours"ExpiresByType application/x-shockwave-flash "now plus 2 hours"ExpiresDefault "now plus 0 min"
</IfModule><Directory /data/wwwroot/www.111.com>SetEnvIfNoCase Referer "http://www.111.com" local_refSetEnvIfNoCase Referer "http://111.com" local_ref# SetEnvIfNoCase Referer "^$" local_ref<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">Order Allow,DenyAllow from env=local_ref</filesmatch></Directory>ErrorLog "logs/111.com-error_log"
SetEnvIf Request_URI ".*\.gif$" imgSetEnvIf Request_URI ".*\.jpg$" imgSetEnvIf Request_URI ".*\.png$" imgSetEnvIf Request_URI ".*\.bmp$" imgSetEnvIf Request_URI ".*\.swf$" imgSetEnvIf Request_URI ".*\.js$" imgSetEnvIf Request_URI ".*\.css$" img
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.log 86400" combined env=!img
</VirtualHost>
- 更改后的配置文件,并将空的Referer页面为白名单 注释掉
- 将# SetEnvIfNoCase Referer "^$" local_ref
[root@yong-02 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf<VirtualHost *:80>DocumentRoot "/data/wwwroot/abc.com"ServerName abc.comServerAlias www.abc.com www.123.comErrorLog "logs/abc.com-error_log"CustomLog "logs/abc.com-access_log" common
</VirtualHost><VirtualHost *:80>DocumentRoot "/data/wwwroot/111.com"ServerName 111.comServerAlias www.example.com 2111.com.cn# <Directory /data/wwwroot/111.com> # <FilesMatch 123.php># AllowOverride AuthConfig# AuthName "111.com user auth"# AuthType Basic# AuthUserFile /data/.htpasswd# require valid-user# </FilesMatch>#</Directory><Directory /data/wwwroot/111.com>SetEnvIfNoCase Referer "http://www.111.com" local_refSetEnvIfNoCase Referer "http://aaa.com" local_ref# SetEnvIfNoCase Referer "^$" local_ref<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)">Order Allow,DenyAllow from env=local_ref</filesmatch></Directory>ErrorLog "logs/111.com-error_log"
SetEnvIf Request_URI ".*\.gif$" imgSetEnvIf Request_URI ".*\.jpg$" imgSetEnvIf Request_URI ".*\.png$" imgSetEnvIf Request_URI ".*\.bmp$" imgSetEnvIf Request_URI ".*\.swf$" imgSetEnvIf Request_URI ".*\.js$" imgSetEnvIf Request_URI ".*\.css$" img
CustomLog "|/usr/local/apache2/bin/rotatelogs -l logs/123.com-access_%Y%m%d.log 86400" combined env=!img
</VirtualHost>
- 检查配置文件是否存在语法错误,并重新加载配置文件
[root@yong-02 111.com]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@yong-02 111.com]# /usr/local/apache2/bin/apachectl graceful
- 用浏览器访问111.com/images/baidu.png图片,会显示Forbidden
- 这时在论坛创建一个帖子,将连接放进帖子中,再去访问,会看到还是Forbidden,这是因为Referer是ask.apelearn.com
- 若是想在帖子中正常访问图片,可以将ask.apelearn.com加入到白名单中
SetEnvIfNoCase Referer "http://ask.apelearn.com" local_ref
- 然后检查配置文件是否存在语法错误,并重新加载配置文件
[root@yong-02 111.com]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@yong-02 111.com]# /usr/local/apache2/bin/apachectl graceful
- 这时再来在帖子中访问图片,会看到正常访问
- 若是想要直接就可以在浏览器中访问,则只需要去虚拟主机配置文件中打开空的Referer
[root@yong-02 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf更改前,去除前面的注释符# SetEnvIfNoCase Referer "^$" local_ref
更改后
SetEnvIfNoCase Referer "^$" local_ref
- 然后检查配置文件语法错误,并重启配置文件
- 这时候在浏览器中访问访问图片就会正常显示
用curl测试
- 用curl命令去访问图片
[root@yong-02 111.com]# curl -x127.0.0.1:80 111.com/images/baidu.png -I
HTTP/1.1 200 OK
Date: Thu, 31 May 2018 15:01:30 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Last-Modified: Wed, 30 May 2018 13:46:34 GMT
ETag: "a46d-56d6c9435c280"
Accept-Ranges: bytes
Content-Length: 42093
Content-Type: image/png
- 当然也可以用curl去模拟Referer,使用 -e 参数指定Referer
[root@yong-02 111.com]# curl -e "http://www.qq.com/123.txt" -x127.0.0.1:80 111.com/images/baidu.png -I
HTTP/1.1 403 Forbidden
Date: Thu, 31 May 2018 15:04:21 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1[root@yong-02 111.com]# curl -e "http://111.com/123.php" -x127.0.0.1:80 111.com/images/baidu.png -I
HTTP/1.1 200 OK
Date: Thu, 31 May 2018 15:04:41 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Last-Modified: Wed, 30 May 2018 13:46:34 GMT
ETag: "a46d-56d6c9435c280"
Accept-Ranges: bytes
Content-Length: 42093
Content-Type: image/png
- curl -e 格式
- curl -e "http://"
访问控制 – Directory目录概要
- 核心配置文件内容
<Directory /data/wwwroot/111.com/admin/>Order deny,allowDeny from allAllow from 127.0.0.1</Directory>
- curl测试状态码为403则被限制访问了
访问控制
- 打开虚拟主机配置文件
- Order,用来定义顺序,是先deny,还是allow
- 若是先deny,就先执行deny的语句
- 若是先allow,就先执行allow的语句
- 特殊性:
- 不管IP是否匹配到,它都会从头到尾执行完
[root@yong-02 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf将代码放在防盗链代码上面,防止冲突<Directory /data/wwwroot/111.com/admin/>Order deny,allowDeny from allAllow from 127.0.0.1</Directory>
- 创建一个admin目录,并新建一个index.php文件,内容为121212
[root@yong-02 111.com]# mkdir admin
[root@yong-02 111.com]# cd admin/
[root@yong-02 admin]# touch index.php
[root@yong-02 admin]# echo "12113414123">index.php
[root@yong-02 admin]# cat index.php
12113414123
- 检查语法错误,并重新加载配置文件
[root@yong-02 admin]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@yong-02 admin]# /usr/local/apache2/bin/apachectl graceful
- 限制的原 IP
- curl -x127.0.0.1:80 111.com/admin/index.php -I
- 127.0.0.1是目标 IP ,而要访问的IP,也要使用127.0.0.1去访问,最终就是目标IP和原IP是同一个IP,自己和自己通信,限制IP是 原 IP
- -x指定的是目标IP
[root@yong-02 admin]# curl -x127.0.0.1:80 111.com/admin/index.php -I
HTTP/1.1 200 OK
Date: Thu, 31 May 2018 15:21:22 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
X-Powered-By: PHP/7.1.6
Content-Type: text/html; charset=UTF-8
- 在更换目标IP,那么原IP也会跟着变化
[root@yong-02 admin]# curl -x192.168.180.135:80 111.com/admin/index.php -I
HTTP/1.1 403 Forbidden
Date: Thu, 31 May 2018 15:24:48 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1
- 浏览器访问111.com/admin/index.php会显示forbidden
- 访问控制是用目录的形式来做的,首先规定一个目录访问到哪里去的(目录必须使用绝对路径),然后是Oerder,控制的对象就是来源IP
访问控制 – FilesMatch目录概要
- 核心配置文件内容
<Directory /data/wwwroot/www.123.com> //功能作用目录<FilesMatch "admin.php(.*)"> //针对admin.php(.*)这个类型的文件,进行控制Order deny,allowDeny from allAllow from 127.0.0.1</FilesMatch>
</Directory>
访问控制 – FilesMatch
- 访问控制,除了目录形式,还是文件名去匹配(或链接)
- 打开虚拟主机配置文件
- 首先定义一个Directory,然后在下面在定义一个FilesMatch
[root@yong-02 admin]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf <Directory /data/wwwroot/111.com><FilesMatch "admin.php(.*)">Order deny,allowDeny from allAllow from 127.0.0.1</FilesMatch></Directory>
- 检查语法错误,并重新加载配置文件
[root@yong-02 admin]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@yong-02 admin]# /usr/local/apache2/bin/apachectl graceful
- 测试
这里没有对admin目录做任何限制,做的FilesMatch跟这个不匹配,没有遇到控制语句,所以访问是404
[root@yong-02 admin]# curl -x192.168.180.135:80 111.com/admin/fasdfasdf -I
HTTP/1.1 404 Not Found
Date: Thu, 31 May 2018 15:36:57 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1有特殊符号需要用 ” 单引号括起来
[root@yong-02 111.com]# curl -x192.168.180.135:80 'http://111.com/admin.php?fasdfasdf' -I
HTTP/1.1 403 Forbidden
Date: Thu, 31 May 2018 15:44:16 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1[root@yong-02 111.com]# curl -x127.0.0.1:80 'http://111.com/admin.php?fasdfasdf' -I
HTTP/1.1 404 Not Found
Date: Thu, 31 May 2018 15:44:45 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1
总结
- Directory和FilesMatch 功能是一样的,只不过有时仅仅想针对一个访问的链接去做控制,那么再去控制目录则不太合适,FilesMatch可以满足一些比较个性化的需求
转载于:https://my.oschina.net/u/3791387/blog/1822158
配置防盗链、 访问控制Directory 、访问控制FilesMatch相关推荐
- Linux centosVMware Apache 配置防盗链、访问控制Directory、访问控制FilesMatch
一.配置防盗链 通过限制referer来实现防盗链的功能 配置文件增加如下内容 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //改为如下 ...
- Apache(httpd)配置--防盗链配置和访问控制
一.配置防盗链 通过防盗链的方式,可以设置限制第三方的站点通过引用的方式获取服务器上的图片,数据等,如果想要获取本站点的图片数据,只能通过本站点访问获取,这样也有效的减少了服务器的资源. 什么是ref ...
- LAMP架构(七)配置防盗链,访问控制
2019独角兽企业重金招聘Python工程师标准>>> 配置防盗链 通过限制referer来实现防盗链的功能 配置文件增加如下内容 <Directory /data/wwwro ...
- 1.8.8 配置防盗链
2019独角兽企业重金招聘Python工程师标准>>> 1.8.8 配置防盗链 通过限制referer来实现防盗链的功能 配置文件增加如下内容 <Directory /data ...
- 在Apache上配置防盗链功能和隐藏版本号
文章目录 在Apache上配置防盗链功能 安装DNS服务 配置http服务软件目录 开启服务 开启服务 源站进行防盗链操作 隐藏版本信息步骤 使用抓包工具查看版本信息 隐藏设置 在Apache上配置防 ...
- LNMP - Nginx配置防盗链
配置防盗链的目的:当别的网站盗用了我们网站的图片,视频等文件资源,放到他们自己的网站上去,一方面这属于无耻的盗窃行为,另一方面在并发量很大的情况下势必会无端增加我们网站的流量,增加服务器的负载. 解决 ...
- Nginx配置防盗链
Nginx配置防盗链 进入Nginx配置文件: [root@LHQ vhosts]# vim test.conf server { listen 80; server_name www.test.co ...
- Apache网页优化 ---配置防盗链
防盗链概述 防盗链就是防止别人的网站代码里面盗用服务器的图片文件.视频等相关资源.如果别人盗用网站的这些静态资源,明显的是会增大服务器的带宽压力.所以作为网站的维护人员,要杜绝我们服务器的静态资源被其 ...
- Nginx防盗链,Nginx访问控制, Nginx解析php相关配置, Nginx代理
2019独角兽企业重金招聘Python工程师标准>>> Nginx防盗链 Nginx防盗链配置需要与不记录日志和过期时间结合在一起,因为都用到了location. 打开配置文件,注释 ...
最新文章
- 量子计算和量子模拟研究获进展
- JZOJ 3129. 【WinterCamp 2013】数三角形
- Oracle Spatial分区应用研究之一:分区与分表查询性能对比
- 说说mysql_说说MySQL权限 - andyqian的个人空间 - OSCHINA - 中文开源技术交流社区
- STM32——GPIO(2)
- 输入问题C++字符数组越界问题的一个案例分析
- orange's系统可以装mysql 吗?_bochs 2.4.2 ubuntu 安装运行问题《orange#39;s 一个操作系统的...
- VScode 把tab置换为空格
- 手机号码归属地查询App
- VMware中安装CentOS7(设置静态IP地址)超详细过程,并通过docker容器安装mySql数据库
- 成功者的13个良好习惯
- SSL-ZYC 牛车
- 【Python模块】图形化编程模块-turtle
- 手机电话本怎么导入另一个手机
- apache安装及配置
- 令人肝肠寸断的100个签名
- 2020年10月30日提高组 B 超级蚯蚓
- linux分屏显示两个文件内容,在linux中,如何分屏显示一个文件(如.txt)的内容?指令或快捷键...
- JAVA 80行代码 写一个 万年历
- android 删除sd卡文件恢复,终于解决sd卡删除的文件如何恢复问题
热门文章
- Git和GitHub使用教程
- 由巨型计算机到微型计算机,微机原理第一章节:基础知识.ppt
- python3.7.2安装包_Win10下python 2.7与python 3.7双环境安装教程图解
- rabbitmq java实例_RabbitMQ消息队列入门篇(环境配置+Java实例+基础概念)
- vim打开所有折叠的方法及其他所有折叠的命令
- char-embedding是如何输入到模型的
- skip-gram模型结构
- 编程实现有关SMS4的2个程序之——编程实现线性变换模块
- 【项目管理】ITTO-资源管理
- 信息系统项目管理师优秀论文:项目采购管理