Bekijk alle lessen
Deel 1
Basis
Deel 2
Modbus RTU
- Les 5RS485 uitgelegd: A, B, common en terminatie20 min
- Les 6Baudrate en pariteit: waarom 8E1 de default is16 min
- Les 7Het Modbus RTU frame byte voor byte, plus CRC18 min
- Les 8Meerdere Modbus apparaten op een bus zetten16 min
- Les 9Je eerste Modbus apparaat uitlezen met mbpoll22 min
- Les 10Modbus RTU storing zoeken: symptoom en oorzaak20 min
Deel 3
Modbus TCP
Deel 4
Gevorderd
- Les 16Veilig naar een Modbus apparaat schrijven18 min
- Les 17Word order en float: dezelfde bytes, andere waarde22 min
- Les 18Pollinterval en busbelasting zelf berekenen18 min
- Les 19Modbus beveiligen: het protocol doet het niet16 min
- Les 20Modbus integreren: PLC, Home Assistant of cloud20 min
- Les 21Modbus checklist voor oplevering en overdracht18 min
Modbus beveiligen: het protocol doet het niet
Modbus beveiliging zit niet in het protocol: geen wachtwoord, geen encryptie, geen logging. Leer welke maatregelen in het netwerk dat werk moeten overnemen.
Wat deze les behandelt
- Wat kaal Modbus niet beschermt: geen wachtwoord, geen encryptie, geen log
- Drie netwerkmaatregelen, en welke je als eerste neemt
- Poort 802, en waarom uitgaand veiliger is dan een inkomend pad
Lees eerst: Poort 502, de MBAP header en de unit id, Modbus TCP in je netwerk: IP, VLAN, firewall
Modbus beveiliging zit niet in het protocol: er is geen wachtwoord, geen versleuteling en geen logboek waarin staat wie wat heeft geschreven. Wie een TCP-verbinding naar poort 502 kan opzetten, kan lezen en schrijven. Na deze les weet je welke maatregelen in je netwerk dat werk overnemen, en in welke volgorde je ze neemt.
Wat er gebeurt als iemand meeleest
Die leest niet alleen mee, die kan ook schrijven. Dit verzoek van twaalf bytes gaat naar poort 502:
00 01 00 00 00 06 FF 06 00 01 00 03
| Bytes | Veld | Betekenis |
|---|---|---|
00 01 | Transaction Identifier | volgnummer, wordt teruggeechood |
00 00 | Protocol Identifier | altijd nul |
00 06 | Length | zes bytes volgen: unit id plus PDU |
FF | Unit Identifier | native TCP-apparaat |
06 | Function Code | FC06, Write Single Register |
00 01 | Register Address | PDU-adres 1, register 2 op de datasheet |
00 03 | Register Value | de nieuwe waarde |
Het antwoord is byte voor byte hetzelfde frame: 00 01 00 00 00 06 FF 06 00 01 00 03. FC06 echoot wat er geschreven is, dus de waarde staat erin.
Zoek nu het veld waarin staat wie dit verzoek stuurt. Het staat er niet: de MBAP-header en de PDU kennen geen veld voor identiteit, wachtwoord, sleutel of handtekening. Er is niets in te vullen, en niets om achteraf in een logboek te schrijven.
Op RS485 is het niet anders. In 01 03 00 6B 00 03 74 17 is 01 het serveradres: een huisnummer, geen legitimatie.
Waarom het protocol zo ontworpen is
Omdat het uit 1979 komt, uit een fabriek zonder internetverbinding. Modicon, tegenwoordig Schneider Electric, bracht Modbus toen op de markt; Modbus/TCP kreeg pas in 1996 zijn IANA-registratie met systeempoort 502. Beveiliging was toen een eigenschap van het gebouw, niet van het bericht.
Wat je in het netwerk regelt
Alles wat het protocol niet doet, en in deze volgorde: een eigen zone, een firewallregel die alleen je pollende client toelaat, en geen port forward naar buiten.
Segmentatie komt eerst omdat die in een keer geldt voor elk apparaat in de zone, ook voor het apparaat dat je vergeten was. Daarna versmal je: alleen het IP-adres van je pollende client mag naar poort 502, niet het hele kantoorsubnet. Aan de frames verandert dat niets, die staan in de uitleg over Modbus TCP; adressen, poorten en VLAN's inregelen staat in de les over Modbus TCP in je netwerk.
De standaard biedt hier een klein handvat en niet meer. De Access Control Module uit de Modbus TCP-specificatie is een optionele lijst van toegestane bron-IP-adressen: staat een adres er niet in, dan gaat die verbinding dicht. Dat is filtering, geen authenticatie, want een IP-adres is te vervalsen. NIBE doet iets vergelijkbaars en accepteert op de S-serie alleen verbindingen uit 10.0.0.0/8, 172.16.0.0/12 en 192.168.0.0/16.
Waarom uitgaand veiliger is dan inkomend
Omdat een uitgaande verbinding geen poort openzet. De gateway is dan de initiatiefnemer, en een stateful firewall laat alleen het antwoordverkeer terug dat bij die bestaande sessie hoort. Van buitenaf valt er niets te benaderen, want er luistert niets.
Een port forward naar poort 502 is het andere uiterste: wie het adres vindt, staat met precies dezelfde rechten aan de knoppen als jij. Een VPN zit ertussenin. Die is verdedigbaar en soms de enige optie bij bestaande apparatuur, maar hij opent wel degelijk een pad naar binnen en verplaatst de beveiliging naar het accountbeheer van die VPN-server. Dat is een bewuste afweging, geen gelijkspel. Welke gateways een uitgaand model aankunnen staat in de vergelijking van industriele IoT-gateways, en hoe zo'n koppeling in de praktijk werkt in het artikel over Modbus-monitoring via de cloud.
Wat Modbus/TCP Security toevoegt
Een TLS-envelop om precies hetzelfde bericht. De specificatie vergelijkt mbap en mbaps zelf met http en https. De MBAP-header uit de les over de MBAP-header en de unit id, de function codes en de registersemantiek blijven ongewijzigd; alleen de envelop verandert en het verkeer gaat naar poort 802 in plaats van 502. Beide poorten staan bij IANA op naam van modbus.org, als mbap en mbap-s.
| Onderdeel | Wat het toevoegt |
|---|---|
| TLS 1.2 als minimum | terugvallen naar TLS 1.1, TLS 1.0 of SSL 3.0 is verboden |
| Wederzijdse authenticatie | beide kanten sturen een x.509v3-certificaat, niet alleen de server |
| Rol in het certificaat | in een extensie onder de Modbus.org-OID 1.3.6.1.4.1.50316.802.1 |
| Autorisatie per verzoek | de server kijkt of die rol dit verzoek mag doen |
Mag de rol het niet, dan krijg je exception 01 terug. Dat is dezelfde code als "deze function code ken ik niet", dus de context bepaalt de betekenis. De sessie blijft staan, alleen dit verzoek wordt geweigerd.
Waarom je het bijna nooit tegenkomt
Omdat er een certificaatinfrastructuur onder moet en de specificatie niet vertelt hoe je die uitrolt. Wederzijdse authenticatie betekent een eigen uitgegeven certificaat per apparaat en per client. De spec verwijst naar een PKI maar beschrijft geen provisioning-protocol, dus certificaten uitgeven en vernieuwen op honderden veldapparaten is handwerk per fabrikant. En de rollen zelf zijn niet gestandaardiseerd: het autorisatiealgoritme en de rechtenlijst liggen volledig bij de fabrikant.
Nieuw is het niet meer: de poortregistratie dateert van 2014-06-10 en de gebruikte securityspecificatie van 30 juli 2021. Toch is kale Modbus TCP op poort 502 nog steeds de norm in de installaties die je vandaag opent, en poort 802 zul je zelden aantreffen. Reken er dus niet op bij een bestaande installatie. Het netwerk blijft je gereedschap.
Hoeveel apparatuur staat er echt open?
Genoeg om het serieus te nemen, en minder dan de schrikverhalen suggereren. Bitsight volgde over 2025 vijftien ICS- en OT-protocollen en kwam op ongeveer 170.000 tot 180.000 blootgestelde unieke IP-adressen per maand, met een piek van ongeveer 170.000 in januari 2025 waarna het de rest van het jaar stabiliseerde. De verwachte doorgroei naar 200.000 bleef uit. Modbus en Niagara FOX vormen samen ongeveer de helft van alle vanaf internet bereikbare ICS- en OT-apparaten.
Censys telde in een publicatie van 21 november 2024 meer dan 145.000 blootgestelde ICS-diensten wereldwijd, waarvan meer dan 48.000 in de Verenigde Staten: 38 procent Noord-Amerika, 35 procent Europa, 22 procent Azie. Dat laatste raakt jou, want Censys stelt vast dat Modbus, S7 en IEC 60870-5-104 juist in Europa vaker worden waargenomen. Een kale poorttelling op 502 is trouwens geen Modbus-telling.
Veelgemaakte fouten
Poort 502 doorzetten naar internet om vanaf huis te kunnen kijken. Dat werkt, en net zo goed voor iedereen anders die het adres vindt. Lezen en schrijven zitten achter dezelfde poort. Los het op met een uitgaande verbinding, of anders met een VPN waarvan het accountbeheer op orde is.
Denken dat een VPN hetzelfde is als een uitgaande verbinding. Een VPN opent een pad naar binnen, een gateway die zelf uitbelt niet. Beide kunnen een goede keuze zijn, maar leg vast welke van de twee je hebt gekozen en waarom.
Veldapparatuur in het kantoornetwerk hangen. Een meter met een kleine netwerkstack staat dan naast laptops, gasten-wifi en camera's, en krijgt al hun broadcastverkeer mee. Een eigen VLAN kost een middag en scheelt jaren gedoe.
Aannemen dat lezen ongevaarlijk is. Het protocol maakt geen onderscheid in rechten, dus wie FC03 mag sturen, mag ook FC06 sturen. Behandel leestoegang als volledige toegang, want dat is het.
Aan de slag
Je brengt je eigen blootstelling in kaart en dicht daarna het eerste gat.
- 1
Inventariseer wat Modbus TCP spreekt
Zet elk apparaat, elke gateway en elke pollende client in een lijst, met IP-adres en poort. Vergeet de omvormer op een afwijkende poort niet.
- 2
Bepaal per apparaat wie erbij kan
Staat het in hetzelfde netwerk als kantoorlaptops, gasten-wifi of camera's? Noteer dat per regel.
- 3
Zoek naar port forwards en NAT-regels
Kijk in de router of er iets naar poort 502 verwijst. Bestaat zo'n regel, noteer dan waarom hij er ooit kwam en of hetzelfde doel uitgaand haalbaar is.
- 4
Zet een firewallregel op je client
Sta in de veldzone alleen het IP-adres van de pollende client toe naar poort 502, niet het hele subnet. Begin bij het apparaat dat het breedst bereikbaar is.
- 5
Test of je monitoring nog werkt
Lees per apparaat een bekend register terug. Een dichtgezette regel die je installatie sloopt is geen verbetering.
- 6
Leg vast wat je hebt veranderd
Zet de regel, de datum en de reden in het projectdossier. De volgende monteur ziet dan of een timeout een storing is of jouw firewallregel.
Zonder installatie. Start de pymodbus-simulator (gratis te gebruiken, ook zakelijk) op 0.0.0.0:5020 en lees hem uit vanaf een tweede machine in je netwerk. Dat lukt, en dat is precies het punt. Herstart hem daarna gebonden aan 127.0.0.1 en probeer het opnieuw: dezelfde beweging als een firewallregel, in het klein.
Verwacht resultaat: een lijst met apparaten en hun bereikbaarheid, en minstens een pad dat nu dicht zit.
Waar deze maatregelen landen hangt af van de route die je kiest, want een PLC, een Home Assistant en een cloudplatform zetten elk een ander deel van je netwerk open. Die vergelijking staat in de les over Modbus integreren in de praktijk.
Samenvatting
- Modbus kent geen wachtwoord, geen versleuteling en geen logboek, dus wie een verbinding naar poort 502 kan opzetten, kan lezen en schrijven.
- Het serveradres op RS485 en de unit id op Modbus TCP zijn adressen en geen identiteiten.
- Segmentatie in een eigen zone is de eerste maatregel, want die geldt in een keer voor elk apparaat in die zone.
- Een uitgaande verbinding zet geen poort open, terwijl een port forward en een VPN dat wel doen.
- Modbus/TCP Security voegt op poort 802 TLS 1.2 met wederzijdse certificaten toe, maar vraagt een PKI en komt daardoor zelden voor.
Controleer jezelf
Vier vragen over deze les. Je krijgt bij elk antwoord uitleg.
Vraag 1 van 4
Zelf zien hoe het werkt?
De ModbusCloud Gateway leest de apparaten uit deze cursus uit zonder dat je registers hoeft te programmeren.