Een eigen proxyserver voor extra beveiliging

Een netwerk is zo veilig als de zwakste schakel. In geval van een uitgebreid netwerk waarbij bepaalde apparaten buiten het netwerk toegankelijk moeten zijn – of een Smart Home natuurlijk – is het soms noodzakelijk bepaalde poorten te openen. En dat zijn weer extra lekjes. Dat moet anders kunnen! We gaan kijken naar een zogenaamde Proxy server.

Als we heel simpel kijken naar een proxy, dan gaat het om een mini-servertje – in veel gevallen een nginx-server – die als een soort poortwachter dienst doet. Stel u wilt via ‘mijndienst.mijnurl.url’ naar de smart home hub gaan. Bij binnenkomst zal de router het verzoek doorgeven naar de proxy. De proxy kijkt vervolgens naar de url en ziet dat het naar de smart home hub moet. Het legt de verbinding en u krijgt op magische wijze de smart home hub op uw scherm. Top!

Kan een router dat dan niet? Nee. Port forwarding kijkt alleen naar de poort. Niet naar de url. Dus als u meerdere urls hebt die in sommige gevallen naar dezelfde poort gaan – denk aan een web-server met meerdere domeinen – dan houdt het al direct op.

Proxy!

En hier komt dus de handigheid van een proxy om de hoek. Een proxy kijkt namelijk naar meer dan de poort. Het kijkt naar een url. En op basis daarvan zet het een verzoek door naar de juiste server, dienst, poort, et cetera. U kunt dat zien in de bovenstaande screenshots.

De mogelijkheden hiermee zijn natuurlijk eindeloos. U kunt via een domein – www.mijndomein.url – waaraan u subdomeinen koppelt – mijnsmarthome.mijndomein.url – naar apparaten in huis verwijzen. Op die wijze hoeft u géén poorten open te zetten, behalve de twee web-poorten naar de nginx proxy: 80 en 443. Een stuk veiliger dan talloze poorten openen voor extern toegang!

Docker

Maar voordat we op de complete configuratie ingaan, eerst even iets over de installatie. Een nginx proxy is in heel veel gevallen gratis te installeren. Het is gewoon onderdeel van menig webserver. Maar eerlijk gezegd is een standaard nginx proxy nogal complex en bijzonder gebruiksonvriendelijk. Tenzij u heel erg thuis bent in Linux en webservers.

Een prettig alternatief is de Nginx Proxy Manager. Deze komt als Docker waardoor installatie in veel gevallen vrij goed te doen is. Op onze Unraid-server installeert het zichzelf bijvoorbeeld. Het is ook mogelijk de docker te installeren op een Plesk-server. Ook Ubuntu accepteert dockers. We raden u aan om de documentatie bij de Docker goed te lezen.

Als de docker geïnstalleerd is, hoeft u in de router alleen maar poort 80 en 443 te forwarden naar het ip-adres van de Nginx Proxy. We raden met klem aan het ip-adres vast te zetten en te reserveren.

Een domein

Als u de Nginx Proxy hebt geïnstalleerd, is het tijd om een domeinnaam aan te vragen die u kunt inzetten. Verzin iets leuks en registreer de domeinnaam bij een betrouwbare provider die het toelaat om eigen Nameservers in te geven. Leaseweb bijvoorbeeld. TransIP is ook een goede.

Cloudflare

De reden dat we eigen nameservers willen invoeren, is vanwege Cloudflare. Dit is een gratis (!) dienst die DNS-beheer extreem gemakkelijk maakt én ook nog extra beveiliging biedt. We kunnen een complete serie over Cloudflare schrijven. Wellicht doen we dat nog wel een keer.

Om Cloudflare te gebruiken moet u de Cloudflare Nameservers gebruiken in uw domein-instellingen. Cloudflare begeleid u bij dit proces.

DNS-beheer wil zeggen dat u een domeinnaam naar een bepaald (extern) IP-adres stuurt. Een soort port-forwarding op domeinnaam-niveau. Een voorbeeld:

U ziet dat u een domeinnaam ingeeft en deze vervolgens naar een ip-adres moet sturen. Het ip-adres wat u daar moet invullen is het externe (internet) ip-adres van uw internetaansluiting. Deze kunt u via https://whatismyipaddress.com/ achterhalen. Wij hebben een virtueel domein en ip-adres ingegeven. De Proxy Status (rood lijntje) wil zeggen: gebruikt u Cloudflare diensten, of wilt u alleen maar DNS gebruiken.

We raden aan in eerste instantie de Cloudflare Proxy uit te zetten. U kunt er later wat mee spelen, maar wees gewaarschuwd: u kunt er gekke problemen door krijgen als u niet weet wat u precies doet. Caching, Firewalls en Web Application Firewalls zijn top, maar kunnen soms ook dingen stuk maken.

Via Cloudflare kunt u ook talloze subdomeinen aanmaken. Wij hebben bijvoorbeeld een paar subdomeinen op kantoor gemaakt voor de diverse diensten. Denk aan: unraid, plex, plesk, etc. Een subdomein aanmaken gaat ook via een A-record. Dat ziet er dan als volgt uit:

Hosts opzetten

De Nginx proxy manager is geïnstalleerd (als docker), u hebt een domeinnaam aangevraagd en deze via Cloudflare-DNS verwezen naar het externe IP-adres van uw internetaansluiting. Top. Nu tijd om de eerste hosts aan te maken.

Een nieuwe host aanmaken – of in dit geval meer een soort doorverwijzing maken – gaat vrij snel. U voert simpelweg het domein in – mijnservice.mijndomein.url – en verwijst deze naar het interne apparaat of de interne pc waar de dienst op draait. Dat ziet er dan bijvoorbeeld zo uit:

Zoals u ziet, kunt u ook SSL-versleuteling gebruiken. Dat is super, want op die manier is het verkeer van en naar de dienst versleuteld. Nginx Proxy Manager gebruikt Let’s Encrypt voor de certificaten. Updaten gaat automatisch. Super handig!

Als u de Host opslaat, moet deze bereikbaar zijn vanaf internet. Test dit bij voorkeur met een apparaat buiten het lokale netwerk. Dit in verband met eventuele NAT rebind beveiliging, waardoor u niet met een ‘extern adres’ terug kunt naar een intern ip-adres.

Streams

Streams zijn handig als u meerdere poorten moet openen op één adres. Als bijvoorbeeld ‘mijnservice.mijndomein.url’ verwijst naar 192.168.0.99 maar moet werken op meerdere poorten. In dat geval kunt u met streams extra poorten verwijzen naar die host. Het is géén poort forwarding, omdat alles alsnog via de proxy verloopt op poort 80 of 443. Maar de proxy ziet wél een binnenkomend verzoek op een bepaalde poort en zet die alsnog door.

Zoals u ziet gebruiken we een paar streams om bepaalde services draaiend te houden:

Redirects

Een redirect is een doorverwijzing. Het is anders in die zin dat u niet verwijst naar een internet host – kan ook – maar vooral naar een ander domein. Op die manier zijn best interessante dingen op te zetten. Het zal natuurlijk per situatie verschillen. Wij hebben het bijvoorbeeld gebruikt om een webserver te kunnen benaderen via onze proxy mét SSL. Dat was via een directe route wat lastiger. En waarom moeilijk doen, als het gemakkelijk kan!

Bonus: DuckDNS

De meeste internetaansluitingen voor consumenten hebben géén vast IP-adres. Dat maakt het ongelooflijk lastig om een server op te zetten en externe diensten op een handige wijze benaderbaar te maken. Immers: een wijziging van het IP-adres zorgt ervoor dat niets meer werkt!

Gelukkig zijn er betrouwbare én handige diensten die dit bijhouden: Dynamic DNS. Deze services koppelen een gemakkelijk te onthouden adres – bijvoorbeeld: mijnadres.dyndns.url – aan uw ip-adres. Wijzigt uw ip-adres, dan nemen de diensten dit over. Uw services blijven daardoor altijd up!

Wij gebruiken DuckDNS voor onze set-up. Deze dienst is betrouwbaar, gratis én levert handige tools om zaken snel op te zetten. Ook DuckDNS heeft een kleine docker bijvoorbeeld. Ook zijn er desktop-applicaties beschikbaar. Kortom: voor iedereen is er wel iets.

Om slim gebruik te maken van DuckDNS kunt u het Duckdns-adres in Cloudflare gebruiken, in plaats van het externe ip-adres. Om dat te doen, maakt u geen A-record aan, maar een CName.

Afrondend

Een eigen proxyserver opzetten zal de eerste keer niet in 10 minuutjes gebeuren. Wij hebben ook even wat gepuzzeld. Maar uiteindelijk werkt het supereenvoudig. En het is ongekend veel veiliger, omdat er niet talloze poorten open staan. Hackers die een poortscan doen, zullen niet veel meer zien. En dat is prettig.

Daarbij kunt u met een vast adres uw services benaderen. Ook nog compleet versleuteld. En dat is ook weer veel handiger dan adressen – die vaak ook nog veranderen – intikken. Kortom: een win / win!

Mocht u vragen hebben, mail ons gerust.

Happy Proxy’ing!

Verwante Artikelen

Reacties

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *