MQZiti – Zero Trust MQTT server and client
github.com
github.com
Vs standard MQTT there are several advantages incl. (not limited): - mTLS connections rather than just TLS - least privilege and microsegmentation - outbound only (authenticate and authorise before connect) meaning we can close or deny inbound connections at source and destination - private DNS with unique naming (e.g., instead of xxx.xxx.xx.xx to antoher IP, you could say MQTT client to MQTT server - smart routing on the overlay to reduce latency, increase availability and in general increase visibilty without owning the underlay network
edit, this is what I'm looking for: https://github.com/openziti/fabric/blob/main/docs/p12_smart_...
OpenZiti is using TCP to deliver packets to the routers, so TCP is still used there for stream reliability. Once delivered to the overlay fabric, the fabric is responsible for delivering the payloads as quickly as possible to the endpoint reliably. It uses TCP currently but we've worked on using other protocols like UDP.
Multicast support has been discussed, but it's not at the top of the pile of features that are getting worked at this time that I know of. I'm sort of on the other end, closer to the SDKs than the fabric, but I am pretty sure it's not in the immediate priority list as I recall.
The "no open ports" bit comes from the MQTT client and the MQTT server. Those have no open, listening ports because they will establish connections to the edge-routers. They'll have outbound connections, but no open ports.
The security is better than TLS for a few reasons, mostly it's due to the whole "no open ports" on the server or the client. That's a pretty big difference. Also the connections will be mutual TLS, not only TLS to the server. There's other zero trust things that the overall OpenZiti overlay covers too. So there's a bunch of good reasons and I didn't want to blather on ...
So the types of attacks that this protects against are all the 0day CVEs that are AV:N/PR:N. (attack vector=network, privileges required=none). That's the sort of thing like log4shell and the like. The only devices that could leverage those types of attacks would be trusted and authorized identities. That's probably a small number of machines, making the attack that much harder.
Also DoS attacks are a lot harder because the "server" (whatever accepts connections) is generally dark to the network and only available over the overlay network. Being on the same subnet (or you know, the whole internet) doesn't help if you're not authorized to access the service in the first place.
Where it's really cool is that you don't need to worry about cloud ACLs. Pick your laptop from one raw sewage network to another and it doesn't matter. You don't need to whitelist a new IP in the ACL. That's really convenient for today's road warriors. Similarly, you don't need to whitelist the whole enterprise's exit IP to the cloud.
So that sort of thing. Hopefully that answers your question enough but if not lemme know
- DDOS attacks can only attack the fabric and not the business logic service. Fabric nodes can be easily moved around or added to change attack surface.
- you can have multiple services hidden and you don't have to worry about protecting them individually
- service nodes themselves can be moved around or added for redundancy without having to stand up additional protection middleware
ZT assumes there is no implicit trust granted to assets or user accounts solely on their physical or network location or asset ownership. Authentication and authorization need to be performed before a session to an enterprise resource is established.
OpenZiti provides anyone the tools to embed zero trust mesh networking into their solution or application. It allows you to close all inbound ports on your firewall (one inbound firewall rule of deny-all), making your network unreachable from other networks, at layer 3. Your private OpenZiti Fabric allows your apps and users to outbound connect both 'sides' of the app, e.g. a client and server, into one bidirectional session, regardless of which side initiated the specific connection request.
Worst case scenario, when you attach to an unknown network (public WiFi) without knowing what other devices are on that network, they might be hostile and attempt to attack/compromise the machine that just joined the network.
Sometimes it's not active. Other compromised machines might do the same even on a trusted network like the corporate LAN or just your friend's house WiFi.
So zero trust encourages you to trust no network, open no hole in your firewall, allow no inbound connections. Any connections that are established need to be verified first before allowing the connection.