CodeGym /행동 /SQL SELF /IP로 접근 제한과 pg_hba.conf 설정하기

IP로 접근 제한과 pg_hba.conf 설정하기

SQL SELF
레벨 47 , 레슨 4
사용 가능

pg_hba.conf는 PostgreSQL의 설정 파일로, 연결과 인증을 관리하는 데 쓰여. HBA는 Host-Based Authentication (호스트 기반 인증)이란 뜻이야. 이 파일은 네트워크 "차단기" 같은 역할을 해. 즉,

  • 누가 서버에 접속할 수 있는지(IP, 역할, 데이터베이스)
  • 접속할 때 어떤 인증 방법을 써야 하는지

실생활에 비유하자면, pg_hba.conf는 건물 입구의 경비원이야. 경비원이 네 신분증(비밀번호)뿐만 아니라 주소(IP)도 확인해서 들여보낼지 말지 결정하는 거지.

pg_hba.conf 파일 구조

pg_hba.conf 파일은 한 줄마다 접근 규칙을 적어. 한 줄의 구조는 이렇게 돼:

<접속 타입> <데이터베이스> <사용자> <출처> <인증 방법>

각 요소를 살펴보자:

접속 타입(connection type): 클라이언트가 어떻게 접속할지 정해.

  • local: 유닉스 소켓으로 접속 (리눅스 서버의 로컬 사용자용)
  • host: TCP/IP로 접속
  • hostssl: TCP/IP + SSL로만 접속
  • hostnossl: TCP/IP, SSL 없이 접속

데이터베이스: 접근 허용할 데이터베이스를 적어. 특정 DB, 여러 DB(콤마로 구분), 또는 키워드 사용 가능:

  • all: 모든 데이터베이스에 접근 허용

사용자: 어떤 사용자가 접속 가능한지 지정해.

  • 특정 사용자 이름이나 all로 모두 허용 가능

출처(address): 클라이언트의 IP나 IP 대역을 적어.

  • IPv4는 x.x.x.x 또는 x.x.x.x/y (여기서 /y는 서브넷 마스크, 예: /24)
  • IPv6는 ::/y 형식
  • all 키워드는 모든 IP 허용

인증 방법: 어떤 인증 방식을 쓸지 정해.

예시:

  • trust: 비밀번호 없이 접속 허용(위험, 테스트용만!)
  • md5: 비밀번호(해시) 사용
  • scram-sha-256: SHA-256로 더 안전하게 인증
  • reject: 접근 금지

pg_hba.conf 한 줄 예시

설정은 꽤 유연하게 할 수 있어. 몇 가지 예시를 볼게:

  1. 유닉스 소켓으로 로컬 접속 허용

    local   all             all                                     trust
    

    모든 사용자가 로컬 서버의 모든 DB에 비밀번호 없이 접속 가능.

  2. 특정 IP에서만 접속 허용

    host    my_database     my_user        192.168.1.100/32         md5
    

    my_usermy_database192.168.1.100 IP에서만 비밀번호로 접속 가능.

  3. 서브넷 전체에서 DB 접근 허용

    host    my_database     all            192.168.1.0/24           scram-sha-256
    

    192.168.1.0/24 대역의 누구나 my_database에 SHA-256 인증으로 접속 가능.

  4. 특정 서브넷에서 접속 금지

    host    all             all            192.168.2.0/24           reject
    

    192.168.2.0/24 대역에서는 접속 완전 금지.

IP별 접근 제어 설정하기

이제 파일 구조를 알았으니, 실제로 접속을 어떻게 제한하는지 보자.

특정 IP에서만 서버에 접근하게 해보자. 예를 들어, PostgreSQL 서버가 있고, 오직 로컬호스트(127.0.0.1)와 사무실 대역(192.168.10.0/24)에서만 접근을 허용하고 싶어. 그럼 pg_hba.conf에 이렇게 추가하면 돼:

# 로컬 접근
host    all             all            127.0.0.1/32             trust

# 사무실에서 접근
host    all             all            192.168.10.0/24          md5

# 나머지는 다 금지
host    all             all            0.0.0.0/0                reject

여기서 0.0.0.0/0 규칙은 "모든 IP"란 뜻이야. 지정한 IP 외에는 다 막는 거지.

원격 사용자 접근 설정

PostgreSQL 서버가 클라우드나 원격 서버에 있다면, 특정 외부 IP만 접속 허용해야 할 수도 있어. 예를 들어:

# 집에서 관리자 접속 허용
host    all             admin_user     203.0.113.10/32          md5

이 예시에서는 admin_user203.0.113.10 IP에서만 접속 가능해.

설정 적용(재시작)

pg_hba.conf 파일을 수정한 뒤에는 PostgreSQL이 변경사항을 적용해야 해. 이 명령어를 써:

sudo systemctl reload postgresql

이렇게 재시작해도 서버가 죽거나 하진 않으니까 걱정 마!

pg_hba.conf 파일 위치를 까먹었다면 SQL로 경로를 확인할 수 있어:

SHOW hba_file;

pg_hba.conf에서 자주 하는 실수

pg_hba.conf는 사실 간단한데, 처음엔 실수하기 쉬워. 예를 들면:

  1. 서버 재시작을 깜빡함. pg_hba.conf의 모든 변경은 설정 재시작 후에만 적용돼.
  2. 규칙 충돌. PostgreSQL은 위에서 아래로 규칙을 읽어. 먼저 맞는 규칙이 있으면 그 아래는 무시돼. 더 포괄적인 규칙은 아래에 둬야 해.
  3. 서브넷 마스크 실수. 예를 들어 /0을 쓰면 모두에게 열려서 보안 구멍이 될 수 있어.

실제 사용 시나리오 예시

로컬 서버에서 앱 테스트하기.

로컬호스트에서만 접근 허용:

local   all   all   trust

원격 클라이언트와 작업.

특정 IP의 클라이언트만 허용:

host    all   client_user   203.0.113.42/32   scram-sha-256

공개 네트워크에서 접근 제한.

인터넷에서는 막고, 사무실만 허용:

host    all   all   0.0.0.0/0   reject
host    all   all   192.168.10.0/24   md5

이제 pg_hba.conf로 PostgreSQL 접근을 어떻게 제한하는지 감이 좀 올 거야. 이 파일은 DB 보안의 핵심 도구 중 하나야. 설정이 논리적이고, 검증됐으며, 비즈니스 요구에 맞는지 항상 신경 써. 우리 모두 해커로부터 데이터를 지키는 세상에서 살고 싶잖아? 물론, 해커가 너라면 얘기가 다르겠지만 :)

1
설문조사/퀴즈
접근 제어와 보안, 레벨 47, 레슨 4
사용 불가능
접근 제어와 보안
접근 제어와 보안
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION