웹사이트 검색

CentOS 7에서 MySQL에 대한 SSL 및 원격 연결을 활성화하는 방법


이 페이지에서

  1. 1단계 - MySQL 설치
  2. 2단계 - MySQL 루트 암호 구성\n
  3. 3단계 - 새 자체 서명 인증서 파일 생성
  4. 4단계 - MySQL용 SSL 활성화\n
  5. 5단계 - 원격 연결 활성화\n
  6. 6단계 - 테스트
  7. 참조

MySQL은 Windows, Linux, MacOS 및 FreeBSD를 포함한 많은 운영 체제에서 작동하는 오픈 소스 관계형 데이터베이스 시스템입니다. 아마도 가장 인기 있는 OpenSource RDBMS이자 LAMP 및 LEMP 스택의 핵심 구성요소일 것입니다. Wordpress, Joomla, TYPO3, phpBB 등과 같이 MySQL에 의존하는 많은 애플리케이션이 있습니다.

이 자습서에서는 원격 연결을 위해 MySQL을 안전하게 구성하는 방법을 단계별로 보여줍니다. 원격으로 MySQL에 액세스해야 하는 경우 MySQL이 전송된 데이터를 암호화하지 않기 때문에 VPN을 사용해야 하거나 이 튜토리얼에서 보여주듯이 SSL을 사용하도록 MySQL을 구성할 수 있습니다. 이 구성에서는 올바른 SSL 인증서 파일이 있는 사용자만 MySQL 서버에 연결할 수 있으며 트래픽이 암호화됩니다. 최신 버전의 MySQL을 설치한 다음 원격 연결을 위해 SSL을 구성합니다. 기본 시스템의 경우 CentOS 7 서버를 사용합니다.

우리가 할 일:

  1. MySQL을 설치합니다.\n
  2. MySQL 루트 암호를 구성합니다.\n
  3. 새 자체 서명 SSL 인증서 파일을 생성합니다.\n
  4. MySQL용 SSL을 활성화합니다.\n
  5. 원격 연결을 활성화합니다.\n
  6. 테스트 중.

전제 조건

  • CentOS 7 서버
  • 루트 권한\n

1단계 - MySQL 설치

이 튜토리얼에서는 현재 최신 버전인 MySQL 5.7을 사용합니다. MySQL 리포지토리에서 설치되므로 먼저 시스템에 새 CentOS 리포지토리를 추가해야 합니다.

아래의 yum 명령을 사용하여 MySQL용 새 리포지토리를 추가합니다.

yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

새 패키지를 설치하라는 메시지가 표시되면 y를 입력하고 Enter 키를 눌러 확인합니다.

이제 다음과 같이 서버에 MySQL 최신 버전 5.7을 설치할 수 있습니다.

yum -y install mysql-community-server

설치가 완료되면 MySQL 서비스를 시작하고 systemctl 명령으로 부팅 시 자동으로 실행되도록 합니다.

systemctl start mysqld
systemctl enable mysqld

MySQL이 사용하는 포트(3306)를 확인하여 MySQL이 실행 중인지 확인합니다. 아래 netstat 명령으로 확인하세요.

netstat -plntu

MySQL은 MySQL 리포지토리에서 CentOS 7에 설치되었습니다.

2단계 - MySQL 루트 암호 구성

기본적으로 MySQL 5.7은 서비스를 처음 시작할 때 기본 루트 비밀번호를 생성합니다. 암호는 MySQL 로그 파일 /var/log/mysqld.log에 저장됩니다.

기본 MySQL 루트 암호를 보려면 아래의 grep 명령을 사용할 수 있습니다.

grep 'temporary' /var/log/mysqld.log

아래와 비슷한 결과가 표시되며 내 기본 비밀번호는 wxtX8Te&Uh1K입니다.

A temporary password is generated for : wxtX8Te&Uh1K

기본 암호를 사용하여 MySQL 셸에 연결하고 암호를 자신의 암호로 바꿉니다.

mysql -u root -p
TYPE IN DEFAULT PASSWORD

이제 기본 비밀번호를 자신의 비밀번호로 바꾸십시오. 이 가이드에서는 새 MySQL 루트 비밀번호로 [email 를 사용하겠습니다. 아래에서 MySQL 쿼리를 실행합니다.

ALTER USER 'root'@'localhost' IDENTIFIED BY '';
flush privileges;
exit;

이제 새 비밀번호[email 로 다시 연결할 수 있습니다.

mysql -u root -p
TYPE NEW PASSWORD ''

3단계 - 새 자체 서명된 인증서 파일 생성

기본적으로 MySQL 5.7에는 /var/lib/mysql 디렉토리에 자체 SSL 인증서 파일이 있습니다. 하지만 이 튜토리얼에서는 OpenSSL로 자신의 SSL 인증서 파일을 생성한 다음 MySQL로 구성하는 방법을 보여드리겠습니다.

이 단계에서는 새로운 자체 서명된 인증서 파일을 생성합니다. CA 인증서, 서버 인증서 및 키, 클라이언트 인증서 및 키의 3가지 인증서가 필요합니다. OpenSSL로 만들 것입니다.

SSL 인증서 파일 /etc/certs/에 대한 새 디렉터리를 생성하고 해당 디렉터리로 이동합니다.

mkdir -p /etc/certs
cd /etc/certs

새 CA 인증서 ca.pem 파일을 생성합니다.

openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca.pem

다음으로 서버 측 인증서를 만들어야 합니다. 새 서버 인증서 server-cert.pem 및 server-key.pem 파일을 만듭니다. 새 인증서 파일을 생성하고 암호를 제거한 다음 CA 인증서로 서명하십시오.

openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem
openssl rsa -in server-key.pem -out server-key.pem
openssl x509 -req -in server-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem

이제 클라이언트에 대한 인증서 파일을 생성하십시오. MySQL 서버는 이러한 인증서 파일이 있는 클라이언트의 원격 연결만 수락합니다. 새 클라이언트 인증서 파일을 생성하고 암호를 제거한 다음 CA 인증서를 사용하여 서명합니다.

openssl req -newkey rsa:2048 -days 3600 -nodes -keyout client-key.pem -out client-req.pem
openssl rsa -in client-key.pem -out client-key.pem
openssl x509 -req -in client-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem

메모:

CA 인증서 정보는 클라이언트 및 서버 정보와 달라야 합니다.

이 설정에 필요한 모든 인증서가 생성되었습니다. 이제 아래 명령으로 인증서 파일을 확인할 수 있습니다.

openssl verify -CAfile ca.pem server-cert.pem client-cert.pem

오류가 없는지 확인하고 결과는 아래와 같습니다.

모든 인증서 파일이 확인되었습니다. certs 디렉터리의 소유자를 mysql 사용자로 변경하고 모든 키 파일의 권한을 변경합니다.

chown -R mysql:mysql /etc/certs/
chmod 600 client-key.pem server-key.pem ca-key.pem

4단계 - MySQL용 SSL 활성화

이 단계에서는 MySQL용 SSL을 활성화합니다. MySQL에서 SSL을 구성하고 활성화하기 전에 기본 인증서 파일을 새 백업 디렉터리에 백업해야 합니다.

모든 인증서에 대한 새 백업 디렉토리 mysql-certs를 생성합니다.

mkdir -p ~/mysql-certs/

/var/lib/mysql 디렉터리로 이동하고 모든 기본 인증서를 백업 디렉터리로 이동합니다.

cd /var/lib/mysql/
mv ca.pem ca-key.pem ~/mysql-certs/
mv server-key.pem server-cert.pem ~/mysql-certs/
mv client-key.pem client-cert.pem ~/mysql-certs/
mv private_key.pem public_key.pem ~/mysql-certs/

이제 MySQL 서비스를 다시 시작하십시오.

systemctl restart mysqld

다음으로 MySQL 셸에서 SSL을 확인합니다. 새 암호로 mysql에 로그인합니다.

mysql -u root -p
TYPE NEW PASSWORD ''

MySQL의 SSL 상태를 볼 수 있도록 아래 쿼리를 실행합니다.

SHOW GLOBAL VARIABLES LIKE '%ssl%';
STATUS;

SSL 상태가 DISABLED이고 루트 사용자가 SSL 없이 연결되었음을 알 수 있습니다.

다음으로 MySQL에 대한 SSL 연결을 활성화합니다. vim으로 MySQL 구성 파일 my.cnf 파일을 편집해야 합니다.

vim /etc/my.cnf

[mysqld] 섹션에 아래 구성을 붙여넣습니다.

# Type your own certificates directory
ssl-ca=/etc/certs/ca.pem
ssl-cert=/etc/certs/server-cert.pem
ssl-key=/etc/certs/server-key.pem

파일을 저장하고 vim을 종료하고 MySQL 서비스를 다시 시작합니다.

systemctl restart mysqld

이제 MySQL에 다시 로그인하고 SSL을 확인하십시오.

mysql -u root -p
TYPE NEW PASSWORD ''

아래 쿼리를 실행하여 SSL 섹션 값이 YES인지 확인하십시오.

SHOW VARIABLES LIKE '%ssl%';
STATUS;

MySQL용 SSL이 활성화되어 있지만 루트 사용자가 여전히 SSL 연결을 사용하여 연결되어 있지 않은 것을 볼 수 있습니다.

SSL로 모든 로컬 사용자 연결을 강제하려면 mysql 구성 파일 my.cnf를 다시 편집하십시오.

vim /etc/my.cnf

아래 구성을 줄 끝에 붙여넣습니다.

[client]
ssl-ca=/etc/certs/ca.pem
ssl-cert=/etc/certs/client-cert.pem
ssl-key=/etc/certs/client-key.pem

저장하고 종료한 다음 MySQL을 다시 시작하십시오.

systemctl restart mysqld

MySQL에 다시 연결하고 연결 및 SSL 활성화를 확인하십시오.

mysql -u root -p
TYPE NEW PASSWORD ''


SHOW VARIABLES LIKE '%ssl%';
STATUS;

SSL이 활성화되었으며 로컬 연결에서도 SSL을 사용합니다.

5단계 - 원격 연결 활성화

위의 단계에서 우리는 이미 MySQL 서버에 대해 SSL을 활성화했으며 로컬 연결은 SSL을 사용하도록 강제됩니다. 이 단계에서는 MySQL에 대한 원격 연결을 활성화하지만 CA에서 서명한 인증서 파일이 있는 클라이언트만 MySQL 서버에 연결할 수 있습니다.

vim으로 MySQL 구성 파일을 편집합니다.

vim /etc/my.cnf

아래의 [mysqld] 섹션 끝에 이 구성을 붙여넣습니다.

bind-address = *
require_secure_transport = ON

파일을 저장하고 편집기를 종료하면 MySQL이 다시 시작됩니다.

systemctl restart mysqld

그런 다음 원격 연결을 위한 새 사용자를 만듭니다. 비밀번호가 [email 인 hakase라는 새 사용자를 만들고 hakase 사용자에게 모든 권한을 부여합니다. hakase 사용자는 인증서 키로만 연결할 수 있습니다.

mysql -u root -p
TYPE NEW PASSWORD '' REQUIRE X509;
flush privileges;

원격 접속을 위한 새로운 사용자가 생성되었습니다.

메모:

mysql 쿼리 결과에 경고 1개가 표시될 수 있습니다. GRANT 쿼리는 다음 릴리스에서 더 이상 사용되지 않으므로 GRANT 대신 ALTER USER 쿼리를 사용하는 것에 대한 경고입니다.

6단계 - 테스트

이 자습서의 마지막 섹션에서는 hakase라는 새 사용자가 인증서 파일을 사용하여 원격으로 MySQL 서버에 연결할 수 있는지 테스트합니다. 클라이언트용 인증서 3개를 다운로드해야 합니다.

  1. CA 인증서 - ca.pem
  2. 클라이언트 인증서 - client-cert.pem
  3. 클라이언트 키 - client-key.pem

다른 Linux 시스템에 로그인하여 거기에 mysql-client 패키지를 설치했습니다. 그런 다음 SCP로 모든 클라이언트 인증서 파일을 다운로드했습니다. 이제 인증서 파일을 사용하여 MySQL 서버에 연결하겠습니다.

mysql -h 10.0.15.11 -u hakase \
--ssl-ca=ca.pem \
--ssl-cert=client-cert.pem \
--ssl-key=client-key.pem -p

10.0.15.11=MySQL 서버의 IP 주소.

아래에서 이 쿼리로 연결 상태를 확인할 수 있습니다.

STATUS;

IP 주소가 10.0.15.10인 사용자 hakase IP 주소가 10.0.15.11인 MySQL 서버에 연결되고 포트 3306에서 TCP/IP를 통해 SSL을 사용하여 연결됩니다.

인증서 파일 없이 접속을 시도하면 아래와 같은 오류가 발생합니다.

다음으로 호스트에서 MySQLWorkbench GUI로 테스트하겠습니다.

아래는 내 구성 - 매개변수 설정입니다.

SSL 구성 - SSL 설정.

그리고 아래는 SSL 클라이언트 인증서 파일과의 연결 결과입니다.

새 사용자가 SSL 연결을 통해 MySQL 데이터베이스 서버에 원격으로 성공적으로 연결되었습니다. 사용자가 인증서 파일 없이 연결을 시도하면 결과가 거부됩니다. SSL 연결을 통한 MySQL 설치 및 구성이 성공적으로 완료되었습니다.

참조

  • http://mysqlresources.com/grant-connection-restrictions-types