데이터베이스 전송 암호화 구성
Enterprise 플랜에서 사용 가능
self-hosted 배포판
이 기능은 레거시 Mattermost Enterprise Edition E20에서도 사용할 수 있습니다.
Mattermost는 TLS를 사용하여 데이터베이스와 애플리케이션 간의 트래픽을 암호화할 수 있습니다. 이 안내서에서는 단일 분리형 MySQL 서버를 위한 설정 단계를 설명합니다.
전제 조건
작동 중인 Mattermost 서버 또는 클러스터.
작동 중인 MySQL 서버.
Mattermost와 MySQL 서버 간의 연결 확인.
MySQL 서버의 Mattermost 사용자 인증 자격 증명.
예시 환경
이 시나리오에서는 Ubuntu 18.04에서 실행 중인 Mattermost 애플리케이션 서버 하나와 MySQL 서버 하나가 있으며, 각각 다음 IP를 사용합니다:
transport-encryption-mattermost1: 10.10.250.146
transport-encryption-mysql1: 10.10.250.148
MySQL 구성
첫 번째 단계로 sudo 또는 root 사용자로 두 서버에 연결합니다.
다음 명령을 실행하여 서버를 SSL 연결 준비합니다:
sudo mysql_ssl_rsa_setup --uid=mysql
이 명령은 MySQL 서버가 연결을 암호화하는 데 사용하는 /var/lib/mysql/
에 자체 서명된 인증서를 생성합니다. 회사 CA의 인증서를 사용하려는 경우 MySQL 문서에서 구성 단계를 따르십시오.
참고: 선택적으로 모든 연결이 로컬 소켓 연결 또는 TLS를 통해 이루어져야 하도록 할 수 있습니다. 이를 위해
/etc/mysql/mysql.conf.d/mysqld.cnf
를 열고 파일에 다음 줄을 추가합니다:
require_secure_transport = ON
이제 MySQL 서버로의 모든 연결은 안전한 전송이 활성화되어야 합니다.
마지막으로 서버를 다시 시작하고 작동 중인지 확인합니다:
root@transport-encryption-mysql1:~# systemctl art mysql root@transport-encryption-mysql1:~# systemctl status mysql ● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2019-10-18 16:41:25 UTC; 2s ago Process: 8380 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid (code=exited, status=0/SUCCESS) Process: 8360 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS) Main PID: 8382 (mysqld) Tasks: 27 (limit: 2361) CGroup: /system.slice/mysql.service └─8382 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid Oct 18 16:41:25 transport-encryption-mysql1 systemd[1]: Stopped MySQL Community Server. Oct 18 16:41:25 transport-encryption-mysql1 systemd[1]: Starting MySQL Community Server... Oct 18 16:41:25 transport-encryption-mysql1 systemd[1]: Started MySQL Community Server.
Mattermost 구성
Mattermost 서버에서 파일 config.json
을 열고 SqlSettings
섹션의 DataSource
값에 대해 찾습니다. 다음과 유사한 모습을 해야합니다:
"DataSource": "mmuser:sad09zusaopdhsad123@tcp(10.10.250.148:3306)/mattermost?charset=utf8mb4,utf8\u0026writeTimeout=30s",
줄 끝에, TLS가 tls
플래그로 켜져 있어야 함을 구성할 수 있습니다. 이 플래그는 다음과 같은 값을 지원합니다:
true (TLS 와 신뢰할 수 있는 인증서가 필요함)
false
skip-verify (TLS 가 필요하며, 자체 서명을 수락함)
preferred (TLS를 시도하고 암호화되지 않은 연결로 넘어감)
우리의 경우, 자체 서명된 인증서를 사용하기 때문에 skip-verify
를 사용해야 합니다. 이제 구성 설정은 다음과 같이 보일 것입니다:
"DataSource": "mmuser:sad09zusaopdhsad123@tcp(10.10.250.148:3306)/mattermost?charset=utf8mb4,utf8\u0026writeTimeout=30s&tls=skip-verify",
만약 Mattermost를 클러스터에서 실행 중이라면, 클러스터의 각 노드에서 값을 업데이트해야 합니다. 데이터베이스에서 구성을 사용 중이라면, 구성 스토어에 대해 TLS를 활성화하도록 systemd
유닛 파일을 업데이트하고 구성하세요.
완료되면 Mattermost 서버를 다시 시작하고 시스템이 작동 중인지 확인하세요:
ubuntu@transport-encryption-mattermost1:~$ sudo systemctl art mattermost
ubuntu@transport-encryption-mattermost1:~$ systemctl status mattermost
● mattermost.service - Mattermost
Loaded: loaded (/lib/systemd/system/mattermost.service; static; vendor preset: enabled)
Active: active (running) since Fri 2019-10-18 16:47:08 UTC; 3s ago
Process: 3424 ExecStartPre=/opt/mattermost/bin/pre_start.sh (code=exited, status=0/SUCCESS)
Main PID: 3443 (mattermost)
Tasks: 20 (limit: 2361)
CGroup: /system.slice/mattermost.service
├─3443 /opt/mattermost/bin/mattermost --config=mysql://mmuser:sad09zusaopdhsad123@tcp(10.10.250.148:3306)/mattermost?charset=utf8mb4,utf8&writeTimeout=30s&tls=skip-verify
└─3459 plugins/com.mattermost.nps/server/dist/plugin-linux-amd64
Oct 18 16:47:08 transport-encryption-mattermost1 mattermost[3443]: {"level":"debug","ts":1571417228.8637397,"caller":"scheduler/worker.go:36","msg":"Worker started","worker":"Plugins"}
Oct 18 16:47:08 transport-encryption-mattermost1 mattermost[3443]: {"level":"debug","ts":1571417228.8639545,"caller":"jobs/jobs_watcher.go:38","msg":"Watcher Started"}
Oct 18 16:47:08 transport-encryption-mattermost1 mattermost[3443]: {"level":"info","ts":1571417228.8641603,"caller":"jobs/schedulers.go:72","msg":"Starting schedulers."}
Oct 18 16:47:08 transport-encryption-mattermost1 mattermost[3443]: {"level":"debug","ts":1571417228.8645394,"caller":"app/web_hub.go:436","msg":"Hub for index 0 is starting with goroutine 3923"}
Oct 18 16:47:08 transport-encryption-mattermost1 mattermost[3443]: {"level":"debug","ts":1571417228.8648505,"caller":"app/web_hub.go:436","msg":"Hub for index 1 is starting with goroutine 3924"}
- Oct 18 16:47:08 transport-encryption-mattermost1 mattermost[3443]: {“level”:”debug”,”ts”:1571417228.8656101,”caller”:”web/static.go:31”,”msg”:”클라이언트 디렉터리 /opt/mattermost/client 를 사용 중”}
Oct 18 16:47:08 transport-encryption-mattermost1 mattermost[3443]: {“level”:”info”,”ts”:1571417228.8681324,”caller”:”commands/server.go:105”,”msg”:”시스템디 READY 알림을 전송중.”} Oct 18 16:47:08 transport-encryption-mattermost1 systemd[1]: Mattermost 시작됨. Oct 18 16:47:08 transport-encryption-mattermost1 mattermost[3443]: {“level”:”debug”,”ts”:1571417228.9003174,”caller”:”jobs/schedulers.go:166”,”msg”:”스케쥴러의 다음 실행 시간”,”scheduler_name”:”이주간 스케쥴링 Oct 18 16:47:08 transport-encryption-mattermost1 mattermost[3443]: {“level”:”debug”,”ts”:1571417228.9025588,”caller”:”jobs/schedulers.go:166”,”msg”:”스케쥴러의 다음 실행 시간”,”scheduler_name”:”플러그인 스케쥴링