[서버 침해 대응기 시리즈] 1인 개발자가 크립토재킹 당하고, 서버를 통째로 새로 만든 5일간의 기록
- 1편.내 서버가 6주째 몰래 채굴당하고 있었습니다
- 2편. docker.sock을 Jenkins한테도 AI한테도 주지 마세요 (socket-proxy)
- 3편. 7개 도메인 무중단 HTTPS 이전기 (nginx + certbot)
- 4편. Jenkins 자동배포, 보안이랑 403 싸운 이야기
- 5편. 그래서 보안과 편의 사이, 어디에 서야 할까 ← 지금 글
긴 시리즈였어요.
서버가 6주째 채굴당하는 걸 발견하고.
서버를 통째로 새로 만들고.
7개 서비스를 옮기고.
자동배포까지 붙였어요.
5일이 걸렸습니다.
이번 편은 좀 달라요.
기술 얘기보다.
이 5일을 돌아보면서 솔직한 생각을 정리해볼게요.

가장 크게 배운 거
솔직히 처음엔 화가 났어요.
내 서버가 남의 채굴기로 쓰였다니.
근데 시간이 지나니까.
오히려 다행이라는 생각이 들더라고요.
왜냐면.
저는 운이 좋게도 채굴 공격을 당했거든요.
채굴기는 시끄러워요.
CPU를 다 먹으니까 금방 티가 나요.
그래서 6주 만에라도 발견한 거예요.
만약 조용히 데이터만 빼가는 공격이었으면?
지금도 모르고 있었을 거예요.
DB가 통째로 복사돼도 몰랐겠죠.
그 생각을 하니까.
이번 일이 일종의 경고처럼 느껴졌어요.
"너 보안 너무 대충 했어" 하는.
비싼 수업료였지만.
차라리 지금 알아서 다행인 거죠.
내 선택이 맞았을까
이번에 제가 내린 가장 큰 결정은.
socket-proxy로 EXEC만 막고 나머지는 연 거예요.
4편에서 한참 싸웠던 그거요.
솔직히 이게 완벽한 보안은 아니에요.
진짜 빡세게 하려면.
빌드는 Jenkins가 하고, 배포는 완전히 분리하는 방법도 있어요.
근데 저는 1인 개발자예요.
모든 걸 완벽하게 격리하면.
운영이 너무 복잡해져요.
혼자 다 관리해야 하는데.
너무 복잡하면 오히려 실수가 생기거든요.
그래서 "핵심 위험만 막고, 운영은 단순하게"를 택했어요.
EXEC.
이번에 당한 그 무기.
그것만은 확실히 막았어요.
이게 정답인지는 모르겠어요.
근데 제 상황에선 이게 맞다고 생각해요.
보안은 결국.
내 상황에 맞는 균형점을 찾는 거니까요.
아직 안 끝났어요
솔직하게 말하면.
이거 다 했다고 끝난 게 아니에요.
남은 숙제가 있어요.
하나, 백업 자동화.
이번에 새로 만들면서 깨달았어요.
정기 백업이 있었으면 복구가 훨씬 쉬웠을 거라고.
DB랑 데이터를 매일 자동 백업하게 해둘 생각이에요.
또 무슨 일이 생겨도 돌아갈 곳이 있게요.
둘, 비밀번호랑 키 교체.
6주나 뚫려 있었잖아요.
그동안 비밀번호랑 API 키가 노출됐을 수 있어요.
이건 차분히 다 갈아야 해요.
셋, 기존 서버 폐기.
아직 옛 서버를 안 지웠어요.
도메인 전파가 완전히 끝날 때까지.
방화벽으로 잠가두고 며칠 더 지켜볼 거예요.
새 서버에서 빠진 게 발견될 수도 있으니까요.
이런 건 한 번에 다 하려다 또 실수해요.
급한 불 끄고.
나머지는 차근차근 하는 게 맞더라고요.
1인 개발자한테 하고 싶은 말
저처럼 혼자 서버 운영하는 분들 많을 거예요.
서비스 만들고, 배포하고, 관리까지 다 혼자요.
그러다 보면.
보안은 자꾸 뒤로 밀려요.
"일단 돌아가게 만들고 나중에 챙기자."
저도 그랬어요.
Jenkins 포트 0.0.0.0에 열어놓고.
docker.sock 그냥 물려놓고.
"나중에 막아야지" 하고 6주를 보냈죠.
근데 그 "나중에"가.
채굴 공격으로 돌아왔어요.
그러니.
지금 서버 돌리고 계신 분 있으면.
딱 두 가지만 확인해보세요.
내 관리 도구(Jenkins 같은)가 외부에 열려 있진 않은지.
docker.sock을 아무한테나 물려주진 않았는지.
이 두 개만 막아도.
제가 당한 공격은 안 당해요.
결국 핵심은 그 질문이에요
이 시리즈를 시작하기 전에.
제가 다른 글에서 이런 질문을 던졌어요.
"AI에게 어디까지 권한을 줄 건가."
자동화를 할수록 권한 분리가 중요하다고.
그땐 좀 추상적인 얘기였어요.
근데 이번에 몸으로 배웠어요.
AI든.
Jenkins든.
자동화 도구든.
뭔가에 권한을 줄 때는.
항상 같은 질문을 해야 해요.
"얘가 뚫리면, 나는 뭘 잃나?"
이 질문을 먼저 했으면.
6주 채굴은 없었을 거예요.
편함은 좋아요.
자동화도 좋고요.
근데 그 편함의 대가가.
"통제권을 통째로 내주는 것"이면.
언젠가 비싼 값을 치릅니다.
제가 그랬던 것처럼요.
마치며
5일간의 기록이었어요.
침해 발견부터.
재구축, 이전, 자동화까지.
힘들었지만.
덕분에 제 인프라가 전보다 훨씬 단단해졌어요.
그리고 무엇보다.
"편하게만 가려다 뭘 놓쳤는지"를 배웠어요.
혹시 이 글 읽는 분 중에.
저처럼 "나중에 막아야지" 하고 계신 분 있으면.
그 나중이 오늘이었으면 좋겠어요.
긴 시리즈 읽어주셔서 감사합니다.
서버 운영하시는 모든 분들.
부디 채굴당하지 마세요.
'서버, 인프라' 카테고리의 다른 글
| Jenkins 자동배포, 보안이랑 403이랑 한참 싸웠습니다 (0) | 2026.06.20 |
|---|---|
| 7개 도메인을 무중단으로 HTTPS 이전한 이야기 (0) | 2026.06.19 |
| docker.sock을 Jenkins한테도 AI한테도 주지 마세요 (0) | 2026.06.19 |
| 내 서버가 6주째 몰래 채굴당하고 있었습니다 (0) | 2026.06.18 |
| Docker 안에서 Claude Code, Codex 쓰다가 git push 막힌 분들 보세요 (0) | 2026.06.03 |