Wie verwende ich eine Nginx-Zulassungsliste per dynamischem DNS anstelle einer IP-Adresse?

Wie verwende ich eine Nginx-Zulassungsliste per dynamischem DNS anstelle einer IP-Adresse?

Ich betreibe einen Nginx-Webserver unter Ubuntu 20.04. In meiner virtuellen Host-Konfigurationsdatei habe ich eine Allow/Deny-Anweisung festgelegt, um allen IPs außer der angegebenen IP den Zugriff auf eine URL zu verweigern. Meine virtuellen Host-Einstellungen sehen folgendermaßen aus:

server {
    # Restrict access to LAN & Personal IP's
    allow 127.0.0.1; # LoopBack IP Address
    allow 192.168.1.0/24; # LAN IP Address
    allow 123.456.789.102/32; # Home Public IP Address
    allow 111.222.333.444/32; # Work Dynamic IP Address
    deny all;
    error_page 403 =444;
...

Das Problem dabei ist, dass meine „Dynamische IP-Adresse für die Arbeit“ tatsächlich dynamisch ist und sich häufig ändert. Daher kann ich einige Tage lang von meiner Arbeits-IP-Adresse aus auf die Webseite zugreifen 111.222.333.444/32. Wenn sich die dynamische Arbeits-IP-Adresse dann jedoch in ändert 555.777.888.999/32, kann ich von der Arbeit aus nicht mehr auf die Webseite zugreifen, da sich die öffentliche IP-Adresse meiner Arbeit geändert hat.

Ab sofort habe ich meine Arbeits-IP-Adresse bei einem Dynamic DNS-Anbieter eingerichtet. Meine dynamische DNS-Adresse für die Arbeit lautet also dansworkip.ddnsfree.com. Ich möchte eine dynamische DNS-Hostadresse in die Zulassungsliste von Nginx aufnehmen, sodass Nginx bei einer Änderung der öffentlichen IP-Adresse meiner Arbeit die neue IP-Adresse aus der Domäne sucht dansworkip.ddnsfree.comund in die Zulassungsanweisung einfügt.

Ich habe so etwas versucht:

server {
    # Restrict access to LAN & Personal IP's
    allow 127.0.0.1; # LoopBack IP Address
    allow 192.168.1.0/24; # LAN IP Address
    allow 123.456.789.102/32; # Home Public IP Address
    allow dansworkip.ddnsfree.com; # Work Dynamic IP Address
    deny all;
    error_page 403 =444;
...

Aber wenn ich diese Konfiguration versuche, startet Nginx nicht und ich erhalte die folgenden Fehler in meinem Nginx-Protokoll:

[emerg] 10269#10269: invalid parameter "dansworkip.ddnsfree.com" in /etc/nginx/conf.d/www.mysite.com

Meine Frage ist, wie ich dynamisches DNS in Nginx integrieren kann, sodass Nginx die IP-Adresse der zulässigen Domäne nachschlägt und die IP-Adresse meines dynamischen DNS-Hostnamens auf die Whitelist setzt?

Antwort1

Die Verwendung einer IP-Adresse als Authentifizierungstoken wird allgemein als schlechte Praxis angesehen. Nginx verfügt nicht über die Funktionalität, um das zu erreichen, was Sie verlangen. Wenn ich wirklich eine Lösung für das von Ihnen angesprochene Problem finden müsste, würde ich mich für die in den Kommentaren vorgeschlagene Lösung von Alexey entscheiden. Nginx verfügt jedoch über eine sehr nützliche Authentifizierungs-/Autorisierungsfunktion, mit der Sie Folgendes tun können:die Entscheidung abgebenzu einer Webseite Ihrer Wahl/Ihres Designs.

Dort können Sie alle Authentifizierungsregeln/-mechanismen verwenden, die Sie codieren können. Sie können Sitzungsdaten verwenden (sofern die von Ihnen ausgewählten Tools dies unterstützen), aber bedenken Sie, ob eine Sitzungskennung mit der von der Anwendung implementierten Kennung in Konflikt geraten könnte, für die Sie ein Gateway bereitstellen.

zB in PHP,

<?php
$ipdir="/var/www/access";
$TTL=600;

function deny_access() 
{
   header('HTTP/1.0 403 Forbidden');
   exit;
}

function permit_access()
{
   print "";
   exit;
}

function refresh_config()
{
   // replace files in "/allow", delete aged files from "/deny"
   // then update timestamp on control file.
   // Implementation left as an exercise for the reader
}

if (time() - filemtime($ipdir . "/control.file") > $TTL) {
    refresh_config();
} 
if (file_exists($ipdir . "/deny", $_SERVER['REMOTE_ADDR'])) {
    deny_access();
} else if (file_exists($ipdir . "/allow", $_SERVER['REMOTE_ADDR'])) {
    permit_access();
} else {

}

Ein alternativer Ansatz (der aufgrund mehrerer Faktoren effizienter sein kann, jedoch auf IP-Adressen beschränkt ist) besteht darin,die Suche in nginx selbst- mit der Pflege der Liste extern.

verwandte Informationen