원래는 블로그로 인터넷 생활을 시작했었다 얼마전에 네이버 블로그를 들어가니 약 12년 전에 만들었다고 되어있었다. 그렇게 블로그에 조금씩 글을 써보다가 스마트폰을 사고 소셜 미디어를 시작한 뒤로 싹 정리하고 소셜 미디어로 넘어갔었다.

하지만 역시 뭔가 길게 글을 쓰는 곳은 블로그만한 곳이 없다, 또 이것저것 공부한 내용들을 내가 나중에 찾아보기 편하려고 해도 블로그만한 곳이 없어서 다시 시작했다가 파편화된 블로그를 모으는 뜻에서 디지털 오션에 VPS를 구독하고, 워드프레스를 설치하게 되었다.

일단 워드프레스를 위해 웹서버 프로그램과 php, mysql 혹은 mariadb를 설치해야하는데 설치하고 설정하는게 여간 귀찮은 일이 아니라서 그동안 미루고 있었다, 웹호스팅 서비스를 사용할까 싶다가도 하는 일이 서버 엔지니어다 보니 직접 관리는 하고 싶어서 찾아보던 도중 디지털 오션 마켓 플레이스에 워드프레스가 있는 것을 발견했다

https://marketplace.digitalocean.com/apps/wordpress

TLS 인증서 갱신을 위한 cert bot 까지 있었으니 크게 만족할만한 구성이었다, 일단은 우분투 20.04 버전인게 아쉬웠으나 20.04 LTS는 25년까지 지원이고 설치한 다음에 업그레이드를 하면 되니까 선택해서 빌드하였다

VPS를 어떤 것을 고를까 참 고민을 많이 했다 최근 디지털 오션 요금제에 변화가 있었기 때문이다. 램 512 메가, 램 1기가, 램 2기가 중에 고민을 하다가 일단은 1기가면 되겠지 하고 1기가를 선택했다. 사용자 수가 늘어나면 램 2기가를 선택하면 될 것 같았고 경험상 보통 블로그 쓰는 정도로는 SSD 25기가로 충분해보였기 때문이다

+ 근데 SSD를 쓰는게 너무 신기하다, SSD는 돌연사 해서 아직 서버에서 쓰기는 좀 힘들다고 들었기 때문이다 아마 이중화 해놓고 가상 머신과 가상 네트워크 쓰고 모니터링 시스템도 있으니까 그렇게 쓰는 거겠지, 클라우드 컴퓨팅 회사들은 어떻게 시스템이 되어 있을지 궁금하긴 하다(AWS, GCP, OCI, AZURE 등)

보안을 위해 SSH 키를 사용한 로그인을 하였다, 어차피 디지털 오션은 웹에서도 콘솔 접속이 가능하니 키가 바뀌거나 잃어버리거나 하면 그쪽으로 접속해서 새로 생성, 등록하면 되니까 말이다. 처음으로 SSH 연결을 하니 워드프레스를 위한 각종 설정 스크립트들이 나를 반갑게 맞아주었다.

설정을 다하고 나서는 기존에 워드프레스 닷컴에 있는 테마와 글 사진들을 가져오고, 추가적으로 티스토리 같은 곳에 썼던 글들을 복사해오는 작업을 했다. 다행히 쓴 글이 많이 않아 금방 복사해올 수 있었다.

그렇게 설정을 끝내고 클라우드 플레어에 A 레코드도 등록하려던 쯤 문득 머리에 스쳐지나가는 것이 있었다. ‘아 맞아 웹서비스는 클라우드 플레어 통해서만 들어오게 해볼까’ 라는 생각이었다. 예전에 읽었던 글이 생각났기 때문이다.

https://blog.qdon.space/posts/2019/04/%ED%81%90%EB%8F%88%EC%9D%98-%EB%B3%B4%EC%95%88-%EC%84%A4%EC%A0%95/

해당 글을 보면 도커나 ES에 대한 이야기도 있지만 일단 나는 사용하지 않으니 적당히 둘러만 보고 결국 핵심은 원본 아이피가 아닌 클라우드 플레어 IP 만 접속을 허용한다는 뜻인 것 같았다. 클라우드 플레어에 연결된 원본 서버 IP를 어떻게 알아내요? 할 수도 있는데 알아내는 것은 패킷추적을 ip/tcp 에 http/https 포트로 돌려서 확인해보면 충분히 알아낼 수 있을 것 같았다. 웹 브라우저가 웹서비스에 접속하는 것처럼 말이다.

해당 글에 있는 쉘 스크립트는 다음과 같다.

<pre class="wp-block-code has-black-color has-white-background-color has-text-color has-background">```
#!/bin/bash

DIR="$(dirname $(readlink -f $0))"
cd $DIR

wget https://www.cloudflare.com/ips-v4 -O ips-v4.tmp
wget https://www.cloudflare.com/ips-v6 -O ips-v6.tmp
mv ips-v4.tmp ips-v4
mv ips-v6.tmp ips-v6

for cfip in `cat ips-v4`; do
    ufw allow from $cfip to any port 80,443 proto tcp comment "CloudFlare"
done

for cfip in `cat ips-v6`; do
    ufw allow from $cfip to any port 80,443 proto tcp comment "CloudFlare"
done

ufw reload > /dev/null

```

이 스크립트를 돌리고 확인해보면 ufw에 정책들이 추가되어 있는 것을 확인해볼 수 있다. 원래 기본적으로 디지털 오션 wordpress 마켓 플레이스를 사용하면 Apache Full 이라는 정책으로 추가되어 있는데 이것을 다 비허용 설정을 한 뒤 돌렸었다. 그런데 설정이 뭐가 꼬인 건지 접속이 아예 안 되는 것이었다. 그래서 netstat 을 통해 리스닝 포트를 보는데 이쪽은 정상으로 있었다. 아파치 설정 문제인가 해서 보았는데 아파치 설정에도 크게 문제가 없어보였고, ufw 에 대해서 조금 찾아보기 시작했다. ufw는 iptables를 좀 더 사용하기 쉽게 관리하는 프로그램이라고 되어 있었다. (iptables -I INPUT 해서 명령어 넣기는 여간 귀찮은 일이 아니긴 하다.)

아 iptables 라고 하니 머리를 스쳐지나가는 경험이 있었는데 리스트 위에 있는 규칙을 먼저 따라간다. 즉 리스트 상단에 비허용을 하면 하단에 허용을 해도 비허용 상태가 된다. 그래서 일단 ufw 에서 클라우드 플레어 외에 있는 http, https 포트 규칙들을 다 지우고, 기본 인바운드 규칙을 deny로 설정하니 잘 되었다.

+ 문득 생각난 것이 있다. 보통 웹호스팅 서비스의 경우 FTP나 SSH를 사용하기 위해서는 IP를 방화벽에 등록하기 위해 고객센터에 연락하거나, 관리자 패널에서 설정하는 작업이 필요한데 관리자패널에서 설정하는 경우는 그나마 낫지만 직접 고객센터에 연락해야하는 경우는 정말 귀찮다. 뭐 그래도 그건 그나마 나은 편인데 운영 쪽에서 실수하여 iptables 를 잘못 넣어서 사실은 하나도 비허용이 안 되어있다던지 등의 경우도 있었다 보니 그냥 직접 올리는게 낫겠다는 생각이 들었나보다. 역시 잘 모르는거 살 땐 사람들 많이 사는 거 사는게 맞다 라는 생각을 해본다.

이제 방화벽 설정도 하였으니 mysql과 워드프레스 파일이 있는 폴더를 백업해야한다. 물론 디지털 오션 백업 옵션도 같이 신청하기는 했지만, 실물 파일도 가지고 있는 것이 내가 나중에 마이그레이션 하기도 좋기 때문이다. 일단 rsync와 rclone 중에 고민 하였는데 일단은 rsync를 사용하였다. rclone이 좋다는 평은 많이 보았는데, 사용해본 적도 없고 피곤해서 일단 익숙한 걸로 해봐야지 라는 생각이 있었기 때문이다. (야간 근무 끝나고 설정한 거라 일의 연장인 느낌이었다)

mysql은 dump로 뜨면 되고 워드프레스 파일은 그냥 폴더 째로 옮길 계획이었다. 백업 파일을 받는 서버는 얼마전에 맞춘 홈서버 컴퓨터에서 받을 것이다. 사실 원래는 여기에 워드프레스를 올릴까 싶었는데 쉐어하우스에 살다보니 공유기 건들이기가 겁나기도 하고, 유선랜이 아니라 무선랜을 쓰고 있어 연결지속에도 의문을 가지게 되어 VPS를 구독하게 되었다.

열심히 rsync를 설치하고 검색해서 설정파일들 만들고 집 외부 IP 알아내서 설정파일 host에 추가하고, 명령어를 입력했는데 connection refuse라고 떴다. 그래서 음 방화벽 문제구나 하고 ufw에 추가를 하니 connection timeout 이라는 에러가 떠서 찾아보니 클라우드 컴퓨팅 서비스는 보통 컴퓨터 자체에도 방화벽이 있고, 클라우드 서비스에도 방화벽이 있다고 한다. 그래서 디지털 오션 관리자 패널에서 찾아보니 rsync 기본포트인 873 포트가 허용이 안 되어 있는 것을 확인했고, 여기서 포트를 추가하니 잘 되었다.

이제 이걸 자동화할 cron 설정과 스크립트를 만들면 되는데 일단 그건 차후에 하기로 했다. 여기까지 설정하는데 너무 피곤했기 때문이다.

추가적으로 fail2ban 설정과 워드프레스에 보안 플러그인 및 몇가지 플러그인을 설치하고, 우분투 버전 업그레이드 및 SSH 키파일 기존파일로 추가 후 마무리 하였다.

우분투 버전 업그레이드 같은 경우 업그레이드 후 SSH 연결이 안되는 문제가 발생할 수 있으니 꼭 SSH키와 주요 파일들은 백업하고 하는 것을 추천한다.

워드프레스를 올리는 것은 그렇게 크게 어렵지 않았다. 설치가 다 되어 있는 마켓 이미지를 써서 특히 더 그랬다. 하지만 이후에 설정이 생각보다 손이 많이 갔다. 정말 방화벽으로 시작해서 방화벽으로 끝난 작업이었다.

차후에 작업 위시리스트

  • 백업 자동화 스크립트와 cron 설정
  • 웹서버를 엔진엑스, DB를 maria DB로 마이그레이션

이 글은 2022. 12. 7. 에 쓴 글에 대한 백업입니다.