MQTT 브로커를 Docker로 실행하고 TLS 보안을 설정하는 과정을 소개합니다. 이 글에서는 Mosquitto 브로커를 Docker 컨테이너로 실행하며, TLS 보안을 적용하여 안전한 MQTT 통신을 구성하는 방법을 다룹니다.
- 이전 문서 'MQTT TLS/SSL 인증 및 설정 가이드'를 참고해주세요.
1. Docker로 Mosquitto 브로커 실행
NCP 서버에서 Mosquitto 브로커를 Docker로 실행하여 TLS 보안을 설정합니다.
1-1. Docker 설치 확인
먼저 NCP 서버에 Docker가 설치되어 있는지 확인하세요:
docker --version
설치되어 있지 않다면, 아래 명령어를 사용해 Docker를 설치하세요:
sudo apt update
sudo apt install docker.io -y
sudo systemctl enable docker
sudo systemctl start docker
1-2. Mosquitto Docker 이미지 다운로드
Docker Hub에서 공식 Mosquitto 이미지를 다운로드합니다:
sudo docker pull eclipse-mosquitto
1-3. Mosquitto 설정 파일 준비
NCP 서버의 ~/mosquitto 디렉토리에 Mosquitto 설정 파일과 인증서를 준비합니다:
mkdir -p ~/mosquitto/config ~/mosquitto/data ~/mosquitto/log
설정 파일 mosquitto.conf 내용:
listener 8883
allow_anonymous false
password_file /mosquitto/config/passwords.txt
cafile /mosquitto/config/ca.crt
certfile /mosquitto/config/server.crt
keyfile /mosquitto/config/server.key
require_certificate true
acl_file /mosquitto/acl
1-4. ACL 파일 생성
Mosquitto에 사용할 ACL 파일을 생성합니다. ACL은 사용자가 어떤 주제(topic)에 접근할 수 있는지 정의합니다.
vi ~/mosquitto/config/acl
ACL 파일 내용:
user mosquitto_user
topic readwrite #
ACL 파일의 권한을 설정합니다:
chmod 0700 ~/mosquitto/config/acl
이유: ACL 파일은 민감한 접근 권한 정보를 포함하기 때문에 소유자만 읽고, 쓰고, 실행할 수 있도록 설정합니다.
1-5. 비밀번호 파일 생성
Mosquitto에 사용할 비밀번호 파일을 생성하고 권한을 설정합니다:
sudo mosquitto_passwd -c ~/mosquitto/config/passwords.txt mosquitto_user
chmod 0700 ~/mosquitto/config/passwords.txt
이유: 비밀번호 파일은 인증 정보를 포함하므로 보안을 위해 소유자만 접근 가능하도록 설정합니다.
- sudo mosquitto_passwd -c ~/mosquitto/config/passwords.txt mosquitto_user 명령어를 입력하면 비밀번호 입력을 요구합니다. 비밀번호를 입력해줍니다.
1-6. 인증서 복사
NCP 서버의 인증서 파일(ca.crt, server.crt, server.key)을 Mosquitto 설정 디렉토리로 복사합니다:
cp /path/to/certs/ca.crt ~/mosquitto/config/
cp /path/to/certs/server.crt ~/mosquitto/config/
cp /path/to/certs/server.key ~/mosquitto/config/
1-7. Docker 컨테이너 실행
Mosquitto 컨테이너를 실행합니다:
sudo docker run -d --name mosquitto-broker \
-p 8883:8883 \
-v ~/mosquitto/config:/mosquitto/config \
-v ~/mosquitto/data:/mosquitto/data \
-v ~/mosquitto/log:/mosquitto/log \
eclipse-mosquitto
1-8. 컨테이너 자동 실행 설정
Docker 컨테이너를 서버 재부팅 시 자동으로 실행되도록 설정합니다:
sudo docker update --restart always mosquitto-broker
1-9. 테스트 및 로그 확인
TX2와 외부 PC에서 MQTT 명령어로 통신 테스트를 진행합니다. 로그를 확인하여 문제가 없는지 확인하세요:
sudo docker logs mosquitto-broker
2. Docker 컨테이너 내부 접근
Docker 컨테이너 내부에 접근하고 싶을 경우 다음 명령어를 사용하세요:
sudo docker exec -it mosquitto-broker /bin/sh
설명
- docker exec: 실행 중인 컨테이너 내부에서 명령을 실행합니다.
- -it: 컨테이너 내부와 상호작용할 수 있는 세션을 엽니다.
- mosquitto-broker: 대상 컨테이너 이름입니다.
- /bin/sh: 경량화된 Mosquitto 이미지에서 사용 가능한 기본 셸입니다.
3. NCP 서버를 브로커로 설정하고 TX2와 외부 PC 테스트
NCP 서버를 브로커로 설정하여 TX2에서 신호를 전송하고, 외부 PC에서 이를 수신하는 테스트 과정을 다룹니다.
3-1. Mosquitto 브로커 실행 명령어
sudo mosquitto_sub -h <NCP 서버 IP> -p 8883 \
--cafile /etc/mosquitto/certs/ca.crt \
--cert /etc/mosquitto/certs/client.crt \
--key /etc/mosquitto/certs/client.key \
--username mosquitto_user --pw your_password -t secure/topic
sudo mosquitto_pub -h <NCP 서버 IP> -p 8883 \
--cafile /your_path/ca.crt \
--cert /your_path/client.crt \
--key /your_path/client.key \
--username mosquitto_user --pw your_password -t secure/topic -m "Hello, MQTT with TLS!"
- your_path에는 ca.crt, client.crt, client.key의 경로로 수정해줍니다.
- your_password는 아까 입력한 비밀번호를 넣어줍니다.
3-2. 테스트 성공
위 명령어를 통해 TLS 보안을 적용한 MQTT 통신이 성공적으로 이루어졌습니다.
결론
이제 NCP 서버는 브로커 서버 역할을 하며, TX2에서 신호를 보내고 외부 PC에서 이를 수신하는 MQTT 통신 테스트를 성공적으로 마쳤습니다. Docker를 사용해 Mosquitto 브로커를 안전하게 실행하고 TLS 보안을 적용하여 통신의 신뢰성을 확보할 수 있습니다.
추가 문의 사항이 있으면 언제든 댓글로 남겨주세요!
'임베디드 관련 카테고리 > 프로토콜' 카테고리의 다른 글
SSL, TLS, SSH, SCP, 원격 접속 및 네트워크 통신의 이해 (0) | 2025.01.15 |
---|---|
Paho 라이브러리란 무엇인가? (0) | 2025.01.13 |
MQTT Explorer를 사용하여 NCP 서버의 신호 확인하기 (0) | 2024.12.15 |
MQTT TLS/SSL 인증 및 설정 가이드 (0) | 2024.12.12 |
MQTT와 RabbitMQ 비교 및 이해 (2) | 2024.12.11 |
댓글