개발 - WEB, WAS, DB

디도스 공격 방어 후기 (1)

개미v 2024. 8. 8. 10:36

운영중인 웹서버에 새벽 내내 디도스 공격이 이어졌습니다.
처음 있는 일이어서 어버버 하다가 그냥 뚜드려 맞기만 했습니다.

공격 받은 서버는 이오이카 채팅 사이트인데, 그 시간대에 다른 채팅 사이트 가가라이브도 공격 받고 있더라고요 ㅋㅋ

공격당시 netstat 명령어로 네트워크 상태를 확인해보면 만개 이상으로 이런식의 연결이 생겨났습니다.
공격지 IP는 중국, 인도, 중동, 유럽, 애저, 구글클라우드 등 전세계 입니다.

  TCP    27.126.xx.xxx:443       216.10.247.145:55746   CLOSE_WAIT
  TCP    27.126.xx.xxx:443       216.10.247.145:55784   CLOSE_WAIT
  TCP    27.126.xx.xxx:443       216.10.247.145:55844   CLOSE_WAIT
  TCP    27.126.xx.xxx:443       216.10.247.145:56156   ESTABLISHED
  TCP    27.126.xx.xxx:443       216.10.247.145:56258   CLOSE_WAIT
  TCP    27.126.xx.xxx:443       216.10.247.145:56264   CLOSE_WAIT
  TCP    27.126.xx.xxx:443       216.10.247.145:56776   CLOSE_WAIT
  TCP    27.126.xx.xxx:443       216.10.247.145:56954   CLOSE_WAIT
  TCP    27.126.xx.xxx:443       216.10.247.145:57132   CLOSE_WAIT
  TCP    27.126.xx.xxx:443       216.10.247.145:57142   CLOSE_WAIT
  TCP    27.126.xx.xxx:443       216.122.181.249:60262  CLOSE_WAIT
  TCP    27.126.xx.xxx:443       216.176.200.37:39154   ESTABLISHED
.
.
.

  TCP    27.126.xx.xxx:443       216.176.200.37:43510   ESTABLISHED
  TCP    27.126.xx.xxx:443       216.176.200.37:43516   ESTABLISHED
  TCP    27.126.xx.xxx:443       216.176.200.37:47924   ESTABLISHED
  TCP    27.126.xx.xxx:443       216.176.200.37:53216   ESTABLISHED
  TCP    27.126.xx.xxx:443       216.176.200.37:53230   ESTABLISHED
  TCP    27.126.xx.xxx:443       216.176.200.37:53242   ESTABLISHED
  TCP    27.126.xx.xxx:443       216.176.200.37:53258   ESTABLISHED
  TCP    27.126.xx.xxx:443       216.238.83.53:36934    CLOSE_WAIT
  TCP    27.126.xx.xxx:443       216.238.83.53:45355    CLOSE_WAIT
  TCP    27.126.xx.xxx:443       216.238.83.53:45504    CLOSE_WAIT

 

 

첫번째 화이트리스트 정책으로 대응

처음 대응으로 방화벽에 공격지의 IP를 블랙리스트 방식으로 추가하다가
시간만 날리고 아니다라는 것을 깨달았습니다.
(여기서 몇 시간 허비)

다시 국내IP만 허용하는 화이트리스트 방식으로 대응 선회
해외IP는 전부 차단함
(공격 잠잠해지면 해외IP 차단 해제할 생각임)

국내IP 대역은 아래 사이트에서 확인 가능합니다.

https://xn--3e0bx5euxnjje69i70af08bea817g.xn--3e0b707e/jsp/statboard/IPAS/ovrse/natal/IPaddrBandCurrent.jsp?nationCode1=KR

 

한국인터넷정보센터(KRNIC)

도메인 소개, 등록 및 사용, IP주소, AS번호, DNS 정보, 관련규정 제공

xn--3e0bx5euxnjje69i70af08bea817g.xn--3e0b707e

 

방화벽 규칙 만들기 쉽게 엑셀 수식으로 정리한 파일입니다.

KR_NIPLIST_(2024.08.08).xlsx
0.20MB

 

두 번째 문제는 방화벽 정책에 저 많은 것을 언제 입력하지?

서버 OS는 PC용 윈도우10이고, 방화벽 프로그램 또한 전문가용은 아닙니다.
프로그램 상으로는 방화벽 정책 입력하는 것이 한번에 쉽게 되어 있지 않습니다.

그런데 레지스트리에서 등록할 수 있는 방법이 있습니다.
먼저 비어있는 방화벽 규칙 만들고, 레지스트리에 규칙 찾아서 값을 직접 변경해 주면 됩니다.

레지스트리 위치는
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules

레지스트리 편집기에서 값이 너무 길어서 붙여넣기 하면 값이 입력 안된 것 처럼 나오는데, 무시하고 확인 누르면 되더라고요.

마지막으로 중요한것, 레지스트리에서 입력한 경우, 방화벽 규칙 편집 누르고, 적용 눌러줘야 적용됩니다.

아래 텍스트 파일 참고

방화벽 국내IP만 허용 설정.txt
0.26MB

 

세번째 문제는 방화벽에서 국내IP만 허용하는 규칙 우선순위

윈도우 방화벽에는 규칙의 우선순위를 설정하는 방법이 없습니다.
방화벽을 사용하면 기본적으로 차단이고, 허용하는 규칙만 등록해주면 됩니다.

 

지금 설정하기 이전에 톰캣 프로세스(java) 규칙 4개가 전체 허용으로 등록 되어 있었는데, 이것을 사용안함
국내IP만 허용 규칙 추가 하고, 이것만 사용함으로 변경
그러면 80, 443 포트에 대해서 국내IP만 허용되고 나머지는 전부 차단 됩니다.

 

좀 더 보완

돈이 안되는 서비스라서 보안 장비를 추가 할 여건은 안됩니다.
일단 비용 최소화로 조치한 내용입니다.

문제 되는 패킷(SYN Flood)를 차단하거나, 윈도우 방화벽 말고 다른 더 좋은 방화벽 프로그램이 있는지 알아볼 계획입니다.

지금은 was(톰캣)하나로 되어 있는데, web - was도 분리해야 할 것 같기도 하네요.


※ 스마트폰으로 실시간 웹서비스 상태 체크하기
웹서버 장애 체크 하려고, 제가 개발한 앱인데 유용합니다.

장애 발생시 바로 인지 가능합니다.

 

https://play.google.com/store/apps/details?id=com.rivestsoft.monitor

 

HTTP Monitor - Google Play 앱

HTTP 네트워크를 백그라운드 서비스로 모니터링합니다.

play.google.com