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:
Sie können sehen, dass beim Besuch der Website der Fehler 404 Not Found gemeldet wird:
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”
Zu diesem Zeitpunkt verwenden wir Nginx, um den Zugriff fremder IP-Adressen auf die Website zu verhindern, und das ist vorbei