linux学习lesson45



1 配置防盗链

通过限制referer来实现防盗链的功能
配置文件增加如下内容:

[root@linux01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.111.com aaa.com
<Directory /data/wwwroot/111.com>
SetEnvIfNoCase Referer "http://111.com" local_ref
SetEnvIfNoCase Referer "http://aaa.com" local_ref
SetEnvIfNoCase Referer "^$" local_ref //表示空referer
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|png|gif)">
Order Allow,Deny
Allow from env=local_ref
</filesmatch>
</Directory>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_%Y%m%d.log 86400" combined
</VirtualHost>

测试空referer访问结果:(空referer的意思就是在浏览器一个空白页直接访问网站文件)

[root@linux01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
#SetEnvIfNoCase Referer "^$" local_ref //表示空referer,先把这行配置前加上#注释掉

然后重新加载配置文件

[root@linux01 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@linux01 ~]# /usr/local/apache2.4/bin/apachectl graceful

在浏览器访问测试:
在这里插入图片描述

通过其它网站做referer跳转访问文件:

[root@linux01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
SetEnvIfNoCase Referer "http://aaa.com" local_ref
改为
SetEnvIfNoCase Referer "https://blog.csdn.net/InfiniteIdea_Go" local_ref (如果没有配置这个跳转referer,是无法访问的会出现403)

在一个博客上发布一个链接(本人使用csdn博客测试)
点击链接,可以直接访问到文件(前提开机windows的hosts域名解析)
111.com/1.png

打开空referer配置:

[root@linux01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
SetEnvIfNoCase Referer "^$" local_ref

重新加载配置文件:

[root@linux01 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@linux01 ~]# /usr/local/apache2.4/bin/apachectl graceful

直接在浏览器输入:
http://111.com/1.png,可以正常访问
在这里插入图片描述

curl测试:

[root@linux01 ~]# curl -e "http:www.baidu.com" -x127.0.0.1:80 111.com/1.png -I
HTTP/1.1 403 Forbidden
Date: Sat, 17 Nov 2018 16:02:08 GMT
Server: Apache/2.4.34 (Unix) PHP/5.6.32
Content-Type: text/html; charset=iso-8859-1

状态码返回403,因为上面配置了referer是SetEnvIfNoCase Referer "http://111.com" local_refSetEnvIfNoCase Referer "https://blog.csdn.net/InfiniteIdea_Go" local_ref-e是指定referer

更改referer测试:

[root@linux01 ~]# curl -e "https://blog.csdn.net/InfiniteIdea_Go" -x127.0.0.1:80 111.com/1.png -I
HTTP/1.1 200 OK
Date: Sat, 17 Nov 2018 16:05:07 GMT
Server: Apache/2.4.34 (Unix) PHP/5.6.32
Last-Modified: Sat, 14 Apr 2018 09:19:00 GMT
ETag: "33892-569cb7a9de900"
Accept-Ranges: bytes
Content-Length: 211090
Content-Type: image/png

状态码返回200,成功访问




2 访问控制Directory

除了用户认证增加安全性,另外访问控制Directory也可以增加访问的安全性
核心配置文件内容 (无论怎么配置都是从上到下执行,执行deny再到allow)

[root@linux01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.111.comaaa.com
<Directory /data/wwwroot/111.com/admin/>
Order deny,allow order定义执行顺序,先deny,再allow
Deny from all
Allow from 127.0.0.1
</Directory>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_%Y%m%d.log 86400" combined
</VirtualHost>

创建文件:

[root@linux01 111.com]# mkdir admin
[root@linux01 111.com]# echo "hello world" >> admin/index.php

重新加载配置:

[root@linux01 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@linux01 ~]# /usr/local/apache2.4/bin/apachectl graceful

curl命令测试:

[root@linux01 ~]# curl -x127.0.0.1:80 111.com/admin/index.php -I
HTTP/1.1 200 OK
Date: Sat, 17 Nov 2018 16:15:15 GMT
Server: Apache/2.4.34 (Unix) PHP/5.6.32
X-Powered-By: PHP/5.6.32
Content-Type: text/html; charset=UTF-8

状态码返回200,成功访问

更改访问ip,192.168.139.111(本机的ip)

[root@linux01 ~]# curl -x192.168.139.111:80 111.com/admin/index.php -I
HTTP/1.1 403 Forbidden
Date: Sat, 17 Nov 2018 16:16:19 GMT
Server: Apache/2.4.34 (Unix) PHP/5.6.32
Content-Type: text/html; charset=iso-8859-1

状态码返回403,没有访问权限,因为访问控制只允许127.0.0.1

访问控制的目录一定要写绝对路径




3 访问控制FilesMatch

指定访问的文件,而不是针对目录,相对灵活一点
修改配置文件:

[root@linux01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.111.com aaa.com
<Directory /data/wwwroot/111.com/admin/>
<FilesMatch "admin.php(.*)"> //限制的文件名
Order deny,allow order定义执行顺序,先deny,再allow
Deny from all
Allow from 127.0.0.1 //允许访问的ip
</FilesMatch>
</Directory>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_%Y%m%d.log 86400" combined
</VirtualHost>

创建文件:

[root@linux01 111.com]# echo "hello world" >> admin.php

重新加载配置文件:

[root@linux01 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@linux01 ~]# /usr/local/apache2.4/bin/apachectl graceful

curl测试:

[root@linux01 ~]# curl -x192.168.139.111:80 111.com/admin.php -I
HTTP/1.1 403 Forbidden
Date: Sat, 17 Nov 2018 16:25:09 GMT
Server: Apache/2.4.34 (Unix) PHP/5.6.32
Content-Type: text/html; charset=iso-8859-1

状态码返回403,没有权限访问

curl 127.0.0.1测试:

[root@linux01 ~]# curl -x127.0.0.1:80 111.com/admin.php -I
HTTP/1.1 200 OK
Date: Sat, 17 Nov 2018 16:26:50 GMT
Server: Apache/2.4.34 (Unix) PHP/5.6.32
X-Powered-By: PHP/5.6.32
Content-Type: text/html; charset=UTF-8

状态码返回200,成功访问


扩展
几种限制ip的方法 http://ask.apelearn.com/question/6519
apache 自定义header http://ask.apelearn.com/question/830
apache的keepalive和keepalivetimeout http://ask.apelearn.com/question/556

猜你喜欢

转载自blog.csdn.net/InfiniteIdea_Go/article/details/84227306
今日推荐