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 한 줄 예시
설정은 꽤 유연하게 할 수 있어. 몇 가지 예시를 볼게:
유닉스 소켓으로 로컬 접속 허용
local all all trust모든 사용자가 로컬 서버의 모든 DB에 비밀번호 없이 접속 가능.
특정 IP에서만 접속 허용
host my_database my_user 192.168.1.100/32 md5my_user는my_database에192.168.1.100IP에서만 비밀번호로 접속 가능.서브넷 전체에서 DB 접근 허용
host my_database all 192.168.1.0/24 scram-sha-256192.168.1.0/24대역의 누구나my_database에 SHA-256 인증으로 접속 가능.특정 서브넷에서 접속 금지
host all all 192.168.2.0/24 reject192.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_user가 203.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는 사실 간단한데, 처음엔 실수하기 쉬워. 예를 들면:
- 서버 재시작을 깜빡함.
pg_hba.conf의 모든 변경은 설정 재시작 후에만 적용돼. - 규칙 충돌. PostgreSQL은 위에서 아래로 규칙을 읽어. 먼저 맞는 규칙이 있으면 그 아래는 무시돼. 더 포괄적인 규칙은 아래에 둬야 해.
- 서브넷 마스크 실수. 예를 들어
/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 보안의 핵심 도구 중 하나야. 설정이 논리적이고, 검증됐으며, 비즈니스 요구에 맞는지 항상 신경 써. 우리 모두 해커로부터 데이터를 지키는 세상에서 살고 싶잖아? 물론, 해커가 너라면 얘기가 다르겠지만 :)
GO TO FULL VERSION