[EOS노드원] AWS 네트워크 로드밸런서 DDoS 벤치마크

in #eos7 years ago (edited)

안녕하세요. EOS BP 후보 EOS 노드원의 Lead Engineer 로빈슨입니다.


  • EOS42 의 Charles H (Telegram ID: ankh2054) 의 글 [DDOS mitigation for EOS Block producers : EOS BP를 위한 DDOS 방어 ]을 보고 홍콩의 EOS BP 후보 HK EOS의 Jae Chung(Telegram ID: jaechung)과 함께 EOS 42의 글에서는 다루지 않았던 AWS NLB (Network Load Balance)에 대한 테스트를 진행하였습니다.

  • 이 글은 AWS NLB가 TCP 연결만을 허용하는 점을 이용하여 트래픽 분산이 아닌 필터로써 유효하지 않은 연결을 걸러내어 DDoS를 막는 방법에 대한 내용을 다룹니다.

  • 이와 다른 구성으로 테스트를 진행한 Jae Chung의 테스트 결과도 공유해주길 기대합니다.

[테스트 환경 구성]


  • Full node(m5.large)와 VPC 내에서 연결된 Producer Node (t2.large) 1개

  • 9876 및 하나의 랜덤 포트

  • LB와 직접연결 Full node (m5.large) 1개

  • JungleTestnet 의 BP peer 로서 연결됨

NLB.001.png

  • DDoS 공격은 9876 포트와 하나의 랜덤포트에 대해 SSDP 공격 방식으로 진행하였습니다.

[AWS NLB DDoS 테스트 결과]


  • 결과적으로 AWS NLB는 BotNet에서 들어오는 DDoS공격을 효과적으로 소화해냈습니다.

  • AWS NLB는 어떻게 유효하지 않은 UDP 패킷을 견뎌낼 수 있었을까요? (코멘트 바랍니다)

result.jpg

  • 아래는 테스트 기간동안 EC2 Instance의 상태 변화에 대한 기록입니다.

  • 테스트는 UTC 기준 5월 10일 17시 20분 즈음부터 약 1시간 가량 진행되었습니다.

  • 특이한 점은 테스트를 시작할때즈음 부터 테스트가 종료된 이후 약 2시간 동안 평소와 다른 낮은 CPU 사용률을 보인 것입니다. 이 지표로만 보았을때 nodeos의 프로세스가 죽어버렸거나 제대로 작동하지 않았을 것으로 추측하였으나, 로그를 보았을 때 정상적으로 블록이 동기화 되었음을 알 수 있었습니다.

  • 로드밸런서에 과도한 트래픽이 발생할 경우 이와 연결된 인스턴스의 가용성을 보장하기 위해 VM 의 컴퓨팅 자원에 대한 우선순위가 올라가는 것이 아닌가 추측을 합니다만, 이 부분에 대해 아시는 분은 코멘트 주시면 감사드리겠습니다.

CPUUtilization.jpg

fullnodelog.jpg

  • 테스트 기간을 전후하여 Network In/Out 차트에 LB를 통화여 들어온 트래픽으로 보이는 스파이크가 발생하였지만 인스턴스에서 소화할 수 있는 수준이었습니다.

NetworkIn.jpg

NetworkOut.jpg

NetworkPacketIn.jpg

NetworkPacketOut.jpg

  • 테스트 기간을 포함하여 모든 기간 동안 인스턴스는 정상적으로 작동이 되었습니다.

HealthyHost.jpg

  • LB로 들어오는 TCP 연결 숫자를 나타내는 차트입니다.TCP를 통한 공격을 진행했는지 여부는 확인할 필요가 있으나, 테스트 기간동안 스파이크가 발생한 것으로 보아 TCP에 대한 공격도 진행한 것으로 판단이됩니다.

NewFlowCount.jpg

  • LB에서 대부분의 공격이 걸러지고 대상 인스턴스까지 도달하지 않았음을 볼 수 있습니다.

ActiveFlowCount.jpg

  • 소비된 LB의 용량을 확인했을때 DDoS 공격으로 인해 LB Unit의 사용량이 늘어난 것을 볼 수 있습니다.

  • ConsumedLBCapacityUnit(LCU) 는 LB의 과금 단위로 서울 기준 1LCU = 0.008 USD로 매우 저렴합니다.

LCU

  • fullnode와 가상 서설망으로 연결된 producer node 가 정상적으로 블록을 생산한 것을 확인하였습니다.

producernodelog.jpg

[DDoS 방어 테스트 결론]


  • Charles H의 벤치마킹 결과에서 Google Network Load Balancer가 효과적으로 DDoS 공격을 막아 낸 것과 같이 이번 테스트에서 시간당 0.008불도 되지 않는 저렴한 비용으로 AWS의 Network Load Balance 또한 효과적으로 공격을 막아내었습니다.

  • 이로써 BP p2p network의 연결에 있어서도 AWS NLB를 거쳐가는 구성을 고려해볼 수 있습니다.

[예정 테스트]


  • 다음 테스트로는 LB가 노드의 응답 속도에 어느정도 영향을 주는지, 그리고 베어메탈 환경에서 AWS NLB을 사용시 성능을 보장하는지 테스트를 진행 할 예정입니다.

스크린샷 2018-05-03 11.31.14.png

Sort:  

이번글을 어렵네요 문송은 그래도 감사합니다.. 어렵다... 이오스는쉽지않아..

타 BP 후보 엔지니어들과의 정보교류를 위해 작성된 글이라 다소 어렵게 느껴질 수 있겠네요. 의견 감사합니다.

정보 감사합니다 문제를 공개해서 답을 찾으려는 노력 믿음이 가네요 화이팅

의견 감사합니다

아마도 NLB가 TCP만 지원하기 때문에 UDP 패킷은 drop된게 아닐까 생각되네요. (정말 drop되는지는 확인이 안되지만..)
AWS 가이드 문서 상에서는 TCP만 지원된다고 되어 있기 때문에 좀 더 정확한 DDOS 성능 테스트를 하실꺼라면 TCP Packet을 발생시켜보시면 좋을 것 같습니다. :)

네. TCP만 지원하는 특성 때문에 그것이 과연 필터로서 역할을 하는지 확인하려했었습니다. 내부적으로 UDP패킷을 어떻게 처리하는지는 확인이 안되지만, 여튼 로드밸런서가 필터링을 해주는 점은 확인이 되었네요. TCP SYN Flood에 대한 테스트도 진행 해봐야겠습니다. 의견 감사합니다 :)