본문 바로가기
망각의 개발자

[보안] MQTT Broker - Mosquitto ACL 설정

by t루핑_. 2025. 5. 1.

Mosquitto ACL 설정

Mosquitto에서의 ACL(Access Control List) 설정은 사용자 별퍼블리시/서브스크라이브 가능한 토픽을 제한할 수 있도록 해주는 강력한 기능

Mosquitto MQTT ACL 구성

🧾 Mosquitto ACL 설정 개요

  • Mosquitto 인증 및 접근 제어 구성 파일
    1. Password File (password_file) : Mosquitto 사용자 계정과 암호가 저장됨. mosquitto_passwd 도구로 생성 가능.
    2. ACL File (acl_file) : 사용자의 퍼블리시/서브스크라이브 권한을 설정하는 텍스트 파일.
  • Mosquitto 설정 파일 (mosquitto.conf) 예시
    allow_anonymous false
    password_file /etc/mosquitto/passwords
    acl_file /etc/mosquitto/acl
    

🛠️ Password 생성방법

  • mosquitto_passwd 명령어 사용
    • 새 파일 생성 및 사용자 등록
      mosquitto_passwd -c /etc/mosquitto/passwords username
      mosquitto_passwd -b -c /etc/mosquitto/passwords username User!Pas1234
      
    • 기존 파일에 사용자 추가
      mosquitto_passwd /etc/mosquitto/passwords another_user
      mosquitto_passwd -b /etc/mosquitto/passwords another_user AnUserP@ss
      
    • 사용자 삭제
      mosquitto_passwd -D /etc/mosquitto/passwords username
      
    • -c 옵션은 새 파일 생성 시 사용 (⛔ 기존 파일 덮어씀 주의)
    • 비밀번호는 프롬프트에서 입력하거나 -b 옵션으로 입력 가능

파일 형식 예시

user1:$2y$05$zAxTn8uDWDxg/PRBxO3eBO6e0IPGuB6syZoeR3rgO3nshReZYYK6W
user2:$2y$05$JwoZLAp9dvUOX6oVa1KAI.QNxuqAzP6LTeox4Ew5kgNC1D5bOmYOG
  • 각 줄은 username:password_hash 형식
  • 비밀번호는 bcrypt로 안전하게 해시되어 저장됨

권장 보안 설정

chmod 600 /etc/mosquitto/passwords
chown mosquitto: /etc/mosquitto/passwords

📜 ACL 파일 문법

파일 : /etc/mosquitto/acl

user <username>
topic read <topic>
topic write <topic>
topic readwrite <topic>

예시

# deny
topic deny $SYS/#

# user
user user_a
topic read command/user_a/#
topic write measure/user_a/#

# pattern
pattern read command/%u/#
pattern write measure/%u/#

user master_user
topic read measure/#
topic write command/#
  • Mosquitto 내부 시스템 토픽 (topic deny $SYS/#)
    • 모든 사용자에게 접근 차단
  • 사용자별 접근 제어 구성
    • user user_a: 특정 사용자 지정
    • topic read command/user_a/#: 본인 ID에 해당하는 토픽만 구독 가능
    • topic write measure/user_a/# : 본인 ID에 해당하는 토픽으로만 퍼블리시 가능
      • 예: measure/user_a/temp
  • 패턴 접근 제어 구성
    • %u: 현재 로그인한 사용자 이름
    • pattern read command/%u/#: 본인 ID(%u) 가 포함된 토픽만 구독 가능
    • pattern write measure/%u/#: 본인 ID(%u) 에 해당하는 토픽으로만 퍼블리시 가능

서버 설정 내용

mosquitto.conf

# TCP MQTT
#listener
listener 1883 0.0.0.0
protocol mqtt

# WEBSOCKET MQTT
# listener 9001
listener 9001 0.0.0.0
protocol websockets

allow_anonymous false
password_file /etc/mosquitto/passwords
acl_file /etc/mosquitto/acl

passwords

user_a:$7$101$XgIko7a1yeXbI0KY$m6il ...
master_user:$7$101$XgIko7a1yeXbI0KY$m6 ...
another_user:$7$101$oH0gufSlZ6 ...
...

aclfile

# 디폴트 패턴 (사용자들 기본 규칙)
pattern read command/%u/#
pattern write measure/%u/#

# master_user 별도 허용
user master_user
topic read measure/#
topic write command/#
728x90