discord-bot/fail2ban/README.md

104 lines
2.7 KiB
Markdown

# 🛡️ fail2ban Discord Bot
fail2ban IP 차단 현황을 디스코드로 실시간 알림 및 관리하는 봇입니다.
![Python](https://img.shields.io/badge/Python-3.11-3776AB?logo=python)
![Discord](https://img.shields.io/badge/Discord.py-2.0-5865F2?logo=discord)
---
## ✨ 주요 기능
- 🚨 **실시간 알림** - IP 차단 시 디스코드 채널로 즉시 알림
- 📋 **차단 목록** - `/list` 명령으로 현재 차단 IP 조회
- 🔓 **차단 해제** - `/unban` 명령으로 IP 차단 해제
- 📊 **상태 조회** - `/status` 명령으로 fail2ban 서비스 상태 확인
- 🌍 **IP 정보** - 차단된 IP의 위치 및 ISP 정보 표시
---
## 🛠️ 기술 스택
| 기술 | 설명 |
| -------------- | ------------------ |
| **Python** | 런타임 |
| **discord.py** | 디스코드 API |
| **aiohttp** | 비동기 HTTP (웹훅) |
| **ip-api.com** | IP 위치 조회 |
---
## 📡 슬래시 명령어
| 명령어 | 설명 |
| -------------------- | --------------------------- |
| `/list [jail]` | 차단된 IP 목록 및 통계 조회 |
| `/unban <ip> [jail]` | IP 차단 해제 |
| `/status` | fail2ban 서비스 상태 확인 |
---
## 🔔 알림 형식
IP 차단 시 다음 정보가 포함된 Embed 알림이 전송됩니다:
- 🔒 차단된 IP
- 📛 Jail 이름
- ❌ 실패 횟수
- 🌍 위치 (국가, 도시)
- 🏢 ISP
- 🖥️ 서버 이름
---
## 🚀 실행 방법
### Docker (권장)
```bash
docker compose up -d --build
```
### 로컬 실행
```bash
pip install -r requirements.txt
python main.py
```
---
## ⚙️ 환경 변수
| 변수 | 설명 |
| -------------------- | --------------------------- |
| `DISCORD_BOT_TOKEN` | 디스코드 봇 토큰 |
| `DISCORD_CHANNEL_ID` | 알림 채널 ID |
| `WEBHOOK_PORT` | 웹훅 서버 포트 (기본: 5000) |
---
## 🔧 fail2ban 연동
`/etc/fail2ban/action.d/` 에 액션 스크립트를 추가하고, jail 설정에서 해당 액션을 사용합니다.
```bash
# 차단 시 웹훅 호출
curl -X POST http://127.0.0.1:5000/ban \
-H "Content-Type: application/json" \
-d '{"ip":"<ip>", "jail":"<name>", "failures":"<failures>"}'
```
---
## 📁 구조
```
fail2ban/
├── main.py # 봇 메인 로직
├── docker-compose.yml # Docker Compose 설정
├── Dockerfile # 컨테이너 빌드
├── requirements.txt # Python 의존성
├── discord-notify.sh # fail2ban 액션 스크립트
└── .env # 환경 변수
```