대상 OS: Debian 12 (bookworm)

PostgreSQL 원격접속을 열 때는 ‘암호화(TLS)’와 ‘강한 인증(SCRAM)’을 같이 잡아야 한다.
설정을 바꿨는데 연결이 깨지거나 인증 오류가 나는 케이스를 트러블슈팅 중심으로 정리한다. (작성 시각: 2026-02-25 13:08)

1) 리슨/서비스 확인

sudo ss -lntp | grep -E ':5432\b' || true
sudo systemctl status postgresql --no-pager

2) pg_hba.conf는 scram-sha-256을 기본으로

sudoedit /etc/postgresql/*/main/pg_hba.conf

# 예시
# hostssl  appdb  appuser  10.0.0.0/24  scram-sha-256

sudo systemctl reload postgresql

3) password_encryption을 scram로 통일

sudo -u postgres psql -c "SHOW password_encryption;"
# 필요 시 postgresql.conf에서 password_encryption='scram-sha-256'

사례(현장에서 자주 겪는 상황)
- pg_hba는 hostssl로 바꿨는데 서버 TLS 설정이 미완이라 접속이 전부 끊김
- 구계정이 md5로 남아있어 일부 사용자만 로그인 실패
- 인증서 경로/권한이 꼬여서 재시작 후에만 장애가 발생

트러블슈팅(증상→원인→해결)
- 증상: SSL is required / no pg_hba.conf entry
원인: hostssl만 허용했는데 클라이언트가 SSL로 안 붙음, 또는 CIDR/사용자 매칭 불일치
해결: 클라이언트 SSL 옵션 확인 + pg_hba의 IP/DB/USER 조합을 최소 범위로 재정의

- 증상: password authentication failed (scram)
원인: 사용자 비밀번호가 md5로 저장되어 있거나, 비밀번호 재설정 누락
해결: 해당 사용자 비밀번호를 재설정해 scram으로 재저장(정책 통일)

- 증상: 인증서 적용 후 handshake failure
원인: CA 체인/서버 인증서/키 권한 문제
해결: 파일 권한(postgres 사용자 읽기) 점검 + 체인 구성 확인 + 로그로 원인 분류

- 증상: 변경했는데도 접속 정책이 바뀌지 않음
원인: pg_hba 수정 파일 경로 착각 또는 reload 누락
해결: SHOW hba_file로 실제 경로 확인 후 수정, reload 수행

- 증상: 내부망만 열었는데 외부에서도 붙는 것 같음
원인: 방화벽/보안그룹이 넓게 열림
해결: 5432는 소스 대역 제한 + listen_addresses를 내부 IP로 고정