Maison  >  Article  >  Opération et maintenance  >  Comment les sites Web définissent-ils les restrictions IP sur liste noire/blanche et les restrictions d'accès IP par pays et ville via nginx ?

Comment les sites Web définissent-ils les restrictions IP sur liste noire/blanche et les restrictions d'accès IP par pays et ville via nginx ?

WBOY
WBOYavant
2023-06-01 17:27:303361parcourir

    1. Configuration de l'accès restreint IP aux listes noire/blanche

    nginx propose plusieurs façons de configurer les listes noire et blanche. Voici seulement deux méthodes couramment utilisées.

    1. La première méthode : autoriser, refuser

    deny et autoriser les instructions appartiennent à ngx_http_access_module. nginx charge ce module par défaut, il peut donc être utilisé directement.

    Cette méthode est la plus simple et la plus directe. Configurez un pare-feu similaire à iptable. Comment utiliser :

    Ajoutez directement dans le fichier de configuration :

    #白名单设置,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;
    }

    Ou configurez la liste blanche en lisant le fichier IP

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

    Créez whitelist.conf dans le répertoire /home/ et écrivez les informations. qui doit être ajouté à l'adresse IP de la liste blanche, après l'avoir ajouté, affichez ce qui suit :

    cat /home/whitelist.conf
    
    #白名单IP
    allow 10.1.1.10;
    allow 10.1.1.11;

    Le paramétrage de la liste blanche est terminé et la méthode de paramétrage de la liste noire est la même.

    2 : La deuxième méthode, ngx_http_geo_module

    Par défaut, ce module est généralement ajouté à nginx, ngx_http_geo_module : Document officiel, les paramètres doivent être définis dans le module http.

    Ce module peut définir des restrictions IP et des restrictions de pays et de région. L'emplacement peut être à l'extérieur du module serveur.

    Exemple de syntaxe :

    Le fichier de configuration est ajouté directement

    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;
        }

    Vous pouvez également lire le fichier de configuration 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看到的信息只显示服务器错误,无法判断真正原因。
        }

    Créez ip_list.conf dans le répertoire /etc/nginx Après avoir ajouté l'IP, affichez ce qui suit :

    cat /etc/nginx/ip_list.conf
    
    192.168.152.1 1;
    192.168.150.0/24 1;
    .

    Lors du réglage Une fois terminé, le fichier de liste IP ip_list.conf sera utilisé comme liste blanche. Si l'IP demandée n'est pas dans la liste, la page 403 sera renvoyée directement. La méthode de définition de la liste noire est la même.

    3. ngx_http_geo_module équilibrage de charge (extension)

    ngx_http_geo_module, le module peut également être utilisé pour l'équilibrage de charge. Par exemple, un cluster Web a des serveurs dans différentes régions et la charge du segment IP d'une certaine région est équilibrée pour les serveurs d'accès. une certaine région. Une manière similaire consiste à ajouter des valeurs personnalisées derrière l'adresse IP. Ces valeurs ne se limitent pas aux chiffres, mais peuvent également utiliser des lettres, telles que US, CN, etc.

    Exemple:

    If il y a trois serveurs: 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;
         }
     }

    then dans le deuxième, le pays et la région IP d'accès à la restriction pour les deux services tiers tels que Cloudflare fournissent également options de configuration à activer La configuration des règles de pare-feu est plus pratique. Nous parlons ici de la façon de configurer nginx.

    1 : Installez le module ngx_http_geoip_module

    ngx_http_geoip_module : Document officiel, les paramètres doivent être définis dans le module http.

    nginx ne construit pas ce module par défaut, il doit être activé à l'aide du paramètre de configuration --with-http_geoip_module.

    Pour les systèmes Ubuntu, installez directement les composants nginx-extras, y compris presque tous les modules.

    sudo apt install nginx-extras

    Pour le système centos, installez le module.

    yum install nginx-module-geoip

    2. Téléchargez la base de données IP

    Ce module dépend de la base de données IP. Toutes les données sont lues dans cette base de données et la bibliothèque IP (format dat) doit être téléchargée.

    MaxMind fournit une base de données géographique IP gratuite. La mauvaise nouvelle est que MaxMind a officiellement cessé de prendre en charge la base de données IP au format DAT.

    Vous pouvez trouver des fichiers au format DAT à d'autres endroits, ou dans d'anciennes versions. Bien sûr, les données peuvent ne pas être les plus récentes et il y a quelques erreurs.

    Le téléchargement inclut les versions par pays et par ville d'Ipv4 et d'Ipv6.

    #下载国家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. Configurez nginx

    Exemple :

    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页面
    		}
      	}
     }

    Ici, les paramètres de base régionaux et nationaux sont terminés.

    Autres paramètres Geoip :

    Paramètres liés au pays :

    $geoip_country_code #Code de pays anglais à deux caractères. Par exemple : CN, US

    $geoip_country_code3 #Indicatif de pays anglais à trois caractères. Tels que : CHN, USA
    $geoip_country_name #Le nom anglais complet du pays. Par exemple : Chine, États-Unis

    Paramètres liés à la ville :
    $geoip_city_country_code # est également un code de pays anglais à deux caractères.
    $geoip_city_country_code3 #Identique à ci-dessus
    $geoip_city_country_name #Identique à ci-dessus.
    $geoip_region #Il a été testé comme étant un nombre à deux chiffres, tel que 02 pour Hangzhou et 23 pour Shanghai. Cependant, aucune information pertinente n'a été trouvée. J'espère que les amis qui sont au courant pourront laisser un message.
    $geoip_city #Le nom anglais de la ville. Par exemple : Hangzhou
    $geoip_postal_code #Le code postal de la ville. Après tests, ce champ est vide en Chine
    $geoip_city_continent_code #Je ne sais pas à quoi il sert, mais il semble que ce soit AS en Chine
    $geoip_latitude #Latitude
    $geoip_longitude #Longitude

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer