一: 防盗链理论基础
1.1: 配置防盗链的意义
- 防盗链是防止别人的网站代码里面盗用我们自己服务器
上的图片、文件、视频等相关资源 - 如果别人盗用网站的这些静态资源,明显的是会增大服
务器的带宽压力 - 作为网站的维护人员,要杜绝服务器的静态资源被其他
网站盗用
1.2: 使用三台主机模拟盗链
-
三台主机配置与功能
IP地址 域名 用途 192.168.2.19 www.kxr.com 源主机 192.178.2.4 www.dt.com 盗链主机 客户端 Windows 火狐浏览器
1.3: 配置盗链模拟步骤
- 两台主机配置测试页面
- 盗链网站的测试网页page盗用源主机目录page/image的一个logo.jpg文件
- 在Windows中访问测试网页,并使用Fiddler抓包工具的查看效果图
1.4: 检查Apache是否按照了mode_rewrite模块
- /usr/local/apache/bin/apachectl -t -D DUMP_MODULES
- 如果输出中没有rewrite_module(static),则说明编译时没有安装mod_resrite模块
- 若没有安装则需要重新编译安装
./configure --enable-rewrite…
make && make install
1.5: 配置规则变量说明
- %{HTTP_REFERER}: 浏览heder中的链接字段,存放一个链接的URL,代表是从哪个访问所需的网页
- !^: 不以后面的字符串开头
- .*$: 以任意字符结尾
- NC: 不区分大写
- R: 强制跳转
1.6: 规则匹配说明
-
RewriteEngine On:打开网页重写功能
-
RewriteCond:设置匹配规则
-
RewriteRule:设置跳转动作
-
规则匹配
-
//匹配规则;如果相应变量的值匹配所设置的规则,则逐条往下处理;如果不匹配,则往后的规则不再匹配
1.7: 配置文件启用防盗链功能
-
vim /usr/local/httpd/conf/httpd.conf 250 RewriteCond %{HTTP_REFERER} !^http://kgc.com/.*$ [NC] //匹配规则 251 RewriteCond %{HTTP_REFERER} !^http://kgc.com$ [NC] 252 RewriteCond %{HTTP_REFERER} !^http://www.kgc.com/.*$ [NC] 253 RewriteCond %{HTTP_REFERER} !^http://www.kgc.com$ [NC] 254 RewriteRule .*\.(gif|jpg|swf)$ http://www.kgc.com/error.png //跳转动作
二: 防盗链实操
2.1: 配置域名解析
[root@kgc ~]# yum install bind -y
[root@kgc ~] vim /etc/named.conf
......
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; };
[root@kgc ~]# vim /etc/named.rfc1912.zones
.........
zone "kgc.com" IN {
type master;
file "kgc.com.zone";
allow-update { none; };
};
[root@kgc ~]# cp -p /var/named/named.localhost /var/named/kgc.com.zone
[root@kgc ~]# vim /var/named/kgc.com.zone
www IN A 192.168.100.130
[root@kgc ~]# systemctl stop firewalld
[root@kgc ~]# systemctl start named
2.2: 解压跨平台组件包和源码包
//上传压缩包并解压
[root@kgc opt]# tar jxvf httpd-2.4.29.tar.bz2 -C /opt/
[root@kgc opt]# tar zxvf apr-util-1.6.0.tar.gz -C /opt/
[root@kgc opt]# tar zxvf apr-1.6.2.tar.gz -C /opt/
[root@kgc opt]# ls
apr-1.6.2 apr-util-1.6.0 httpd-2.4.29 rh
apr-1.6.2.tar.gz apr-util-1.6.0.tar.gz httpd-2.4.29.tar.bz2
[root@kgc opt]# mv apr-1.6.2 httpd-2.4.29/srclib/apr
[root@kgc opt]# mv apr-util-1.6.0 httpd-2.4.29/srclib/apr-util
2.3: 安装编译器和配置及编译安装
[root@localhost httpd-2.4.29]# yum install zlib-devel -y
[root@localhost httpd-2.4.29]# yum -y install gcc gcc-c++ make pcre-devel expat-devel perl
[root@kgc opt]# cd httpd-2.4.29/
./configure \ '//安装指定路径'
--prefix=/usr/local/httpd \
--enable-so \ '//开启核心功能模块'
--enable-rewrite \ '//开启重写功能,如防盗链保护'
--enable-charset-lite \ '//开启字符集'
--enable-cgi \ '//开启通用网关接口'
--enable-deflate '//开启deflate压缩模块'
[root@kgc htdocs]# make && make install '编译和安装'
2.4: 编写配置文件和首页文件
[root@kgc httpd-2.4.29]# ln -s /usr/local/httpd/conf/httpd.conf /etc/
[root@kgc httpd-2.4.29]# pwd
/opt/httpd-2.4.29
[root@kgc httpd-2.4.29]# cd /usr/local/httpd/htdocs/
//上传图片
[root@kgc htdocs]# rz -E
rz waiting to receive.
[root@kgc htdocs]# ls
game.jpg index.html
[root@kgc htdocs]# vim index.html
<html><body><h1>It works!</h1></body></html>
<img src="game.jpg"/>
2.5: 启动Apache服务
[root@kgc bin]# ./apachectl start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::3e57:6df7:fdf:4b49. Set the 'ServerName' directive globally to suppress this message
[root@kgc bin]# vim /etc/httpd.conf
.........
ServerName www.kgc.com:80
Listen 192.168.100.130:80
#Listen 80
[root@kgc bin]# ./apachectl stop
[root@kgc bin]# ./apachectl start
[root@kgc bin]# netstat -natp | grep httpd
tcp 0 0 192.168.100.130:80 0.0.0.0:* LISTEN 107167/httpd
2.6:盗链主机配置
7-2 地址192.168.100.120 主机名 prormote 做盗链,盗取7-3 192.168.100.130主机名为kgc 的图片
[root@promote ~]# yum install -y httpd
[root@promote ~]# vim /etc/httpd/conf/httpd.conf
...........
ServerName www.test.com:80
Listen 192.168.100.120:80
#Listen 80
[root@promote html]# cd /var/www/html //yum安装httpd的站点目录
[root@promote html]# vim index.html
<h1>this is test web</h1>
<img src="http://www.kgc.com/game.jpg"/> //盗图
[root@promote html]# ls
index.html
[root@promote html]# echo "nameserver 192.168.100.130" > /etc/resolv.conf
[root@promote html]# systemctl restart httpd
[root@promote html]# nslookup www.kgc.com
Server: 192.168.100.130
Address: 192.168.100.130#53
Name: www.kgc.com
Address: 192.168.100.130
成功盗链
2.7: 官网主机开启防盗链功能
官网7-3地址192.168.100.130 主机名kgc
[root@kgc httpd]# vim /usr/local/httpd/conf/httpd.conf
.......
LoadModule rewrite_module modules/mod_rewrite.so //取消注释
.......
248 Require all granted
249 RewriteEngine On //以下6行添加
250 RewriteCond %{HTTP_REFERER} !^http://kgc.com/.*$ [NC]
251 RewriteCond %{HTTP_REFERER} !^http://kgc.com$ [NC]
252 RewriteCond %{HTTP_REFERER} !^http://www.kgc.com/.*$ [NC]
253 RewriteCond %{HTTP_REFERER} !^http://www.kgc.com$ [NC]
254 RewriteRule .*\.(gif|jpg|swf)$ http://www.kgc.com/error.png
255 </Directory>
[root@kgc httpd]# cd /usr/local/httpd/htdocs/
[root@kgc htdocs]# rz -E
rz waiting to receive.
[root@kgc htdocs]# ls
error.png game.jpg index.html
三: 隐藏版本信息
3.1:隐藏版本信息
3.1.1:配置Apache隐藏版本信息的必要性
- Apache的版本信息,透露了一定的漏洞信息,从而给网站带来安全隐患
生产环境中要配置Apache隐藏版本信息
可使用Fiddler抓包工具分析
3.1.2:配置Apache隐藏版本信息详解
- 将主配置文件httpd.conf以下行注释去掉
#Include conf/extra/httpd-default.conf - 修改httpd-default.conf文件两个地方
- ServerTokens Full修改为ServerTokens Prod
- 将ServersSignature On 修改为ServersSignature Off
- 重启httpd服务,访问网站,抓包测试
四: 隐藏版本信息实操
4.1: Apache主机设置
[root@kgc bin]# vim /usr/local/httpd/conf/httpd.conf
Include conf/extra/httpd-default.conf //取消注释
[root@kgc extra]# vim /usr/local/httpd/conf/extra/httpd-default.conf
55 ServerTokens prod //改为prod
[root@kgc bin]# cd /usr/local/httpd/bin
[root@kgc bin]# ./apachectl stop
[root@kgc bin]# ./apachectl start
4.2: 测试机验证
实验完毕