— “DB 보안은 설정이 아니라 습관이다”
데이터 유출 사고의 80%는
**취약한 기본 설정(Default Configuration)**에서 시작된다.
1️⃣ 보안 하드닝의 기본 원칙
MariaDB 보안은 DB 자체만의 문제가 아닙니다.
OS → 네트워크 → DB → 계정 → 운영 절차까지 이어지는 계층적 보안이 필요합니다.
🔑 핵심 원칙 5가지
- 최소 권한 원칙 (PoLP)
- 외부 노출 최소화
- 암호화 기본 적용
- 접근 기록 및 감사
- 사고를 가정한 복구 설계
2️⃣ OS(Rocky Linux) 레벨 보안 하드닝
✅ 2-1. 불필요한 서비스 제거
systemctl list-unit-files --type=service
- DB 서버에는 웹 서버, FTP, 메일 데몬 불필요
- 사용하지 않는 서비스는
disable처리
systemctl disable avahi-daemon
systemctl stop avahi-daemon
✅ 2-2. SELinux 활성화 (권장)
getenforce
Enforcing상태 유지 권장- MariaDB는 기본 정책으로 정상 동작
setsebool -P mysql_connect_any 0
❗
mysql_connect_any=1은 보안 취약 → 반드시 0 유지
✅ 2-3. 방화벽 최소 개방
firewall-cmd --permanent --remove-service=mysql
firewall-cmd --permanent --add-rich-rule='
rule family="ipv4"
source address="10.10.10.0/24"
port protocol="tcp" port="3306" accept'
firewall-cmd --reload
📌 특정 서버/대역만 허용
📌 % 전체 허용은 절대 금지
3️⃣ MariaDB 기본 보안 설정 (필수)
✅ 3-1. mariadb-secure-installation
mariadb-secure-installation
| 항목 | 권장 |
|---|---|
| root 비밀번호 | 반드시 설정 |
| unix_socket 인증 | ❌ (운영 불편) |
| 익명 사용자 | ❌ |
| root 원격 접속 | ❌ |
| test DB | ❌ |
✅ 3-2. root 계정 보호 전략
SELECT Host, User FROM mysql.user WHERE User='root';
권장 상태:
root | localhost
❌ 아래는 제거:
DROP USER 'root'@'%';
DROP USER 'root'@'::1';
📌 root는 로컬 관리용 계정,
📌 운영 계정은 별도로 생성
4️⃣ 계정 & 권한 하드닝 (가장 중요)
✅ 4-1. 운영 계정 분리
CREATE USER 'appuser'@'10.10.10.20'
IDENTIFIED BY 'Strong!Pass123';
GRANT SELECT, INSERT, UPDATE, DELETE
ON appdb.*
TO 'appuser'@'10.10.10.20';
🚫 GRANT ALL 금지
🚫 SUPER, FILE, PROCESS 권한 금지
✅ 4-2. 계정 감사
SELECT user, host, password_expired
FROM mysql.user;
- 불필요 계정 즉시 제거
- 정기 계정 점검 필수
5️⃣ 네트워크 & 통신 보안 (TLS 적용)
✅ 5-1. DB 통신 암호화 (TLS)
[mysqld]
ssl-ca=/etc/mysql/ssl/ca.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem
사용자별 강제 적용:
ALTER USER 'appuser'@'10.10.10.20'
REQUIRE SSL;
📌 내부망이라도 TLS 적용 권장
📌 DB 패킷 스니핑 사고 다수 발생 사례 존재
6️⃣ 데이터 보안 (저장·백업)
✅ 6-1. 디스크 암호화
- LUKS 또는 스토리지 암호화 적용
- DB 데이터 디렉토리:
/var/lib/mysql
✅ 6-2. 백업 파일 보호
chmod 600 *.sql
chown root:root *.sql
📌 백업 파일 유출이 가장 흔한 사고 원인
7️⃣ 감사(Audit) 및 로그 설정
✅ 7-1. 쿼리 로그 (선별적 사용)
[mysqld]
log_error=/var/log/mariadb/error.log
slow_query_log=ON
slow_query_log_file=/var/log/mariadb/slow.log
long_query_time=2
✅ 7-2. MariaDB Audit Plugin (권장)
INSTALL SONAME 'server_audit';
[mysqld]
server_audit_logging=ON
server_audit_events=CONNECT,QUERY
server_audit_file_path=/var/log/mariadb/audit.log
📌 누가 언제 접속했는지 반드시 기록
8️⃣ 설정 파일 보안
chmod 640 /etc/my.cnf
chown root:mysql /etc/my.cnf
- 일반 사용자 읽기 금지
- 비밀번호 포함 금지
🔐 .my.cnf 활용
[client]
user=backup
password=********
chmod 600 ~/.my.cnf
9️⃣ 장애·침해 대응 관점 보안
✅ 9-1. 백업 + DR 필수
- 일일 백업 + 주간 Full
- 오프사이트(외부 스토리지) 보관
- Proxmox, Vembu, S3 등 활용
✅ 9-2. 랜섬웨어 대비
- 백업 스토리지 Immutable 설정
- DB 서버 → 백업 서버 단방향 통신
1️⃣0️⃣ 운영 체크리스트 (요약)
| 구분 | 체크 |
|---|---|
| OS 방화벽 | IP 제한 |
| root 원격 | 차단 |
| 계정 권한 | 최소화 |
| SSL | 적용 |
| 로그 | 활성화 |
| 백업 | 암호화 |
| 감사 | 기록 유지 |
| 설정 파일 | 권한 제한 |
✅ 결론
Rocky Linux + MariaDB는
보안 하드닝만 제대로 하면 엔터프라이즈급 DB 플랫폼이 됩니다.
“DB 보안은 해킹을 막는 것이 아니라
사고를 통제 가능한 수준으로 낮추는 것이다.”
2930 Blog에서 더 알아보기
구독을 신청하면 최신 게시물을 이메일로 받아볼 수 있습니다.
