웹사이트 검색

Debian 11에 Mosquitto MQTT 메시지 브로커를 설치하는 방법


이 페이지에서

  1. 전제 조건
  2. Mosquitto 서버 및 클라이언트 설치
  3. Mosquitto에서 인증 설정
  4. SSL/TLS 인증서로 Mosquitto 보안
  5. Mosquitto에서 WebSocket 활성화\n
  6. 결론

Eclipse Mosquitto는 MQTT 프로토콜의 무료 오픈 소스 메시지 브로커 구현입니다. Mosquitto는 MQTT 버전 3.1.0, 3.1.1 및 버전 5.0을 구현합니다. Mosquitto는 여러 유형의 배포 및 사용에 적합한 경량 메시지 브로커입니다.

Mosquitto는 게시/구독 모델을 사용하여 메시지를 전달하는 메시지 브로커입니다. 낮은 대역폭을 사용하고 구현 용이성을 제공하므로 소형 장치 및 IoT(사물 인터넷), 모바일 장치, 임베디드 컴퓨터 및 마이크로 컨트롤러에 대한 배포에 적합합니다.

이 튜토리얼에서는 Mosquitto MQTT Message Broker를 Debian 11 서버에 설치 및 구성하는 과정, 인증 설정, SSL/TLS 인증서를 통한 Mosquitto 보안, Mosquitto에서 WebSocket 활성화 과정을 잘 살펴봅니다.

전제 조건

시작하려면 이 자습서를 완료하려면 다음 요구 사항이 있어야 합니다.

  • 데비안 11 서버 - 이 데모는 호스트 이름이 mosquitto-server인 데비안 서버를 사용합니다.\n
  • 루트/관리자 권한이 있는 루트가 아닌 사용자.\n

Mosquitto 서버 및 클라이언트 설치

Mosquitto는 Windows, Linux, BSD 및 macOS와 같은 여러 플랫폼에서 사용할 수 있고 설치할 수 있는 오픈 소스 MQTT 메시지 브로커입니다. Debian Linux 배포판의 경우 Mosquitto는 기본 Debian 리포지토리에서 사용할 수 있으므로 APT를 통해 쉽게 설치할 수 있습니다.

이 단계에서는 Debian 서버에서 Mosquitto 서버 및 클라이언트 설치 프로세스를 진행합니다. 또한 Mosquitto 명령줄(mosquitto_sub 및 mosquitto_pub)의 기본 사용법을 살펴보고 Mosquitto 서버 설치를 확인합니다.

먼저 아래의 apt 명령을 통해 Debian 패키지 인덱스를 업데이트하고 새로 고칩니다.

sudo apt update

다음 apt 명령을 사용하여 mosquitto 패키지를 검색합니다.

sudo apt search mosquitto

Mosquitto 서버 애플리케이션 및 클라이언트를 포함하는 Debian 리포지토리에서 기본적으로 사용 가능한 일부 Mosquitto 패키지가 표시되어야 합니다.

이제 아래의 apt 명령을 실행하여 Mosquitto 패키지를 설치하십시오. 메시지가 표시되면 y를 입력하여 확인하고 ENTER를 눌러 계속 진행합니다.

sudo apt install mosquitto mosquitto-clients

Mosquitto가 설치된 후 다음 systemctl 명령을 통해 Mosquitto 서비스를 확인하십시오.

sudo systemctl is-enabled mosquitto
sudo systemctl status mosquitto

그러면 Mosquitto 서비스가 활성화되고 부팅 시 자동으로 실행됩니다. 그리고 Mosquitto 서비스의 현재 상태가 실행 중입니다.

이제 Mosquitto 서버가 실행 중이므로 클라이언트 명령줄 mosquitto_submosquitto-pub을 통해 Mosquitto를 확인합니다.

간단히 말해서 mosquitto_submosquitto_pub(게시자)로부터 메시지(구독자)를 수신하기 위한 명령줄 도구입니다.

test 주제에 대한 일부 메시지를 수신하려면 다음 mosqitto_sub 명령을 실행하십시오.

sudo mosquitto_sub -h localhost -t test

다음으로, 서버의 새 터미널 세션을 열고 다음 mosquitto_pub 명령을 실행하여 주제 test에 일부 메시지를 보냅니다.

sudo mosquitto_pub -h localhost -t test -m "Hello from terminal 2"
sudo mosquitto_pub -h localhost -t test -m "Hello from terminal 2 - Publisher"
sudo mosquitto_pub -h localhost -t test -m "Hello"

그러면 수신기 mosquitto_submosquitto_pub을 통해 게시된 메시지가 표시되며 이는 Mosquitto 서버 및 클라이언트 설치가 성공적임을 의미합니다.

Mosquitto에서 인증 설정

기본 Mosquitto 설치는 인증 없이 제공됩니다. 배포를 보호하려면(특히 프로덕션에서) Mosquitto 서버에서 인증을 활성화해야 합니다. Mosquitto에서 사용자를 생성 및 정의하고 사용자 이름/암호 인증을 통해 Mosquitto Sub 및 Pub를 보호할 수 있습니다.

다음 명령을 실행하여 새 Mosquitto 사용자 및 비밀번호를 생성하십시오. 이 데모는 사용자 alice를 사용하며 암호는 파일 /etc/mosquitto/.passwd에서 생성 및 해시됩니다.

sudo mosquitto_passwd -c /etc/mosquitto/.passwd alice

Mosquitto 사용자 alice의 암호를 입력하고 암호를 반복합니다.

사용자 이름/암호가 생성된 후 다음 nano 편집기 명령을 사용하여 새 Mosquitto 구성 /etc/mosquitto/conf.d/auth.conf을 생성합니다.

sudo nano /etc/mosquitto/conf.d/auth.conf

파일에 다음 구성을 추가합니다. 이렇게 하면 1883 포트에서 Mosquitto가 실행되고 익명 액세스가 비활성화되며 암호 파일이 /etc/mosquitto/.passwd에 정의됩니다.

listener 1883
allow_anonymous false
password_file /etc/mosquitto/.passwd

파일을 저장하고 완료되면 편집기를 종료하십시오.

그런 다음 Mosquitto 서비스를 다시 시작하여 새로운 변경 사항을 적용하십시오. Mosquitto 서버는 이제 인증이 활성화된 상태로 실행되어야 합니다.

sudo systemctl restart mosquitto

인증 Mosquitto 서버를 확인하려면 mosquitto_submosquitto_pub 명령을 사용할 수 있습니다.

게시/구독 프로세스 중에 사용자 이름/암호를 제공하지 않으면 거부되며 연결이 거부됩니다. 그러나 인증을 위해 사용자 이름/비밀번호를 제공했고 올바른 자격 증명이 있는 경우 Mosquitto 구독자 및 게시자를 통해 메시지를 보내고 받을 수 있습니다.

다음 명령을 실행하여 인증 없이 Mosquitto에서 Pub 및 Sub를 확인합니다.

# session - Mosquitto Subscriber
sudo mosquitto_sub -h localhost -t test

# session - Mosquitto Publisher
sudo mosquitto_pub -h localhost -t test -m "Hello again from terminal 2"

그러면 인증 없이 Mosquitto 서버에 대한 두 연결이 승인되지 않았기 때문에 거부되고 메시지를 주고받을 수 없다는 것을 알 수 있습니다.

다음으로 다음 명령을 실행하여 사용자 및 암호로 Mosquitto의 Pub 및 Sub를 확인합니다.

# session - Mosquitto Subscriber
sudo mosquitto_sub -h localhost -t test -u "alice" -P "p4ssw0rd"

# session - Mosquitto Publisher
sudo mosquitto_pub -h localhost -t "test" -m "Hello - enabled auth" -u "alice" -P "p4ssw0rd"

Mosquitto 자격 증명이 정확하면 Mosquitto 구독자와 게시자 모두에 연결되고 Mosquitto 명령줄을 통해 메시지를 보내고 받을 수 있습니다.

Mosquitto 서버가 실행되고 인증이 활성화되면 이제 보안 메시지 브로커가 있어야 합니다. 그러나 보안을 강화하기 위해 로컬 Mosquitto 데이터 전송 및 연결에 SSL/TLS 인증서를 통해 인증을 추가할 수도 있습니다.

SSL/TLS 인증서로 Mosquitto 보안

Mosquitto 서버는 인증을 통해 보호되지만 Mosquitto 배포를 보호하려면 몇 가지 단계를 거쳐야 합니다. 여기에는 Mosquitto 서버와 애플리케이션 간의 데이터 전송을 암호화하는 SSL/TLS 인증서 구현이 포함됩니다.

시작하기 전에 로컬 환경에 대해 생성된 SSL/TLS 인증서가 있는지 확인하십시오.

시작하려면 다음 openssl 명령을 실행하여 dhparam 인증서를 생성하십시오. 이렇게 하면 /etc/mosquitto/certs/dhparam.pem에 DHPARAM 인증서가 생성됩니다.

sudo openssl dhparam -out /etc/mosquitto/certs/dhparam.pem 2048

이제 아래의 chmod 명령을 통해 Mosquitto 인증서 디렉토리의 소유권을 사용자 mosquitto로 변경하십시오.

sudo chown -R mosquitto: /etc/mosquitto/certs

다음으로, 다음 나노 편집기 명령을 사용하여 새로운 추가 구성 /etc/mosquitto/conf.d/ssl.conf을 만듭니다. 이를 통해 SSL/TLS 인증서를 통해 Mosquitto 서버에서 보안 연결을 활성화합니다.

sudo nano /etc/mosquitto/conf.d/ssl.conf

파일에 다음 구성을 추가합니다. 이렇게 하면 포트 8883에서 TLS가 활성화된 Mosquitto가 실행됩니다. 따라서 SSL/TLS 인증서의 경로를 반드시 변경하시기 바랍니다.

listener 8883

certfile /etc/letsencrypt/live/msqt.hwdomain.io/fullchain.pem
cafile /etc/letsencrypt/live/msqt.hwdomain.io/chain.pem
keyfile /etc/letsencrypt/live/msqt.hwdomain.io/privkey.pem
dhparamfile /etc/mosquitto/certs/dhparam.pem

파일을 저장하고 완료되면 편집기를 종료하십시오.

이제 다음 systemctl 명령을 실행하여 Mosquitto 서비스를 다시 시작하고 새로운 변경 사항을 적용하십시오. 이제 보안 TLS가 활성화된 상태에서 Mosquitto 서버가 실행됩니다.

sudo systemctl restart mosquitto

SSL/TLS가 활성화된 상태에서 보안 연결을 통해 Mosquitte 가입자에게 메시지를 전송하여 구성을 확인합니다.

다음 mosquitto_sub 명령을 실행하여 현재 터미널 세션에서 Mosquitte 구독자를 엽니다.

sudo mosquitto_sub -h localhost -t test -u "alice" -P "p4ssw0rd"

그런 다음 새 세션을 열고 서버에 연결한 후 다음 명령을 실행하여 Mosquitto 서버에 메시지를 보냅니다. 이를 통해 8883 포트에서 실행되는 SSL/TLS 연결을 통해 Mosquitto 서버 msqt.hwdomain.io에 연결합니다.

sudo mosquitto_pub -h msqt.hwdomain.io -t test -m "hello again - with SSL enabled" -p 8883 --capath /etc/ssl/certs/ -u "alice" -P "p4ssw0rd"

이제 Mosquitto 구독자 셸에서 메시지를 받아야 합니다. Mosquitto 생산자는 포트 8883에서 실행되는 보안 SSL/TLS 연결을 통해 Mosquitto 구독자에게 메시지를 보냅니다.

Mosquitto에서 WebSocket 활성화

이 시점에서 Mosquitto 서버를 설치하고 사용자 이름/암호 인증 및 SSL/TLS 보안 연결을 활성화하여 설치를 보호했습니다. 그런 다음 Mosquitto 서버에서 MQTT를 통해 WebSocket을 활성화하는 방법을 배웁니다.

WebSocket은 통신 시작 시(오픈 핸드셰이크 동안) 열린 동일한 연결을 재사용하여 서버와 클라이언트 간에 지속적인 전이중 채널을 제공하는 상태 저장 통신 프로토콜입니다.

시작하려면 다음 nano 편집기 명령을 사용하여 새 구성 /etc/mosquitto/conf.d/websockets.conf을 만드십시오.

sudo nano /etc/mosquitto/conf.d/websockets.conf

파일에 다음 구성을 추가합니다. 이렇게 하면 WebSockets 프로토콜이 활성화되고 SSL/TLS 인증서를 통해 보안이 유지됩니다. WebSocket은 포트 8083에서 실행됩니다.

listener 8083
protocol websockets
certfile /etc/letsencrypt/live/msqt.hwdomain.io/fullchain.pem
cafile /etc/letsencrypt/live/msqt.hwdomain.io/chain.pem
keyfile /etc/letsencrypt/live/msqt.hwdomain.io/privkey.pem

파일을 저장하고 완료되면 편집기를 종료하십시오.

그런 다음 다음 systemctl 명령을 실행하여 Mosquitto 서비스를 다시 시작하고 새 변경 사항을 적용합니다. Mosquitto 서버는 이제 보안 SSL/TLS 연결 위에 활성화된 WebSocket으로 실행됩니다.

sudo systemctl restart mosquitto

WebSockets 구성을 확인하려면 Linux, Windows 및 macOS와 같은 주요 운영 체제에서 사용할 수 있는 MQTT Explorer와 같은 타사 도구를 통해 Mosquitto에 연결할 수 있습니다.

아래는 WebSockets 연결이 있는 MQTT 탐색기입니다.

연결되면 다음 대시보드가 표시됩니다.

결론

이 가이드에서는 Debian 11 서버에 Mosquitto MQTT Message Broker를 설치하는 방법을 배웠습니다. 또한 사용자 이름/암호 인증을 활성화하고 SSL/TLS 인증서를 통해 Mosquitto 데이터 전송 및 연결을 보호하여 Mosquitto 서버를 보호하는 방법도 배웠습니다. 그 외에도 Mosquitto 서버에서 WebSockets 프로토콜을 활성화하여 구독자와 생산자 간의 비동기 연결을 설정할 수 있습니다.

이제 여기에서 고가용성 Mosquitto 클러스터를 생성하거나 Cedalo Management Center를 통해 Mosquitto 관리 대시보드를 설정하여 Mosquitto 설치를 활용할 수 있습니다.