Der Tunnel kommt hoch, die Anmeldung gelingt, und jeder Host im Netz antwortet. Das ist kein kaputtes VPN; das ist ein VPN ohne Berechtigungsmodell. RouterOS authentifiziert das Konto und leitet seine Pakete danach wie die aller anderen weiter, also muss die Firewall die Grenze liefern. Diese Grenze hinzuzufügen, ohne die Anmeldung zu brechen, ist die ganze Arbeit.

Authentifizierung endet, wo die Berechtigung beginnt

Sobald eine PPP-Sitzung steht, gelangen Pakete des Clients wie Verkehr von jeder anderen Schnittstelle in die forward-Kette. Ist die forward-Policy des Routers freizügig, erbt der Berater diese Freizügigkeit bei der Anmeldung. Das Konto trug nie einen Umfang, also gibt es am Konto nichts zu ändern. Das Regelwerk war für Mitarbeiter geschrieben, und die neue Sitzung schloss sich ihm einfach an.

Prüfen Sie, um welchen Pfad es in der Anfrage geht, bevor Sie etwas schreiben. Verkehr zu Hosts hinter dem Router durchläuft forward, während Verkehr zum Router selbst, einschließlich winbox und SSH, input durchläuft. Ein Umfang, der nur forward abdeckt, lässt das Gerät für denselben Client offen.

Beide Ketten brauchen eine Entscheidung, auch wenn die Entscheidung lautet, input geschlossen zu lassen. Diese Wahl gehört in die Zugriffsanfrage, nicht in einen nachträglichen Gedanken.

Binden Sie die Sitzung an eine benannte Liste

Ein PPP-Profil kann die Adresse, die es vergibt, beim Start der Sitzung in eine benannte Adressliste legen. Das macht aus einer flüchtigen Tunneladresse etwas, das die Firewall per Namen abgleichen kann, und der Eintrag verschwindet, wenn die Sitzung endet. Das Konto erbt den Umfang dann von seinem Profil statt von einer Regel, die eine Adresse fest verdrahtet.

Legen Sie zuerst das Profil an und binden Sie dann das Secret ausdrücklich daran. Ein Secret, das noch auf das Standardprofil zeigt, reproduziert das ursprüngliche Problem.

Benennen Sie Profil und Liste so, dass ihre Aufgabe offensichtlich ist, und kommentieren Sie beide mit der Referenz der Anfrage. Ein Profil kann mehrere Personen mit demselben Umfang bedienen, während die Liste weiterhin jede laufende Sitzung kennzeichnet. Das ist billiger zu prüfen als eine Regel pro Person.

/ppp profile add name=scoped-consultant remote-address=consultant-pool address-list=vpn-scoped-clients
/ppp secret add name=consultant password=... service=ovpn profile=scoped-consultant

Halten Sie den erlaubten Dienst in einer Liste fest

Legen Sie den erlaubten Server in seine eigene Adressliste, statt die Adresse in eine Filterregel einzubetten. Die Liste lässt sich prüfen, erweitern und kommentieren, und die Regel, die sie nutzt, ändert sich nicht, wenn der Server umzieht. Ein einzelner Eintrag wirkt übertrieben, bis der zweite Host auftaucht, was meistens passiert.

Gleichen Sie eine Liste ab, wenn die Adresse dynamisch oder lastverteilt ist, und gleichen Sie die Adresse direkt ab, wenn sie reserviert und stabil ist. Beide Varianten lesen sich klar, wenn der Kommentar Dienst und Eigentümer nennt.

Begrenzen Sie Protokoll und Port ebenso wie den Host. Ein Accept für einen Host ohne Portbeschränkung öffnet jeden Dienst, den dieser Host betreibt, was weiter reicht, als die meisten Zugriffsanfragen beabsichtigen. Der Port ist Teil der Berechtigung, kein Detail, das später ergänzt wird.

/ip firewall address-list add list=vpn-targets address=10.0.0.10 comment="consultant RDP target"

Ordnen Sie den Jump vor jedem breiten Accept an

Eine Jump-Regel schickt weitergeleiteten Verkehr aus der begrenzten Liste in eine private Kette, in der die gesamte Policy auf drei Zeilen passt. Die erste Regel akzeptiert das erlaubte Ziel und den Port, die letzte verwirft alles andere. Der Jump muss über jedem breiten Accept in forward stehen, denn ein früherer Accept bedeutet, dass der Jump nie läuft. Halten Sie den Accept für established und related vor dem Jump, damit Rückverkehr weiter fließt.

Prüfen Sie, dass keine fasttrack-Regel diesen Verkehr an der begrenzten Kette vorbeiführen kann. Fasttrack umgeht den Rest des Filterpfads, und eine begrenzte Sitzung, die fasttracked wird, ist überhaupt nicht begrenzt.

Wiederholen Sie die Entscheidung für die input-Kette, wenn die eigenen Dienste des Routers unerreichbar sein sollen. Ein Umfang, der weitergeleiteten Verkehr blockiert und winbox offen lässt, ist nur halb fertig.

/ip firewall filter
add chain=forward action=jump jump-target=scoped-vpn src-address-list=vpn-scoped-clients
add chain=scoped-vpn action=accept protocol=tcp dst-address-list=vpn-targets dst-port=3389
add chain=scoped-vpn action=drop

Prüfen Sie mit Zählern und Listenmitgliedschaft

Testen Sie vom Client aus den erlaubten Dienst und einen, der scheitern muss, und lesen Sie dann die Regelstatistik auf dem Router. Die Accept- und Drop-Zähler zeigen, welchen Pfad jedes Paket genommen hat, was der Client nicht sehen kann. Bestätigen Sie außerdem, dass die Adresse der laufenden Sitzung in der begrenzten Liste aufgetaucht ist.

Eine leere Liste bedeutet, dass das Konto auf einem anderen Profil liegt oder das Profil seine Adresslisten-Einstellung verloren hat. Ein steigender Drop-Zähler bei einem scheiternden erlaubten Dienst bedeutet, dass Ziel oder Port nicht zu dem passen, was der Client sendet.

Testen Sie denselben Dienst per Name und per Adresse, bevor Sie irgendetwas schließen. Ein Fehler bei der Namensauflösung sieht von der Clientseite genauso aus wie ein blockierter Port. Halten Sie dann Profil, beide Listen und den einzigen erlaubten Dienst in der Zugriffsanfrage fest, damit die nächste Prüfung vergleicht, statt zu rekonstruieren.

/ip firewall filter print stats where chain=scoped-vpn
/ip firewall address-list print where list=vpn-scoped-clients

Ähnliche Artikel