어제(7/8) 오후와 오늘(7/9)일 한동안 제 블로그가 열리지 않았습니다. Bluesky 에는 실시간으로 올려서 아시는 분도 계시겠지만 공격자들의 블로그를 향한 공격이 끊이질 않아… 결국 Cloudflare로 옮긴 것도 모자라서, 이미 노출된 IP를 세탁하기 위해 서버 인스턴스를 클로닝해서 새로 디플로이 한 뒤, 재설정했습니다. 그 과정에서 NS 변경과, 서버 설정 반영에 약간의 다운타임이 생겼던 것입니다. 그리고 연달은 삽질 때문에…
차라리 몰랐으면 좋았을 것을?
문제의 발단은 푸른곰이 Modsecurity를 설정하며 OWASP CRS와 COMODO WAF Ruleset을 설치하며 벌어집니다. 그리고 로그를 켜고 차단을 하자………. 펑
순식간에 로그파일이 불어나서 한때는 텍스트로 된 로그가 20MB가 되기에 이릅니다. 도저히 로그를 일일히 쫓는 것도 불가능하고 처음에는 순순히 받아서 해석해주던 GAI들도 양이 불어나니 하나 둘 포기를 하기에 이를 정도로 양이 겉잡을 수 없이 커졌습니다.
이 쯤 되니 뭔가 조치가 필요하다고 생각했고… 결국 일단 서버를 클라우드플레어의 캐시 밑으로 넣습니다. 그러나 이미 서버의 IP주소가 드러나서 IP 주소를 직접 공격하는 로그가 생겨나기 시작했습니다. 한편 클라우드플레어는 밤새 4천건이 넘는 의심 트래픽을 걸러내고 있었습니다.

결국 그래서 서버를 다시 생성해서 ‘야반도주’하게 이릅니다. 그로 인해 첫 번째 중단이 벌어집니다.
두 번째 고비와 세 번째, 네 번째 고비는 전혀 뜻하지 않은 곳에서 찾아옵니다. 포스트 업데이트와 파일 업로드를 하는데 사용되는 PHP 응답이 가로막힌 것입니다. 그래서 서버 측의 방화벽과 권한을 뒤져봤으나 몇시간 뒤에 알게 된 사실은 Cloudflare가 막았다…. 라는 것이었습니다. Development Mode로 캐싱을 꺼도 보안 기능은 동작하고 있었던 것이죠. (업로드가 안되던 이미지가 바로 위의 그래프입니다, 아이러니하게도)
세 번째 고비는, 문제를 해결하던 도중, 워드프레스의 wp-config.php 파일을 손보다가 실수를 해서 모든 리퀘스트에 깨진 wp-config.php가 표시되었습니다. 이 파일에는 꽤나 민감한 내용이 담기는데요. 결국 wp-config.php에 있던 내용은 전부 새로 변경하고 고쳐서 다시 되돌릴 수 있었습니다.
네 번째 고비는 어제 자기 전에 워드프레스의 파일 퍼미션을 손보다가 일어납니다. www-data 그룹 사용자가 파일을 쓰지 못하는 상황이 벌어진 것인데 캐시때문에 모르고 있다가 자고 일어나보니 500 에러가 난것을 보고 아이고, 이거 큰일 났구나 해서 수정하면서 해결 되었습니다.

결론부터 말하자면… 이런 삽질을 해놓고 나니 공격은 Cloudflare 측에 280 여건, 그리고 서버측 방화벽은 제가 삽질하며 들쑤신 이력만 남았다… 라는 행복한 이야기였습니다. 블로그가 몇 번 죽고, 클라우드플레어 요금이 월 과금 목록에 추가되고 그랬습니다만, 결과가 잘됐으니 잘 됐다고 생각하기로 했습니다.