«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

올해는 머신러닝이다.

NestJS에서의 Fail2Ban란 본문

스터디

NestJS에서의 Fail2Ban란

행복한 수지아빠 2025. 2. 12. 17:32

Fail2Ban이란?

Fail2Ban서버의 보안 강화를 위한 **침입 방지 도구(IDS, Intrusion Detection System)**입니다. 주로 **SSH, 웹 서버(Nginx, Apache), API 서버(NestJS 등)**에서 반복적인 로그인 실패나 악의적인 요청을 감지하고, 해당 IP를 차단하는 역할을 합니다.

NestJS를 배포할 때 Fail2Ban을 사용하면 보안이 강화되며, 특히 Brute Force Attack(무작위 로그인 시도), DoS 공격 등을 방지하는 데 유용합니다.


📌 Fail2Ban의 주요 기능

기능 설명

로그 감시 특정 서비스(Nginx, SSH, API 등)의 로그 파일을 감시
반복 로그인 실패 감지 일정 횟수 이상 로그인 실패 시 감지
IP 차단 감지된 IP를 방화벽(iptables)에서 차단
자동 해제 기능 일정 시간이 지나면 차단 해제
커스텀 규칙 가능 원하는 패턴(예: NestJS API 요청) 감지 가능

📌 NestJS에서 Fail2Ban 활용 방법

NestJS는 기본적으로 보안 기능이 포함되어 있지 않으므로, Fail2Ban과 연동하여 API 서버의 보안을 강화할 수 있습니다.

1. Fail2Ban 설치 (Linux 서버 기준)

sudo apt update && sudo apt install fail2ban -y

2. Fail2Ban 설정 파일 생성

Fail2Ban의 설정 파일을 /etc/fail2ban/jail.local에 추가합니다.

(1) SSH 보호 (기본 설정)

[sshd]
enabled = true
port = ssh
maxretry = 5
bantime = 3600
findtime = 600
  • SSH 로그인 실패가 5번 발생하면 IP 차단
  • 1시간(bantime = 3600초) 동안 차단됨
  • 10분(findtime = 600초) 안에 5번 실패 시 감지

(2) NestJS API 보호 (Nginx 연동)

NestJS는 Nginx Reverse Proxy를 통해 동작하는 경우가 많으므로, Nginx 로그를 감시하여 API 공격을 차단할 수 있습니다.

1️⃣ Nginx 로그에서 API 요청 감지

NestJS API 서버를 보호하려면 /var/log/nginx/access.log 파일에서 **반복적인 요청(IP별 요청 수 제한 등)**을 감지해야 합니다.

2️⃣ 커스텀 규칙 추가 (/etc/fail2ban/filter.d/nestjs.conf)

[Definition]
failregex = ^<HOST> -.*"POST /api/login HTTP.*" 401
ignoreregex =
  • POST /api/login 경로에서 401(Unauthorized) 응답이 여러 번 발생하면 IP 차단

3️⃣ jail.local에 NestJS 보호 규칙 추가

[nestjs]
enabled = true
port = http,https
filter = nestjs
logpath = /var/log/nginx/access.log
maxretry = 5
bantime = 3600
findtime = 600
  • 10분 안에 5번 로그인 실패 시(401 응답) IP 차단

📌 Fail2Ban 작동 테스트

Fail2Ban이 제대로 작동하는지 확인하려면:

sudo fail2ban-client status nestjs

특정 IP 차단:

sudo fail2ban-client set nestjs banip 192.168.1.100

차단된 IP 해제:

sudo fail2ban-client set nestjs unbanip 192.168.1.100

🚀 결론

  • Fail2Ban은 보안 강화 도구로, NestJS API를 보호하는 데 사용할 수 있음
  • 반복적인 로그인 실패, API 요청 공격, SSH 공격 등을 차단 가능
  • Nginx 로그와 연동하면 API 브루트포스 공격도 차단 가능

NestJS를 운영 환경에서 배포할 때 Fail2Ban을 설정하면 보안이 더욱 강화되므로, 반드시 적용하는 것을 추천합니다! 🚀