Wat is Mosquitto?
Eclipse Mosquitto is een open-source MQTT-broker die berichten volgens het publish/subscribe-principe ontvangt en doorstuurt tussen sensoren, machines, applicaties en cloudplatformen. De broker ondersteunt MQTT 5.0, 3.1.1 en 3.1, is geschreven in C en zo zuinig dat hij draait op alles van een kleine edge-gateway tot een volwaardige server. Daardoor is Mosquitto een van de meest gebruikte bouwstenen in Industrial Internet of Things, Edge Computing en Industriële Automatisering, en vaak het eerste concrete stuk software in een Unified Namespace binnen OT-convergentie.
🧠 Waar komt Mosquitto vandaan?
Roger Light begon Mosquitto in 2009 als hobbyproject, nadat hij op een open-sourceconferentie een presentatie over MQTT had gezien van Andy Stanford-Clark, een van de bedenkers van het protocol. Er bestond toen nog geen open-source MQTT-broker. Het project werd later ondergebracht bij de Eclipse Foundation en heet sindsdien Eclipse Mosquitto.
| Kenmerk | Waarde |
|---|---|
| Maker | Roger Light (2009) |
| Beheer | Eclipse Foundation (Eclipse IoT) |
| Licentie | Dubbel: Eclipse Public License 2.0 en Eclipse Distribution License 1.0 |
| Taal | C, met clientbibliotheek libmosquitto (C) en libmosquittopp (C++) |
| MQTT-versies | 5.0, 3.1.1 en 3.1 |
| Standaardpoorten | 1883 (MQTT), 8883 (MQTT over TLS) |
| Belangrijke releases | 2.0.0 (3 december 2020), 2.1.0 (29 januari 2026) |
| Commerciële variant | Pro Mosquitto van Cedalo, door hetzelfde maintainerteam |
Naast de broker levert het project de commandoregeltools mosquitto_pub, mosquitto_sub en mosquitto_rr om berichten te testen, en mosquitto_passwd en mosquitto_ctrl voor beheer. Mosquitto zit in de pakketbronnen van
vrijwel alle Linux-distributies en Raspberry Pi OS en is als officiële Docker-image beschikbaar.
⚙️ Hoe werkt Mosquitto?
Mosquitto is de centrale message broker in een MQTT-architectuur. Clients maken een TCP-verbinding met de broker en zenden of ontvangen berichten op topics:
-
Een publisher, bijvoorbeeld een Edge Device naast een PLC, publiceert een
meetwaarde op
Plant1/Line2/Robot5/Temperature. - Mosquitto ontvangt het bericht en controleert of de client dit topic mag publiceren.
- Iedere subscriber met een passend abonnement krijgt het bericht, bijvoorbeeld SCADA, een Historian, een alarmserver of een cloudapplicatie.
Publishers en subscribers kennen elkaar niet: ze kennen alleen de broker en de topicnaam. Die ontkoppeling
geeft Schaalbaarheid, lage
netwerkbelasting en asynchrone communicatie, wat MQTT geschikt maakt voor netwerken met beperkte Bandbreedte of wisselende Latency.
Wildcards (+ voor één niveau, # voor alle onderliggende niveaus) laten een
subscriber in één keer een hele lijn of fabriek volgen.
| Component | Functie |
|---|---|
| Publisher | Verstuurt data naar een topic |
| Broker (Mosquitto) | Routeert berichten, beheert sessies, regelt Authenticatie en autorisatie |
| Subscriber | Ontvangt data van de topics waarop hij is geabonneerd |
| Topic | Hiërarchische naam als communicatiekanaal |
Mosquitto verzorgt daarbij sessiebeheer, QoS-afhandeling, retained messages en optionele persistentie op schijf.
📡 Welke QoS-niveaus, retained messages en sessies kent Mosquitto?
Mosquitto ondersteunt de drie QoS-niveaus van MQTT:
| QoS | Garantie | Typisch gebruik in OT |
|---|---|---|
| QoS 0 | At most once | Snelle, frequente meetwaarden waarbij een gemiste waarde geen probleem is |
| QoS 1 | At least once | Statuswijzigingen en alarmen; de ontvanger moet dubbele berichten aankunnen |
| QoS 2 | Exactly once | Tellerstanden, batch- of orderberichten waar dubbel of gemist ongewenst is |
Hogere QoS kost extra netwerkverkeer en brokergeheugen. Voor kritieke alarmen wordt daarom meestal QoS 1 gekozen, in combinatie met idempotente verwerking bij de ontvanger.
- Retained messages - de broker bewaart per topic het laatste bericht en levert het direct aan nieuwe subscribers. Ideaal voor de laatste machinestatus, configuratiewaarden, alarmstatus en productieparameters.
- Persistente sessies - bij een client met een blijvende sessie houdt Mosquitto abonnementen bij en zet QoS 1- en QoS 2-berichten in de wachtrij zolang de client offline is.
-
Persistentie op schijf - met
persistence trueschrijft Mosquitto retained messages en wachtrijen periodiek weg, zodat ze een herstart overleven. - Last Will and Testament - de broker publiceert namens een client een vooraf ingesteld bericht als die onverwacht wegvalt, handig om een gateway of machine als “offline” te markeren.
Samen verhogen deze functies de betrouwbaarheid op instabiele netwerken, zoals draadloze verbindingen of buitenlocaties.
🏭 Waar wordt Mosquitto gebruikt in de industrie?
Binnen Industriële Automatisering verspreidt Mosquitto OT-data naar meerdere afnemers tegelijk:
- Machine monitoring - temperatuur, vibratie, status en energieverbruik van sensoren en machines
- Edge computing - lokale buffering, protocolconversie en event streaming op een gateway of IPC
- Unified Namespace - alle OT-Assets publiceren naar één centrale, gestructureerde namespace
- SCADA-integratie - verspreiden van proceswaarden, realtime events en alarmen naast de klassieke SCADA-koppelingen
- Smart manufacturing - productietracking, MES-integratie en voeding van een Digital Twin
- Prototyping - met Node-RED en Mosquitto is binnen een uur een werkende datastroom van machine naar dashboard te bouwen
Veelgebruikte combinaties zijn OPC UA naar MQTT via een gateway, MQTT Sparkplug B als payloadstandaard, en een monitoringstack van Mosquitto, InfluxDB (of TimescaleDB) en Grafana voor trends en dashboards. Voor zeer hoge volumes of langdurige opslag van event streams wordt Mosquitto vaak gekoppeld aan Apache Kafka.
🔧 Hoe zet u Mosquitto op in een OT-omgeving?
Een praktische aanpak voor een eerste productiewaardige broker:
- Bepaal de plaats in de architectuur - kies tussen een broker per lijn op de edge, een centrale site-broker, of beide met een bridge. Positioneer volgens het Purdue Model: een site-broker hoort typisch op niveau 3 of in de IDMZ, nooit rechtstreeks bereikbaar vanaf internet.
-
Ontwerp de topicstructuur vooraf - bijvoorbeeld
Site/Area/Line/Machine/Signaalnaar ISA-95-hiërarchie. Gebruik consistente naamgeving, beperk de diepte en leg de structuur vast als governance-afspraak, want topics zijn later lastig te wijzigen. - Configureer listeners expliciet - poort 1883 alleen op een intern segment, 8883 met TLS voor verkeer tussen zones.
- Regel authenticatie en autorisatie - gebruik de dynamic security plugin met clients, groepen en rollen (RBAC), of client-certificaten. Geef elke client alleen schrijfrechten op zijn eigen topics via ACL-regels.
-
Zet persistentie en limieten aan -
persistence true, een passendemax_queued_messagesen een maximale berichtgrootte voorkomen geheugenproblemen bij offline clients. - Koppel brokers met bridges - een bridge stuurt een selectie van topics door naar een centrale broker of cloudplatform, met lokale buffering als de verbinding wegvalt.
-
Monitor de broker - via de
$SYS-topics en een exporter naar monitoring-tools.
Mosquitto is geschikt voor embedded systemen: de broker draait op een 180 MHz MIPS-processor met 32 MB RAM en kan op serverhardware tienduizenden tot honderdduizenden gelijktijdige clients aan. Prestatieproblemen ontstaan in de praktijk vooral door grote hoeveelheden retained data, veel QoS 2-verkeer, lange wachtrijen voor offline clients en ongestructureerde topicbomen.
🔐 Hoe beveiligt u Mosquitto?
Omdat Mosquitto procesdata en soms ook commando’s doorgeeft, is de broker een aantrekkelijk doelwit binnen Cybersecurity voor OT.
| Risico | Gevolg | Maatregel |
|---|---|---|
| Anonieme toegang | Iedereen kan meelezen of publiceren | allow_anonymous false, wachtwoord of certificaat per client |
| Ongeautoriseerde publish | Procesmanipulatie via commandotopics | Topic-ACL’s, scheiding van data- en commandotopics |
| Topic spoofing | Valse meetwaarden in SCADA of historian | Schrijfrechten per client beperken |
| Onversleutelde verbindingen | Afluisteren van data en wachtwoorden | TLS-encryptie op 8883, beheer van certificaten |
| Bekende kwetsbaarheden | Crash of geheugenlek van de broker | Tijdig patchen, CVE-meldingen volgen |
Versie 2.0 (december 2020) maakte Mosquitto standaard veiliger: zonder configuratiebestand luistert de
broker alleen op localhost, allow_anonymous staat standaard op false, TLS 1.0 is
uitgeschakeld en een als root gestarte broker schakelt direct na het inlezen van de configuratie over naar
een onbevoegde gebruiker (standaard mosquitto). Alleen in de modus zonder configuratie, op
localhost, zijn anonieme clients nog toegestaan. Versie 2.1 (januari 2026) markeert password_file en acl_file als verouderd ten gunste van plugins, met verwijdering
gepland voor 3.0.
Mosquitto zelf kent geen MFA; die hoort op het beheer van de broker-host en managementinterfaces. Plaats de broker in een eigen zone volgens het zones-en-conduits-model van IEC 62443, achter een firewall met netwerksegmentatie, en stuur brokerlogs naar een SIEM. Recente securityfixes, zoals in 2.0.19 (oktober 2024) en 2.0.21 (maart 2025), laten zien dat patchmanagement ook voor deze kleine component nodig is.
🚨 Hoe maakt u Mosquitto hoog beschikbaar en bewaakbaar?
Uitval van de broker betekent verlies van Telemetrie, lege dashboards, gemiste alarmen en stilstaande analytics. De open-sourceversie van Mosquitto is een enkel proces zonder ingebouwde clustering. High Availability en redundantie realiseert u daarom met:
- Edge-buffering - lokale brokers of gateways die data vasthouden en via een bridge doorsturen zodra de centrale broker terug is
- Failover op infrastructuurniveau - een virtuele machine of container met automatische herstart, bijvoorbeeld onder Docker of Kubernetes, met persistente opslag
- Commerciële clustering - Pro Mosquitto van Cedalo biedt active-passive en active-active clustering met sessiepersistentie over nodes
| Metric | $SYS-topic (voorbeeld) |
Betekenis |
|---|---|---|
| Verbonden clients | $SYS/broker/clients/connected |
Actieve verbindingen |
| Offline persistente clients | $SYS/broker/clients/disconnected |
Clients met opgebouwde wachtrij |
| Berichten in opslag | $SYS/broker/store/messages/count |
Retained en gequeuede berichten |
| Dataverkeer | $SYS/broker/bytes/received |
Throughput sinds start |
| Bridgestatus | $SYS/broker/connection/... |
1 = actief, 0 = verbroken |
Deze metrics gaan via een exporter naar Prometheus, InfluxDB of Grafana.
🔄 Wat is het verschil tussen Mosquitto en klassieke OT-communicatie?
| Eigenschap | Mosquitto/MQTT | Klassieke veldbus |
|---|---|---|
| Architectuur | Publish/subscribe via broker | Master/slave of point-to-point |
| Schaalbaarheid | Hoog, veel afnemers per bericht | Beperkt tot het segment |
| Bandbreedtegebruik | Efficiënt, report by exception | Cyclisch pollen |
| Cloud-integratie | Sterk | Beperkt |
| Realtime determinisme | Niet gegarandeerd | Sterk |
| Inzet | Datadistributie, monitoring | Besturing en I/O |
Mosquitto vervangt geen realtime veldbussen, maar vormt een aanvullende datadistributielaag boven de besturing. Ook ten opzichte van OPC UA is het eerder aanvullend dan concurrerend: OPC UA levert het informatiemodel, MQTT het transport naar vele afnemers.
🏗️ Welke rol speelt Mosquitto in IT/OT-convergentie?
Binnen IT OT Convergentie is Mosquitto een event-driven communicatielaag tussen OT-Assets en IT-platformen. Het ondersteunt realtime data streaming, voorspellend onderhoud, cloud-analytics en Industrial AI in het kader van Industrie 4.0. Een bridge kan data doorsturen naar cloud-IoT-diensten zoals AWS IoT Core. Binnen vitale infrastructuur wordt die cloudkoppeling vaak beperkt of eenrichtingsverkeer gemaakt vanwege security- en compliance-eisen, zoals die uit de Cyberbeveiligingswet.
❓ Veelgestelde vragen
Is Mosquitto gratis te gebruiken in een fabriek?
Ja, Eclipse Mosquitto is open source onder de Eclipse Public License 2.0 en de Eclipse Distribution License 1.0 en mag ook commercieel gratis worden gebruikt. Voor clustering, een beheeromgeving en ondersteuning met vaste responstijden bestaat de betaalde variant Pro Mosquitto van Cedalo.
Welke poorten gebruikt Mosquitto?
Mosquitto gebruikt standaard poort 1883 voor onversleuteld MQTT en poort 8883 voor MQTT over TLS. Daarnaast kan een listener MQTT over WebSockets aanbieden; sinds versie 2.1 heeft de broker een eigen ingebouwde WebSockets-implementatie, zonder afhankelijkheid van de libwebsockets-bibliotheek.
Waarom accepteert Mosquitto na een upgrade naar 2.0 geen verbindingen meer?
Sinds Mosquitto 2.0 staat allow_anonymous standaard op false en luistert de
broker zonder configuratie alleen op localhost. Een bestaande installatie met een listener maar zonder
authenticatie weigert daardoor clients; de oplossing is een wachtwoordbestand, de dynamic security plugin
of bewust allow_anonymous true op een afgeschermd netwerk.
Kan Mosquitto in een cluster draaien?
De open-sourceversie van Mosquitto heeft geen ingebouwde clustering en draait als enkel proces. Hoge beschikbaarheid bereikt u met edge-buffering, bridges en automatische herstart op infrastructuurniveau, of met de commerciële Pro Mosquitto, die active-passive en active-active clustering biedt.
Wat is het verschil tussen Mosquitto en MQTT?
MQTT is het open berichtenprotocol, gestandaardiseerd door OASIS, terwijl Mosquitto een concrete broker is die dat protocol implementeert. Andere brokers zoals HiveMQ, EMQX en VerneMQ implementeren hetzelfde protocol, zodat clients tussen brokers uitwisselbaar zijn.
Is Mosquitto geschikt als broker voor een Unified Namespace?
Mosquitto is een veelgebruikte broker voor een Unified Namespace op één locatie, dankzij de lage resourcebehoefte en volledige MQTT 5-ondersteuning. Voor een UNS over meerdere sites of met strenge beschikbaarheidseisen combineert u Mosquitto met bridges per site of kiest u een broker met clustering.
📌 Samengevat
Eclipse Mosquitto is de lichtgewicht, open-source MQTT-broker die sinds 2009 OT-data van PLC’s, sensoren en edge devices verspreidt naar SCADA, historians, dashboards en cloud. De kracht zit in eenvoud en efficiëntie; de aandachtspunten zijn beveiliging, topicontwerp en beschikbaarheid, omdat de open-sourceversie geen clustering kent.
Mosquitto is een uitstekende datadistributielaag voor IIoT en een Unified Namespace, mits u authenticatie, topic-ACL’s, TLS, segmentatie en patchbeheer vanaf dag één goed regelt.
