Publicatie via DMZ

API toegang vanuit internet configureren

Versie 1.2 — Januari 2026

Inhoudsopgave

  1. Overzicht
  2. Architectuur
  3. Vereisten
  4. Stap 1: IIS Modules Installeren
  5. Stap 2: ARR Configureren
  6. Stap 3: Website Aanmaken
  7. Stap 4: URL Rewrite Configureren
  8. Stap 5: Server Variables Toestaan
  9. Stap 6: Testen
  10. Beveiliging
  11. Probleemoplossing

1. Overzicht

Deze handleiding beschrijft hoe u SQLio API's veilig toegankelijk maakt vanaf internet of buiten uw netwerk. Dit wordt gerealiseerd door een reverse proxy in de DMZ te plaatsen die verkeer doorstuurt naar de interne SQLio server.

Wat wordt gepubliceerd:

Wat wordt NIET gepubliceerd:

2. Architectuur

Het onderstaande schema toont de aanbevolen netwerkarchitectuur:

443 5000 Internet Externe Firewall DMZ Reverse Proxy Interne Firewall SQL io SQL Server INTERN

Verkeersstromen

Van Naar Poort Protocol
Internet Externe Firewall 443 HTTPS
Externe Firewall DMZ (Reverse Proxy) 443 HTTPS
DMZ (Reverse Proxy) Interne Firewall 5000 HTTP
Interne Firewall SQLio Server 5000 HTTP

Gepubliceerde Paden

Pad Beschrijving Authenticatie
/api-login Login pagina voor externe gebruikers Geen (publiek)
/api-docs/* Swagger/OpenAPI documentatie Swagger login cookie
/api/* REST API endpoints Basic Auth + API Key
/swagger/* Swagger JSON specificaties Swagger login cookie

3. Vereisten

DMZ Server

Firewall Regels

Firewall Richting Bron Doel Poort
Extern Inbound Any (Internet) DMZ Server 443
Intern Inbound DMZ Server SQLio Server 5000
Belangrijk: Open alleen poort 5000 voor verkeer vanaf de DMZ server, niet vanaf andere bronnen. Dit beperkt het aanvalsoppervlak.

4. Stap 1: IIS Modules Installeren

Installeer de benodigde IIS modules op de DMZ server:

Application Request Routing (ARR)

  1. Download ARR van https://www.iis.net/downloads/microsoft/application-request-routing
  2. Voer de installer uit
  3. Herstart IIS:
iisreset

URL Rewrite

  1. Download URL Rewrite van https://www.iis.net/downloads/microsoft/url-rewrite
  2. Voer de installer uit
  3. Herstart IIS:
iisreset

5. Stap 2: ARR Configureren

ARR Proxy Inschakelen

  1. Open IIS Manager
  2. Selecteer de server (bovenste niveau)
  3. Dubbelklik op Application Request Routing Cache
  4. Klik rechts op Server Proxy Settings
  5. Vink Enable proxy aan
  6. Klik op Apply

6. Stap 3: Website Aanmaken

Website voor API

  1. In IIS Manager, rechtsklik op Sites → Add Website
  2. Configureer:
Veld Waarde
Site name SQLio-API
Physical path C:\inetpub\wwwroot\sqlio-api
Binding Type https
Port 443
Host name api.uwdomein.nl
SSL certificate Uw publieke SSL-certificaat

Maak de fysieke map aan:

mkdir C:\inetpub\wwwroot\sqlio-api

7. Stap 4: URL Rewrite Configureren

Maak een web.config bestand aan in C:\inetpub\wwwroot\sqlio-api:

Let op: Vervang SQLIO-SERVER door de hostname of het IP-adres van uw interne SQLio server.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <!-- API Login pagina doorsturen -->
                <rule name="SQLio API Login" stopProcessing="true">
                    <match url="^api-login$" />
                    <action type="Rewrite" 
                            url="http://SQLIO-SERVER:5000/api-login" />
                    <serverVariables>
                        <set name="HTTP_X_FORWARDED_HOST" 
                             value="{HTTP_HOST}" />
                        <set name="HTTP_X_FORWARDED_PROTO" 
                             value="https" />
                    </serverVariables>
                </rule>
                
                <!-- API Docs (Swagger UI) doorsturen -->
                <rule name="SQLio API Docs" stopProcessing="true">
                    <match url="^api-docs(.*)$" />
                    <action type="Rewrite" 
                            url="http://SQLIO-SERVER:5000/api-docs{R:1}" />
                    <serverVariables>
                        <set name="HTTP_X_FORWARDED_HOST" 
                             value="{HTTP_HOST}" />
                        <set name="HTTP_X_FORWARDED_PROTO" 
                             value="https" />
                    </serverVariables>
                </rule>
                
                <!-- Swagger JSON specs doorsturen -->
                <rule name="SQLio Swagger JSON" stopProcessing="true">
                    <match url="^swagger/(.*)$" />
                    <action type="Rewrite" 
                            url="http://SQLIO-SERVER:5000/swagger/{R:1}" />
                    <serverVariables>
                        <set name="HTTP_X_FORWARDED_HOST" 
                             value="{HTTP_HOST}" />
                        <set name="HTTP_X_FORWARDED_PROTO" 
                             value="https" />
                    </serverVariables>
                </rule>
                
                <!-- API endpoints doorsturen -->
                <rule name="SQLio API Proxy" stopProcessing="true">
                    <match url="^api/(.*)$" />
                    <action type="Rewrite" 
                            url="http://SQLIO-SERVER:5000/api/{R:1}" />
                    <serverVariables>
                        <set name="HTTP_X_FORWARDED_HOST" 
                             value="{HTTP_HOST}" />
                        <set name="HTTP_X_FORWARDED_PROTO" 
                             value="https" />
                    </serverVariables>
                </rule>
                
                <!-- Blazor resources voor login pagina -->
                <rule name="SQLio Blazor Resources" stopProcessing="true">
                    <match url="^_blazor(.*)$" />
                    <action type="Rewrite" 
                            url="http://SQLIO-SERVER:5000/_blazor{R:1}" />
                </rule>
                
                <!-- Framework bestanden -->
                <rule name="SQLio Framework Files" stopProcessing="true">
                    <match url="^_framework/(.*)$" />
                    <action type="Rewrite" 
                            url="http://SQLIO-SERVER:5000/_framework/{R:1}" />
                </rule>
                
                <!-- Content bestanden (CSS) -->
                <rule name="SQLio Content Files" stopProcessing="true">
                    <match url="^_content/(.*)$" />
                    <action type="Rewrite" 
                            url="http://SQLIO-SERVER:5000/_content/{R:1}" />
                </rule>
                
                <!-- Blokkeer alle andere paden -->
                <rule name="Block Other Paths" stopProcessing="true">
                    <match url=".*" />
                    <action type="CustomResponse" 
                            statusCode="403" 
                            statusReason="Forbidden" 
                            statusDescription="Access Denied" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>
Tip: De volgorde van de rules is belangrijk. Specifieke paden moeten vóór de algemene blokkeerregel staan.

8. Stap 5: Server Variables Toestaan

Om de X-Forwarded headers te kunnen instellen:

  1. Selecteer de SQLio-API site in IIS Manager
  2. Dubbelklik op URL Rewrite
  3. Klik rechts op View Server Variables
  4. Voeg toe:

9. Stap 6: Testen

Interne Test (vanaf DMZ server)

Test of de verbinding naar de interne server werkt:

curl http://SQLIO-SERVER:5000/api-login

Externe Test

Test de API login pagina vanaf een externe locatie:

curl https://api.uwdomein.nl/api-login

Verwacht resultaat: HTML van de login pagina.

API Login & Swagger Documentatie

Externe gebruikers komen eerst op de login pagina:

https://api.uwdomein.nl/api-login

Na succesvolle login worden ze doorgestuurd naar de Swagger documentatie:

https://api.uwdomein.nl/api-docs

Verificatie: Geblokkeerde Paden

Controleer dat de beheerinterface NIET toegankelijk is:

curl https://api.uwdomein.nl/login
# Verwacht: 403 Forbidden

curl https://api.uwdomein.nl/webhook-configuration
# Verwacht: 403 Forbidden

10. Beveiliging

Authenticatieflow voor Externe Gebruikers

Externe gebruikers doorlopen de volgende stappen:

  1. Bezoek https://api.uwdomein.nl/api-login
  2. Login met API gebruikersnaam en wachtwoord (Basic Auth credentials)
  3. Na login: automatisch doorgestuurd naar Swagger documentatie op /api-docs
  4. In Swagger: vul API Key in via de "Authorize" knop
  5. Test API endpoints via "Try it out"
Tip: Basic Auth credentials worden automatisch ingevuld in Swagger na login. De gebruiker hoeft alleen nog de API Key in te vullen.

API Authenticatie

Alle API calls vereisen twee vormen van authenticatie:

Type Header Beschrijving
Basic Auth Authorization: Basic {base64} Gebruikersnaam en wachtwoord
API Key X-API-Key: {key} Unieke API sleutel per gebruiker

Aanbevelingen

Wat NIET te publiceren

Zorg dat de volgende paden NIET toegankelijk zijn vanaf internet:

Belangrijk: De web.config hierboven blokkeert standaard alle paden behalve de expliciet toegestane API-gerelateerde paden. Dit is de veiligste configuratie.

11. Probleemoplossing

502 Bad Gateway

Oorzaken:

Oplossing: Test connectiviteit met curl http://SQLIO-SERVER:5000/api-login vanaf de DMZ server.

403 Forbidden

Oorzaak: Het pad is correct geblokkeerd door de rewrite rules.

Oplossing: Controleer of u het juiste pad gebruikt (/api-login, /api-docs, of /api/...)

Login pagina laadt niet correct

Oorzaken:

Oplossing: Controleer of alle resource rules in web.config correct zijn geconfigureerd.

SSL Certificate Errors

Oorzaken:

API calls werken niet vanuit Swagger

Oorzaken:

Oplossing: Klik op "Authorize" in Swagger en controleer beide authenticatiemethoden.

Tip: Bekijk de IIS logs in C:\inetpub\logs\LogFiles voor gedetailleerde foutmeldingen. SQLio logs vindt u op de interne server.