Een VPN-dienst is bereikbaar vanaf waar zijn socket gebonden is en zijn firewall het toestaat. Dat zijn twee afzonderlijke beslissingen, en mensen nemen er meestal maar één. De werkelijke listener lezen kost tien seconden en beslecht een vraag die gissen niet kan. Begin daar en wijzig dan één beheersmaatregel per keer.

Alles hieronder veronderstelt dat je opdrachten op de host met root of sudo kunt uitvoeren.

Lees de sockets voordat je iets wijzigt

Op Linux toont ss -lunp UDP-listeners met hun lokale adres, poort en proces, en ss -ltnp doet hetzelfde voor TCP. Zoek de poort van de VPN en lees de adreskolom aandachtig. 0.0.0.0:51820 en [::]:51820 betekenen elke interface, terwijl 10.0.0.5:51820 één adres op één interface betekent. De ss-handleiding documenteert de kolommen als de uitvoer onbekend is. Ontbreekt de procesnaam, voer dan dezelfde opdracht met sudo uit, want de eigenaarskolom vereist privileges.

Schrijf het adres op. Het is het feit waarvan de rest van deze handleiding afhangt.

Bind aan een adres, niet aan een wens

OpenVPN bindt de listener met zijn local-richtlijn aan een specifiek adres, en dat is de ondersteunde manier om hem op procesniveau te beperken. Niet elke implementatie biedt een equivalent, en een protocol zonder bindoptie kan zo niet worden vernauwd. Als de jouwe er geen heeft, is de firewall je enige beheersmaatregel, en de uitrolnotities zouden dat duidelijk moeten zeggen. Bind op een host met meerdere adressen aan het adres dat naar de tunnel kijkt; aan een zwevend adres binden is meestal een fout.

Een dienst die een adreswijziging moet overleven heeft een plan nodig voor de verouderde binding, niet alleen een configuratieregel.

Controleer de adresfamilie apart

IPv4 en IPv6 zijn afzonderlijke sockets. Een proces dat aan 0.0.0.0 is gebonden kan nog steeds IPv6 accepteren via een dual-stack-socket, of niet, afhankelijk van de socketoptie en de platformstandaard. Alleen de IPv4-regel lezen heeft meer dan één uitrolbeoordeling misleid. Vermeld beide families voordat je concludeert dat de listener smal is.

Als IPv6 geen deel van het ontwerp is, is het schoner om het op socketniveau uit te schakelen dan te hopen dat de firewall het dekt. Dat is een beleidsbeslissing, dus leg haar vast samen met de overige interfacekeuzes.

Leg de firewall over de binding

Een smalle binding vervangt geen firewallregel, en een firewallregel vernauwt geen wildcard-binding. Gebruik beide: bind waar de implementatie het ondersteunt, en sta de poort daarna alleen toe vanaf de bronnen die hem zouden moeten bereiken. Cloudbeveiligingsgroepen staan vóór de firewall van de host, dus controleer beide wanneer het pad een VPC-grens overschrijdt. De effectieve regel is de doorsnede van de twee, en elke laag kan alleen bereikbaarheid wegnemen.

Test vanaf een toegestane bron en vanaf een bewust uitgesloten bron. Een verbinding vanaf localhost bewijst niets over de openbare grens.

Leg vast wat je hebt gekozen

Schrijf het gebonden adres op, de interface die het bezit, de firewallregel en het doel ervan. Een vervangende NIC of een opnieuw toegewezen cloudadres kan de blootstelling veranderen zonder dat iemand het profiel bewerkt. Dateer de notitie, want cloudadressen verschuiven tussen beoordelingen vaker dan mensen verwachten.

Die notitie maakt de volgende beoordeling een vergelijking in plaats van een archeologieproject.

Gerelateerde artikelen