- XDP Firewall setup guide - Network performance tuning guide Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
179 lines
3.8 KiB
Markdown
179 lines
3.8 KiB
Markdown
# XDP Firewall 설정
|
|
|
|
이 서버의 XDP 기반 DDoS 방어 설정 문서
|
|
|
|
## 개요
|
|
|
|
- **도구**: [XDP-Firewall](https://github.com/gamemann/XDP-Firewall)
|
|
- **설치 위치**: `/home/admin/XDP-Firewall`
|
|
- **설정 파일**: `/etc/xdpfw/xdpfw.conf`
|
|
- **모드**: DRV/native (고성능)
|
|
|
|
## 방어 구조
|
|
|
|
```
|
|
인터넷 → Cloudflare (250 req/10s) → Linode DDoS (~40Gbps) → XDP (250 Pps)
|
|
L7 Rate Limit 업스트림 필터링 L3/L4 필터
|
|
```
|
|
|
|
## 현재 설정
|
|
|
|
### 컴파일 옵션 (`src/common/config.h`)
|
|
|
|
| 항목 | 값 | 설명 |
|
|
|------|-----|------|
|
|
| MAX_BLOCK | 2,000,000 | 최대 차단 IP 수 |
|
|
| MAX_RL_IP | 2,000,000 | IP Rate Limit 맵 크기 |
|
|
| MAX_RL_FLOW | 2,000,000 | Flow Rate Limit 맵 크기 |
|
|
| ENABLE_RL_IP | 활성화 | IP 기반 Rate Limit |
|
|
| ENABLE_RL_FLOW | 활성화 | Flow 기반 Rate Limit |
|
|
|
|
### 필터 규칙 (26개)
|
|
|
|
| 순서 | 대상 | 동작 |
|
|
|------|------|------|
|
|
| 1-2 | Tailscale (100.64.0.0/10, fd7a:115c:a1e0::/48) | 허용 |
|
|
| 3-17 | Cloudflare IPv4 (15개 대역) | 허용 |
|
|
| 18-24 | Cloudflare IPv6 (7개 대역) | 허용 |
|
|
| 25 | 250 Pps 초과 | 60초 차단 |
|
|
| 26 | 나머지 | 허용 |
|
|
|
|
### Rate Limit 설정
|
|
|
|
- **임계값**: 250 Pps per IP
|
|
- **차단 시간**: 60초
|
|
- **근거**: [XDP DDoS Protection 레퍼런스](https://www.srodi.com/posts/ddos-mitication-with-ebpf-xdp/)에서 250 Pps 권장, 여유 있게 250으로 설정
|
|
|
|
## 명령어
|
|
|
|
### 서비스 관리
|
|
|
|
```bash
|
|
# 상태 확인
|
|
sudo systemctl status xdpfw.service
|
|
|
|
# 재시작
|
|
sudo systemctl restart xdpfw.service
|
|
|
|
# 로그 확인
|
|
sudo tail -f /var/log/xdpfw.log
|
|
|
|
# 필터 목록 보기
|
|
sudo xdpfw -l
|
|
```
|
|
|
|
### 패킷 통계 확인
|
|
|
|
```bash
|
|
# 실시간 통계
|
|
sudo bpftool map dump name map_stats
|
|
|
|
# 차단된 IP 확인
|
|
sudo bpftool map dump name map_block
|
|
```
|
|
|
|
### 동적 규칙 추가/삭제
|
|
|
|
```bash
|
|
# 특정 IP 차단 (60초)
|
|
sudo xdpfw-add -m 2 -d 1.2.3.4 -e 60
|
|
|
|
# 특정 IP 차단 해제
|
|
sudo xdpfw-del -m 2 -d 1.2.3.4
|
|
|
|
# Rate Limit 규칙 추가
|
|
sudo xdpfw-add -m 0 --pps 1000 --action 0 --block-time 30
|
|
```
|
|
|
|
## 화이트리스트
|
|
|
|
### Tailscale
|
|
- IPv4: `100.64.0.0/10`
|
|
- IPv6: `fd7a:115c:a1e0::/48`
|
|
|
|
### Cloudflare IPv4
|
|
```
|
|
173.245.48.0/20
|
|
103.21.244.0/22
|
|
103.22.200.0/22
|
|
103.31.4.0/22
|
|
141.101.64.0/18
|
|
108.162.192.0/18
|
|
190.93.240.0/20
|
|
188.114.96.0/20
|
|
197.234.240.0/22
|
|
198.41.128.0/17
|
|
162.158.0.0/15
|
|
104.16.0.0/13
|
|
104.24.0.0/14
|
|
172.64.0.0/13
|
|
131.0.72.0/22
|
|
```
|
|
|
|
### Cloudflare IPv6
|
|
```
|
|
2400:cb00::/32
|
|
2606:4700::/32
|
|
2803:f800::/32
|
|
2405:b500::/32
|
|
2405:8100::/32
|
|
2a06:98c0::/29
|
|
2c0f:f248::/32
|
|
```
|
|
|
|
## 성능
|
|
|
|
| 항목 | 수치 |
|
|
|------|------|
|
|
| XDP 처리 능력 | 2-5M Pps |
|
|
| 최대 차단 IP | 2,000,000개 |
|
|
| 메모리 사용 | ~1GB (BPF 맵) |
|
|
| CPU 사용 | 최소 (커널 바이패스) |
|
|
|
|
## 방어 능력
|
|
|
|
| 시나리오 | 방어 가능 IP 수 |
|
|
|----------|-----------------|
|
|
| 250 Pps/IP 공격 | ~10,000개 |
|
|
| 1,000 Pps/IP 공격 | ~5,000개 |
|
|
| 5,000 Pps/IP 공격 | ~1,000개 |
|
|
|
|
## 재컴파일 방법
|
|
|
|
설정 변경 후 재컴파일 필요:
|
|
|
|
```bash
|
|
cd /home/admin/XDP-Firewall
|
|
|
|
# 설정 수정
|
|
nano src/common/config.h
|
|
|
|
# 재컴파일
|
|
sudo systemctl stop xdpfw.service
|
|
make clean && make
|
|
sudo make install
|
|
sudo systemctl start xdpfw.service
|
|
```
|
|
|
|
## Cloudflare IP 업데이트
|
|
|
|
Cloudflare IP가 변경되면 설정 업데이트 필요:
|
|
|
|
```bash
|
|
# 최신 IP 확인
|
|
curl https://www.cloudflare.com/ips-v4/
|
|
curl https://www.cloudflare.com/ips-v6/
|
|
|
|
# 설정 수정
|
|
sudo nano /etc/xdpfw/xdpfw.conf
|
|
|
|
# 적용
|
|
sudo systemctl restart xdpfw.service
|
|
```
|
|
|
|
## 참고 자료
|
|
|
|
- [XDP-Firewall GitHub](https://github.com/gamemann/XDP-Firewall)
|
|
- [Cloudflare L4Drop](https://blog.cloudflare.com/l4drop-xdp-ebpf-based-ddos-mitigations/)
|
|
- [Red Hat XDP Filter Guide](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/configuring_firewalls_and_packet_filters/using-xdp-filter-for-high-performance-traffic-filtering-to-prevent-ddos-attacks_firewall-packet-filters)
|