• nginx > bloquer des IP et se protéger des attaques DoS

      BLOQUER UNE LISTE D’ADRESSES IP

      sudo vi /etc/nginx/sites-available/default
      server {
              listen 80 default_server;
              include /etc/nginx/blacklist.conf;
              root /var/www/html;
              server_name _;
              ...
      }

       

      sudo vi /etc/nginx/blacklist.conf
      deny 192.168.1.0/24; # bloque l'ensemble du réseau 192.168.1.0/24
      deny 192.168.2.102;  # bloque une adresse particulière
      allow all;

       

      sudo chown www-data.www-data /etc/nginx/blacklist.conf

       

      sudo nginx -t
      sudo service nginx restart

      Nginx refusera l’accès et affichera un message d’erreur 403 Forbidden.

      BLOQUER UN PAYS

      Installation de base de données GEOIP2

      Accédez au site MaxMIND et créez un nouveau compte. Accédez au profil de votre compte et créez une nouvelle clé. Nginx - GeoIP2 key Ajoutez le référentiel MAXMIND à votre Linux Ubuntu.

      add-apt-repository ppa:maxmind/ppa
      apt-get update
      apt-get install geoipupdate

      Modifiez le fichier de configuration GEOIPUPDATE.

      vi /etc/GeoIP.conf

      Insérez votre identifiant de compte et votre clé de licence.

      AccountID 555555
      LicenseKey AAAAAAAAAAAAAAAA
      EditionIDs GeoLite2-Country GeoLite2-City

      Mettre à jour la base de données de GEOIP2.

      geoipupdate -v

      Vérifiez l’installation de la base de données GEOIP2.

      ls -la /usr/share/GeoIP
      -rw-r--r--   1 root root 63884020 Apr 17 16:01 GeoLite2-City.mmdb
      -rw-r--r--   1 root root  4013279 Apr 17 16:01 GeoLite2-Country.mmdb

      Vous avez installé la base de données GEOIP2 pour les pays et les villes. félicitations! Vous avez terminé l’installation de GEOIPUPDATE.

      Nginx

      apt-get install nginx libnginx-mod-http-geoip2

      Modifiez le fichier de configuration Nginx.

      vi /etc/nginx/nginx.conf

      Ajouter la ligne suivante au fichier de configuration.

      geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {
      auto_reload 60m;
      $geoip2_metadata_country_build metadata build_epoch;
      $geoip2_data_country_code country iso_code;
      $geoip2_data_country_name country names en;
      }
      map $geoip2_data_country_code $allowed_country {
      default yes;
      US no;
      BR no;
      }

      Dans notre exemple, nous avons refusé l’accès du Brésil et des États-Unis. Vérifiez la liste des codes de pays.

      user www-data;
      worker_processes auto;
      pid /run/nginx.pid;
      include /etc/nginx/modules-enabled/*.conf;
      events {
              worker_connections 768;
      }
      http {
      geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {
      auto_reload 60m;
      $geoip2_metadata_country_build metadata build_epoch;
      $geoip2_data_country_code country iso_code;
      $geoip2_data_country_name country names en;
      }
      map $geoip2_data_country_code $allowed_country {
      default yes;
      US no;
      BR no;
      }
              sendfile on;
              tcp_nopush on;
              tcp_nodelay on;
              keepalive_timeout 65;
              types_hash_max_size 2048;
              include /etc/nginx/mime.types;
              default_type application/octet-stream;
              ssl_prefer_server_ciphers on;
              access_log /var/log/nginx/access.log;
              error_log /var/log/nginx/error.log;
              gzip on;
              include /etc/nginx/conf.d/*.conf;
              include /etc/nginx/sites-enabled/*;
      }

      Modifiez le fichier de configuration Nginx pour le site Web par défaut.

      vi /etc/nginx/sites-available/default

      Ajouter la ligne suivante au fichier de configuration.

      if ($allowed_country = no) {
          return 403;
      }

      Voici le fichier, avant notre configuration.

      server {
              listen 80 default_server;
              listen [::]:80 default_server;
              root /var/www/html;
              index index.html index.htm index.nginx-debian.html;
              server_name _;
              location / {
                      try_files $uri $uri/ =404;
              }
      }

      Voici le fichier, après notre configuration.

      server {
              listen 80 default_server;
              listen [::]:80 default_server;
              root /var/www/html;
              index index.html index.htm index.nginx-debian.html;
              server_name _;
              location / {
      if ($allowed_country = no) {
      return 403;
      }
                      try_files $uri $uri/ =404;
              }
      }

      Redémarrez le service Nginx.

      service nginx restart

      Le serveur Nginx refusera l’accès en fonction du pays de l’adresse IP source. À partir d’un ordinateur distant dans un pays restreint, essayez d’accéder à votre site Web.

      curl -I  http://www.gameking.tips

      Voici la sortie de commande.

      HTTP/1.1 403 Forbidden
      Server: nginx/1.18.0 (Ubuntu)
      Date: Sat, 17 Apr 2021 17:25:15 GMT
      Content-Type: text/html
      Content-Length: 162
      Connection: keep-alive

      félicitations! Vous pouvez configurer Nginx pour restreindre l’accès à votre site web en fonction du pays de la demande.

      Tutoriel GEOIP2 - Mise à jour de la base de données

      Créez une tâche planifiée pour mettre à jour la base de données GEOIP2.

      vi /etc/cron.d/geoip2update

      Voici le contenu du fichier.

      SHELL=/bin/sh
      PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
      ​
      0 */12 * * * root /usr/bin/geoipupdate

      félicitations! Vous avez configuré la mise à jour automatique de la base de données GEOIP2.

      Tutoriel Nginx - Inclure le code pays dans le journal

      Modifiez le fichier de configuration Nginx.

      vi /etc/nginx/nginx.conf

      Supprimez les lignes suivantes du fichier de configuration.

      access_log /var/log/nginx/access.log;

      Ajouter les lignes suivantes au fichier de configuration.

      log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $geoip2_data_country_code';
      access_log /var/log/nginx/access.log main;

      À titre d’exemple, voici notre fichier de configuration.

      user www-data;
      worker_processes auto;
      pid /run/nginx.pid;
      include /etc/nginx/modules-enabled/*.conf;
      events {
              worker_connections 768;
      }
      http {
      geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {
      auto_reload 60m;
      $geoip2_metadata_country_build metadata build_epoch;
      $geoip2_data_country_code country iso_code;
      $geoip2_data_country_name country names en;
      }
      map $geoip2_data_country_code $allowed_country {
      default yes;
      US no;
      BR no;
      }
      log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $geoip2_data_country_code';
              sendfile on;
              tcp_nopush on;
              tcp_nodelay on;
              keepalive_timeout 65;
              types_hash_max_size 2048;
              include /etc/nginx/mime.types;
              default_type application/octet-stream;
              ssl_prefer_server_ciphers on;
              access_log /var/log/nginx/access.log main;
              error_log /var/log/nginx/error.log;
              gzip on;
              include /etc/nginx/conf.d/*.conf;
              include /etc/nginx/sites-enabled/*;
      }

      Redémarrez le service Nginx.

      service nginx restart

      Le serveur Nginx enregistrera le code pays de la demande dans le fichier journal.

      cat /var/log/nginx/access.log

      Voici un exemple du journal Nginx.

      200.200.200.200 - - [17/Apr/2021:17:17:47 +0000] "GET /test.html HTTP/1.1" 403 196 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36" BR
      54.187.45.85 - - [17/Apr/2021:17:05:16 +0000] "GET /test.html HTTP/1.1" 403 564 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36" US

      félicitations! Vous avez configuré le serveur Nginx pour inclure le code pays dans les fichiers journaux.

      Installation de base de données GEOIP2

      Accédez au site MaxMIND et créez un nouveau compte. Accédez au profil de votre compte et créez une nouvelle clé. Nginx - GeoIP2 key Ajoutez le référentiel MAXMIND à votre Linux Ubuntu.

      add-apt-repository ppa:maxmind/ppa

      Installez le paquet nommé GEOIPUPDATE.

      apt-get update
      apt-get install geoipupdate

      Modifiez le fichier de configuration GEOIPUPDATE.

      vi /etc/GeoIP.conf

      Insérez votre identifiant de compte et votre clé de licence. Voici le fichier, avant notre configuration.

      AccountID YOUR_ACCOUNT_ID_HERE
      LicenseKey YOUR_LICENSE_KEY_HERE
      EditionIDs GeoLite2-Country GeoLite2-City

      Voici le fichier, après notre configuration.

      AccountID 555555
      LicenseKey AAAAAAAAAAAAAAAA
      EditionIDs GeoLite2-Country GeoLite2-City

      Mettre à jour la base de données de GEOIP2.

      geoipupdate -v

      Vérifiez l’installation de la base de données GEOIP2.

      ls -la /usr/share/GeoIP

      Voici la sortie de commande.

      -rw-r--r--   1 root root 63884020 Apr 17 16:01 GeoLite2-City.mmdb
      -rw-r--r--   1 root root  4013279 Apr 17 16:01 GeoLite2-Country.mmdb

      Vous avez installé la base de données GEOIP2 pour les pays et les villes. félicitations! Vous avez terminé l’installation de GEOIPUPDATE.

      Tutoriel Nginx - Bloquer l’accès à partir d’un continent

      Installez le serveur Nginx et le module requis.

      apt-get update
      apt-get install nginx libnginx-mod-http-geoip2

      Modifiez le fichier de configuration Nginx.

      vi /etc/nginx/nginx.conf

      Ajouter la ligne suivante au fichier de configuration.

      geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {
      auto_reload 60m;
      $geoip2_data_country_code country iso_code;
      $geoip2_data_continent_code continent code;
      }
      map $geoip2_data_continent_code $allowed_continent {
      default yes;
      SA no;
      }

      Dans notre exemple, nous nous sommes vu refuser l’accès depuis l’Amérique du Sud. Voici le fichier, avant notre configuration.

      user www-data;
      worker_processes auto;
      pid /run/nginx.pid;
      include /etc/nginx/modules-enabled/*.conf;
      events {
              worker_connections 768;
      }
      http {
              sendfile on;
              tcp_nopush on;
              tcp_nodelay on;
              keepalive_timeout 65;
              types_hash_max_size 2048;
              include /etc/nginx/mime.types;
              default_type application/octet-stream;
              ssl_prefer_server_ciphers on;
              access_log /var/log/nginx/access.log;
              error_log /var/log/nginx/error.log;
              gzip on;
              include /etc/nginx/conf.d/*.conf;
              include /etc/nginx/sites-enabled/*;
      }

      Voici le fichier, après notre configuration.

      user www-data;
      worker_processes auto;
      pid /run/nginx.pid;
      include /etc/nginx/modules-enabled/*.conf;
      events {
              worker_connections 768;
      }
      http {
      geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {
      auto_reload 60m;
      $geoip2_data_country_code country iso_code;
      $geoip2_data_continent_code continent code;
      }
      map $geoip2_data_continent_code $allowed_continent {
      default yes;
      SA no;
      }
              sendfile on;
              tcp_nopush on;
              tcp_nodelay on;
              keepalive_timeout 65;
              types_hash_max_size 2048;
              include /etc/nginx/mime.types;
              default_type application/octet-stream;
              ssl_prefer_server_ciphers on;
              access_log /var/log/nginx/access.log;
              error_log /var/log/nginx/error.log;
              gzip on;
              include /etc/nginx/conf.d/*.conf;
              include /etc/nginx/sites-enabled/*;
      }

      Modifiez le fichier de configuration Nginx pour le site Web par défaut.

      vi /etc/nginx/sites-available/default

      Ajouter la ligne suivante au fichier de configuration.

      if ($allowed_continent = no) {
      return 403;
      }

      Voici le fichier, après notre configuration.

      server {
              listen 80 default_server;
              listen [::]:80 default_server;
              root /var/www/html;
              index index.html index.htm index.nginx-debian.html;
              server_name _;
              location / {
      if ($allowed_continent = no) {
      return 403;
      }
                      try_files $uri $uri/ =404;
              }
      }

      Redémarrez le service Nginx.

      service nginx restart

      Le serveur Nginx refusera l’accès en fonction du continent de l’adresse IP source. À partir d’un ordinateur distant dans un continent restreint, essayez d’accéder à votre site Web.

      curl -I  http://www.gameking.tips

      Voici la sortie de commande.

      HTTP/1.1 403 Forbidden
      Server: nginx/1.18.0 (Ubuntu)
      Date: Sat, 17 Apr 2021 17:25:15 GMT
      Content-Type: text/html
      Content-Length: 162
      Connection: keep-alive

      félicitations! Vous pouvez configurer Nginx pour restreindre l’accès à votre site web en fonction du continent de la demande.

      Tutoriel GEOIP2 - Mise à jour de la base de données

      Créez une tâche planifiée pour mettre à jour la base de données GEOIP2.

      vi /etc/cron.d/geoip2update

      Voici le contenu du fichier.

      SHELL=/bin/sh
      PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
      0 */12 * * * root /usr/bin/geoipupdate

      félicitations! Vous avez configuré la mise à jour automatique de la base de données GEOIP2.

      Tutoriel Nginx - Inclure le code continent et le pays dans le journal

      Modifiez le fichier de configuration Nginx.

      vi /etc/nginx/nginx.conf

      Supprmez les lignes suivantes du fichier de configuration.

      access_log /var/log/nginx/access.log;

      Ajouter les lignes suivantes au fichier de configuration.

      log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $geoip2_data_continent_code $geoip2_data_country_code';
      access_log /var/log/nginx/access.log main;

      À titre d’exemple, voici notre fichier de configuration.

      user www-data;
      worker_processes auto;
      pid /run/nginx.pid;
      include /etc/nginx/modules-enabled/*.conf;
      events {
              worker_connections 768;
      }
      http {
      geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {
      auto_reload 60m;
      $geoip2_data_country_code country iso_code;
      $geoip2_data_continent_code continent code;
      }
      map $geoip2_data_continent_code $allowed_continent {
      default yes;
      SA no;
      }
      log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $geoip2_data_continent_code $geoip2_data_country_code';
      access_log /var/log/nginx/access.log main;
              sendfile on;
              tcp_nopush on;
              tcp_nodelay on;
              keepalive_timeout 65;
              types_hash_max_size 2048;
              include /etc/nginx/mime.types;
              default_type application/octet-stream;
              ssl_prefer_server_ciphers on;
              error_log /var/log/nginx/error.log;
              gzip on;
              include /etc/nginx/conf.d/*.conf;
              include /etc/nginx/sites-enabled/*;
      }

      Redémarrez le service Nginx.

      service nginx restart

      Le serveur Nginx enregistrera le code continent et le code pays dans le fichier journal.

      cat /var/log/nginx/access.log

      Voici un exemple du journal Nginx.

      18.236.211.111 - - [17/Apr/2021:21:45:06 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.68.0" NA US
      200.200.200.200 - - [17/Apr/2021:21:51:56 +0000] "GET / HTTP/1.1" 403 196 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36" SA BR

      félicitations! Vous avez configuré le serveur Nginx pour inclure le code continent et le code pays dans les fichiers journaux.

 

Aucun commentaire

 

Laissez un commentaire