YOGYUI

Mosquitto authentication (사용자 인증) 설정 본문

Hardware/Raspberry Pi

Mosquitto authentication (사용자 인증) 설정

요겨 2021. 1. 13. 13:07
반응형

mosquitto

MQTT broker 서비스 mosquitto에 사용자 인증 기능을 추가해 최소한의 보안을 확보하자

참고: www.steves-internet-guide.com/mqtt-username-password-example/ 

1. 패스워드 파일(텍스트) 생성

터미널에서 다음 명령 수행 (최초 파일 생성) 후 비밀번호를 두 차례 입력해주면 파일이 생성된다

mosquitto_passwd -c [파일이름] [사용자이름(id)]

실행결과 >>

pi@raspberrypi:~ $ mosquitto_passwd -c pl.txt yogyui
Password: 
Reenter password: 
pi@raspberrypi:~ $ cat pl.txt
yogyui:$6$xP5SA187Rwgqdoix$0LEE1yR0kQ7pqT4calekhqN3dj3hJ0eTk6DlgzL4G3cniZH9xc7Mc5QstBNTp+B9og+9D8npI/nux1ONL5IqkQ==

내가 입력한 암호가 암호화되어 텍스트로 저장된 것을 알 수 있다

 

동일한 파일에 사용자 추가는 다음 명령으로 수행

mosquitto_passwd -b [파일이름] [사용자이름(id)] [비밀번호]

실행 결과 >>

pi@raspberrypi:~ $ mosquitto_passwd -b pl.txt yogyui2 12345678
pi@raspberrypi:~ $ cat pl.txt
yogyui:$6$xP5SA187Rwgqdoix$0LEE1yR0kQ7pqT4calekhqN3dj3hJ0eTk6DlgzL4G3cniZH9xc7Mc5QstBNTp+B9og+9D8npI/nux1ONL5IqkQ==
yogyui2:$6$zeRgkUOW0+oXUaE6$ZGQMFBoWUanu0Im3U/u/15j78nLVh5uK/687voiCV0JpRRvMHWCW+wsqTweJ9YEqRxJeUAbBK58n8zad3PGp/g==

 

사용자 삭제는 다음 명령으로 수행

mosquitto_passwd -D [파일이름] [사용자이름(id)]

실행 결과 >>

pi@raspberrypi:~ $ mosquitto_passwd -D pl.txt yogyui2
pi@raspberrypi:~ $ cat pl.txt
yogyui:$6$xP5SA187Rwgqdoix$0LEE1yR0kQ7pqT4calekhqN3dj3hJ0eTk6DlgzL4G3cniZH9xc7Mc5QstBNTp+B9og+9D8npI/nux1ONL5IqkQ==

 

mosquitto 설치 경로로 생성된 파일 이동

pi@raspberrypi:~ $ sudo mv pl.txt /etc/mosquitto/pl.txt
pi@raspberrypi:~ $ ls /etc/mosquitto
ca_certificates  certs  conf.d  mosquitto.conf  pl.txt

2. Config 파일 수정

mosquitto.conf 파일에서 필요한 부분을 수정
(allow_anonymous, password_file, log_dest 속성만 추가, 설정할 수 있는 속성들에 대한 문서는 mosquitto.org/man/mosquitto-conf-5.html 참고)

# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
per_listener_settings false

pid_file /var/run/mosquitto.pid

persistence true
persistence_location /var/lib/mosquitto/

log_dest file /var/log/mosquitto/mosquitto.log

include_dir /etc/mosquitto/conf.d

allow_anonymous false
password_file /etc/mosquitto/pl.txt
log_dest stdout

3. Mosquitto 실행 및 동작 확인

mosquitto 실행 (파라미터 -c 에 config 파일 경로 지정)

sudo mosquitto -c /etc/mosquitto/mosquitto.conf

Python으로 간단하게 접속 시도하는 테스트 코드를 만들어보자

import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    print(">> Connected flags ", str(flags), "result code ", str(rc))

def on_disconnect(client, userdata, flags, rc=0):
    print(">> Disconnected flags ", str(flags), "result code ", str(rc))

client = mqtt.Client()
client.on_connect = on_connect
client.on_disconnect = on_disconnect
print('wrong password')
client.username_pw_set(username="yogyui", password="12345677")  # wrong password
client.connect('localhost', 1883)
client.loop_start()
client.loop_stop()
client.disconnect()

print('correct password')
client.username_pw_set(username="yogyui", password="12345678")  # correct password
client.connect('localhost', 1883)
client.loop_start()
client.loop_stop()
client.disconnect()

python console log

wrong password
>> Connected flags  {'session present': 0} result code  5
>> Disconnected flags  5 result code  0
correct password
>> Connected flags  {'session present': 0} result code  0
>> Disconnected flags  0 result code  0

Result code 0 =connection success, 5 = connection failed

 

mosquitto console log

Mosquitto console log를 보면 잘못된 인증 정보는 socket error를 발생시킨 후 자동으로 접속 종료된다

이로써 최소한의 MQTT 보안은 확보된듯하다

(사실 맘먹고 달려들면 왠만하면 뚫릴만한 수준)

반응형
Comments