블로그

Uncategorized

[워드프레스]AWS-S3를 이용한 워드프레스 랜섬웨어 프리 자동 백업 시스템 구축

안녕하세요 ?
국내 유일의 무료 워드프레스 쇼핑몰 “우커머스 교실”에서 사용하고 있는, 아마존 웹 서비스 AWS 의 S3의 백업 기능을 이용하여 랜섬웨어 프리형태의 워드프레스 백업 시스템 구현의 실 구축 사례를 살펴보도록 하겠습니다.
지난 6월 국내 중견 웹호스팅사인 (주)인터넷나야나에서 랜섬웨어에 공격당하여 전체가 서버가 다운되고 암호화된 화일을 복원하기위해 해커집단에게 거액의 몸값을 지불한 일이 있었습니다. 상세 내용을 살펴보면 랜섬웨어에 현재 러닝중인 전체 서버 전체가 감염되기도하였지만 해당 서버의 백업을 담당하고 있는 서버도 같이 2차 감염되어 백업된 스냅샷을 이용한 웹사이트를 불완전한 복원조차 할 수 없는 상황에 이르런 것입니다. 즉, 랜섬웨어 감염 이전에 백업해두었던 백업 서버의 화일까지도 2차 감염이 되어서 서비스 중인 서버 DB를 다른 서버에서 복원조차 할 수 없는 상태에 이르게 된 것입니다. 결국 17억원이란 거액의 몸값을 지불한 후 백업 화일의 암호화를 풀수 있었던 결과는 상황의 심각성을 잘 말해주고 있습니다. 그래서 다보리에서는 랜섬웨어에 의한 백업 서버의 2차 감염이 불가능하도록 하기 위한 방법으로 S3를 이용한 백업 서버 시스템을 구축해보았습니다.

goofys를 이용해 AWS - S3를 이용한 백업 스토리지 구축
S3 는 AWS 제품 시리즈중 가장 유용한 서비스중의 하나인데 가장 빈번하게 쓰이는 형태가 백업 시스템과 CDN 서비스를 위하여 구축되는 경우입니다. 오늘은 S3를 이용한 백업 파일 시스템으로 활용하는 것이 주목적입니다. 이 해결책으로 쓰이는 백업 패키지중의 하나가 FUSE 기반의 s3fs 입니다. 하지만 이 3 sfs의 가장 큰 이슈가 “너무 느리다”라는 단점이 있습니다. 그래서 이것보다는 성능이 좋다는 goofys 패키지를 이용하여 백업 화일 시스템을 구축하였습니다. goofys 또한 오픈소스는 아니며 aws에서 정식으로 지원하는 패키지는 아닙니다만 사용해본 결과 s3fs 보다는 훨씬 속도가 빨라서 실행 속도에 큰 불만은 없었습니다. goofys 설치와 운용은 이 블로그의 목적에 너무 벗어나므로 해당 설명을 원하시는 분은 개별적으로 연락하시기 바랍니다.
일별/월별 백업 시스템 스크립트 개발
화일시스템을 구축한 이후 일별로 백업하면서 백업 공간으로 절약하기 위해 최근 일주일 단위의 백업화일만 저장 할 수 있도록 백업 시스템을 정하였습니다. 그리고 혹시라도 사용자의 관리 소홀로 인하여 발생할 수 있는 웹사이트 – 소규모의 기업 웹사이트는 사용자 가 1주일 동안 이상 여부를 점검하지 않는 경우도 많으므로 – 의 복원의 범위를 늘리기 위하여 각 월별 백업을 12개월치를 보관할 수 있도록 하였습니다.
정리해보면 다보리의 웹사이트 백업 시스템은 매일 새벽 2시경에 자동 백업을 하며 이것을 최근 일주일 7일치의 백업을 보관하고 있습니다. 그리고 추가적인 문제를 해결하기 위하여 매월초 백업을 받아서 12개월 간의 보조 백업을 하고 있습니다. 이것은 사용자의 의지와 사용 방법과 무관하게 야간에 자동으로 백업을 받게 되므로 문제가 최소화되고 있습니다.

이제 문제는 어떻게 백업이 받아진 화일 시스템을 랜섬웨어로 부터 방어하느냐 입니다.
다보리에서는 각 개별 S3를 각각분리해서 저장하고 백업과 복원 당시에만 화일 시스템을 복원하는 것으로 이 문제를 해결하였습니다. 즉 랜섬웨어 자체가 화일 시스템으로 마운트 되지 않을 경우에는 어떤 경우라고 백업 화일 시스템을 감염시킬 수 없다는 것을 전제로 하여 백업 시스템을 설계하였습니다.
백업 시스템의 복원 방법
[root@xxx:1 parks]# seedaily [사용자 ID] <<현재 월별 백업 계정의 백업 현황 보기>>
-rw-r--r-- 1 root root 275409 Jul 10 17:28 /xxx/yyy/mytest-170710.sql.gz
-rw-r--r-- 1 root root  35442 Jul 10 17:28 /xxx/yyy/mytest-170710.tar.gz
-rw-r--r-- 1 root root 275408 Jul 11 02:02 /xxx/yyy/mytest-170711.sql.gz
-rw-r--r-- 1 root root  35442 Jul 11 02:02 /xxx/yyy/mytest-170711.tar.gz
-rw-r--r-- 1 root root 275408 Jul 12 02:02 /xxx/yyy/mytest-170712.sql.gz
-rw-r--r-- 1 root root  35442 Jul 12 02:02 /xxx/yyy/mytest-170712.tar.gz
[root@xxx:1 parks]# restoredaily  [사용자 ID]  yymmdd   <<백업된 화일을 가져옴>>
Backup files are restored at  /home/mytest/backups
[root@xxx:1 mytest]# cdz mytest
[root@xxx:1 mytest]# cd backups
[root@xxx:1 backups]# l
total 1884
drwxr-xr-x 2 root   root      4096 Jul 12 18:29 .
drwxr-x--x 3 mytest apache    4096 Jul 12 18:29 ..
-rw-r--r-- 1 mytest apache 1864693 Jul 12 18:29 mytest-170711.sql
-rw-r--r-- 1 mytest apache   51200 Jul 12 18:29 mytest-170711.tar
[root@xxx:1 backups]#

이후는 아래와 같은 웹사이트 복원 절차로 진행하시면 됩니다.

워드프레스 웹호스팅에서 Shell 명령어로 데이터와 DB 백업과 복원하기


Leave a Reply

Your email address will not be published. Required fields are marked *