PostgreSQL 16을 DB 서버로 운영할 때는 무차별 대입 공격에 대한 대비책이 있어야 한다. Fail2Ban은 무차별 대입 공격에 대응할 수 있는 좋은 수단 중 하나이다. Fail2Ban은 일정 횟수 만큼 인증에 실패(Fail)했을 때 접근을 차단(Ban)하는 동작을 수행하는 프로그램이다. Fail2Ban에 PostgreSQL 16 관련 차단 정책을 설정하는 방법은 아래와 같다.
설정 환경
- Ubuntu 22.04
- PostgreSQL 16
- Fail2Ban 1.1.0
PostgreSQL 설정
설치된 PostgreSQL의 설정파일을 아래와 같이 vi 에디터로 연다.
vi /etc/postgresql/16/main/postgresql.conf
Fail2Ban이 인증 실패를 PostgreSQL의 로그를 통해 알 수 있도록 아래와 같이 설정한다. 설정 값은 환경에 따라 다를 수 있다.
log_connections = on
log_disconnections = on
logging_collector
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,client=%h '
log_directory = '/var/log/postgresql/'



설정한 것을 PostgreSQL에 적용하기 위하여 아래의 명령어를 입력하여 PostgreSQL을 재시작한다.
sudo systemctl restart postgresql
Fail2Ban 설정
아래의 명령어를 입력하여 Fail2Ban의 필터 설정 파일을 vi 에디터로 생성하면서 연다.
sudo vi /etc/fail2ban/filter.d/postgres.conf
아래와 같이 PostgreSQL의 로그를 읽어오도록 설정한다.
[Definition]
failregex = \[\d+\]: \[\d+-\d+\] user=(.*),db=(.*),client=<HOST> FATAL: password authentication failed for user ".*"$
ignoreregex =

아래의 명령어를 입력하여 Fail2Ban의 액션 설정 파일을 vi 에디터로 생성하면서 연다.
sudo vi /etc/fail2ban/action.d/postgres.conf
아래와 같이 ban과 unban 상황 때 수행할 명령어를 입력한다.
[Definition]
actionban = /sbin/iptables -A FORWARD -s <ip> -j DROP
/sbin/iptables -A INPUT -s <ip> -j DROP
actionunban = /sbin/iptables -D FORWARD -s <ip> -j DROP
/sbin/iptables -D INPUT -s <ip> -j DROP

아래와 같이 Fail2Ban의 감옥(jail) 설정 파일을 연다.
sudo vi /etc/fail2ban/jail.conf
아래와 같이 PostgreSQL의 규칙을 입력한다.
[postgres]
enabled = true
port = all
filter = postgres
logpath = /var/log/postgresql/*
maxretry = 5
findtime = 60
bantime = 300
datepattern = ^%%Y-%%m-%%d %%H:%%M:%%S UTC

설정한 값들이 Fail2Ban에 적용되도록 Fail2Ban 서비스를 재시작한다.
sudo systemctl restart fail2ban
차단된 내역 확인하기
아래의 명령어를 입력하여 Fail2Ban의 동작을 확인한다.
sudo fail2ban-client status postgres

몇 분 지났더니 2건의 실패가 집계되었다. PostgreSQL과 같은 DB 서버는 외부망에 직접 노출시키지 않고 내부망에서도 최대한 제한된 경로로 접근할 수 있도록 구축하는 것이 안전한다.

참고문서
'DBMS(DataBase Management System) > PostgreSQL' 카테고리의 다른 글
| [PostgreSQL] 문자열을 TIMESTAMP 자료형으로 변환하는 TO_TIMESTAMP 함수 (0) | 2025.05.28 |
|---|---|
| PostgreSQL 16을 설치하는 과정 중에 GPG 에러가 발생할 때 해결 방법 (0) | 2025.05.27 |
| [우분투 22.04] PostgreSQL 16 와 pgAdmin 4 설치 방법 (0) | 2025.01.15 |
| [PostgreSQL] 테이블 삭제 쿼리 작성 방법 (0) | 2023.12.11 |
| [PostgreSQL] 기본값 변경 쿼리 작성 방법 (0) | 2023.12.10 |
댓글