← 전체 목록
서버백업운영

SSH 터널로 MySQL 외부 포트 없이 원격에서 안전하게 DB를 관리합니다

ℹ️ 본 글은 정보 제공 목적이며, 광고·제휴 링크가 포함될 수 있습니다.
목차 보기

SSH 터널로 원격에서 내부 DB 안전하게 접속하는 방식으로 전환한 건 서버 접속 로그에서 3306 포트를 향한 자동화 스캔 시도가 하루에도 수백 번 기록되는 걸 발견한 후입니다. MySQL 외부 접속을 허용하면 비밀번호 brute force 공격에 항상 노출됩니다. SSH 터널을 이용하면 3306 포트를 외부에 완전히 닫고도 원격에서 DB 작업이 가능합니다.

SSH 터널 기본 개념

[내 PC 3306] ←━━━ SSH 암호화 터널 ━━━→ [서버 SSH 22] → [서버 MySQL 3306]

로컬 3306 포트로 접속하면 SSH를 통해 서버 내부 MySQL로 연결됩니다.

SSH 터널 연결

# 터널 생성 (백그라운드 실행)
ssh -f -N -L 3307:127.0.0.1:3306 user@서버IP

# 옵션 설명:
# -f: 백그라운드 실행
# -N: 명령어 실행 안 함 (포워딩만)
# -L 3307:127.0.0.1:3306: 로컬 3307 → 원격 localhost:3306

# 터널 연결 후 MySQL 접속
mysql -h 127.0.0.1 -P 3307 -u 사용자명 -p

# 또는 TablePlus/DBeaver 등 GUI 툴:
# Host: 127.0.0.1, Port: 3307

SSH 키로 터널 자동화

# ~/.ssh/config에 추가
Host db-tunnel
    HostName 서버IP
    User user
    IdentityFile ~/.ssh/서버키
    LocalForward 3307 127.0.0.1:3306
    ServerAliveInterval 60
    ServerAliveCountMax 3

# 설정 후 사용
ssh -f -N db-tunnel
mysql -h 127.0.0.1 -P 3307 -u root -p

서버에서 MySQL 외부 접근 차단

# MySQL 설정에서 bind-address를 localhost로 제한
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# bind-address = 127.0.0.1  ← 이미 기본값이지만 확인

# UFW로 3306 포트 외부 차단 (이미 열려있다면)
sudo ufw deny 3306
sudo ufw status

SSH 터널 방식은 DB 관리 도구(TablePlus, DBeaver, phpMyAdmin 없이)를 원격에서 안전하게 사용할 수 있는 가장 실용적인 방법입니다. SSH 인증만 통과하면 되므로 별도의 MySQL 계정 관리 없이도 보안이 강화됩니다.

편집 정책

의료기관 인프라 운영 현장 경험을 바탕으로 작성하며, WavePix 운영자 (의료기관 3곳 인프라 전담)가 최종 검수합니다.

작성·검수: WavePix 운영자 (의료기관 3곳 인프라 전담)