Halloween DealsAmazon USHalloween week deals: useful picks before month-endAmazon US: current deals, useful picks and tech finds.Check DealsPC HealthRecommendedCrashes, freezes, slowdowns? Check your PC nowSpot repairable issues before they interrupt work.Check PCHalloween DealsAmazon USOctober picks are moving - compare before checkoutAmazon US: current deals, useful picks and tech finds.See Picks×
FREEDOM251

Freedom251 › Blog › Debian

How to Install and Secure the Mosquitto MQTT Broker on a Linux VPS

By Freedom251 Team · · 11 min read

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Install Mosquitto from your Ubuntu or Debian repository, expose only an intentional listener, require authentication, restrict every user with ACLs, and put internet traffic behind TLS. A default Mosquitto process is not a production-ready public broker: without a configured listener it binds to loopback, and remote clients cannot connect. The procedure below builds a broker that can be tested from a real client and maintained safely.

What you are building

Mosquitto is an MQTT broker: clients publish messages to topics and subscribe to topics to receive them. On a VPS, the broker is normally a system service managed by systemd (or by the service manager supplied by your distribution). The secure target for an internet-facing deployment is:

As an Amazon Associate I earn from qualifying purchases.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • A patched Debian or Ubuntu VPS with a separate administrative account using sudo.
  • One deliberately configured listener, normally TLS-protected on port 8883.
  • Anonymous access disabled.
  • Username/password authentication stored in a protected password file.
  • ACL rules that limit each account to the topics it actually needs.
  • A host firewall that exposes SSH only to administrators and MQTT only to expected networks where practical.
  • Client-side certificate and hostname verification, followed by tests for both permitted and denied operations.

Mosquitto packages, service names, OpenSSL defaults and configuration paths vary by release. The project lists Debian and Ubuntu packages, source builds and a snap option on its download page. Before copying a production configuration, read the man page installed with your exact package; the Debian references cited here are for unstable/testing and may differ from an older stable release.

Prepare the Linux VPS before installing MQTT

Patch the operating system and create an administrator

Provision a currently supported Debian or Ubuntu image. Apply security updates before opening an MQTT port, create an individual administrative account, grant it sudo, and use SSH keys rather than a shared root password. Keep a second recovery path through your VPS provider in case a firewall change blocks SSH.

#1 Best Overall
Sale
TOZO A1 Wireless Earbuds Bluetooth 5.3 Light Weight in Ear Headphones | IPX5 Waterproof,2 Mics for AI Calls,Immersive Premium Sound Bass Headset with Charging Case,32 EQ via App Black
  • [Ultra-Lightweight Ear Buds Designed for Small Ears] Each earbud weighs only 3.7g and features a compact, ergonomic in-ear design made especially for small ears. Secure, low-profile, and comfortable for workouts, all-day wear or overnight sleeping.The ultra-slim profile sits flush in your ear with no hard edges poking or rubbing, so you can even sleep on your side without discomfort.
  • [Immersive Stereo Sound with TOZO OrigX Technology] TOZO OrigX tuning delivers clear vocals, balanced mids, and natural stereo sound for music, podcasts, and videos.
  • [Long Battery Life for Daily Use] Get up to 7 hours of playtime on a single charge, with up to 32 hours total using the charging case—ideal for workdays, commuting, and extended listening sessions.
  • [Bluetooth 5.3 & Stable Connection] Bluetooth 5.3 provides fast pairing, stable wireless performance, and reduced dropouts as you move around home or office.
  • [Deep Bass with Clear Vocals] High-performance drivers produce punchy bass while keeping vocals clean and detailed for everyday listening.

Set the host firewall policy before exposing the broker. Permit SSH from your administration network, permit the chosen MQTT port only from client networks when you can identify them, and deny unused inbound ports. The exact commands depend on the distribution and provider, so verify the rules from a second session before disconnecting your current SSH session.

Confirm time, DNS and the broker name

Use a stable DNS name such as broker.example.com. The name clients use must match the certificate subject or, preferably, a subject-alternative name (SAN). Correct system time is also essential: clients reject certificates that are not yet valid or have expired.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Install Mosquitto and its client utilities

Install from the distribution repository

On Debian or Ubuntu, package names are normally mosquitto for the broker and mosquitto-clients for the command-line publisher and subscriber. Confirm the names for your release, then run:

sudo apt update
sudo apt install mosquitto mosquitto-clients

Repository packages are the simplest route because they provide a service unit, a service account and distribution-integrated paths. If you choose a source build or snap instead, follow the project instructions and adjust every path and service command to that installation.

Inspect the installed version and layout

Record the broker version and inspect the service definition before changing it:

mosquitto -h
mosquitto -c /etc/mosquitto/mosquitto.conf -v
systemctl cat mosquitto
systemctl status mosquitto --no-pager

The foreground command is useful for understanding configuration errors, but do not run a second broker against the production listener while the system service is active. Debian-style packages commonly use /etc/mosquitto/mosquitto.conf plus an included directory such as /etc/mosquitto/conf.d/. Confirm the actual include_dir in your file and keep local overrides there so package upgrades do not overwrite them.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #2
Sale
Smart Watch for Men Women Compatible with iPhone Samsung Android Phone 1.69 inch Full Touch Screen IP68 Waterproof Bluetooh Fitness Tracker Heart Rate/Sleep Monitor (Black)
  • 【IP68 Waterproof Multifunctinal Smart Watch】Torjalph fitness activity tracker smart watch is IP68 waterproof technology ,you can wear it when swimming,handwashing,it's rain-proof which means that you perform multiple exercise modes outside without worrying about sweat or rain corroding your fitness smart watch,and this watch equipped with a 230 mAh large capacity battery magnetic charging ,and this sports activity tracker watch can be used 5-7 days If fully charged.
  • 【Larger 1.83'' Full Screen Watch & Multi-dial Selection】1.83 inch full HD color touch screen smart watch for men / women provides excellent 240*284 resolution image quality ,This Bluetooth smart watch offers a better touch experience and remarkable immersion and ,more than 200 watch faces for you to choose from App"Da Fit ", you can change the dial style according to your mood to wear keeping the world on your wrist
  • 【Accurate Activity Tracker Smart Watch 】sports watch activity tracker uses sweat and dust resistant breathable silicone strap, our Fitness Tracker Smart Watch for Android iOS Phones supports 12 sports modes,walking,running,bicycle,swimming,badminton,basketball,football,rope skipping. This bluetooth calls smart watch for men women is lightweight and stylish, bringing more convenient and relaxing sports experience while also providing more protection.
  • 【Your 24 Hour Personal Daily Health Monitor】Fitness watch for women men full touch screen IP67 waterproof bluetooth smartwatch for Android iOS Phones with heart rate blood pressure monitor multifunction Andriod smart watch with steps counter sleep monitor sports fitness watch, monitoring blood oxygen saturation allows you to understand your physical condition in real time to track fitness progress ,to know your health status in time.
  • 【More Functions Bluetooth Call Smart Watch】This fitness activity smart watch full screen for iPhone and Android phones includes a bunch of new features including:The bluetooth smart watch can hang up the phone, receive and display WhatsAPP /Text /Facebook /Twitter /Messenger reminder.Support sedentary reminder, alarm clock, stopwatch, timer,weather information,music control, remote camera control compatible with Android 5.0 and above or iOS 9.0 and above smartphones.

Enable and start the service

sudo systemctl enable --now mosquitto
sudo systemctl status mosquitto --no-pager
sudo journalctl -u mosquitto -n 100 --no-pager

The package service name can vary. Snap deployments use snap-specific systemd names and store configuration and related files under /var/snap/mosquitto/common/; the project documents that layout in Using the Mosquitto snap.

Choose and configure the listener

Why an unconfigured broker is unreachable

Mosquitto started without a listener configuration uses port 1883 on loopback. That permits local testing but is not remotely reachable. The broker must have an explicit listener for remote clients, and you should bind and expose only what you intend. The listener behavior is described in the mosquitto manual page.

Port 1883 versus port 8883

Port Typical use Protection When to expose it
1883 Plain MQTT No transport encryption; credentials and messages can be observed on the network. Keep disabled for public traffic, or bind it only to a private interface/network where an encrypted tunnel already exists.
8883 MQTT over TLS Encrypted transport with server certificate validation; username/password can then be sent inside the protected session. Common choice for an internet-facing listener. The number is a convention, not a security guarantee.

The security property is encryption plus restricted reachability, not the port number itself. You may select another port, but every firewall rule and client command must match it.

Create a minimal TLS listener

Place a local override in the package-supported include directory. Adapt paths to your distribution and certificate layout:

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
per_listener_settings true

listener 8883
protocol mqtt
allow_anonymous false
password_file /etc/mosquitto/passwd
cafile /etc/ssl/certs/ca-certificates.crt
certfile /etc/mosquitto/certs/server.crt
keyfile /etc/mosquitto/certs/server.key
tls_version tlsv1.2

listener, password_file, cafile, certfile, keyfile and tls_version are documented configuration options in the Debian unstable and testing man pages. per_listener_settings true makes authentication and authorization settings apply independently to each listener, which prevents a later listener from accidentally inheriting a policy you intended for another one.

The example requires at least TLS 1.2. Choose TLS 1.3 when every client in your fleet supports it; otherwise keep a TLS 1.2 minimum and remove obsolete protocol versions. Test the installed Mosquitto/OpenSSL combination because available protocol labels and defaults are release-dependent.

Rank #3
New Bee Guitar Cable 10ft Electric Instrument Bass AMP Cord | 6.35mm Jack, Durable Design, Stage and Home Studio Use, Low Noise Shielded Electric Cord for Bass, Keyboard, Amp, Mixer
  • [Low Noise High Fidelity] New bee guitar cord with 22AWG oxygen-free-copper center conductors provides enhanced signal transfer, the PVC insulation material and the high-density stranded copper double shield provide noise rejection for quiet operation
  • [Ideal for Choice] New bee 1/4 straight and right angle metal connectors, ensures a secure connection in any instrument, pedal, or amp jack. L shape great fro on stage guitar stands
  • [Wide Compatible] Suitable for mixer, power amplifier, microphone, effector, decoder, equalizer, electoronic organ, electric guitar, electric bass and other electronic equipments. Widely used in the installation of smart home, karaoke speaker, professional stage audio, etc
  • [Easy Disassemble] Making incidental repairs quick and easy! Very nice, flexible cable
  • [Dont Hesite to Order] 24 hours customer services and professional technology team are standing by

Create users and disable anonymous access

Build the password file safely

Mosquitto 2.0 and later require an explicit authentication choice. For a small, static user set, create the password file with mosquitto_passwd:

sudo install -d -m 750 -o mosquitto -g mosquitto /etc/mosquitto
sudo mosquitto_passwd -c /etc/mosquitto/passwd device01
sudo chown mosquitto:mosquitto /etc/mosquitto/passwd
sudo chmod 640 /etc/mosquitto/passwd

The -c option creates or overwrites the file, so use it only for the first user or when you intentionally want to replace the file. Add or change another account without -c:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
sudo mosquitto_passwd /etc/mosquitto/passwd device02
sudo mosquitto_passwd -D /etc/mosquitto/passwd retired-device

Let the command prompt for the password. Supplying a password directly on the command line can expose it through shell history or process inspection, as the official authentication documentation warns. The Mosquitto service account must be able to read the file; ownership and mode above provide that while excluding ordinary users.

Require authentication on the listener

Keep allow_anonymous false on every public listener and point password_file at the protected file. The Mosquitto project states: “It is important to configure authentication on your Mosquitto instance, so unauthorised clients cannot connect.” Authentication alone does not decide which topics a user may read or write, so add ACLs before opening the firewall.

Restrict topics with an ACL

Give each device its own namespace

Create an ACL file readable by the broker service account, for example /etc/mosquitto/acl:

user device01
topic readwrite devices/device01/#

user device02
topic readwrite devices/device02/#

Reference it from the listener configuration:

acl_file /etc/mosquitto/acl

This pattern lets device01 publish and subscribe below devices/device01/ while preventing it from using device02 topics. Replace the namespaces with your application’s actual layout. If a client only reports telemetry, use a write-only rule for its telemetry branch and a read-only rule for commands; do not grant readwrite merely because it is convenient.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #4
BSIMB 15.6" Digital Family Calendar & Chore Chart, No Subscription Fees
  • Digital Family Calendar: BSIMB digital calendar wall touch screen puts an end to your chaotic life. Designed for busy families, the digital calendar keeps you organised and in step with your family. Assign different colours and tasks to each family member to make family scheduling easier and more intuitive.
  • Easy Setup and Auto-Sync: Plug in, connect to WLAN and auto-syn your electric calendar in minutes. Digital wall calendar compatible with Google calendar, iCloud calendar, Outlook calendar, Cozi calendar and Yahoo calendar. Add events directly on the device or through the ecalendar app. Electronic calendar stays current whether you're at work or traveling—no manual updates needed.
  • All-In-One Home Assistant: Smart calendar builds habits and encourage independence with personalised chores. Display daily meal plan to reduce the daily ‘What's for dinner?’ stress. To-do lists keep track of everything you want. Turning chores into valuable achievements with stars and rewards, making life easier and more enjoyable.
  • Manage Anytime Anywhere: BSIMB electronic calendar for family stay connected with the powerful ecalendar app. Access and manage your digital wall calendar anytime, anywhere with free features like stars & rewards, photo screensaver, chore charts, meals plans, to-do lists etc. Electronic planner paid features like Magic Import tailor advanced tools for users with special needs.
  • Stay in Touch with Loved Ones: Share photos or videos from your phone to electronic wall calendar with app, instantly update your life moment, and keep in touch with your family, especially those who are far away; you can also surprise your smart calendar digital wall by sending him a wish card; it's also great for keeping tech-illiterate elders in touch with the youngsters.

Test both directions. A client that can authenticate but receives “not authorized” is reaching the broker; inspect the exact topic spelling, wildcard level and ACL file path before loosening permissions.

When a static file is no longer enough

For a handful of accounts, a password file and ACL file are easy to audit. Larger fleets with changing roles and groups can evaluate Mosquitto’s Dynamic Security plugin, documented alongside the project’s authentication methods. It provides a more flexible username/password and access-control system, but it introduces another policy layer that must be backed up, monitored and tested.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Install and protect the TLS certificate

Use a name-matching server certificate

Obtain a certificate whose SAN contains the hostname clients will use, such as broker.example.com. Store the certificate chain and private key in a directory that is not world-readable. The broker needs to read the key; ordinary users and unrelated services do not.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
sudo install -d -m 750 -o root -g mosquitto /etc/mosquitto/certs
sudo chown root:mosquitto /etc/mosquitto/certs/server.key
sudo chmod 640 /etc/mosquitto/certs/server.key
sudo chmod 644 /etc/mosquitto/certs/server.crt

Adjust group ownership and modes to the package’s service account model. Never make a private key world-readable just to fix a startup error.

Decide whether clients also need certificates

Server-side TLS plus MQTT username/password is sufficient for many deployments. If every client must authenticate with a certificate, configure a trusted CA and set require_certificate true on the TLS listener. Certificate-based client authentication changes provisioning and revocation procedures, so use it when the operational benefit justifies that complexity.

Renew and verify certificates

Renew certificates before expiry, reload or restart the broker as supported by your package, and verify the complete chain from a client network after every renewal. A file existing on disk does not prove that a handshake will succeed: the hostname, chain, key permissions, firewall and client trust store all have to agree.

Apply firewall and VPS hardening

  • Allow SSH only from an administration network or a VPN; avoid exposing password-based SSH to the entire internet.
  • Allow TCP 8883 only from known client ranges when the application permits it. If clients are distributed globally, keep the port public but enforce TLS, authentication and ACLs.
  • Do not open 1883 on the public interface unless you have a documented private-network use case.
  • Deny unused inbound ports and review provider-level security-group rules as well as the VPS firewall.
  • Keep the operating system, Mosquitto package and certificate chain patched.
  • Run the packaged service under its dedicated mosquitto account; do not run the broker as root.
  • Collect and review service logs, authentication failures and repeated connection attempts.

Firewall syntax and log locations vary by distribution and provider. Make a change, verify it from an allowed client and an intentionally blocked network, and keep a rollback rule ready.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Validate the complete security boundary

Reload only after checking configuration

Check the configuration in the foreground if your package supports that workflow, then restart or reload through systemd:

sudo systemctl restart mosquitto
sudo systemctl status mosquitto --no-pager
sudo journalctl -u mosquitto -n 100 --no-pager

Resolve syntax errors, unreadable files and certificate-key mismatches shown in the journal before testing remotely.

Test an authorized TLS publish and subscription

Use the documented mosquitto_pub and mosquitto_sub clients from a network that should be allowed. The CA file must contain the issuer trusted by the broker hostname certificate:

mosquitto_sub -h broker.example.com -p 8883 --cafile /path/ca.crt 
  -u device01 -P 'REDACTED' -t devices/device01/state -v

mosquitto_pub -h broker.example.com -p 8883 --cafile /path/ca.crt 
  -u device01 -P 'REDACTED' -t devices/device01/state -m online

The subscriber should display the published topic and payload. Keep credentials out of shell history in real operations; use a safer credential-handling method in your automation.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Prove that forbidden operations fail

Do not declare the VPS secure after one successful publish. Exercise each boundary:

  1. Connect without -u and -P; anonymous access should be rejected.
  2. Use a deliberately wrong password; authentication should fail.
  3. Connect with an incorrect hostname or an untrusted CA; certificate verification should fail when verification is enabled.
  4. Authenticate as device01 and try to publish or subscribe below devices/device02/; the ACL should deny it.
  5. Try port 1883 from an external network; it should be closed, filtered or limited to the intended private interface.
  6. Test from an unapproved source network and confirm the firewall blocks the connection.

These are checks to perform in your environment, not assumptions about the result. Record the client version, hostname, source network and broker log entry for each test.

Troubleshoot common connection failures

“Connection refused” or timeout

  • Confirm the service is running with systemctl status mosquitto and inspect journalctl -u mosquitto.
  • Check that an explicit listener exists; a default loopback listener cannot accept remote traffic.
  • Verify the VPS firewall, provider security group, DNS address and selected port.
  • Confirm the broker is listening on the expected address with your distribution’s socket inspection tool.

TLS handshake or certificate errors

  • Use the exact DNS name in the certificate SAN, not an unrelated IP address.
  • Give the client the correct CA chain and ensure the VPS clock is accurate.
  • Check that certfile and keyfile form a matching pair and that the Mosquitto account can read them.
  • Compare the configured minimum TLS version with the client’s capabilities; requiring TLS 1.3 excludes clients that support only TLS 1.2.
  • After renewal, reload the service and test from outside the VPS.

Authentication or authorization failures

  • Verify the listener has allow_anonymous false and the correct password_file.
  • Check password-file ownership and mode; the broker service account must be able to read it.
  • Remember that mosquitto_passwd -c overwrites an existing file; recreate or add users intentionally.
  • Check the ACL path, username spelling, topic case and wildcard placement.
  • If one listener is intended to be public and another private, keep per_listener_settings true and define policy for each listener explicitly.

Version, package and maintenance notes

Debian and Ubuntu releases ship different Mosquitto versions and defaults. Read the man page installed on the VPS instead of assuming that an option documented for Debian testing exists unchanged in an older stable release. Snap installations use /var/snap/mosquitto/common/ and snap-specific systemd service names, as described in the project’s snap documentation.

Back up the password and ACL files securely, restrict who can change them, and document which listener, certificate chain, firewall rule and client topic namespace belong together. Rotate credentials when devices are retired, remove stale ACL entries, and schedule certificate-expiry checks. After package upgrades, review the effective configuration, service status and a small set of allowed and denied client tests.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Reference documentation

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

DebianLinux securityLinux VPSMosquittoMQTTTLSUbuntu

Leave a Reply

Your email address will not be published. Required fields are marked *

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Recommended PC Tool
Recommended PC Tool
PC Slower Than It Used to Be?Free scan - under a minute
Outdated Drivers Are Slowing You DownFree scan - exact matches

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.