Verwenden Sie Nginx, um fremden IPs den Zugriff auf meine Website zu verbieten ...

Lassen Sie mich zunächst darüber sprechen, warum ich diesen Artikel geschrieben habe. Ich habe zuvor die Zugriffsprotokolle von Nginx gelesen und festgestellt, dass jeden Tag viele ausländische IP-Adressen meine Website besuchen und der Inhalt der Besuche grundsätzlich böswillig ist. Deshalb habe ich beschlossen, ausländischen IP-Adressen den Zugriff auf meine Website zu verbieten.

Es gibt viele Möglichkeiten, diese Funktion zu realisieren. Als Nächstes werde ich das auf Nginx basierende Modul ngx_http_geoip2 vorstellen, um den Zugriff fremder IP-Adressen auf die Website zu verhindern.

1. Installieren Sie die Abhängigkeiten der Geoip2-Erweiterung:

yum install libmaxminddb-devel -y

2. Laden Sie das Modul ngx_http_geoip2_module herunter:

 git clone https://github.com/leev/ngx_http_geoip2_module.git

3. Entpacken Sie das Modul in den angegebenen Pfad

Ich entpacke es hier in das Verzeichnis /usr/local:

# mv ngx_http_geoip2_module/ /usr/local/
# ll ngx_http_geoip2_module/
        total 60
        -rw-r--r-- 1 root root  1199 Aug 13 17:20 config
        -rw-r--r-- 1 root root  1311 Aug 13 17:20 LICENSE
        -rw-r--r-- 1 root root 23525 Aug 13 17:20 ngx_http_geoip2_module.c
        -rw-r--r-- 1 root root 21029 Aug 13 17:20 ngx_stream_geoip2_module.c
        -rw-r--r-- 1 root root  3640 Aug 13 17:20 README.md

4. Installieren Sie das Nginx-Modul

Erklären Sie zunächst die Umgebung. Meine Nginx-Version ist 1.16. Ich habe im Internet überprüft, ob das Modul ngx_http_geoip2 mindestens Version 1.18 und höher installiert sein soll. Daher habe ich für diese Installation ein Upgrade von nginx1.18 durchgeführt und das Modul ngx_http_geoip2 hinzugefügt.

Laden Sie die Nginx-Version 1.18 herunter:

# yum install libmaxminddb-devel -y

Entpacken Sie das Softwarepaket nginx1.18, aktualisieren Sie auf nginx1.18 und fügen Sie das Modul ngx_http_geoip2 hinzu.

erfordert Aufmerksamkeit:

  • Um Nginx zu aktualisieren, fügen Sie das Nginx-Modul hinzu, kompilieren Sie es einfach und erstellen Sie es dann. Eine Make-Installation ist nicht erforderlich, da sonst das Online-Nginx vollständig durch die neue Version von Nginx ersetzt wird.
  • Vor dem Kompilieren müssen Sie sehen, welche Module derzeit in Nginx installiert sind.
#/usr/local/nginx/sbin/nginx -V

nginx version: nginx/1.16.0

built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)

built with OpenSSL 1.0.2k-fips 26 Jan 2017

TLS SNI support enabled

configure arguments: –with-http_stub_status_module –prefix=/usr/local/nginx –user=nginx –group=nginx –with-http_ssl_module –with-stream

Nginx-Version und installierte Module anzeigen:

# /usr/local/nginx/sbin/nginx -V

        nginx version: nginx/1.18.0

        built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)

        built with OpenSSL 1.0.2k-fips 26 Jan 2017

        TLS SNI support enabled

        configure arguments: –with-http_stub_status_module –prefix=/usr/local/nginx –user=nginx –group=nginx –with-http_ssl_module –with-stream –add-module=/usr/local/ngx_http_geoip2_module

5. Laden Sie die neueste IP-Adressdatenbankdatei herunter

Nachdem das Modul erfolgreich installiert wurde, müssen Sie die Datenbank in Nginx angeben. Bei der Installation der Laufzeitbibliothek werden standardmäßig zwei Datenbanken installiert, die sich im Verzeichnis /usr/share/GeoIP/ befinden. Eine hat nur IPv4 und die andere enthält IPv4 und IPv6.

Melden Sie sich auf der Website www.maxmind.com an, erstellen Sie ein Konto und laden Sie die neuesten Bibliotheksdateien herunter. (Die Kontoerstellung wird nicht gezeigt) Klicken Sie auf der linken Seite auf „Dateien herunterladen“:

Wählen Sie das GeoLite2-Land aus und klicken Sie zum Herunterladen auf GZIP herunterladen:

Nach /usr/share/GeoIP/ hochladen und dekomprimieren:

# cd /usr/share/GeoIP/
# ll
total 69612
lrwxrwxrwx. 1 root root       17 Mar  7  2019 GeoIP.dat -> GeoIP-initial.dat
-rw-r--r--. 1 root root  1242574 Oct 30  2018 GeoIP-initial.dat
lrwxrwxrwx. 1 root root       19 Mar  7  2019 GeoIPv6.dat -> GeoIPv6-initial.dat
-rw-r--r--. 1 root root  2322773 Oct 30  2018 GeoIPv6-initial.dat
-rw-r--r--  1 root root  3981623 Aug 12 02:37 GeoLite2-Country.mmdb

6. Konfigurieren Sie die Nginx-Konfigurationsdatei

Sichern Sie die Konfigurationsdatei, bevor Sie Folgendes ändern:

# cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf-bak
# vim /usr/local/nginx/conf/nginx.conf

Fügen Sie ein paar Zeilen zu http hinzu, um den Speicherort der Datenbankdatei zu definieren:

geoip2 /usr/share/GeoIP/GeoLite2-City.mmdb {
        auto_reload 5m;
        $geoip2_data_country_code country iso_code;
        }
        map $geoip2_data_country_code $allowed_country {
default yes;
        CN no;
        }

Fügen Sie Bedingungen unter Standort im Server hinzu. Wenn es sich bei der IP um eine fremde IP handelt, führen Sie die folgende Rückgabeaktion aus. Ich habe hier 3 Typen definiert und zwei davon kommentiert.

Wenn es sich bei der Zugriffs-IP um eine fremde IP handelt, geben Sie 404 direkt zurück:

Überprüfen Sie nach der Änderung die Konfigurationsdatei und laden Sie Nginx neu:

# /usr/local/nginx/sbin/nginx -t
# /usr/local/nginx/sbin/nginx -s reload

7. Überprüfung des Probetests

Verwenden Sie den Server des ausländischen Knotens, um auf die Website zuzugreifen. Hier stammt meine IP aus Südkorea:

Bild

Sie können sehen, dass beim Besuch der Website der Fehler 404 Not Found gemeldet wird:

Bild

Schauen wir uns noch einmal das Zugriffsprotokoll von Nginx an:

“13.125.1.194 – – [14/Aug/2020:16:15:51 +0800] “GET /favicon.ico HTTP/1.1” 404 548 “https://www.fxkjnj.com/” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36”

Bild

Zu diesem Zeitpunkt verwenden wir Nginx, um den Zugriff fremder IP-Adressen auf die Website zu verhindern, und das ist vorbei

Guess you like

Origin blog.csdn.net/agonie201218/article/details/131640402