무차별 대입 공격

onlyJoon·2024년 7월 25일
post-thumbnail

개인 프로젝트 용도로 PostgreSQL을 Docker 환경에 올려두었습니다.

그런데 어느날 서버의 CPU 이용률이 300%까지 치솟으면서 굉음을 일으켰습니다.

로그를 확인해보니

...
2024-07-22 19:30:01.081 KST [7815] DETAIL:  Connection matched file "/var/lib/postgresql/data/pg_hba.conf" line 128: "host all all all scram-sha-256"
2024-07-22 19:30:01.583 KST [7816] FATAL:  password authentication failed for user "postgres"
2024-07-22 19:30:01.583 KST [7816] DETAIL:  Connection matched file "/var/lib/postgresql/data/pg_hba.conf" line 128: "host all all all scram-sha-256"
2024-07-22 19:30:02.003 KST [7817] FATAL:  password authentication failed for user "postgres"
...

무수히 많은 접속 시도가 일어나고 있는 것을 확인할 수 있었고,
공부하면서 들어보기만 했던 무차별 대입 공격(brute force attack)을 당하고 있음을 인지하였습니다.

이를 대처하기 위해서 진행 했던 방법들을 정리해보겠습니다.

PostgreSQL 포트 변경

일반적으로 잘 알려진 포트를 대상으로 공격이 이루어지는 경우가 많기 때문에 우선 외부 접속 포트를 변경하였습니다.

아래는 기존 데이터를 유지하면서 PostgreSQL 컨테이너의 포트를 변경하는 방법입니다.

기존 컨테이너 중지 및 제거

docker stop <container-name>
docker rm <container-name>

새로운 포트로 컨테이너 재실행

docker run --name <container-name> -e POSTGRES_PASSWORD=<password> -d -p <외부 접속 포트>:5432 -v <볼륨 마운트 위치> postgres:latest

무차별 대입 공격 방지 설정

Fail2Ban 설치 및 설정

Fail2Ban을 사용하여 비정상적인 로그인 시도를 제한할 수 있습니다.

Fail2Ban 설치

sudo apt-get install fail2ban

Fail2Ban 설정

/etc/fail2ban/jail.local 파일에 PostgreSQL 관련 설정을 추가합니다.

[postgresql]
enabled = true
port = <외부 접속 포트>
filter = postgresql
logpath = <postgresql 로그 파일 경로>
maxretry = 3

PostgreSQL 필터 파일 생성

/etc/fail2ban/filter.d/postgresql.conf 파일을 생성하고 다음 내용을 추가합니다.

[Definition]
failregex = .*FATAL:  password authentication failed for user .* \[host=.*\]
ignoreregex =

Fail2Ban 서비스를 재시작합니다.

sudo systemctl restart fail2ban

이와 같은 설정을 통해 Docker 환경에서 PostgreSQL 서버를 보다 안전하게 운영할 수 있습니다.

profile
A smooth sea never made a skilled sailor

0개의 댓글