首頁 > 運維 > Nginx > 主體

網站怎麼透過nginx設定黑/白名單IP限制及國家城市IP存取限制

WBOY
發布: 2023-06-01 17:27:30
轉載
3501 人瀏覽過

    一、黑/白名單IP限制存取設定

    nginx設定黑白名單有好幾種方式,這裡只介紹常用的兩種方法。

    1、第一種方法:allow、deny

    deny和allow指令屬於ngx_http_access_module,nginx預設載入此模組,所以可直接使用。

    這種方式,最簡單,最直接。設定類似防火牆iptable,使用方法:

    直接設定檔中新增:

    #白名单设置,allow后面为可访问IP 
    location / {
         allow 123.13.123.12;
         allow 23.53.32.1/100;
         deny  all;
    }
    
    #黑名单设置,deny后面接限制的IP,为什么不加allow all? 因为这个默认是开启的 
    location / {
         deny 123.13.123.12;
    }
    
    #白名单,特定目录访问限制
    location /tree/list {
         allow 123.13.123.12;
         deny  all;
    }
    登入後複製

    或透過讀取檔案IP設定白名單

    location /{
        include /home/whitelist.conf;
        #默认位置路径为/etc/nginx/ 下,
        #如直接写include whitelist.conf,则只需要在/etc/nginx目录下创建whitelist.conf
        deny all;
    }
    登入後複製

    在/home/目錄下創建whitelist.conf,並寫入需要加入白名單的IP,添加完成後查看如下:

    cat /home/whitelist.conf
    
    #白名单IP
    allow 10.1.1.10;
    allow 10.1.1.11;
    登入後複製

    白名單設定完成,黑名單設定方法一樣。

    2:第二種方法,ngx_http_geo_module

    預設情況下,一般nginx是有加該模組的,ngx_http_geo_module:官方文檔,參數需設定在位置在http模組。

    此模組可設定IP限制,也可設定國家地區限制。位置在server模組外即可。

    語法範例:

    設定檔直接新增

    geo $ip_list {
        default 0;
        #设置默认值为0
        192.168.1.0/24 1;
        10.1.0.0/16    1;
    }
    server {
        listen       8081;
        server_name  192.168.152.100;
        
        location / {
            root   /var/www/test;
    		index  index.html index.htm index.php;
    		if ( $ip_list = 0 ) {
    		#判断默认值,如果值为0,可访问,这时上面添加的IP为黑名单。
    		#白名单,将设置$ip_list = 1,这时上面添加的IP为白名单。
    		proxy_pass http://192.168.152.100:8081;
        }
    登入後複製

    同樣可透過讀取檔案IP設定

    geo $ip_list {
        default 0;
        #设置默认值为0
        include ip_white.conf;
    }
    server {
        listen       8081;
        server_name  192.168.152.100;
        
        location / {
            root   /var/www/test;
    		index  index.html index.htm index.php;
    		if ( $ip_list = 0 ) {
    			return 403;
    			#限制的IP返回值为403,也可以设置为503,504其他值。
    			#建议设置503,504这样返回的页面不会暴露nginx相关信息,限制的IP看到的信息只显示服务器错误,无法判断真正原因。
        }
    登入後複製

    在/etc/nginx目錄下建立ip_list .conf,新增IP完成後,查看如下:

    cat /etc/nginx/ip_list.conf
    
    192.168.152.1 1;
    192.168.150.0/24 1;
    登入後複製

    當設定完成後,IP清單檔案ip_list.conf 將作為白名單,若請求的IP 不在名單中,則會直接傳回403頁。黑名單設定方法相同。

    3、ngx_http_geo_module 負載平衡(擴展)

    ngx_http_geo_module,模組還可以做負載平衡使用,如web集群在不同地區都有伺服器,某個地區IP段,負載平衡至訪問某個地區的伺服器。類似的方式是在IP後面添加自訂值,這些值不僅限於數字,還可以使用字母,例如US、CN等。

    範例:

    如果三台伺服器:122.11.11.11,133.11.12.22,144.11.11.33

    geo $country {
        default default;
        111.11.11.0/24   uk;
        #IP段定义值uk
        111.11.12.0/24   us;
        #IP段定义值us
        }
    upstream  uk.server {
        erver 122.11.11.11:9090;
        #定义值uk的IP直接访问此服务器
    } 
    
    upstream  us.server {
        server 133.11.12.22:9090;
        #定义值us的IP直接访问此服务器
    }
    
    upstream  default.server {
        server 144.11.11.33:9090;
        #默认的定义值default的IP直接访问此服务器
    }
     
    server {
        listen    9090;
        server_name 144.11.11.33;
    
        location / {
          root  /var/www/html/;
          index index.html index.htm;
         }
     }
    登入後複製

    然後在

    二、國家地區IP限制存取

    一些第三方服務例如cloudflare也提供設定選項,使防火牆規則的設定更加方便。這裡講講nginx的設定方法。

    1:安裝ngx_http_geoip_module模組

    ngx_http_geoip_module:官方文檔,參數需設定在位置在http模組。

    nginx預設情況下不建置此模組,應使用 --with-http_geoip_module 配置參數啟用它。

    對於ubuntu系統來說,直接安裝 nginx-extras元件,包括幾乎所有的模組。

    sudo apt install nginx-extras
    登入後複製

    對於centos系統,安裝模組。

    yum install nginx-module-geoip
    登入後複製

    2、下載 IP 資料庫

    此模組依賴IP資料庫,所有資料在此資料庫中讀取,所有資料都需要下載ip庫(dat格式)。

    MaxMind 提供了免費的 IP 地理資料庫,壞消息是MaxMind 官方已經停止支援dat格式的ip函式庫。

    在其他地方可以找到dat格式的文件,或是舊版的,當然資料不可能最新,多少有誤差。

    下載同時包含Ipv4和Ipv6的country、city版本。

    #下载国家IP库,解压并移动到nginx配置文件目录,
    sudo wget https://dl.miyuru.lk/geoip/maxmind/country/maxmind.dat.gz
    gunzip maxmind.dat.gz
    sudo mv maxmind.dat /etc/nginx/GeoCountry.dat
    
    sudo wget https://dl.miyuru.lk/geoip/maxmind/city/maxmind.dat.gz
    gunzip maxmind.dat.gz
    sudo mv maxmind.dat /etc/nginx/GeoCity.dat
    登入後複製

    3、設定nginx

    範例:

    geoip_country /etc/nginx/GeoCountry.dat;
    geoip_city /etc/nginx/GeoCity.dat;
    
    server {
        listen  80;
        server_name 144.11.11.33;
    
        location / {
          root  /var/www/html/;
          index index.html index.htm;
          if ($geoip_country_code = CN) {
      			return 403;
     		#中国地区,拒绝访问。返回403页面
    		}
      	}
     }
    登入後複製

    這裡,地區國家基礎設定就完成了。

    Geoip其他參數:

    國家相關參數:
    $geoip_country_code #兩位字元的英文國家碼。如:CN, US
    $geoip_country_code3 #三位字元的英文國家碼。如:CHN, USA
    $geoip_country_name #國家英文全名。如:China, United States
    城市相關參數:
    $geoip_city_country_code #也是兩個字元的英文國碼。
    $geoip_city_country_code3 #上同
    $geoip_city_country_name #上同.
    $geoip_region #這個經測試是兩位數的數字,如杭州是02, 上海是 23。但沒有搜到相關資料,希望知道的朋友留言告之。
    $geoip_city #城市的英文名稱。如:Hangzhou
    $geoip_postal_code #城市的郵遞區號。經測試,國內這一字段為空
    $geoip_city_continent_code #不知什麼用途,國內好像都是AS
    $geoip_latitude #緯度
    $geoip_longitude #經度

    #

    以上是網站怎麼透過nginx設定黑/白名單IP限制及國家城市IP存取限制的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    相關標籤:
    來源:yisu.com
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板
    關於我們 免責聲明 Sitemap
    PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!