최근 몇몇 사이트 댓글들에서 Cloudflare를 통해서 DDos를 방어하려는 시도는 전혀 의미없다는 무용론을 펼치는 사람들이 종종 보인다. 이들은 DDos 공격을 맞고나서 클라우드플레어를 써도 서버에 된다는 주장을 내세운다.

만약 운영하려는것이 비영리 이거나, 매우 작아서 DDos 공격을 생각할 필요도 없는 사이트라면 수용 가능한 주장이다. 그러나 공격으로 인해 서버 접속이 불가능할시 피해가 예상된다면 위와 같은 생각은 매우 위험하다. 특히 서버가 한국내에 위치한다면 더더욱 위험한 주장이 된다.

이 글은 중소 규모의 DDos를 겪어본 경험을 토대로 작성했다. 필자는 그 동안 SYN Flood, ICMP Flood, HTTP L7 GET/POST, UDP Flood 등 여러 종류로 수백mbps급 DoS부터 74Gbps 공격까지 겪어봤다. 아래 내용은 필자가 사용한 호스팅 업체들만 다루고 있다. 글을 읽는 여러분이 다른 호스팅 업체를 사용한다면 대응 또한 다를수 있다는 점을 유의하길 바란다. (참고로 필자는 통이, 가*아, ClV, IV, NCd, Or**e등 여러 호스팅 업체를 사용해 왔다.)

또한, 이 글은 "초보자가 서버를 설정·운영할 때의 상황"을 가정하여 작성되었다. Cloudflare나 CDN에 대해 충분히 알고 장단점을 설명 할 수 있는 사람이라면 "Cloudflare를 쓰면 안전한가요?" 같은 질문은 하지 않을것이다. 초보자라면 80번 포트 외에 php-fpm용 9000번 포트나 memcached 포트를 막지 않았을 수도 있다. 그런 점을 반영하여 작성하였음을 이해해 주면 좋을것 같다.

DDos 발생시 국내 호스팅 업체들의 대응

DDos 발생시 호스팅 업체들은 가장 먼저 무엇을 할까? 우선 공격이 해외에서 오는지, 국내에서 오는지 확인한다. 만약 해외발 공격이면 해외 IP를 모두 널라우팅 한다. 주로 호스팅 업체 단에서 조치를 하지만, 공격 규모가 매우 크면 백본팀에서 우선 차단조치 하기도 한다.

해외발 공격이면 그나마 대응이 쉽다. 해외망만 막는 선으로 퉁칠수도 있기 때문이다. 하지만 국내 IP에서 공격이 온다면 서버 IP를 망에서 분리해 버린다. (널 라우팅 한다) 이 경우 서버 내부에 접근하는것도 쉽지 않다. Cloudflare등을 붙이려고 하거나, 하다 못해 서버를 옮기려고 해도 호스팅업체 측에 요청하여 별도의 접속 방법을 받아야 한다. 특히 국내발인데 규모도 어느정도 되면 백본에서 직접 서버 IP를 차단해 버린다. 이 경우 호스팅업체 측에 "언제 풀릴까요..?" 물어봐도 뾰족하게 답이 나오지 않는다.

몇차례 공격을 받으면 회선계약을 해지해 버리는 업체도 있다. 3차례 공격 받으면 무조건 방 빼라고 하는것이다. DDos 방어 서비스를 사용해야만 자사 호스팅을 계속 이용할 수 있다고 말 하는곳도 있다.

어쨋든, 디도스 공격을 받으면 대응을 하기가 쉽지 않다. 장애복구 (멀티리전) 정책을 세워놓지 않았을 경우에는 수시간에서 수일이 걸릴수도 있다. 문제는 “클플을 DDos 방어용으로 쓸 수 있을까요?” 라고 묻는 분들중 많은 수가 IT에 대해 잘 모른다는 것이다. 답변을 다는 분들이야 IT를 잘 아니까 꼭 안달아도 무방하다고 한다지만, 초보자들에게는 알고 있는 유일한 방비책 마저 준비하지 못하게 한다.

그러면.. Cloudflare를 꼭 써야할까?

그렇다면 공격을 받고 나서 Cloudflare를 적용하면 되지 않냐 물을수 있다. 세가지 이유에서 공격 당하기 전에 Cloudflare를 미리 도입해야 한다고 생각한다. 첫번째는 Public IP의 노출이고 두번째는 접속 레이어의 추가이다. 마지막은 가장 중요한 서버 IP차단 가능성을 줄여줄 수 있는 부분이다

Cloudflare를 사용하면 자신의 IP가 외부에 바로 공개되지 않는다. 다른 말로, Cloudflare등의 CDN을 사용하지 않는다면 서버의 실제 IP가 외부에서 바로 볼 수 있다. 공격자가 서버 IP를 이미 확보하고 있는 경우엔 Cloudflare를 사용해도 의미 없을 수 있다. 상대가 내 서버의 IP를 알기 때문에 DDos가 아닌 다른 공격들도 당할수도 있다.

이유를 알려면 Cloudflare같은 CDN 업체들이 어떻게 공격을 막아주는지 알 필요가 있다. Cloudflare는 모든 연결을 자신이 중계하는 구조를 가진다. 아래의 그림처럼 원래라면 사용자가 실제 내 서버에 바로 접속한다. 하지만 Cloudflare를 사용한다면 사용자는 내 서버에 접속하는 대신에 Cloudflare 서버로 접속한다. 그리고 Cloudflare가 중간에서 서로를 중계해 준다. 그 덕분에 내 서버에 공격자가 DDos를 때려봤자 Cloudflare가 대신 맞는 꼴이 된다.

connection-between.png

위와 같은 구조이기에 실제 서버의 IP를 모르게 하는것이 중요하다. 만약 공격자가 내 서버의 IP를 알고있다면 Cloudflare를 통하지 않고 직접 내 서버로 공격할 수 있게 된다. 이 경우에는 반응속도의 문제로 오히려 사용자들에게 악영향을 줄 뿐이다. (물론 Cloudflare를 사용해도 서버 설정을 잘못한다면 공격자가 서버 IP를 찾아낼 수도 있다) 혹시라도 공격을 받고나서 Cloudflare를 도입한다면 꼭 IP주소 변경 요청을 해야한다. 이때 가능한 멀리있는 IP 블록으로 붙여달라고 하자.

손쉽게 사이트(도메인)에 연결된 IP를 확인할 수 있다.

손쉽게 사이트(도메인)에 연결된 IP를 확인할 수 있다.

conn-layer.png

맨 위의 문단에서 DDos 공격을 받게되면 수 시간 동안 서버 IP가 차단 당할수 있음을 설명했다. 이렇든 저렇든, 서버가 차단당하는 일은 최소화 해야한다. 위와 같은 기능이 있는것은 사실 중요하지 않다. 내 서버가 차단 당하지 않는것이 장땡이다. 그런점에서 Cloudflare는 충분한 방패막이 되어 준다.