콘텐츠로 이동

D-10: 원격에서 DB 서버로의 접속 제한

분류: DBMS

중요도: 상


개요

점검 내용

지정된 IP주소만 DB 서버에 접근 가능하도록 설정되어 있는지 점검

점검 목적

지정된 IP주소만 DB 서버에 접근 가능하도록 설정되어 있는지 점검하여 비인가자의 DB 서버 접근을 원천적으로 차단하고자 함

보안 위협

DB 서버 접속 시 IP주소 제한이 적용되지 않은 경우 비인가자가 내·외부망 위치에 상관없이 DB 서버에 접근할 수 있는 위험이 존재함

참고

-

점검 대상 및 판단 기준

대상

Windows OS, Oracle DB, MySQL, Altibase, Tibero, PostgreSQL 등

판단 기준

✅ 양호: DB 서버에 지정된 IP주소에서만 접근 가능하도록 제한한 경우

❌ 취약: DB 서버에 지정된 IP주소에서만 접근 가능하도록 제한하지 않은 경우

조치 방법

DB 서버에 대해 지정된 IP주소에서만 접근 가능하도록 설정

조치 시 영향

허용되지 않은 IP에서 접속 제한

점검 및 조치 사례

Windows OS

Step 1) 특정 IP주소에서만 접속 가능하도록 방화벽 등이 설정되어 있는지 확인

시작 > 제어판 > 시스템 및 보안 > Windows Defender 방화벽 > 고급 설정 > 고급 보안이 포함된 Windows Defender 방화벽 > 인바운드 규칙 > 원격 데스크톱 – 사용자 모드(TCP-In)/사용자 모드 (UDP-In)

원격 데스크톱 방화벽 규칙 확인

Step 2) DB서버에 접근 가능한 특정 IP 지정

원격 데스크톱 – 사용자 모드(TCP-In)/사용자 모드(UDP-In) 속성 > 영역 > 원격 IP주소 > 다음 IP주소 > 추가 > IP주소 입력

원격 데스크톱 – 사용자 모드(TCP-In) 속성

원격 데스크톱 – 사용자 모드(UDP-In) 속성

Oracle DB

Step 1) oracle 계정으로 로그인

su - oracle

Step 2) 텍스트 에디터로 $ORA_NET/sqlnet.ora 파일 오픈

vi $ORA_NET/sqlnet.ora

Step 3) sqlnet.ora 파일의 끝에 다음 두 라인을 추가

tcp.validnode_checking = yes
tcp.invited_nodes = ( 127.0.0.1, [allowed IP's] )

Step 4) Listener 재시작

$ORACLE_HOME/bin/lsnrctl stop
$ORACLE_HOME/bin/lsnrctl start

MySQL

Step 1) user 테이블을 조회하여 모든 클라이언트에서 접속 가능하도록 설정되어 있는 계정을 특정 IP에서만 접속 가능하도록 변경

mysql> UPDATE user SET host = '<접속 IP>' WHERE user ='<계정명>' and host='%';

Altibase

Step 1) Altibase HDB Property 파일을 수정하여 접근 제어 적용

$Altibase_HOME/conf/altibase.properties의 IP Access Control Lists에서 내부 정책에 맞게 수정

참고

Altibase HDB 서버가 실행되지 않은 상태에서 할 수 있는 정적인 환경설정 방법으로 Property 파일에서 해당 구성 요소를 특정 값으로 설정한 후 Altibase HDB 서버를 구동해야 수정된 값이 Altibase HDB 서버에 반영 됨

altibase.properties 파일

Step 2) Altibase HDB 서버에 적용된 접근 제어 설정 확인

iSQL> SELECT name, value1 FROM v$property WHERE name LIKE 'ACCESS_CONTROL_%';

PostgreSQL

Step 1) Data 디렉터리 내에 postgres.conf 파일 설정

postgres.conf 파일

참고

listen_addresses는 서버가 클라이언트 애플리케이션의 연결을 수신 대기할 TCP/IP 주소를 지정함. 호스트 이름 및/또는 숫자 IP 주소의 쉼표로 구분된 목록 형식으로 지정할 수 있으며, *를 사용하는 경우 모든 IP에 대해 수신 대기함. 기본값은 localhost 이며 로컬 TCP/IP “루프백” 연결 만 허용

Step 2) Data 디렉터리 내에 pg_hba.conf 파일 설정

TYPE DATABASE USER CIDR-ADDRESS METHOD
host (DB명) (사용자) (접속 허용 IP) md5

pg_hba.conf 파일

Step 3) USER에 접근 허용 '계정명'과 CIDR-ADDRESS에 접속을 '허용할 IP' 설정

참고

  • PostgreSQL은 기본 설치 시 외부에서 접속할 수 없음
  • IP 접근 제한 설정 시 postgresql.confpg_hba.conf 두 개의 설정 파일이 연계되어 있으므로 하나의 파일이라도 설정이 잘못되어 있는 경우 DB 접속이 불가능 할 수 있음

Tibero

Step 1) LSNR_INVITED_IP(특정 IP주소를 갖는 클라이언트만 허용, 그 외 차단)

$TB_SID.tip 파일 안에 다음 예시 내용을 참조하여 입력

LSNR_INVITED_IP=192.168.1.1;192.168.2.0/24;192.1.0.0/16

LSNR_INVITED_IP의 최대 길이는 255자이며, 256자 이상의 IP주소를 설정할 경우에는 LSNR_INVITED_IP_FILE을 사용 (특정 IP주소를 기재한 파일의 절대 경로를 LSNR_INVITED_IP_FILE에 입력)

참고

  • 초기화 파라미터에 설정된 IP주소에 따라 클라이언트의 네트워크 접속을 허용하거나 차단
  • $TB_SID는 Tibero 설치 시 입력한 데이터베이스 이름과 동일
    • /tibero/tibero5/config/데이터베이스.tip
  • $TB_SID.tip 파일에 LSNR_INVITED_IP와 LSNR_DENIED_IP가 모두 설정되어 있는 경우 LSNR_DENIED_IP의 설정은 무시되며 LSNR_INVITED_IP만 적용된다. 즉, LSNR_INVITED_IP에 설정된 IP 주소의 클라이언트를 제외하고는 모든 접속이 차단된다.
  • $TB_SID.tip 파일에 LSNR_INVITED_IP와 LSNR_DENIED_IP가 모두 설정되지 않은 경우 모든 클라이언트의 네트워크 접속이 허용된다.
  • 루프백 주소(Loopback Address, 127.0.0.1)에서 접속하는 경우 LSNR_INVITED_IP 또는 LSNR_DENIED_IP 의 설정과는 무관하게 항상 허용된다.
  • Tibero 서버를 운영하는 중에 서버를 다시 기동하지 않고 LSNR_INVITED_IP 또는 LSNR_DENIED_IP의 설정을 변경하려는 경우 우선 $TB_SID.tip 파일에 LSNR_INVITED_IP 또는 LSNR_DENIED_IP의 설정을 변경한 후 파일을 저장하고 다음의 명령을 실행한다.
    ALTER SYSTEM LISTENER PARAMETER RELOAD;
    
    위의 명령을 실행하면 $TB_SID.tip 파일에서 LSNR_INVITED_IP 또는 LSNR_DENIED_IP의 내용을 다시 읽어 변경된 내용을 실시간으로 적용한다.