天天看點

Nginx http_access_module access階段 限制IP位址通路權限

Nginx http_access_module access階段 限制IP位址通路權限

http_access_module子產品摘要

[root@localhost nginx-1.16.1]# ./configure --help | grep  http_access_module
--without-http_access_module    --可以看到access子產品是http_access_module子產品提供的      

通路控制子產品 ,該子產品可以實作簡單的防火牆功能,過濾特定的主機。這個子產品在我們編譯nginx時會預設編譯進nginx的二進制檔案中,access設定就相當于設定白名單和黑名單(可以限制IP限制通路某些URL)。

如果server指令塊,location指令塊沒有配置限制指令,那麼将會繼承http的限制指令,但是一旦配置了會覆寫http的限制指令。或者說作用域小的配置會覆寫作用域大的配置。access子產品在内網當中允許企業服務限制通路Nginx是十分有效的。

[root@www nginx-1.16.1]# ./configure --help | grep access
  --without-http_access_module       disable ngx_http_access_module      

隻有在編譯的時候指定--without-http_access_module,要不然會預設編譯進去

HTTP Access子產品提供了一個簡單的基于host名稱的通路控制。通過該子產品,可以允許或禁止指定的IP位址或IP位址段通路某些虛拟主機或目錄

allow|deny 指令文法

Syntax: allow address | CIDR | unix: | all;
Default: —
Context: http, server, location, limit_except
 
Syntax: deny address | CIDR | unix: | all;
Default: —
Context: http, server, location, limit_except      

allow: 允許通路的IP或者網段,不能後面接多個IP,但是可以允許網段。

deny: 拒絕通路的ip或者網段。

從文法上看,它允許配置在http指令塊中,server指令塊中還有locatio指令塊中,這三者的作用域有所不同。

如果配置在http指令段中,将對所有server(虛拟主機)生效,配置在server指令段中,對目前虛拟主機生效,配置在location指令塊中,對指定的目錄生效,預設是沒有防火牆,所有的IP都能進行通路。

示範用例

在http指令塊下配置:

對單ip進行限制:正常情況下使用浏覽器去通路網站是可以正常通路的

Nginx http_access_module access階段 限制IP位址通路權限

 通過Nginx的access日志擷取到用戶端的IP并且對其進行限制

192.168.179.4 - - [23/Jul/2020:21:52:48 -0400] 
"GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"      
http {
include mime.types;
default_type application/octet-stream;
# 限制192.168.179.4這個ip通路
deny 192.168.179.4;
...
}

/usr/local/nginx/sbin/nginx -s reload  --配置完記得重載配置檔案。


#在自己服務上通路
[root@localhost ~]# curl -I 192.168.179.101
HTTP/1.1 200 OK
Server: nginx/1.16.1
Date: Fri, 24 Jul 2020 02:00:06 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 23 Mar 2020 12:32:23 GMT
Connection: keep-alive
ETag: "5e78ac57-264"
Accept-Ranges: bytes      

通過浏覽器用戶端去通路,可以看到限制了該IP的通路 

Nginx http_access_module access階段 限制IP位址通路權限

對網段進行限制:

如果想讓整個網段都不能通路,隻需要将這個ip改為網段即可。

http {
include mime.types;
default_type application/octet-stream;  --将ip改為網段
deny 192.168.75.0/24;
...
}      

server指令塊配置:

配置方法都是一樣的,隻是作用範圍不同。

server {
listen 80;
server_name localhost;
deny 192.168.75.135;
...
}


在自己伺服器上通路
[root@localhost ~]# curl -I 192.168.75.130
HTTP/1.1 200 OK
Server: nginx/1.16.0
Date: Mon, 22 Jul 2019 02:45:06 GMT
在192.168.75.135機器上通路:

[root@localhost ~]# curl -I 192.168.75.130
HTTP/1.1 403 Forbidden
Server: nginx/1.16.0
限制網段同上。      

location指令塊配置:

在location指令塊配置通路控制。

這種配置是最多的,因為有時候我們要限制使用者對某些檔案或者目錄的通路,這些檔案通常是比較重要的或者私密的。

location /secret {
deny 192.168.75.135;
}


建立目錄以及測試檔案:
[root@localhost ~]# mkdir -p /usr/local/nginx/html/secret
[root@localhost ~]# echo "this is secret" >/usr/local/nginx/html/secret/index.html


在本機通路
[root@localhost ~]# curl 192.168.75.130/secret/index.html
this is secret

在192.168.75.135上通路
[root@localhost ~]# curl 192.168.75.130/secret/index.html
<html>
<head><title>403 Forbidden</title></head>      
location /secret {
allow 192.168.75.130;
deny all;
}      

繼續閱讀