[sql] MySQL 연결 포트 접근을 제어하기

MySQL은 설치되는 리눅스 배포판에 따라서사용 포트인 3306 포트가 기본 설정으로 열려 있는 경우가 있습니다. 대표적으로 센토스 계열 배포판은 MySQL 3306 포트가 외부에서 접근이 가능한 상태로 설치됩니다.

3306 포트 접근을 차단하는 방법은 두 가지가 있습니다.

  1. MySQL의 네트워킹 기능 비활성화
  2. 리눅스 방화벽에서 3306 포트 차단

첫 번째 방식이 가장 선호되고 확실한 방법입니다. 관리하는 방식에 따라서는 방화벽으로 3306 포트를 막아서 보안 관리를 하기도 합니다. 임시 조치로 3306 포트를 막는게 아니면 두 가지 모두를 하는 것을 권장합니다.

1. MySQL 네트워킹 비활성화

센토스


외부 컴퓨터에서 MySQL에 액세스할 필요가 없는 경우, MySQL 네트워킹 기능을 비활성화할 수 있습니다.

  1. 터미널 명령 프롬프트에서 텍스트 편집기를 사용해 /etc/my.cnf 파일을 엽니다.
  2. my.cnf 파일에서 다음 행을 찾습니다.
    #skip-networking
    이 줄이 my.cnf 파일에 없다면 추가합니니다.
  3. 줄의 처음에 있는 # 기호를 삭제하여 다음과 같이 만듭니다. #은 해당 행을 주석으로 처리합니다.
    skip-networking
  4. /etc/my.cnf 파일을 저장합니다.
  5. 다음 명령어로 MySQL 서비스를 다시 시작합니다.
    service mysqld restart

이제 포트 3306은 MySQL 서버에서 사용하지 않습니다.

우분투


기본적으로 우분투는 MySQL이 로컬호스트 인터페이스(IP 주소 127.0.0.1)만 사용하도록 구성되어 설치됩니다. 기본 설정으로 외부에서 포트 3306에 접근이 차단되어 있습니다.

외부에서 3306 포트 접근이 차단되었는지 확인하는 방법은 다음과 같습니다.

  1. 터미널 연결 후 텍스트 편집기를 사용해서 /etc/mysql/my.cnf 파일을 엽니다.
    my.cnf 파일에서 MySQL "bind-address" 행을 찾습니다.
    다음과 같이 되어 있으면 로컬호스트에서만 MySQL에 접근할 수 있는 것입니다.
    bind-address = 127.0.0.1
  2. "bind-address" 행에 "0.0.0.0", 또는 주소가 없있다면 외부에서 MySQL에 연결이 가능한 것입니다. "0.0.0.0"으로 변경 후 저장합니다.
  3. 프롬프트에 다음 명령을 입력해 MySQL 서비스를 다시 시작합니다.
    service mysql restart

2. 방화벽으로 차단

센토스

iptables를 사용하여 포트 3306의 접근을 제한하는 방화벽 규칙을 생성할 수 있습니다. MySQL 네트워킹 기능 비활성화와 달리 접근하는 IP에 따라서 접근을 선택적으로 허용, 또는 차단할 수 있습니다.

VPN으로 연결한 내부 망의 특정 IP에 대해서만 MySQL 접근을 허용하고 나머지는 모두 차단을 하거나 하는 선택적인 접근 제한을 할 수 있습니다.

포트 3306에 대한 외부 접근을 완전히 차단하려면 다음 명령을 입력합니다:

iptables -A INPUT -p tcp --dport 3306 -j DROP

방화벽은 3306포트로 접근하는 tcp 프로토콜 패킷은 모두 드랍합니다.

특정 IP 주소에 대한 접근을 허용하고 다른 모든 것을 차단하려면 다음 명령을 입력합니다. 특정 IP를 허용하는 규칙은 DROP 규칙 앞에 와야 합니다.

iptables -A INPUT -p tcp --dport 3306 -s [IP주소] -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROP

추가 IP 주소에 대한 MySQL 액세스를 허용하려면 DROP 규칙 전에 INPUT 체인에 규칙을 삽입할 수 있습니다. 예를 들어:

iptables -I INPUT 1 -p tcp --dport 3306 -s xxx.xxx.xxx.xxx -j ACCEPT

우분투

우분투는 방화벽 커맨드가 ufw입니다.

포트 3306에 대한 외부 접근을 완전히 차단하려면 다음 명령을 입력합니다. 규칙을 추가한 후에는 "ufw reload" 커맨드로 방화벽 규칙을 다시 로딩해야 합니다.

sudo ufw deny 3306
sudo ufw reload

특정 IP 주소에 대한 접근을 허용하고 다른 모든 것을 차단하려면 다음 명령을 입력합니다.

sudo ufw allow from [IP주소] to any port 3306
sudo ufw deny 3306
sudo ufw reload