前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux基础(day45)

Linux基础(day45)

作者头像
运维小白
发布2022-01-06 13:52:09
3200
发布2022-01-06 13:52:09
举报
文章被收录于专栏:运维小白运维小白

11.25 配置防盗链

配置防盗链目录概要

  • 通过限制referer来实现防盗链的功能
  • 配置文件增加如下内容
代码语言:javascript
复制
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>

防盗链

  • 防盗链的定义
  • 此内容不在自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己的有广告有利益的页面上向最终用户提供此内容。 常常是一些名不见经传的小网站来盗取一些有实力的大网站的地址(比如一些音乐、图片、软件的下载地址)然后放置在自己的网站中,通过这种方法盗取大网站的空间和流量。
  • 为什么会产生盗链
  • 一般浏览有一个重要的现象就是一个完整的页面并不是一次全部传送到客户端的。如果请求的是一个带有许多图片和其它信息的页面,那么最先的一个Http请求被传送回来的是这个页面的文本,然后通过客户端的浏览器对这段文本的解释执行,发现其中还有图片,那么客户端的浏览器会再发送一条Http请求,当这个请求被处理后那么这个图片文件会被传送到客户端,然后浏览器会将图片安放到页面的正确位置,就这样一个完整的页面也许要经过发送多条Http请求才能够被完整的显示。基于这样的机制,就会产生一个问题,那就是盗链问题:就是一个网站中如果没有起页面中所说的信息,例如图片信息,那么它完全可以将这个图片的连接到别的网站。这样没有任何资源的网站利用了别的网站的资源来展示给浏览者,提高了自己的访问量,而大部分浏览者又不会很容易地发现,这样显然,对于那个被利用了资源的网站是不公平的。一些不良网站为了不增加成本而扩充自己站点内容,经常盗用其他网站的链接。一方面损害了原网站的合法利益,另一方面又加重了服务器的负担。

配置防盗链

  1. 打开虚拟主机配置文件
  • 需要添加的配置文件
代码语言:javascript
复制
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>
  • 未更改前的配置文件
代码语言:javascript
复制
<VirtualHost *:80>
    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>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    ServerAlias 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 on
        RewriteCond %{HTTP_HOST} !^111.com$
        RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]
</IfModule>
<IfModule mod_expires.c>
    ExpiresActive on
    ExpiresByType 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_ref
        SetEnvIfNoCase Referer "http://111.com" local_ref
       # SetEnvIfNoCase Referer "^$" local_ref
        <filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">
            Order Allow,Deny
            Allow from env=local_ref
        </filesmatch>
    </Directory>
 ErrorLog "logs/111.com-error_log"
SetEnvIf Request_URI ".*\.gif$" img
    SetEnvIf Request_URI ".*\.jpg$" img
    SetEnvIf Request_URI ".*\.png$" img
    SetEnvIf Request_URI ".*\.bmp$" img
    SetEnvIf Request_URI ".*\.swf$" img
    SetEnvIf Request_URI ".*\.js$" img
    SetEnvIf 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
代码语言:javascript
复制
[root@hf-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf


<VirtualHost *:80>
    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>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    ServerAlias 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://111.com" local_ref
        SetEnvIfNoCase Referer "http://aaa.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>
    ErrorLog "logs/111.com-error_log"
SetEnvIf Request_URI ".*\.gif$" img
    SetEnvIf Request_URI ".*\.jpg$" img
    SetEnvIf Request_URI ".*\.png$" img
    SetEnvIf Request_URI ".*\.bmp$" img
    SetEnvIf Request_URI ".*\.swf$" img
    SetEnvIf Request_URI ".*\.js$" img
    SetEnvIf 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>
  1. 检查配置文件是否存在语法错误,并重新加载配置文件
代码语言:javascript
复制
[root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@hf-01 ~]#
  1. 用浏览器访问111.com/QQ111.jpg图片,会显示Forbidden
输入图片说明
输入图片说明
  1. 这时在论坛创建一个帖子,将连接放进帖子中,再去访问,会看到还是Forbidden,这是因为Referer是ask.apelearn.com
输入图片说明
输入图片说明
  1. 若是想在帖子中正常访问图片,可以将ask.apelearn.com加入到白名单中
代码语言:javascript
复制
      SetEnvIfNoCase Referer "http://ask.apelearn.com" local_ref
  1. 然后检查配置文件是否存在语法错误,并重新加载配置文件
代码语言:javascript
复制
[root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@hf-01 ~]#
  1. 这时再来在帖子中访问图片,会看到正常访问
输入图片说明
输入图片说明
  1. 若是想要直接就可以在浏览器中访问,则只需要去虚拟主机配置文件中打开空的Referer
代码语言:javascript
复制
[root@hf-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

更改前,去除前面的注释符
把 # SetEnvIfNoCase Referer "^$" local_ref
更改后
SetEnvIfNoCase Referer "^$" local_ref
  1. 然后检查配置文件语法错误,并重启配置文件
  2. 这时候在浏览器中访问访问图片就会正常显示

用curl测试

  1. 用curl命令去访问图片
代码语言:javascript
复制
[root@hf-01 ~]# curl -x127.0.0.1:80 111.com/QQ111.jpg -I
HTTP/1.1 200 OK
Date: Mon, 25 Dec 2017 16:50:56 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Last-Modified: Mon, 04 Dec 2017 03:56:48 GMT
ETag: "da7f-55f7bb520e000"
Accept-Ranges: bytes
Content-Length: 55935
Content-Type: image/jpeg

[root@hf-01 ~]# 
  1. 当然也可以用curl去模拟Referer,使用 -e 参数指定Referer
代码语言:javascript
复制
[root@hf-01 ~]# curl -e "http://www.qq.com/123.txt" -x127.0.0.1:80 111.com/QQ111.jpg -I 
HTTP/1.1 403 Forbidden
Date: Mon, 25 Dec 2017 16:53:01 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1

[root@hf-01 ~]# curl -e "http://www.111.com/123.txt" -x127.0.0.1:80 111.com/QQ111.jpg -I
HTTP/1.1 200 OK
Date: Mon, 25 Dec 2017 16:53:45 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Last-Modified: Mon, 04 Dec 2017 03:56:48 GMT
ETag: "da7f-55f7bb520e000"
Accept-Ranges: bytes
Content-Length: 55935
Content-Type: image/jpeg

[root@hf-01 ~]# 
  • curl -e 格式
    • curl -e "http://"

11.26 访问控制Directory

访问控制 – Directory目录概要

  • 核心配置文件内容
代码语言:javascript
复制
  <Directory /data/wwwroot/111.com/admin/>
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
    </Directory>
  • curl测试状态码为403则被限制访问了

访问控制

  1. 打开虚拟主机配置文件
  • Order,用来定义顺序,是先deny,还是allow
    • 若是先deny,就先执行deny的语句
    • 若是先allow,就先执行allow的语句
    • 特殊性:
      • 不管IP是否匹配到,它都会从头到尾执行完
代码语言:javascript
复制
[root@hf-01 ~]# vim /usr/local/apache2.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>
  1. 创建一个admin目录,并新建一个index.php文件,内容为121212
代码语言:javascript
复制
[root@hf-01 ~]# cd /data/wwwroot/111.com
[root@hf-01 111.com]# ls
11.png  123.php  
[root@hf-01 111.com]# mkdir admin/
[root@hf-01 111.com]# cd admin/
[root@hf-01 admin]# ls
[root@hf-01 admin]# touch index.php
[root@hf-01 admin]# echo "121212" > index.php
[root@hf-01 admin]# ls
index.php
[root@hf-01 admin]# cat index.php
121212
[root@hf-01 admin]# cd ..
[root@hf-01 111.com]# 
  1. 检查语法错误,并重新加载配置文件
代码语言:javascript
复制
[root@hf-01 111.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@hf-01 111.com]# /usr/local/apache2.4/bin/apachectl graceful
[root@hf-01 111.com]# 
  1. 限制的原 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
代码语言:javascript
复制
[root@hf-01 111.com]# curl -x127.0.0.1:80 111.com/admin/index.php -I
HTTP/1.1 200 OK
Date: Mon, 25 Dec 2017 23:42:01 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Content-Type: text/html; charset=UTF-8

[root@hf-01 111.com]# 
  1. 在更换目标IP,那么原IP也会跟着变化
代码语言:javascript
复制
[root@hf-01 111.com]# curl -x192.168.74.150:80 111.com/admin/index.php -I
HTTP/1.1 403 Forbidden
Date: Mon, 25 Dec 2017 23:47:06 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

[root@hf-01 111.com]# 
  1. 浏览器访问111.com/admin会显示forbidden
输入图片说明
输入图片说明
  • 访问控制是用目录的形式来做的,首先规定一个目录访问到哪里去的(目录必须使用绝对路径),然后是Oerder,控制的对象就是来源IP

11.27 访问控制FilesMatch

访问控制 – FilesMatch目录概要

  • 核心配置文件内容
代码语言:javascript
复制
  <Directory /data/wwwroot/www.123.com>         //功能作用目录
    <FilesMatch  "admin.php(.*)">            //针对admin.php(.*)这个类型的文件,进行控制
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
    </FilesMatch>
</Directory>

访问控制 – FilesMatch

  • 访问控制,除了目录形式,还是文件名去匹配(或链接)
  1. 打开虚拟主机配置文件
    • 首先定义一个Directory,然后在下面在定义一个FilesMatch
代码语言:javascript
复制
[root@hf-01 111.com]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

 <Directory /data/wwwroot/111.com>
        <FilesMatch "admin.php(.*)">
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
        </FilesMatch>
    </Directory>
  1. 检查语法错误,并重新加载配置文件
代码语言:javascript
复制
[root@hf-01 111.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@hf-01 111.com]# /usr/local/apache2.4/bin/apachectl graceful
[root@hf-01 111.com]# 
  1. 测试
代码语言:javascript
复制
这里没有对admin目录做任何限制,做的FilesMatch跟这个不匹配,没有遇到控制语句,所以访问是404
[root@hf-01 111.com]# curl -x192.168.202.150:80 111.com/admin/dsfsdfdsf -I
HTTP/1.1 404 Not Found
Date: Tue, 26 Dec 2017 13:48:45 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1

[root@hf-01 111.com]# 

有特殊符号需要用 ” 单引号括起来
[root@hf-01 111.com]# curl -x192.168.202.150:80 '111.com/admin.php?dsfsdfdsf' -I
HTTP/1.1 403 Forbidden
Date: Tue, 26 Dec 2017 13:49:44 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1

[root@hf-01 111.com]# curl -x127.0.0.1:80 '111.com/admin.php?dsfsdfdsf' -I
HTTP/1.1 404 Not Found
Date: Tue, 26 Dec 2017 13:53:52 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1

[root@hf-01 111.com]# 

总结

  • Directory和FilesMatch 功能是一样的,只不过有时仅仅想针对一个访问的链接去做控制,那么再去控制目录则不太合适,FilesMatch可以满足一些比较个性化的需求

扩展

  1. 几种限制ip的方法
  2. apache 自定义header
  3. apache的keepalive和keepalivetimeout
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017/12/21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 11.25 配置防盗链
    • 配置防盗链目录概要
      • 防盗链
        • 配置防盗链
          • 用curl测试
          • 11.26 访问控制Directory
            • 访问控制 – Directory目录概要
              • 访问控制
              • 11.27 访问控制FilesMatch
                • 访问控制 – FilesMatch目录概要
                  • 访问控制 – FilesMatch
                    • 总结
                    • 扩展
                    相关产品与服务
                    命令行工具
                    腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档