Image_Us-IP관리

codakcodak·2023년 2월 27일
0

ImageUs

목록 보기
4/17
post-thumbnail

문제상황

  • 개발 단계에서 프론트와의 통신을 위해 포트포워딩으로 외부접속을 허용하고 있는 상황에 로그를 통해 모르는 ip에서 요청을 보내는 것을 확인했다.
    이처럼 개발 단계에서 검증되지 않은 ip가 대량으로 요청을 보내(DDos공격) 포론트와의 원할한 리소스 공유가 되지 않을 수 있다.

*DDoS 공격의 의미
DDoS(Distributed Denial of Service)는 웹사이트 또는 네트워크 리소스 운영이 불가능하도록 악성 트래픽을 대량으로 보내는 공격

해결방법

  • 사전에 프론트와 협의를 통해 허용된 ip만 서버에 요청이 가능하도록 구현하였다.

적용과정

  • app.py
@app.before_request
def block_method():
    if 'x-real-ip' in request.headers:
        ip=request.headers['x-real-ip']
    else:
        ip=request.environ.get('REMOTE_ADDR')
    print("Current IP Address:",ip,flush=True)
    print("Current Process:",os.getpid(),flush=True)

    splited_ip=ip.split('.')
    ip_range=splited_ip[0]+'.'+splited_ip[1]
    
    if ip not in app.config['GOOD_IP_LIST'] and ip_range not in app.config['GOOD_IP_RANGE']:
            abort(403)
  • nignx로 배포 시 요청을 보낸 클라이언트의 ip를 추출
if 'x-real-ip' in request.headers:
        ip=request.headers['x-real-ip']
else:
        ip=request.environ.get('REMOTE_ADDR')
  • 네 자리 형식인 x.x.x.x의 ip에서 첫 번째와 두 번째의 숫자만 확인하여 큰 범위에서 허용 ip인지 검사
splited_ip=ip.split('.')
ip_range=splited_ip[0]+'.'+splited_ip[1]
  • 클라이언트의 ip가 명시한 허용 ip인지와 허용 범위인지를 검사하여 검증되지 않으면 403 상태코드를 보냄
if ip not in app.config['GOOD_IP_LIST'] and ip_range not in app.config['GOOD_IP_RANGE']:
            abort(403)

결과

  • 허용되지 않은 ip의 무리한 요청에 대해 리소스 공유를 예방
profile
숲을 보는 코더

0개의 댓글