2025-12-16 11:44:25 +09:00
|
|
|
# 🛡️ fail2ban Discord Bot
|
|
|
|
|
|
|
|
|
|
fail2ban IP 차단 현황을 디스코드로 실시간 알림 및 관리하는 봇입니다.
|
|
|
|
|
|
2025-12-16 11:48:15 +09:00
|
|
|

|
|
|
|
|

|
2025-12-16 11:44:25 +09:00
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## ✨ 주요 기능
|
|
|
|
|
|
|
|
|
|
- 🚨 **실시간 알림** - 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 # 환경 변수
|
|
|
|
|
```
|