Nginx访问控制
以前面已经配置好的bbs.jinkai.cc.conf作为实验的配置文件
vim /etc/nginx/conf.d/bbs.jinkai.cc.conf
nginx -t && nginx -s reload
一:针对IP的控制访问
针对IP有白名单和黑名单限制,allow 允许 ;deny 拒绝
白名单:允许127.0.0.1和192.168.1.0/24网段,其他的一律拒绝
在配置文件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网段访问
deny 127.0.0.1;
deny 192.168.1.0/24;
实验结果:
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 :请求中的参数,如/1.php?a=1&b=2的$args就是a=1&b=2
$document_uri:当前请求中不包含指令的URI,如/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 显示详细的通信过程
















