본문 바로가기
네트워크

postgresql 로그인 실패 횟수에 따른 접속 제한 설정

by 흰색남자 2023. 8. 10.

[목적]

postgresql 혹은 API 서버 등 시스템 자원에 무작위 로그인 시도를 할 경우 해당 IP를 차단해야한다.
무작위 대입 공격 방어 보안 솔루션인 fail2ban을 사용하여 보안 취약점은 보완한다.

제약 조건

- mdrm-postgres의 이미지는 busybox를 베이스 이미지로 두고 있으므로 추가적인 소프트웨어 설치에는 라이브러리 의존관계에 의해 설치가 힘들다. 그렇기에 ‘postgresql 로그인 실패 횟수에 따른 접속 제한 설정’을 진행하려면 host레벨에서 소프트웨어를 설치하여 접근 제한 설정을 진행해야 한다.

- busybox : 리눅스 상에서 자주 사용되는 명령어들을 단일 바이너리로 패키징되어 제공하는 경량 소프트웨어. 패키지 관리자 및 라이브러리가 존재하지 않음.

[ fail2ban이란? ]

필터, jail, fail2ban-server, fail2ban-client로 구성되어있고 iptables, ubw 등 네트워크 방화벽을 이용하여 로그 기반으로 특정 ip에서 들어오는 트래픽 접근 제어를 담당하는 보안 솔루션이다.

 

[실습]

postgresql 로깅 설정

vi /var/lib/postgresql/data/postgresql.conf or 볼륨 매핑한 디렉터리에서 postgresql.conf 수정

log_connections = on                                          // 데이터베이스 커넥션 성공, 실패에 대한 로그를 찍는다.
logging_collector = on                                        // 로그 수집기를 활성화한다.
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,client=%h '  // 로그 PREFIX를 지정한다.
log_directory = '/var/lib/postgresql/data/log'                // 로그를 떨어트릴 위치를 선정한다.

도커 볼륨 매핑

 

도커 컴포즈 mdrm-postgres에 볼륨 매핑 정보 추가
volumes:
  - /opt/gam/postgresql/data/13/main:/var/lib/postgresql/data   // 로그 디렉터리와 설정 정보, 데이터 영역을 맵핑한다.

 

 

fail2ban 설치

sudo apt install fail2ban

fail2ban 필터 및 환경 변수 설정

 

필터 설정

vi /etc/fail2ban/action.d/postgres.conf

[Definition]
failregex =  \[\d+\]: \[\d+-\d+\] user=(.*),db=(.*),client=<HOST> FATAL:  password authentication failed for user ".*"$
ignoreregex =

환경 변수 설정

vi /etc/fail2ban/jail.conf

[postgres]
enabled  = true   // 활성화
port     = all    
filter   = postgres    // 위에서 설정한 필터 이름
logpath  = /opt/gam/postgresql/data/13/main/log/*   // 로그 디렉터리 위치 선정
maxretry = 2  // re-try 횟수 설정
findtime = 600   // 총 재시도 시간
bantime  = 60    // 차단 기간
datepattern = ^%%Y-%%m-%%d %%H:%%M:%%S UTC

action 설정

[Definition]
actionban = /sbin/iptables -A FORWARD -s <ip> -j DROP    // 해당 IP를 출발지로 하는 포워딩 트래픽
           /sbin/iptables -A INPUT -s <ip> -j DROP       // 해당 IP에서 들어오는 모든 트래픽

actionunban = /sbin/iptables -D FORWARD -s <ip> -j DROP
             /sbin/iptables -D INPUT -s <ip> -j DROP

 

결과 확인

  • IP Ban

  • iptables 확인

 
  • 접속 테스트

'네트워크' 카테고리의 다른 글

nginx, blue-green 배포  (0) 2023.07.27
소켓과 HTTP  (0) 2023.02.22
~.ssh 폴더 및 ssh 접속 원리  (0) 2023.01.07
path vector, distance vector, link state  (0) 2022.12.28
dhcp 동작과정 - 요약  (0) 2022.12.27