콘텐츠로 이동

MySQL 네트워크 및 방화벽 설정

운영 서버(Production Server) 에서 MySQL 네트워크 접근과
방화벽 설정을 안전하게 구성하기 위한 표준 운영 절차(runbook) 를 정의함.

단순히 포트를 여는 방법이 아니라,
왜 이 순서로 설정해야 하는지,
어떤 접근만 허용해야 하는지를 명확히 함.


1. 네트워크 설정의 기본 원칙

운영 환경에서 MySQL은 다음 원칙을 따름.

  • 외부 트래픽의 진입점이 아님
  • 애플리케이션 전용 내부 자원임
  • 계정/권한 설계가 완료된 이후에만 네트워크를 개방함

방화벽 설정은 보안의 시작이 아니라 마지막 안전장치임


2. 방화벽 설정을 나중에 하는 이유

MySQL 네트워크 설정은 02-MySQL 사용자 및 권한 설정 이후에 수행함.

이유는 다음과 같음.

  • 접근 주체(계정/Host)가 확정되지 않은 상태에서 포트를 열면
    • 과잉 허용으로 이어짐
    • % 계정 사용 가능성이 커짐
  • 계정 설계 → 네트워크 제한 순서가
    • 사고 범위를 가장 작게 유지함

계정 없는 포트 오픈은 문 열어두고 자물쇠를 고민하는 순서임


3. MySQL 포트 기본 정책

  • 기본 포트: 3306
  • 외부 인터넷 직접 노출 ❌
  • 내부 네트워크 또는 지정된 서버만 허용 ⭕
  • 가능한 경우:
    • Security Group
    • Bastion Host
    • Private Network 우선 사용

4. 방화벽 포트 허용 (sudo 필요)

MySQL 포트가 필요한 경우에도 전체 소스에 전역 오픈하지 않음.
반드시 내부망 또는 지정된 애플리케이션 서버만 허용함.

sudo firewall-cmd --permanent --remove-port=3306/tcp
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="[InternalCIDR]" port protocol="tcp" port="3306" accept'
sudo firewall-cmd --reload
sudo firewall-cmd --permanent --list-rich-rules
  • 예: 192.168.0.0/24, 특정 애플리케이션 서버 IP, Bastion 대역
  • 필요 없는 서버에서는 포트 오픈하지 않음
  • 테스트 후 즉시 닫을 수 있도록 변경 이력 관리함

단일 서버 또는 로컬 연결만 필요한 경우에는
firewalld 에 3306 허용 규칙 자체를 만들지 않는 것이 기본임.


5. MySQL 바인딩 주소 확인

MySQL은 기본적으로 모든 인터페이스에 바인딩될 수 있음.
운영 환경에서는 이를 명확히 관리함.

/etc/my.cnf 또는 /etc/mysql/my.cnf 확인.

[mysqld]
bind-address = 127.0.0.1
  • 단일 서버 구성에서는 127.0.0.1 권장
  • 다중 서버 구성 시 내부 IP로 제한

바인딩 주소 제한은 방화벽보다 앞선 1차 방어선임.


6. 포트 변경 시 주의 사항

보안 또는 정책상 포트 변경이 필요한 경우 다음을 준수함.

  • /etc/my.cnf 또는 /etc/mysql/my.cnf[mysqld] port 변경
  • 애플리케이션 설정 동시 수정
  • SELinux 정책 반드시 함께 수정

포트 변경은 보안을 “강화”하지 않음.
관리 복잡도만 증가시킬 수 있음.


7. SELinux 연계 고려 사항

SELinux가 활성화된 환경에서는 포트 변경 시 MySQL 접근이 차단될 수 있음.

SELinux 정책은 별도 문서에서 상세히 다룸.

👉 05-MySQL SELinux 설정 (Production 기준)


8. 금지 패턴 (운영 환경)

운영 환경에서 다음 패턴은 금지함.

  • 3306 외부 전체 오픈
  • 테스트 목적 임시 오픈 후 미회수
  • % Host 계정 + 포트 오픈 조합
  • 방화벽 설정 변경 이력 미기록

대부분의 DB 침해 사고는 계정 + 네트워크 설정의 조합 실패에서 발생함.


9. 작업 완료 기준

다음 조건을 만족해야 네트워크 및 방화벽 설정이 완료된 것으로 간주함.

  • MySQL 포트 외부 노출 없음
  • 접근 가능한 Host 명확히 제한됨
  • 계정/권한 설계와 일치함
  • 방화벽 변경 이력 기록됨