Nginx访问控制

Nginx访问控制

之前面已经配置好的bbs.jinkai.cc.conf做为实验的配置文件php

vim /etc/nginx/conf.d/bbs.jinkai.cc.confnginx

nginx -t && nginx -s reloadvim

一:针对IP的控制访问浏览器

针对IP有白名单和黑名单限制,allow 容许 ;deny 拒绝服务器

白名单:容许127.0.0.1和192.168.1.0/24网段,其余的一概拒绝curl

在配置文件server_name下直接添加,就是针对bbs.jinkai.cc这个网站

allow 127.0.0.1;

allow 192.168.1.0/24

deny all;

实验结果:

curl -I -x127.0.0.1:80 bbs.jinkai.cc 

HTTP/1.1 200 OK //白名单容许访问

curl -x192.168.111.136:80 bbs.jinkai.cc -I

HTTP/1.1 403 Forbidden //不在白名单的一概拒绝访问

黑名单:拒绝127.0.0.1和192.168.1.0/24网段访问ide

deny 127.0.0.1;网站

deny 192.168.1.0/24;url

实验结果:代理

curl -I -x127.0.0.1:80 bbs.jinkai.cc 

HTTP/1.1 403 Forbidden //黑名单内不容许访问

curl -x192.168.111.136:80 bbs.jinkai.cc -I

HTTP/1.1 200 OK //不在黑名单的则不拒绝

二:限制目录的访问

location  /admin/   

{

  allow 127.0.0.1;

  allow 192.168.1.0/24;

  deny all;

}

针对admin 这个目录的访问

实验结果:

curl -x127.0.0.1:80 bbs.jinkai.cc/admin/ -I

HTTP/1.1 404 Not Found

curl -x192.168.111.136:80 bbs.jinkai.cc/admin/ -I

HTTP/1.1 403 Forbidden

三:限制目录下某类文件的访问

location ~ .*(forum|123|abc)/.*\.php$

{

  deny all;

}

限制全部IP访问forum;123;abc;三个目录下全部以.php结尾的文件或子文件都会被拒绝

实验结果:

curl -x192.168.111.136:80 bbs.jinkai.cc/forum/fdsaffdsa.php -I

HTTP/1.1 403 Forbidden

curl -x192.168.111.136:80 bbs.jinkai.cc/forum1/fdsaffdsa.php -I

HTTP/1.1 404 Not Found

curl -x192.168.111.136:80 bbs.jinkai.cc/forum/fdsaffdsa.php1 -I

HTTP/1.1 404 Not Found

四:限制user_agent

user_agent 用户代理,格式:浏览器标识

if ($http_user_agent ~ 'forum|YoudaoBot|Tomato')

  {

  return 403;

  }

浏览器标识带有forum|YoudaoBot|Tomato 字符的访问本机都会被拒绝

实验结果:-A 模拟指定浏览器标识符 -e 指定referer

curl -A 'fdsafsdforum' -e 1233 -x127.0.0.1:80 bbs.jinkai.cc -I

HTTP/1.1 403 Forbidden

curl -A 'fdsafsd///YoudaoBot' -e 1233 -x127.0.0.1:80 bbs.jinkai.cc -I

HTTP/1.1 403 Forbidden

区分大小写,把YoudaoBot 最后一个字母改为大写T ,就能够正常访问

curl -A 'fdsafsd///YoudaoBoT' -e 1233 -x127.0.0.1:80 bbs.jinkai.cc -I

HTTP/1.1 200 OK

五:限制uri

$request_uri:请求的连接,包括$document_uri和$args

$args :请求中的参数,如www.123.com/1.php?a=1&b=2的$args就是a=1&b=2

$document_uri:当前请求中不包含指令的URI,如www.123.com/1.php?a=1&b=2的$document_uri就是1.php,不包含后面的参数

例如前面作的网站论坛

http://bbs.jinkai.cc/forum.php?mod=forumdisplay&fid=2

$document:forum.php

$args :mod=forumdisplay&fid=2

只要针对上面包含的字段作显示就能够了

if ($request_uri ~ (forum|display))

{

return 404;

}

实验结果:刷新论坛网页后,已经没法访问

http://bbs.jinkai.cc/forum.php?mod=forumdisplay&fid=2

扩展:

curl 参数

-A 指定user-agent

-e 指定referer

-x指定访问目标服务器的ip和port -I只显示 header信息,不显示具体的网页内容

-v 显示详细的通讯过程

相关文章
相关标签/搜索