MikroTik VPN-gebruiker reikt te ver: beperk tot één host en één poort
Een PPP-profiel kan het toegewezen tunneladres in een adressenlijst zetten, en één jump-keten kan vóór de drop één host en poort toestaan.
De tunnel komt op, de aanmelding slaagt en elke host op het netwerk antwoordt. Dat is geen kapotte VPN; dat is een VPN zonder rechtenmodel. RouterOS authenticeert het account en routeert daarna de pakketten zoals die van iedereen, dus de firewall moet de grens leveren. Die grens toevoegen zonder de aanmelding te breken is het hele werk.
Authenticatie eindigt waar de toestemming begint
Zodra een PPP-sessie staat, komen pakketten van de client de forward-keten binnen als verkeer van welke andere interface dan ook. Als het forward-beleid van de router toegeeflijk is, erft de consultant die toegeeflijkheid bij het aanmelden. Het account droeg nooit een bereik, dus er valt niets aan het account te wijzigen. De regelset was voor medewerkers geschreven en de nieuwe sessie sloot zich er gewoon bij aan.
Controleer om welk pad het verzoek gaat voordat u iets schrijft. Verkeer naar hosts achter de router gaat door forward, terwijl verkeer naar de router zelf, inclusief winbox en SSH, door input gaat. Een bereik dat alleen forward dekt, laat het apparaat open voor dezelfde client.
Beide ketens vragen een beslissing, ook als de beslissing is input dicht te laten. Die keuze hoort in het toegangsverzoek, niet in een latere gedachte.
Koppel de sessie aan een benoemde lijst
Een PPP-profiel kan het adres dat het uitgeeft bij de start van de sessie in een benoemde adressenlijst zetten. Dat maakt van een tijdelijk tunneladres iets dat de firewall op naam kan matchen, en de vermelding verdwijnt als de sessie eindigt. Het account erft het bereik dan van zijn profiel in plaats van van een regel die een adres hard codeert.
Maak eerst het profiel aan en bind het secret er daarna expliciet aan. Een secret dat nog naar het standaardprofiel wijst, reproduceert het oorspronkelijke probleem.
Noem het profiel en de lijst zo dat hun taken duidelijk zijn, en becommentarieer beide met de referentie van het verzoek. Eén profiel kan meerdere mensen met hetzelfde bereik bedienen, terwijl de lijst nog steeds elke levende sessie identificeert. Dat is goedkoper te beoordelen dan een regel per persoon.
/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
Leg de toegestane dienst in één lijst vast
Zet de toegestane server in zijn eigen adressenlijst in plaats van het adres in een filterregel in te bakken. De lijst kan worden geauditeerd, uitgebreid en becommentarieerd, en de regel die hem gebruikt verandert niet als de server verhuist. Eén vermelding lijkt overdreven tot de tweede host komt, wat meestal gebeurt.
Match een lijst als het adres dynamisch of verdeeld is, en match het adres rechtstreeks als het gereserveerd en stabiel is. Beide keuzes lezen helder als de opmerking de dienst en de eigenaar noemt.
Beperk het protocol en de poort net als de host. Een accept voor een host zonder poortbeperking opent elke dienst die die host draait, wat breder is dan de meeste toegangsverzoeken bedoelen. De poort is deel van de toestemming, geen detail dat later wordt toegevoegd.
/ip firewall address-list add list=vpn-targets address=10.0.0.10 comment="consultant RDP target"
Plaats de jump vóór elke brede accept
Een jump-regel stuurt doorgestuurd verkeer van de beperkte lijst naar een privé-keten waarin het hele beleid in drie regels past. De eerste regel accepteert de toegestane bestemming en poort, en de laatste regel verwijdert al het andere. De jump moet boven elke brede accept in forward staan, want een eerdere accept betekent dat de jump nooit draait. Houd de accept voor established en related vóór de jump zodat retourverkeer blijft stromen.
Controleer dat geen fasttrack-regel dit verkeer langs de beperkte keten kan leiden. Fasttrack omzeilt de rest van het filterpad, en een beperkte sessie die wordt gefasttrackt is helemaal niet beperkt.
Herhaal de beslissing voor de input-keten als de eigen diensten van de router onbereikbaar moeten zijn. Een bereik dat doorgestuurd verkeer blokkeert en winbox open laat, is maar half af.
/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
Verifieer met tellers en lijstlidmaatschap
Test vanaf de client de toegestane dienst en een die moet mislukken, en lees daarna de regelstatistiek op de router. De accept- en drop-tellers laten zien welk pad elk pakket nam, wat de client niet kan zien. Bevestig ook dat het adres van de levende sessie in de beperkte lijst verscheen.
Een lege lijst betekent dat het account op een ander profiel staat of dat het profiel zijn adressenlijstinstelling kwijt is. Een stijgende drop-teller bij een mislukkende toegestane dienst betekent dat de bestemming of poort niet overeenkomt met wat de client stuurt.
Test dezelfde dienst op naam en op adres voordat u iets concludeert. Een fout in naamresolutie ziet er vanaf de client precies uit als een geblokkeerde poort. Leg daarna het profiel, beide lijsten en de enige toegestane dienst vast in het toegangsverzoek, zodat de volgende beoordeling vergelijkt in plaats van reconstrueert.
/ip firewall filter print stats where chain=scoped-vpn
/ip firewall address-list print where list=vpn-scoped-clients