目录
一、配置防盗链
二、访问控制Directory
三、访问控制FilesMatch
一、配置防盗链
盗链的含义是网站内容本身不在自己的服务器上,而通过技术手段直接调用别人服务器网站数据在自己网站页面向最终用户提供此内容。通常是一些小网站盗用大网站的音乐、图片、软件的链接放在自己的网站上,小网站通过这种方法盗取了大网站的空间和流量。防盗链,顾名思义,就是防止别人盗链。我们可以通过限制referer来实现防盗链的功能。
先说一下Referer的概念,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器藉此可以获得一些信息用于处理。比如你通过A网站的一个页面http://a.com/a.html里面的链接去访问B网站的一个页面http://b.com/b.html,那么这个B网站页面的referer就是http://a.com/a.html。也就是说,一个referer其实就是一个网址。
编辑配置文件加入以下内容设置防盗链
[root@minglinux-01 ~] vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
···
···
<Directory /usr/local/apache2.4/htdocs/ming1>
SetEnvIfNoCase Referer "http://www.ming2.com" local_ref //设置该Referer为白名单
SetEnvIfNoCase Referer "http://ming2.com" local_ref //设置该Referer为白名单
SetEnvIfNoCase Referer "^$" local_ref //将空Referer设为白名单
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)"> //访问txt、doc、mp3、zip、rar、jpg、gif、png格式的文件才会被限制。
Order Allow,Deny
Allow from env=local_ref //表示允许归类到变量local_ref中的Referer访问,其他的则不允许
</filesmatch>
</Directory>
···
- 测试
[root@minglinux-01 ~] /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@minglinux-01 ~] /usr/local/apache2.4/bin/apachectl graceful
httpd not running, trying to start
[root@minglinux-01 ~] /usr/local/apache2.4/bin/apachectl graceful
[root@minglinux-01 ~] curl -e "http:www.ming2.com" -x127.0.0.1:80 http://www.ming1.com/1.png -I
HTTP/1.1 200 OK
Date: Sat, 17 Nov 2018 15:47:49 GMT
Server: Apache/2.4.37 (Unix) PHP/5.6.30
Last-Modified: Sun, 09 Sep 2018 10:02:50 GMT
ETag: "5a1a2-5756d57e40680"
Accept-Ranges: bytes
Content-Length: 369058
Cache-Control: max-age=86400
Expires: Sun, 18 Nov 2018 15:47:49 GMT
Content-Type: image/png
[root@minglinux-01 ~] curl -e "http://www.abc.com" -x127.0.0.1:80 http://www.ming1.com/1.png -I
HTTP/1.1 403 Forbidden
Date: Sat, 17 Nov 2018 17:39:19 GMT
Server: Apache/2.4.37 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1
curl加-e选项来定义访问时携带的referer,这个referer一定要以http://开头,否则不管用。
由上可知当referer是http:www.ming2.com时可以访问到1.png,当referer是http://www.abc.com时则不可以访问。
二、访问控制Directory
对于一些比较重要的网站内容,如公司内部不对外开放的内容,除了可以使用用户认证限制访问之外,还可以通过其他一些方法做到限制,比如可以限制IP,也可以限制user_agent。限制IP指的是限制访问网站的来源IP,而限制user_agent,通常用来限制恶意或者不正常的请求。
配置IP访问控制
[root@minglinux-01 ~] vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<Directory /usr/local/apache2.4/htdocs/ming1/admin>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Directory>
使用<Directory>来指定要限制访问的目录,order定义控制顺序,哪个在前面就先匹配哪个规则。在上例中deny在前面,所以先匹配Deny from all,这样所有的来源IP都会被限制,然后匹配Allow from127.0.0.1,这样又允许了127.0.0.1这个IP。最终的效果是,只允许来源IP为127.0.0.1的访问。
- 验证
[root@minglinux-01 ~] vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
[root@minglinux-01 ~] /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@minglinux-01 ~] /usr/local/apache2.4/bin/apachectl graceful
[root@minglinux-01 ~] mkdir /usr/local/apache2.4/htdocs/ming1/admin
[root@minglinux-01 ~] echo "admin page" > /usr/local/apache2.4/htdocs/ming1/admin/index.php
[root@minglinux-01 ~] cat !$
cat /usr/local/apache2.4/htdocs/ming1/admin/index.php
admin page
[root@minglinux-01 ~] curl -x127.0.0.1:80 www.ming1.com/admin/index.php -I
HTTP/1.1 200 OK
Date: Sun, 18 Nov 2018 15:04:20 GMT
Server: Apache/2.4.37 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Cache-Control: max-age=0
Expires: Sun, 18 Nov 2018 15:04:20 GMT
Content-Type: text/html; charset=UTF-8
[root@minglinux-01 ~] curl -x192.168.162.130:80 www.ming1.com/admin/index.php -I
HTTP/1.1 403 Forbidden
Date: Sun, 18 Nov 2018 15:04:34 GMT
Server: Apache/2.4.37 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1
- 查看访问日志
[root@minglinux-01 ~] tail -n2 /usr/local/apache2.4/logs/www.ming1.com-access_20181118.log
127.0.0.1 - - [18/Nov/2018:23:04:20 +0800] "HEAD HTTP://www.ming1.com/admin/index.php HTTP/1.1" 200 - "-" "curl/7.29.0"
192.168.162.130 - - [18/Nov/2018:23:04:34 +0800] "HEAD HTTP://www.ming1.com/admin/index.php HTTP/1.1" 403 - "-" "curl/7.29.0"
可以看到源IP是127.0.0.1的访问被允许,源IP是192.168.162.130的访问被允许。
三、访问控制FilesMatch
- FilesMatch设置针对网站页面的访问控制
[root@minglinux-01 ~] vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<Directory /usr/local/apache2.4/htdocs/ming1/admin>
<FilesMatch index.php(.*)> //针对index.php页面
Order deny,allow
Deny from all
Allow from 127.0.0.1
</FilesMatch>
</Directory>
- 测试
[root@minglinux-01 ~] /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@minglinux-01 ~] /usr/local/apache2.4/bin/apachectl graceful
[root@minglinux-01 ~] curl -x192.168.162.130:80 www.ming1.com/admin/index.php -I
HTTP/1.1 403 Forbidden
Date: Sun, 18 Nov 2018 15:25:20 GMT
Server: Apache/2.4.37 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1
[root@minglinux-01 ~] curl -x192.168.162.130:80 www.ming1.com/admin/abc.php -I
HTTP/1.1 200 OK
Date: Sun, 18 Nov 2018 15:25:32 GMT
Server: Apache/2.4.37 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Cache-Control: max-age=0
Expires: Sun, 18 Nov 2018 15:25:32 GMT
Content-Type: text/html; charset=UTF-8
[root@minglinux-01 ~] curl -x127.0.0.1:80 www.ming1.com/admin/index.php -I
HTTP/1.1 200 OK
Date: Sun, 18 Nov 2018 15:26:14 GMT
Server: Apache/2.4.37 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Cache-Control: max-age=0
Expires: Sun, 18 Nov 2018 15:26:14 GMT
Content-Type: text/html; charset=UTF-8
访问控制仅针对index.php页面,目录下其他页面不受影响。
扩展
几种限制ip的方法 http://ask.apelearn.com/question/6519
apache 自定义header http://ask.apelearn.com/question/830
apache的keepalive和keepalivetimeout http://ask.apelearn.com/question/556