Install the Mosquitto MQTT Broker on Ubuntu
Review the following guide for installing the Mosquitto MQTT broker on Ubuntu. Once installed, you can connect to the following connectors in Manufacturing Connect Edge:
- MQTT - Generic TCP
- MQTT - Generic over SSL.
Make sure you do the following:
- Verify the Ubuntu OS is 19.10.
- Use a Virtual Machine on VirtualBox 6.0 to install Ubuntu.
- Verify that the Virtual Machine has two configured network adapters that are set as follows:
- Adapter 1 is set to Bridged Adapter
- Adapter 2 is set to NAT
To install net tools:
- From a command prompt, enter sudo apt install net-tools, and press ENTER.
- If asked to provide your password, enter the password and press ENTER.
Enter ifconfig and press ENTER. For this use case, the IP needed is for the Bridged Adapter (enp0s3). It is 192.168.1.11.
To install the MQTT broker:
- From a command prompt, enter sudo apt-get update and press ENTER.
- If asked to provide your password, enter the password and press ENTER.
- Enter sudo apt-get install mosquitto and press ENTER.
- Enter Y and press ENTER to continue. The MQTT broker is installed.
You can install the MQTT client to test the MQTT broker configuration.
To install the MQTT client:
- Enter sudo apt-get install mosquitto-clients and press ENTER.
- Enter Y and press ENTER to continue. The MQTT client is installed.
You can verify that the MQTT broker and client are correctly installed.
To test the initial installation:
- Enter mosquitto_sub -t "test" and press ENTER.
- Right-click the Terminal icon and select New Window to open a second terminal window.
- Select the second terminal window.
- Enter mosquitto_pub -m "message from mosquitto_pub client" -t "test" and press ENTER.
- Select the first terminal window to view the message sent from the second terminal window. You should see: message from mosquitto_pub client
- Press Ctrl+C to exit the first terminal window.
To set up a username and password:
- Enter sudo mosquitto_passwd -c /etc/mosquitto/passwd <username> and press ENTER. For example: sudo mosquitto_passwd -c /etc/mosquitto/passwd JohnSmith
- Enter a password for the username at the prompt and press ENTER.
- Re-enter the password and press ENTER.
- Enter sudo nano /etc/mosquitto/conf.d/default.conf and press ENTER to edit the default.conf file. The default.conf file opens in the nano editor. You can enforce refusal of connections from anonymous users and provide the path of the file holding all users and passwords from this file.
- Copy or enter the following two lines into the file. allow_anonymous false password_file /etc/mosquitto/passwd
- Press Ctrl+O to save the changes.
Verify the file name.
- Press ENTER. The changes are verified.
- Press Ctrl+X to exit the nano editor.
- From the terminal window, enter sudo ufw allow 1883 and press ENTER. The rule is applied. This rule ensures that the firewall allows connections on port 1883. This is the default port for the Mosquitto MQTT broker and is used for a connection using the username and password.
- Enter sudo systemctl restart mosquitto and press ENTER. Mosquitto restarts so the new configuration and rule can be used.
To test the username and password requirements:
- Enter mosquitto_sub -t "test" -u "<username>" -P "<userpassword>" and press ENTER. For example: mosquitto_sub -t "test" -u "JohnSmith" -P "XYZcorp@1"
- Open a second terminal window if you have closed it and select it.
- Enter mosquitto_pub -t "test" -m "message from mosquitto_pub client" and press ENTER to try to connect a publisher without using the correct username and password. The connection is refused. You should see: connection error: Connection Refused: not authorized.
- Enter mosquitto _pub -t "test" -m "message from mosquitto_pub client" -u "<username>" -P "<password>" and press ENTER to connect using the correct username and password.
- Select the first terminal window. View the message: message from mosquitto_pub client in the first Terminal window.
- Press Ctrl+C to exit the subscription stage in the first Terminal window.
You can create certificates and keys in the Ubuntu system home directory.
Important: If you decide not to use the bash file for the following task and instead use either the commands individually or follow other guides available, you must use the FQDN (Fully qualified domain name) for the CN (Common Name). Never use the IP address.
Refer to the following content for step 2.
To enable SSL/TSL:
- From a terminal window, enter nano and press ENTER.
- Copy the content above and paste it into the nano editor.
- Press Ctrl+O to save the changes.
- Enter generate-CA.sh to provide the file name and press ENTER. The file is created.
- Press Ctrl+X to exit the nano editor. The file is in your default directory.
- Enter sudo chmod 774 <filename> and press ENTER to set permissions. For example: sudo chmod 774 generate-CA.sh
- Enter sudo ./<filename> and press ENTER execute the bash file and create the certificates. For example: Example: sudo ./generate-CA.sh The bash file is executed. You should see: JohnSmith@JohnSmith-virtualBox: ~$ ./generate-CA.sh Generating a RSA private key The certificates and key files are in your home directory.
- Enter sudo cp ca.crt /etc/mosquitto/ca_certificates and press ENTER to copy the ca.crt to the correct folder.
- Enter sudo cp <your FQDN>.crt /etc/mosquitto/certs and press ENTER to copy the file containing the FQDN.crt to the correct folder. For example: sudo cp JohnSmith-VirtualBox.crt /etc/mosquitto/certs
- Enter sudo cp <your FQDN>.key /etc/mosquitto/certs to copy the server certificate which has the file name <your FQDN>.key. For example: sudo cp JohnSmith-VirtualBox.key /etc/mosquitto/certs
- Enter sudo nano /etc/mosquitto/conf.d/default.conf and press ENTER to allow for SSL encryption. The default.conf file opens.
- Move your cursor down using the arrow keys and paste the following lines: # Plain MQTT protocol listener 1883 # End of plain MQTT configuration # MQTT over TLS/SSL listener 8883 cafile /etc/mosquitto/ca_certificates/ca.crt certfile /etc/mosquitto/certs/<your FQDN>.crt keyfile /etc/mosquitto/certs/<your FQDN>.key require_certificate false # End of MQTT over TLS/SLL configuration
- Press Ctrl+O to save the changes.
- Press ENTER, and then press Ctrl+X to exit the nano editor.
- Enter sudo ufw allow 8883 and press ENTER to allow SSL encrypted connections on port 8883. The rule is applied.
- Enter sudo systemctl restart mosquitto and press ENTER to run the Mosquitto broker using the new configuration and rule.
To test the certificates, username, and password requirements:
- Enter mosquitto_sub --cafile /etc/mosquitto/ca_certificates/ca.crt -h <Host IP> -t "test" -p8883 -d -u "<username>" -P "<password>" and press ENTER to create a subscription. For example: mosquitto_sub --cafile /etc/mosquitto/ca_certificates/ca.crt -h 192.168.1.11 -t "test" -p 8883 -d -u "JohnSmith" -P "XYZcorp@1"
- Open a second terminal window if previously closed and select it.
- Enter mosquitto_pub -h <Host IP> -t "test" -m "hello" -p 8883 -d -u "<username>" -P "<password>" --cafile /etc/mosquitto/ca_certificates/ca.crt and press ENTER to publish a message. For example: mosquitto_pub -h 192.168.1.11 -t "test" -m "hello" -p 8883 -d -u "JohnSmith" -P "XYZcorp@1" --cafile /etc/mosquitto/ca_certificates/ca.crt
- Select the first Terminal window to view the message hello.
- Press Ctrl+C to exit the subscription stage in the first terminal window.