올해는 머신러닝이다.
NestJS에서의 Fail2Ban란 본문
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을 설정하면 보안이 더욱 강화되므로, 반드시 적용하는 것을 추천합니다! 🚀
'스터디' 카테고리의 다른 글
Cursor AI Rule에 대해 기초 정리 (0) | 2025.02.12 |
---|---|
Access Token과 Refresh Token에 대한 이해 (0) | 2025.02.12 |
HTML의 img, picture, source 태그 속성과 기능 정리 (0) | 2025.02.11 |
MVVM / MVC(아키텍쳐)와 디자이패턴과 다른점은 무엇인가 (1) | 2025.02.07 |
지치지 않고 제대로 공부하는 7가지 방법 (0) | 2018.12.18 |