DDoS 공격을 방어하거나 공격의 출처를 추적하는 방법에 대해 알아보자.
DDoS 공격 방어 방법
1. 요청 수 제한 (Rate Limiting)
- 설명: 특정 IP 주소에서 발생하는 요청의 수를 제한하여 과도한 요청을 차단한다.
from flask import Flask, request, abort
from collections import defaultdict
import time
app = Flask(__name__)
# 요청 수를 저장할 딕셔너리
request_count = defaultdict(list)
@app.route('/api', methods=['GET'])
def api():
client_ip = request.remote_addr
current_time = time.time()
# 최근 1분 동안의 요청 수를 카운트
request_count[client_ip] = [timestamp for timestamp in request_count[client_ip] if timestamp > current_time - 60]
# 요청 수가 100을 초과하면 차단
if len(request_count[client_ip]) > 100:
abort(429) # Too Many Requests
# 요청 기록 추가
request_count[client_ip].append(current_time)
return "Request Successful"
if __name__ == '__main__':
app.run()
2. IP 차단 (IP Blacklisting)
- 설명: 악의적인 IP 주소를 사전에 차단하여 해당 IP에서의 요청을 차단한다.
- 코드 예시:
from flask import Flask, request, abort
app = Flask(__name__)
# 차단할 IP 주소 목록
blacklisted_ips = {"192.168.1.100", "10.0.0.5"}
@app.route('/api', methods=['GET'])
def api():
client_ip = request.remote_addr
# IP가 차단 목록에 있으면 요청 차단
if client_ip in blacklisted_ips:
abort(403) # Forbidden
return "Request Successful"
if __name__ == '__main__':
app.run()
3. 패킷 필터링 (Packet Filtering)
- 설명: 네트워크 수준에서 비정상적인 트래픽을 차단하는 방어 기법입니다. 방화벽이나 IDS/IPS를 사용하여 특정 패턴의 트래픽을 필터링한다.
4. 트래픽 분석 및 로그 모니터링
- 설명: 서버 로그를 분석하여 비정상적인 트래픽 패턴을 감지하고, 공격을 사전 예방할 수 있다.
5. 역 추적 (Tracing)
- 설명: 공격 출처를 추적하기 위해 소스 IP를 로깅하고, DDoS 공격이 발생한 IP에 대한 추가 분석을 수행한다.
- 코드 예시:
import logging
# 로깅 설정
logging.basicConfig(filename='ddos_attack.log', level=logging.INFO)
@app.route('/api', methods=['GET'])
def api():
client_ip = request.remote_addr
# 요청을 로깅
logging.info(f"Request from {client_ip}")
# 요청 처리
return "Request Successful"
결론
DDoS 공격 방어는 여러 기법을 통해 이루어지며, 위의 코드 예시들은 Flask 웹 프레임워크를 사용하여 간단한 방어 기법을 구현한 것이다.
실무에서는 이와 같은 기본적인 방어 기법을 조합하고, 고급 방화벽, IDS/IPS, CDN 등을 활용하여 보다 강력한 방어 체계를 구축하는 것이 중요하다.