一、配置防盗链:免费网络或者论坛,有时候若是网站流量偏高,抓包发现是图片的流量居多,发现是从某个站点链接跳过来的,原来是咱们的网站,被用户上传了许多色情图片,而用户又在他本身的网站上加了咱们网站图片的连接,就能本身访问链接跳转到咱们这个,致使流量很高:php
配置了防盗链后的做用:咱们本身网站的图片,只能本身来访问,其余借用是不能够的:html
1:配置防盗链: /usr/local/apapche.24/conf/extra/http-vhosts.confweb
须要增长的配置文件内容以下:apache
Directory针对目录进行 <Directory /data/wwwroot/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>
更改前的配置文件:vim
[root@localhost_002 conf]# vim extra/httpd-vhosts.conf # Virtual Hosts <VirtualHost *:80> ServerAdmin webmaster@dummy-host.example.com DocumentRoot "/data/wwwroot/abc.com" ServerName abc.com ServerAlias www.abc.com www.123.com ErrorLog "logs/abc.com-error_log" CustomLog "logs/abc.com-access_log" common </VirtualHost> <VirtualHost *:80> ServerAdmin yuanhh@foreb.com DocumentRoot "/data/wwwroot/111.com" ServerName www.111.com ServerAlias www.example.com www.2111.com #<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 on RewriteCond %{HTTP_HOST} !^www.111.com$ RewriteRule ^/(.*)$ http://www.111.com/$1 [R=301,L] </IfModule> ErrorLog "logs/111.com-error_log" CustomLog "logs/111.com-access_log" combined </VirtualHost>
添加防盗链后的配置文件:注释:将Referer为空的白名单注释掉: #SetEnvIfNoCase Referer “^$” local_ref 浏览器
[root@localhost_002 extra]# cat httpd-vhosts.conf # Virtual Hosts <VirtualHost *:80> ServerAdmin webmaster@dummy-host.example.com DocumentRoot "/data/wwwroot/abc.com" ServerName abc.com ServerAlias www.abc.com www.123.com ErrorLog "logs/abc.com-error_log" CustomLog "logs/abc.com-access_log" common </VirtualHost> <VirtualHost *:80> ServerAdmin yuanhh@foreb.com DocumentRoot "/data/wwwroot/111.com" ServerName www.111.com ServerAlias www.example.com www.2111.com #<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针对目录进行 <Directory /data/wwwroot/111.com> SetEnvIfNoCase Referer "http://www.111.com" local_ref SetEnvIfNoCase Referer "http://www.example.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> <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} !^www.111.com$ RewriteRule ^/(.*)$ http://www.111.com/$1 [R=301,L] </IfModule> ErrorLog "logs/111.com-error_log" CustomLog "logs/111.com-access_log" combined </VirtualHost>
注释:刷新的时候就是空Referer了,或者直接复制图片网址来打开时也是空Referer,当用第三方站点过来的时候也是空Referer了,要想访问须要打开Referer就能够了:bash
三、检测文件是否有错误:网络
[root@localhost_002 extra]# /usr/local/apapche2.4/bin/apachectl -t Syntax OK [root@localhost_002 extra]# /usr/local/apapche2.4/bin/apachectl graceful
四、而后访问:www.111.com/image/kaola.jpgcurl
注释:若是这时候在论坛建立一个帖子,将链接放进帖子中,再去访问,会看到仍是Forbidden,这是由于Referer时论坛的网址:ide
若想访问,则须要加入到白名单中:
注释:如果想要直接就能够在浏览器中访问,则只须要去虚拟主机配置文件中打开空的Referer:
SetEnvIfNoCase Referer "^$" local_ref
检测并重启服务:
[root@localhost_002 extra]# /usr/local/apapche2.4/bin/apachectl -t Syntax OK [root@localhost_002 extra]# /usr/local/apapche2.4/bin/apachectl graceful
五、也能够用curl命令去测试:
[root@localhost_002 extra]# /usr/local/apapche2.4/bin/apachectl graceful [root@localhost_002 extra]# curl -x127.0.0.1:80 www.111.com/image/kaola.jpg -I HTTP/1.1 200 OK Date: Sun, 07 Oct 2018 15:16:10 GMT Server: Apache/2.4.34 (Unix) PHP/5.6.30 Last-Modified: Tue, 14 Jul 2009 05:32:31 GMT ETag: "bea1f-46ea3c3d3b9c0" Accept-Ranges: bytes Content-Length: 780831 Content-Type: image/jpeg
也能够自定义Referer: curl -e "http://www.qq.com/123.txt" -x127.0.0.1:80
[root@localhost_002 extra]# curl -e "http://www.qq.com/123.txt" -x127.0.0.1:80 www.111.com/image/kaola.jpg -I HTTP/1.1 403 Forbidden Date: Sun, 07 Oct 2018 15:17:36 GMT Server: Apache/2.4.34 (Unix) PHP/5.6.30 Content-Type: text/html; charset=iso-8859-1
六、访问控制: Order deny,allow (管IP是否匹配到,它都会从头至尾执行完)
首先打开虚拟主机配置:
Order deny,allow 用来定义顺序,是先deny,仍是allow:
如果先deny,就先执行deny的语句:
如果先allow,就先自行allow的语句:
[root@localhost_002 extra]# vim /usr/local/apapche2.4/conf/extra/httpd-vhosts.conf <Directory /data/wwwroot/111.com/admin/> Order deny,allow Deny from all Allow from 127.0.0.1 </Directory>
2:在根目录/data/wwwroot/www.111.com/下建立一个admin目录,并新建一个index.php的文件,内容为12121.
[root@localhost_002 extra]# cd /data/wwwroot/ [root@localhost_002 wwwroot]# ls 111.com abc.com [root@localhost_002 wwwroot]# cd 111.com/ [root@localhost_002 111.com]# mkdir admin [root@localhost_002 111.com]# cd admin [root@localhost_002 admin]# vim index.php erqwe231423421
3:检测语法,并从新加载配置文件:
[root@localhost_002 admin]# /usr/local/apapche2.4/bin/apachectl -t Syntax OK [root@localhost_002 admin]# /usr/local/apapche2.4/bin/apachectl graceful
4:测试:因为在上述命令中禁止了全部源IP访问,只容许127.0.0.1访问,最终就是目标IP和原IP是同一个IP,本身和本身通讯,限制IP实际上是源IP:
curl -x127.0.0.1:80 www.111.com/admin/index.php -I 注释: -x 指定目标IP:
[root@localhost_002 extra]# curl -x127.0.0.1:80 www.111.com/admin/index.php -I HTTP/1.1 200 OK Date: Sun, 07 Oct 2018 15:30:32 GMT Server: Apache/2.4.34 (Unix) PHP/5.6.30 X-Powered-By: PHP/5.6.30 Content-Type: text/html; charset=UTF-8
在更换目标IP后,源IP也会跟着变化:
[root@localhost_002 extra]# curl -x192.168.149.130 www.111.com/admin/index.php -I curl: (7) Failed connect to 192.168.149.130:1080; 拒绝链接 [root@localhost_002 extra]# curl -x192.168.149.130:80 www.111.com/admin/index.php -I HTTP/1.1 403 Forbidden Date: Sun, 07 Oct 2018 15:38:26 GMT Server: Apache/2.4.34 (Unix) PHP/5.6.30 Content-Type: text/html; charset=iso-8859-1
网页访问也没法访问 www.111.com/admin/inde.php
注释:访问控制是用目录的形式来作的,首先规定一个目录访问到哪里去的(目录必须使用绝对路径),而后是Oerder,控制的对象就是来源IP:
注释:默认不定义deny规则,也会deny,若是想设置只容许几个IP访问的话,不定义deny的话,默认也是deny掉了,能够经过以下定义:
Order allow deny
allow from 127.0.0.1
七、访问控制: <FileMatch> 访问控制,除了目录形式,仍是文件名去匹配(或连接)
打开虚拟配置文件:
首先定义一个Directory,在下面定义一个FileMatch:
<Directory /data/wwwroot/111.com> <FilesMatch admin.php(.*)> Order deny,allow Deny from all Allow from 127.0.0.1 </FilesMatch> </Directory>
检测语法错误,并重启apache服务:
[root@localhost_002 extra]# /usr/local/apapche2.4/bin/apachectl -t Syntax OK [root@localhost_002 extra]# /usr/local/apapche2.4/bin/apachectl graceful
测试: curl -x192.168.149.130:80 www.111.com/admin/asdfsdfsdf -I
[root@localhost_002 extra]# curl -x192.168.149.130:80 www.111.com/admin/asdfsdfsadf -I HTTP/1.1 404 Not Found Date: Sun, 07 Oct 2018 16:33:05 GMT Server: Apache/2.4.34 (Unix) PHP/5.6.30 Content-Type: text/html; charset=iso-8859-1
注释:这里没有对admin目录作任何限制,作的FilesMatch跟这个不匹配,没有遇到控制语句,因此访问是404
有特殊符号须要用 ” 单引号括起来:
[root@localhost_002 extra]# curl -x192.168.149.130:80 'http://www.111.com/admin.phpasdfsdfsadf' -I HTTP/1.1 403 Forbidden Date: Sun, 07 Oct 2018 16:35:47 GMT Server: Apache/2.4.34 (Unix) PHP/5.6.30 Content-Type: text/html; charset=iso-8859-1 [root@localhost_002 extra]# curl -x127.0.0.1:80 'http://www.111.com/admin.phpasdfsdfsadf' -I HTTP/1.1 404 Not Found Date: Sun, 07 Oct 2018 16:36:45 GMT Server: Apache/2.4.34 (Unix) PHP/5.6.30 Content-Type: text/html; charset=iso-8859-1
注释:Directory和FilesMatch 功能是同样的,只不过有时仅仅想针对一个访问的连接去作控制,那么再去控制目录则不太合适,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