Reverse proxy
Je kunt de NAS ook instellen als een omgekeerde proxy server die verzoeken van het internet naar de juiste apparaten of poorten overdraagt. Dit is bijvoorbeeld handig om een subdomein naam aan te maken: subdomein.domein.nl bijvoorbeeld. Vaak zul je merken dat de toegang tot de muziek of foto’s van de NAS van een PC die achter een firewall staat, niet mogelijk is. De toegang tot de domeinnaam met daarachter een poortnummer (bijvoorbeeld domeinnaam.nl:5567) wordt geblokkeerd.
Een reverse proxy is dus een soort proxy server die de resources op verzoek van een klant ophaalt van een bepaalde server. Deze resources worden aan de klant teruggeleverd alsof ze van de proxy server zelf afkomstig zijn. Waar een proxy server (klik voor meer uitleg) functioneert als een intermediair om contact te leggen met welke webserver dan ook, fungeert een reverse proxy als een intermediair voor de specifieke servers of apparaten voor welke klant dan ook.
Als je dus net zoals ik ook vanuit je werkplek bij je muziek wilt komen vanaf de PC op kantoor, dan kun je de reverse proxy gebruiken om het verkeer van buiten naar de juiste bestemming te leiden op de NAS. Stel dat je een subdomeinnaam wilt maken die als volgt luidt: muziek.domeinnaam.nl.
- Breid het certificaat (voor meer uitleg over het installeren van een certificaat, klik hier) uit met de subdomeinnaam of maak een nieuw certificaat aan met daarin de bedoelde subdomeinnaam.
- Stel de reverse proxy in. Vul bij poortnaam de subdomeinnaam in gevolgd door domeinnaam.nl. Toegangscontroleprofiel biedt de mogelijkheid om alleen bepaalde IP adressen toegang te geven tot de reverse proxy. De hostnaam is gelijk aan het interne IP adres van de NAS. De poort bevat het poortnummer waarop de betreffende applicatie (muziek, video, etc.) bereikbaar is.
- De samenvatting van de reverse proxy ziet er dan als volgt uit:
- Zorg voor een strak vastgelegd toegangscontrole. Je wilt dat alleen maar specifieke IP adressen toegang tot de NAS verschaft wordt. Vanzelfsprekend je eigen IP adres thuis maar bijvoorbeeld ook dat van je werkgever.
Bij sommige applicaties is het niet duidelijk over welke poort de toepassing kan worden bereikt of is de toepassing niet vanuit een gereguleerde website (bv op kantoor) te bereiken omdat het domein als onveilig wordt aangemerkt. Een voorbeeld is het adres xxx.synology.me. Dit domein kent geen categorie indeling of wordt als onveilig aangemerkt omdat het certificaat door de NAS zelf uitgegeven wordt. En niet door een certificaat autoriteit die de echtheid en bijbehorend domein van het certificaat waarmerkt. In mijn geval kon ik de surveillance station vanaf de NAS met een synology.me adres (via ddns) niet bereiken. Dit kun je oplossen met behulp van de reverse proxy server. Stel eerst in het toepassingsportaal (configuratiescherm) in onder welk poortnummer de surveillance station kan worden bereikt. Dit nummer koppel je vervolgens, zoals hierboven omschreven, aan het doeladres (IP adres van de surveillance station plus het poortnummer). Het bron adres kan bijvoorbeeld zijn: camera.domeinnaam.nl:443.
Onvolkomenheden van Synology (DSM 7.0) bij implementatie
HSTS headers blijven niet plakken bij opstart van de NAS
De implementatie van de HSTS headers is nog niet foutloos. Naar blijkt zit er in het operating system DSM7 nog een bug die ertoe leidt dat de aangevinkte HSTS headers niet worden opgeslagen bij herstart van de NAS. Test dit voor jezelf wanneer je deze instelt. In het bericht over enkele test-scripts kun je de headers voor deze site afdrukken. Daaruit valt af te leiden dat de HSTS headers juist zijn ingesteld. Maar zoals gezegd: na herstart dus niet meer.
Met deze work-around kun je een taak instellen die bij opstart de HSTS headers opnieuw toepast. Zie het bericht over taakinstellingen hoe je een taak kunt instellen.
Onderstaande opdracht voer je in in het veld ‘door de gebruiker gedefinieerd script’:
synow3tool --gen-all; systemctl reload nginx
Aangepaste kopteksten worden ten dele geconfigureerd
Het is mogelijk om de kopteksten (headers) van de reverse proxy aan te passen. Bijvoorbeeld om de beelden van de IP-camera’s die via Surveillance Station worden opgehaald en via je telefoon te zien zijn, kun je het beste twee aanpassingen doen in de headers. Deze zorgen ervoor dat de http verbinding wordt opgewaardeerd naar een websocket verbinding. Hiermee blijft de verbinding open en hoeven niet opnieuw verzoeken via http te worden gedaan voor aanvullende informatie. Immers, de beelden worden continu ververst. In dit bericht wordt het verschil tussen http en websocket duidelijk uitgelegd.
De headers ‘Upgrade’ en ‘Connection’ met de waarde $http_upgrade respectievelijk $connection_upgrade zorgen ervoor dat de http verbinding naar websocket wordt omgezet. Deze omzetting gaat goed in DSM7 en ook bij opstart van de NAS blijven de headers goed geconfigureerd. Dat lukt niet met andere headers, zoals in het het opvoeren van bijvoorbeeld een Cross-Origin-Embedder-Policy header. Niet dat ik deze nodig heb, maar bedoeld om te kijken of het werkt. Deze laatste twee headers worden niet door DSM7 overgenomen. Een foutmelding hierover heb ik aan Synology doorgegeven.
De Content Security Policy headers kunnen beter
De beveiliging in het systeem kan met http Content Security Policy (CSP) headers worden verbeterd. Dit verbetert de systeembescherming tegen XSS-aanvallen (cross-site scripting) door uitsluitend gegevens van vertrouwde bronnen toe te staan en de uitvoering van inline-script te beperken. Met het aanvinken van de optie ‘Verbeter de beveiliging met http CSP headers’ voegt DSM7 de volgende headers toe aan de sites van de NAS die via het toepassingsportaal zijn ingesteld:
base-uri 'self'; connect-src data: wss: *; default-src 'self' 'unsafe-eval' data: blob: https://*.synology.com https://www.synology.cn/ https://help.synology.cn/; font-src 'self' data: https://*.googleapis.com https://*.gstatic.com https://*.gstatic.com; form-action 'self'; frame-ancestors 'self' https://gofile.me http://gofile.me; frame-src 'self' data: blob: https://*.adagia.eu https://*.synology.com https://*.synology.cn http://*.synology.com https://*.synology.com https://help.synology.cn; script-src 'self' 'unsafe-eval' data: blob: https://*.synology.com https://www.synology.cn/ https://help.synology.cn https://*.google.com https://*.googleapis.com https://*.gstatic.com https://*.google.com https://*.googleapis.com https://*.baidu.com https://*.bdstatic.com https://*.bdimg.com; style-src 'self' 'unsafe-inline' https://*.googleapis.com https://*.googleapis.com https://api.map.baidu.com;
Wat in dit rijtje ontbreekt, is de CSP instructie upgrade-insecure-requests. Deze instructie geeft aan user agents zoals een browser aan om alle onveilige URL’s (via http) te vervangen door veilige URL’s (via https). Dit voorkomt dat onveilige URL’s geladen worden. Nu denk je wellicht dat via een reverse proxy instelling met enkel https en HSTS de betreffende reverse proxy alleen maar https laadt, maar niets is minder waar.
In mijn mailbox, via reverse proxy bereikbaar onder post.adagia.eu, worden mails geladen die http URL’s bevatten. Denk aan mails met nieuwsberichten die zogenaamde mixed-content bevatten. In deze berichten zijn er URL’s met onveilige http adressen aanwezig. Met behulp van de instructie upgrade-insecure-requests vraagt de browser automatisch alleen veilige https URL’s aan. Het ‘slotje’ van de site geeft dit ook aan door middel van een groen of grijs symbool. Alle inhoud wordt over een veilige https verbinding geladen.
Het instellen van de instructie upgrade-insecure-requests kan niet via DSM7 maar moet via inloggen op het besturingssysteem gebeuren. Open het bestand rule-default in de map /usr/syno/share/csp/rule-default en voeg de instructie
"upgrade-insecure-requests": [""],
toe aan het einde van het bestand maar nog voor het haakje }.
Herstart de NAS (of herstart de nginx server) en de wijzigingen worden zichtbaar. Check bijvoorbeeld securityheaders.com of controleer de headers in de developer console van de web browser.
De proxy server biedt veiligheid
Samengevat: de proxy server is een handig hulpmiddel om de bereikbaarheid van je toepassingen of apparaten (zoals camera’s) te verbeteren. Het is een manier om applicaties met een intern IP-adres via een externe domeinnaam en https bereikbaar te maken.
Succes met het instellen van de reverse proxy server!