Waar komt je verzoek langs?
Een bezoeker typt je adres, en ziet je gastenboek. Daartussen zitten vier stations, en elk station kan het verzoek tegenhouden. Elke melding die je in de route Online zetten tegenkwam, hoort bij één station. Jullie spelen het na, met een briefje dat van hand tot hand gaat.
Wat je nodig hebt
- Per groepje van vijf: briefjes papier en een pen. Iedereen krijgt een station.
- Ongeveer 25 minuten.
De stations
Elk station kent alleen zijn eigen regel. Op het briefje staan de naam die de bezoeker typte, en een poort.
- De telefoon schrijft het briefje: de naam, en poort 443 voor
https, 80 voorhttp, of de poort die achter de naam staat. Hij vraagt eerst aan DNS welk adres bij de naam hoort. - DNS kent één regel, het A-record:
gastenboek.voorbeeld.nlhoort bij203.0.113.10. Een andere naam kent hij niet. - ufw, de firewall van
203.0.113.10, laat 22, 80 en 443 door. Elk ander briefje gooit hij weg, zonder antwoord. Behalve een poort die Docker publiceerde: die zette Docker zelf open, vóór de regels van ufw. - Traefik krijgt 80 en 443. Op 80 antwoordt hij met een
301: probeer het ophttps. Op 443 zoekt hij een container met dezelfde naam inHost(…), diehealthyis. Geen container gevonden:404 page not found. Antwoordt de container niet op de poort uit het label, dan zegt hijBad Gateway. - Je site, in de container, luistert op 8000 en antwoordt met de pagina.
Wie het briefje weggooit of beantwoordt, roept "stop". Het antwoord gaat dezelfde weg terug.
De scenario's
- Sam typt
https://gastenboek.voorbeeld.nl. Alles staat goed. - Sam typt
http://gastenboek.voorbeeld.nl, zonder s. - Het A-record wijst nog naar
203.0.113.99, het adres van een oude server. - In
.envop de server staatDOMEIN=gastenboek.voorbeld.nl, met een tikfout. Sam typt het goede adres. - Bij de labels van de site staat
loadbalancer.server.port=8080. docker compose pstoont de site als(unhealthy).- Om iets te testen zette je
ports: "8000:8000"bij je site. Alex typthttp://203.0.113.10:8000. - Alex typt
https://203.0.113.10:9443. Portainer staat op de server, op127.0.0.1:9443.
Gok eerst, bij scenario 7: komt Alex bij je site? ______
| Scenario | Langs | Stopt bij | Wat de bezoeker ziet |
|---|---|---|---|
| 1 | |||
| 2 | |||
| 3 | |||
| 4 | |||
| 5 | |||
| 6 | |||
| 7 | |||
| 8 |
Bespreek na
- In welk scenario kwam een verzoek bij je site zonder dat Traefik het zag? Wat mist de bezoeker dan, en wat kan hij nu zelf invullen?
- Scenario 4 en 6 geven dezelfde melding. Met welk commando zie je op de server welke van de twee het is?
- Alles gaat via
https. Waarom moet poort 80 dan toch open blijven? - ufw zegt dat 8000 dicht is. Waarom kwam Alex er in scenario 7 toch door?
Antwoorden
| Scenario | Langs | Stopt bij | Wat de bezoeker ziet |
|---|---|---|---|
| 1 | DNS, ufw, Traefik, je site | je site | je gastenboek, met https |
| 2 | DNS, ufw, Traefik | Traefik, met een 301 | daarna als scenario 1: je gastenboek, met https |
| 3 | DNS | het oude adres | geen antwoord, of een pagina van iemand anders |
| 4 | DNS, ufw, Traefik | Traefik | 404 page not found |
| 5 | DNS, ufw, Traefik, je container | Traefik | Bad Gateway |
| 6 | DNS, ufw, Traefik | Traefik | 404 page not found |
| 7 | je site, langs ufw | je site | je gastenboek, zonder https |
| 8 | ufw | ufw | geen antwoord: de browser wacht en geeft het op |
In scenario 8 hield niet alleen ufw het tegen. Docker publiceerde 9443 alleen
op 127.0.0.1, dus op het adres van de server luistert niemand. Met de tunnel
uit de les kom jij er wel bij.
Bespreek na. Vraag 1: scenario 7. Er is geen https, dus alles gaat
leesbaar over de lijn. En je site gelooft door FORWARDED_ALLOW_IPS=* elke
X-Forwarded-For: Alex vult die kop zelf in, en de limiet uit Veiligheid telt
hem dan als iemand anders. Vraag 2: docker compose ps toont in scenario 6
(unhealthy), en docker compose config | grep Host toont in scenario 4 de
verkeerde naam. Vraag 3: voor de 301 van http naar https, en
Let's Encrypt controleert via poort 80 dat de naam bij jouw server hoort. Vraag 4:
Docker zet een gepubliceerde poort zelf open, vóór de regels van ufw. Daarom
publiceert op de server alleen Traefik een poort.
Verder op de site
- In de les: Online zetten: de deuren dicht, Online zetten: Traefik op de server, Online zetten: je site op je domein en Online zetten: je domein met HTTPS.
- De meldingen van Traefik staan bij Online zetten: een voordeur met Traefik, en de tunnel naar Portainer bij Online zetten: beheren met Portainer.