# 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)