LAMP架构(7)配置防盗链,访问控制Directory,访问控制FilesMatch

配置防盗链
为了防止别人盗用你网站上的图片,视频,歌曲,文档等资源,我们需要给网站配置防盗链。

通过限制referer来实现防盗链的功能
配置指定目录的防盗规则:
[root@aliyun ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
虚拟主机1增加防盗规则:
<VirtualHost *: 80 > 80是http的服务端口,不用改
ServerAdmin webmaster @ test.com 网站管理员邮箱,设置成自己的网站
DocumentRoot " /data/wwwroot/www.test.com " 虚拟主机根目录放网站程序
ServerName test.com 网站名,域名
ServerAlias www .test.com 网站别名,域名别名,可写多个要用空格隔开
(配置跳转跟这里的别名无关,有无别名这一项都会跳转成功,由rewrite跳转会有301状态码和说明)
<Directory /data/wwwroot/www.test.com> 需配置防盗的目录
SetEnvIfNoCase Referer "http://www.test.com" local_ref referer规则,变量local_ref
SetEnvIfNoCase Referer "http://test.com" local_ref referer规则,变量local_ref
SetEnvIfNoCase Referer "^$" local_ref referer规则,变量local_ref
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)"> 匹配referer的文件类型
Order Allow,Deny 命令,先允许后拒绝
Allow from env=local_ref 允许来自local_ref的变量
</filesmatch>
</Directory>
<IfModule mod_rewrite.c> 需要mod_rewrite模块支持
RewriteEngine on 打开rewrite功能
RewriteCond %{HTTP_HOST} !^ www.test.com $ www.test.com的域名请求跳转至此
RewriteRule ^/(.*)$ http:// www.test.com /$1 [R= 301,L ] 状态码301永久跳转,L=last,跳一次
定义跳转规则,将以^/(.*)$开头结尾的域名请求跳转, $1代表^/(.*)$
</IfModule>
ErrorLog "logs/ test.com -error_log" 错误日志保存路径
SetEnvIf Request_URI ".*\.gif$" img 日志记录规则,变量表示.gif文件
SetEnvIf Request_URI ".*\.jpg$" img 日志记录规则,变量表示.jpg文件
SetEnvIf Request_URI ".*\.png$" img 日志记录规则,变量表示.png文件
SetEnvIf Request_URI ".*\.bmp$" img 日志记录规则,变量表示.bmp文件
SetEnvIf Request_URI ".*\.swf$" img 日志记录规则,变量表示.swf文件
SetEnvIf Request_URI ".*\.js$" img 日志记录规则,变量表示.js文件
SetEnvIf Request_URI ".*\.css$" img 日志记录规则,变量表示.cs文件
CustomLog "logs/test.com-access_log" combined env= ! img
</VirtualHost> 取反,不记录变量所表示的文件访问记录,访问日志保存路径
保存退出

测试语法并重新加载配置
[root@aliyun ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aliyun ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@aliyun ~]#

测试:用指定允许的referer和非允许的referer分别测试
[root@aliyun ~]# curl -x127.0.0.1:80 -I -e "http://www.test.com“ http://www.test.com/test.txt
HTTP/1.1 200 OK
Date: Fri, 01 Jun 2018 02:57:37 GMT
Server: Apache/2.4.33 (Unix) PHP/7.2.5
Last-Modified: Fri, 01 Jun 2018 02:51:28 GMT
ETag: "0-56d8ba91ef9ce"
Accept-Ranges: bytes
Cache-Control: max-age=0
Expires: Fri, 01 Jun 2018 02:57:37 GMT
Content-Type: text/plain

[root@aliyun ~]# curl -x127.0.0.1:80 -I -e "http://www.test.com“ http://www.test.com /images/test.jpg
HTTP/1.1 200 OK
Date: Fri, 01 Jun 2018 02:57:49 GMT
Server: Apache/2.4.33 (Unix) PHP/7.2.5
Last-Modified: Thu, 31 May 2018 02:41:59 GMT
ETag: "0-56d77695b2edb"
Accept-Ranges: bytes
Cache-Control: max-age=86400
Expires: Sat, 02 Jun 2018 02:57:49 GMT
Content-Type: image/jpeg

[root@aliyun ~]# curl -x127.0.0.1:80 -I -e " http://www.123.com" http://www.test.com/images/test.jpg
HTTP/1.1 403 Forbidden
Date: Fri, 01 Jun 2018 02:58:06 GMT
Server: Apache/2.4.33 (Unix) PHP/7.2.5
Content-Type: text/html; charset=iso-8859-1

[root@aliyun ~]# curl -x127.0.0.1:80 -I -e "http://www.123.com" http://www.test.com/test.txt
HTTP/1.1 403 Forbidden
Date: Fri, 01 Jun 2018 02:58:23 GMT
Server: Apache/2.4.33 (Unix) PHP/7.2.5
Content-Type: text/html; charset=iso-8859-1

[root@aliyun ~]#


访问控制Directory

配置指定定目录的控制规则:
[root@aliyun ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
虚拟主机1增加控制规则:
<VirtualHost *: 80 > 80是http的服务端口,不用改
ServerAdmin webmaster @ test.com 网站管理员邮箱,设置成自己的网站
DocumentRoot " /data/wwwroot/www.test.com " 虚拟主机根目录放网站程序
ServerName test.com 网站名,域名
ServerAlias www .test.com 网站别名,域名别名,可写多个要用空格隔开
(配置跳转跟这里的别名无关,有无别名这一项都会跳转成功,由rewrite跳转会有301状态码和说明)
<Directory /data/wwwroot/www.test.com> 需配置防盗的目录
SetEnvIfNoCase Referer "http://www.test.com" local_ref referer规则,变量local_ref
SetEnvIfNoCase Referer "http://test.com" local_ref referer规则,变量local_ref
SetEnvIfNoCase Referer "^$" local_ref referer规则,变量local_ref
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)"> 匹配referer的文件类型
Order Allow,Deny 命令,先允许后拒绝
Allow from env=local_ref 允许来自local_ref的变量
</filesmatch>
</Directory>
<Directory /data/wwwroot/www.test.com/admin/> 控制admin目录
Order deny,allow 命令,先拒绝后允许
Deny from all 拒绝所有
Allow from 127.0.0.1 允许来自127.0.0.1的访问
</Directory>
<IfModule mod_rewrite.c> 需要mod_rewrite模块支持
RewriteEngine on 打开rewrite功能
RewriteCond %{HTTP_HOST} !^ www.test.com $ www.test.com的域名请求跳转至此
RewriteRule ^/(.*)$ http:// www.test.com /$1 [R= 301,L ] 状态码301永久跳转,L=last,跳一次
定义跳转规则,将以^/(.*)$开头结尾的域名请求跳转, $1代表^/(.*)$
</IfModule>
ErrorLog "logs/ test.com -error_log" 错误日志保存路径
SetEnvIf Request_URI ".*\.gif$" img 日志记录规则,变量表示.gif文件
SetEnvIf Request_URI ".*\.jpg$" img 日志记录规则,变量表示.jpg文件
SetEnvIf Request_URI ".*\.png$" img 日志记录规则,变量表示.png文件
SetEnvIf Request_URI ".*\.bmp$" img 日志记录规则,变量表示.bmp文件
SetEnvIf Request_URI ".*\.swf$" img 日志记录规则,变量表示.swf文件
SetEnvIf Request_URI ".*\.js$" img 日志记录规则,变量表示.js文件
SetEnvIf Request_URI ".*\.css$" img 日志记录规则,变量表示.cs文件
CustomLog "logs/test.com-access_log" combined env= ! img
</VirtualHost> 取反,不记录变量所表示的文件访问记录,访问日志保存路径
保存退出


测试语法并重新加载配置:
[root@aliyun ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aliyun ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@aliyun ~]#
创建目录和文档,用本机地址和非本机地址测试:
[root@aliyun ~]# mkdir /data/wwwroot/ www.test.com/admin
[root@aliyun ~]# touch /data/wwwroot/ www.test.com/ admin/test2.txt
[root@aliyun ~]# curl -x 12.19.233.143:80 -I www.test.com/ admin/test2.txt
HTTP/1.1 403 Forbidden
Date: Fri, 01 Jun 2018 04:50:26 GMT
Server: Apache/2.4.33 (Unix) PHP/7.2.5
Content-Type: text/html; charset=iso-8859-1
[root@aliyun ~]# curl -x 127.0.0.1:80 -I www.test.com/ admin/test2.txt
HTTP/1.1 200 OK
Date: Fri, 01 Jun 2018 04:50:32 GMT
Server: Apache/2.4.33 (Unix) PHP/7.2.5
Last-Modified: Fri, 01 Jun 2018 04:24:16 GMT
ETag: "0-56d8cf4fc6626"
Accept-Ranges: bytes
Cache-Control: max-age=0
Expires: Fri, 01 Jun 2018 04:50:32 GMT
Content-Type: text/plain
[root@aliyun ~]# tail -2 /usr/local/apache2.4/logs/elon.org.cn-access_20180601.log
12.19.233.143 - - [01/Jun/2018:12:50:26 +0800] 136 "HEAD HTTP:// www.test.com /admin/test2.txt HTTP/1.1" 403 - "-" "curl/7.29.0"
127.0.0.1 - - [01/Jun/2018:12:50:32 +0800] 1043 "HEAD HTTP:// www.test.com /admin/test2.txt HTTP/1.1" 200 - "-" "curl/7.29.0"
[root@aliyun ~]#



访问控制FilesMatch

配置指定定目录的控制规则:
[root@aliyun ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
虚拟主机1增加控制规则:
<VirtualHost *: 80 > 80是http的服务端口,不用改
ServerAdmin webmaster @ test.com 网站管理员邮箱,设置成自己的网站
DocumentRoot " /data/wwwroot/www.test.com " 虚拟主机根目录放网站程序
ServerName test.com 网站名,域名
ServerAlias www .test.com 网站别名,域名别名,可写多个要用空格隔开
(配置跳转跟这里的别名无关,有无别名这一项都会跳转成功,由rewrite跳转会有301状态码和说明)
<Directory /data/wwwroot/www.test.com> 需配置防盗的目录
SetEnvIfNoCase Referer "http://www.test.com" local_ref referer规则,变量local_ref
SetEnvIfNoCase Referer "http://test.com" local_ref referer规则,变量local_ref
SetEnvIfNoCase Referer "^$" local_ref referer规则,变量local_ref
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)"> 匹配referer的文件类型
Order Allow,Deny 命令,先允许后拒绝
Allow from env=local_ref 允许来自local_ref的变量
</filesmatch>
</Directory>
<Directory /data/wwwroot/www.test.com/admin> 控制admin目录
Order deny,allow 命令,先拒绝后允许
Deny from all 拒绝所有
Allow from 127.0.0.1 允许来自127.0.0.1的访问
</Directory>
<Directory /data/wwwroot/www.test.com/ test > 要控制的文件所在目录
<FilesMatch " test.php(.*) "> 要控制的文件名
Order deny,allow 命令,先拒绝,后允许
Deny from all 拒绝所有访问
Allow from 127.0.0.1 允许来自127.0.0.1的访问
</FilesMatch>
</Directory>
<IfModule mod_rewrite.c> 需要mod_rewrite模块支持
RewriteEngine on 打开rewrite功能
RewriteCond %{HTTP_HOST} !^ www.test.com $ www.test.com的域名请求跳转至此
RewriteRule ^/(.*)$ http:// www.test.com /$1 [R= 301,L ] 状态码301永久跳转,L=last,跳一次
定义跳转规则,将以^/(.*)$开头结尾的域名请求跳转, $1代表^/(.*)$
</IfModule>
ErrorLog "logs/ test.com -error_log" 错误日志保存路径
SetEnvIf Request_URI ".*\.gif$" img 日志记录规则,变量表示.gif文件
SetEnvIf Request_URI ".*\.jpg$" img 日志记录规则,变量表示.jpg文件
SetEnvIf Request_URI ".*\.png$" img 日志记录规则,变量表示.png文件
SetEnvIf Request_URI ".*\.bmp$" img 日志记录规则,变量表示.bmp文件
SetEnvIf Request_URI ".*\.swf$" img 日志记录规则,变量表示.swf文件
SetEnvIf Request_URI ".*\.js$" img 日志记录规则,变量表示.js文件
SetEnvIf Request_URI ".*\.css$" img 日志记录规则,变量表示.cs文件
CustomLog "logs/test.com-access_log" combined env= ! img
</VirtualHost> 取反,不记录变量所表示的文件访问记录,访问日志保存路径
保存退出

测试语法并重新加载配置:
[root@aliyun ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aliyun ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@aliyun ~]#
创建目录和文档,用本机地址和非本机地址测试:
[root@aliyun ~]# mkdir /data/wwwroot/ www.test.com/ test
[root@aliyun ~]# cp /data/wwwroot/ www.test.com / test.php /data/wwwroot/ www.test.com /test/ test.php
[root@aliyun ~]# curl -x 12.19.233.143:80 -I www.test.com/ test/ test.php
HTTP/1.1 403 Forbidden
Date: Fri, 01 Jun 2018 05:31:02 GMT
Server: Apache/2.4.33 (Unix) PHP/7.2.5
Content-Type: text/html; charset=iso-8859-1

[root@aliyun ~]# curl -x 127.0.0.1:80 -I www.test.com/ test/ test.php
HTTP/1.1 200 OK
Date: Fri, 01 Jun 2018 05:31:09 GMT
Server: Apache/2.4.33 (Unix) PHP/7.2.5
X-Powered-By: PHP/7.2.5
Cache-Control: max-age=0
Expires: Fri, 01 Jun 2018 05:31:09 GMT
Content-Type: text/html; charset=UTF-8

[root@aliyun ~]# tail -2 /usr/local/apache2.4/logs/elon.org.cn-access_20180601.log
12.19.233.143 - - [01/Jun/2018:13:31:02 +0800] 180 "HEAD HTTP:// www.test.com/ test/ test.php HTTP/1.1" 403 - "-" "curl/7.29.0"
127.0.0.1 - - [01/Jun/2018:13:31:09 +0800] 2304 "HEAD HTTP:// www.test.com/ test/ test.php HTTP/1.1" 200 - "-" "curl/7.29.0"





猜你喜欢

转载自blog.csdn.net/langyue919/article/details/80535160