12.13-12.16

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了12.13-12.16相关的知识,希望对你有一定的参考价值。

12.13 Nginx防盗链

12.14 Nginx访问控制

12.15 Nginx解析php相关配置

12.16 Nginx代理



12.13 Nginx防盗链


大纲

技术分享图片

nginx的防盗链思路和httpd是一样的,配置也不难。

准备工作:

可以把其中不用的功能给注释掉,

把配置静态文件不记录日志的配置给注释掉

插shell

#location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

#    {

#          expires      7d;

#          access_log off;

#    }

#location ~ .*\.(js|css)$

#    {

#          expires      12h;

#          access_log off;

#    }


本节主题

1 Nginx防盗链 的配置如下,可以和上面的配置结合起来

location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$

{

    expires 7d;

    valid_referers none blocked server_names  *.test.com ;

    if ($invalid_referer) {

        return 403;

    }

    access_log off;

}


2 参数解析,

~*表示(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)里面不区分大小写,利用了正则表达式的语法。

^.+\. ^表示xx开头

location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$

整段参数的意思是:以xxxx(括号里面的关键词)结尾。

  valid_referers none blocked server_names  *.test.com ;

定义白名单的referer是*.test.com

    if ($invalid_referer) {

        return 403;

    }

3 如果不是白名单的referer,就会返回到403


4 检查语法,并重新加载

[[email protected] vhost]# /usr/local/nginx/sbin/nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

[[email protected] vhost]# /usr/local/nginx/sbin/nginx -s reload


5 curl 测试防盗链

先测试一个正常的curl访问,状态码200

[[email protected] test.com]# curl -x127.0.0.1:80 test.com/1.gif -I

技术分享图片

curl -e指定referer测试,状态码403,实验成功,因为当初配置就是要得到403效果。

[[email protected] test.com]# curl -e "http://www.baidu.com " -x127.0.0.1:80 test.com/1.gif -I

技术分享图片


12.14 Nginx访问控制

大纲

截图

访问控制是比较重要的一个部分,因为它还涉及到安全。

起原理跟httpd一样,Nginx也可以限制某些IP不能访问,或者只允许某些IP访问。

配置方法和httpd很想,但更加简洁,不像hettpd那样全部遍历一边。

比如我们有个需求,“是访问admin目录的请求只允许127.0.0.1访问,”


1 访问控制的配置如下,

location /admin/

{

allow 127.0.0.1;

deny all;

}

参数解释

在httpd中,利用order去规则allow与deny的顺序,先allow后deny,或者先deny后allow.

但在nginx里,如果参数的ip(127.0.0.1)被匹配到了,那么这个规则就会到此结束。

不会考虑deny与allow的顺序。如果是127.0.0.2访问进来,那么发现ip不被匹配,这样的话,访问会直接被deny,到此结束。


2 检查语法并重新加载 

[[email protected] test.com]# /usr/local/nginx/sbin/nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

[[email protected] test.com]# /usr/local/nginx/sbin/nginx -s reload

访问前的准备工作:

[[email protected] test.com]# mkdir -p /data/wwwroot/test.com/admin/

[[email protected] test.com]# cd /data/wwwroot/test.com/admin/

[[email protected] admin]# echo "admin test" > index.html



3 curl访问测试

利用127.0.0.1测试,状态码200,正常通过访问。

技术分享图片


利用172.18.171.157测试访问,状态码403,拒绝访问。

因为172.18.171.157没有被写入白名单中。

技术分享图片


访问控制,还可以匹配正则

1 写入如下参数

location ~ .*(upload|image)/.*\.php$

{

        deny all;

}

参数解释:

location ~ .*(upload|image)/.*\.php$

只要是匹配upload,image的,以.php结尾的url都给予deny.

写入参数后检查语法与重新加载。

[[email protected] vhost]# /usr/local/nginx/sbin/nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

[[email protected] vhost]# /usr/local/nginx/sbin/nginx -s reload


演示操作

2 准备工作,

建立upload目录,然后在其下创建1.php文件,echo任意内容1.php

[[email protected] vhost]# mkdir /data/wwwroot/test.com/upload/

[[email protected] vhost]# cd !$

cd /data/wwwroot/test.com/upload/

[[email protected] upload]# echo "1111" > 1.php


3 curl测试

[[email protected] upload]# curl -x127.0.0.1:80 test.com/upload/1.php -I

技术分享图片

当然,1.php不能访问是正常的,起到了效果作用了。

下面尝试一下访问没被标住的txt格式。

[[email protected] upload]# curl -x127.0.0.1:80 test.com/upload/1.txt -I

技术分享图片

访问通过,因为txt没有被标住,所以没有被限制访问。

可以参看日志内容,更详细的记录。

技术分享图片


根据user_agent限制

1 写入如下参数

if ($http_user_agent ~ 'Spider/3.0|YoudaoBot|Tomato')

{

      return 403;

}

参数解析,

$http_user_agent ~ 'Spider/3.0|YoudaoBot|Tomato'

return 403;

其中~是匹配符号,只要user_agent中含有Spider/3.0或者YoudaoBot或者Tomato字符串,

都会被拒绝访问,并返回403状态码。

这里的return 403跟deny all是一样的效果。

2 检查语法和重新加载

[[email protected] vhost]# /usr/local/nginx/sbin/nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

[[email protected] vhost]# /usr/local/nginx/sbin/nginx -s reload


3 curl 测试

curl -A 指定user_agent,

[[email protected] vhost]# curl -A "Tomato1111" -x127.0.0.1:80  test.com/upload/1.txt -I

技术分享图片

当被比配到相应的字符串后,无论后面带什么字符都是生效了。

如果想匹配不区分大小写,则在~加上*即可(~*),对应参数。

$http_user_agent ~* 'Spider/3.0|YoudaoBot|Tomato'

再利用curl -A 测试

技术分享图片

以上是关于12.13-12.16的主要内容,如果未能解决你的问题,请参考以下文章