데이터베이스 전송 암호화 구성

plans-img Enterprise 플랜에서 사용 가능

deployment-img 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”:”플러그인 스케쥴링