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 顯示詳細的通訊過程

相關文章
相關標籤/搜索