데이터베이스 접근 제한, DB 외부 접속을 막는 5가지 설정
데이터베이스 접근 제한은 DB를 외부망에서 닫고 홈페이지 프로그램 계정에 필요한 권한만 주는 것입니다. 이 글에서는 DB 외부 접속을 막는 5가지 설정과 관리 도구를 안전하게 쓰는 방법, 정기적으로 확인할 점검 항목을 정리했습니다.
데이터베이스 접근 제한이 필요한 이유
홈페이지의 회원 정보, 게시글, 문의 내용, 관리자 계정은 대부분 데이터베이스에 저장됩니다. 방문자는 데이터베이스에 직접 접속할 일이 없고, 홈페이지 프로그램이 대신 읽고 씁니다. 그러니 데이터베이스에 접속할 수 있어야 하는 것은 원칙적으로 홈페이지 프로그램과 관리자뿐입니다.
그런데 서버를 설치할 때의 설정이나 작업 편의 때문에 데이터베이스가 인터넷 전체에서 접속을 받도록 열려 있는 경우가 있습니다. 이 상태에서 DB 계정 비밀번호가 약하거나 유출되면, 홈페이지를 거치지 않고 데이터를 통째로 읽거나 지울 수 있습니다. DB는 외부에서 보이지 않게 두는 것이 가장 확실한 보호입니다.
MySQL은 기본적으로 모든 주소에서 접속을 받습니다
MySQL 공식 설명서에 따르면 서버가 접속을 받을 주소를 정하는 bind_address 설정의 기본값은 모든 주소를 뜻하는 값입니다. 운영체제 패키지에 따라 설치 단계에서 이 값을 바꿔 두기도 하지만, 기본값을 그대로 둔 서버라면 방화벽이 유일한 방어선이 됩니다. 설정 항목의 정확한 설명은 MySQL 8.0 서버 시스템 변수 설명서에서 bind_address 항목을 찾아 확인할 수 있습니다.
DB 외부 접속을 막는 5가지 설정
아래 표는 데이터베이스 접근을 좁히는 설정을 위치별로 나누어 무엇을 막는지 비교한 것입니다. 한 가지만 하기보다 여러 겹으로 겹쳐 두는 것이 안전합니다.
| 설정 | 위치 | 막는 것 | 확인 방법 |
|---|---|---|---|
| 접속 주소 제한 | DB 서버 설정 | 외부망에서 오는 접속 | 서버 안 주소로만 접속을 받는지 확인 |
| 방화벽 차단 | 서버 방화벽·보안 그룹 | DB 포트로 들어오는 외부 접속 | 다른 네트워크에서 포트가 닫혔는지 확인 |
| 계정 접속 위치 지정 | DB 사용자 계정 | 허용하지 않은 곳에서의 로그인 | 계정마다 접속 허용 위치 확인 |
| 계정 권한 최소화 | DB 사용자 권한 | 필요 이상의 변경·삭제 | 프로그램 계정이 관리자 권한인지 확인 |
| 관리 도구 보호 | 웹 관리 도구 | 웹을 통한 DB 접근 | 쓰지 않으면 삭제, 쓰면 접근 제한 |
표의 첫 두 줄은 네트워크에서 문을 닫는 설정이고, 아래 세 줄은 문이 열렸을 때 피해를 줄이는 설정입니다. 홈페이지 프로그램과 DB가 같은 서버에 있다면 첫 번째 설정만으로도 외부 접속은 대부분 막힙니다.
DB 서버가 따로 있다면
홈페이지 서버와 DB 서버를 나눠 쓰는 경우에는 DB 서버가 홈페이지 서버의 내부 주소에서 오는 접속만 받게 합니다. 클라우드라면 DB 보안 그룹에서 홈페이지 서버만 허용하고, 인터넷 전체 허용 규칙이 없는지 확인합니다. 보안 그룹 관리는 클라우드 서버 보안 글에서 이어서 다룹니다.
데이터베이스 접근 제한 적용 순서
DB 설정을 바꾸면 홈페이지가 데이터베이스에 접속하지 못해 사이트가 멈출 수 있습니다. 아래 순서대로 하나씩 바꾸고 확인합니다.
- 현재 접속 경로 정리: 홈페이지 프로그램이 DB에 어떤 주소와 계정으로 접속하는지, 관리자는 무엇으로 접속하는지 적습니다.
- 백업 만들기: 설정을 바꾸기 전에 데이터베이스 백업을 만들어 둡니다.
- 네트워크 닫기: DB가 서버 안이나 내부망 주소에서만 접속을 받게 하고, 방화벽에서 DB 포트의 외부 접속을 막습니다.
- 계정 정리: 홈페이지 프로그램용 계정은 그 홈페이지의 DB에만 필요한 권한을 주고, 쓰지 않는 계정과 외부 허용 계정은 지웁니다.
- 동작 확인: 홈페이지 로그인, 글쓰기, 문의 접수가 되는지 확인하고 바꾼 내용을 기록합니다.
관리자가 외부에서 DB를 직접 봐야 한다면 DB 포트를 열기보다 SSH로 서버에 접속한 뒤 그 안에서 작업하는 방식이 안전합니다. 관리 접속을 지키는 방법은 SSH 접속 보안 글을 참고하세요.
DB 접근 정기 점검 체크리스트
설정을 마친 뒤에도 업체 작업이나 프로그램 설치로 다시 열리는 일이 있습니다. 분기마다 아래 항목을 확인합니다.
- 다른 네트워크에서 DB 포트로 접속이 되지 않는지 확인한다.
- DB 사용자 목록에 모든 곳에서 접속을 허용한 계정이 없는지 본다.
- 홈페이지 프로그램 계정이 관리자 권한을 갖고 있지 않은지 본다.
- 웹 DB 관리 도구가 설치돼 있다면 아무나 접속할 수 없는지 확인한다.
- DB 접속 정보가 담긴 설정 파일이 웹에서 열리지 않는지 확인한다.
마지막 항목처럼 DB를 닫아 두어도 접속 정보가 담긴 파일이 노출되면 의미가 줄어듭니다. 설정 파일 노출 점검은 환경설정 파일 노출 글에서 따로 다룹니다.
디코랩이 돕는 방식
디코랩은 웹사이트 취약점 점검 서비스와 운영 중인 사이트의 유지보수를 맡고 있습니다. 외부에서 데이터베이스나 관리 도구가 보이는지 확인이 필요하다면 웹사이트 취약점 점검 서비스에서 점검 방식을 확인할 수 있습니다.
자주 묻는 질문
DB 비밀번호가 강하면 외부에 열어 둬도 되나요?
비밀번호가 강해도 유출되거나 DB 프로그램 자체에 취약점이 생기면 위험해집니다. 외부에서 접속할 이유가 없다면 닫아 두는 것이 기본입니다.
공유 호스팅도 확인해야 하나요?
공유 호스팅은 업체가 DB 서버를 관리하지만, 외부 접속 허용 메뉴를 제공하는 곳도 있습니다. 관리 화면에서 외부 접속이 켜져 있다면 꼭 필요한지 확인하세요.
웹 DB 관리 도구는 지워야 하나요?
쓰지 않는다면 지우는 것이 가장 안전합니다. 꼭 써야 한다면 관리자 IP에서만 열리게 하고, 프로그램을 최신 버전으로 유지하세요.
우리 사이트 데이터베이스가 외부에 열려 있는지 확인하고 싶다면 디코랩 프로젝트 문의로 사이트 주소와 호스팅 종류를 알려 주세요.
댓글0
댓글 작성 권한이 없습니다