본문 바로가기

서버, 인프라21

서버가 털린 날 — 암호화폐 채굴 악성코드는 이렇게 들어왔다 새벽에 알림이 울렸습니다.서버가 느리다. 응답이 안 온다. 처음엔 트래픽이 몰렸나 했어요. 근데 방문자는 평소랑 똑같았습니다. 트래픽은 그대로인데 서버만 헐떡이고 있었죠.어? 이상하죠. 손님은 그대론데 주방이 불난 것처럼 바쁘다?접속해서 확인해보고 등골이 서늘해졌습니다. CPU가 계속 100%에 붙어 있었어요. 아무도 시키지 않은 일을, 누군가가 제 서버에 계속 시키고 있었던 겁니다.암호화폐 채굴 악성코드가 뭐냐면크립토재킹(cryptojacking, 남의 컴퓨터를 몰래 써서 암호화폐를 캐는 공격)이라는 게 있습니다.비유하자면 이래요. 누가 내 집 전기를 몰래 끌어다가, 우리 집 지하실에서 자기 채굴기를 돌리는 겁니다. 전기세는 내가 내고, 코인은 그 사람이 가져가요.서버도 똑같습니다. 공격자는 내 서버를.. 2026. 9. 24.
왜 CI 서버(젠킨스)는 외부에 노출하면 안 될까 서버 하나 털린 적이 있습니다.정확히는 암호화폐 채굴 악성코드가 들어와서, 결국 서버를 통째로 갈아엎었어요. 그 뒤로 제가 제일 먼저 한 일 중 하나가, 젠킨스를 외부에서 못 들어오게 막는 거였습니다.왜 하필 젠킨스냐. 이게 오늘 얘기입니다.젠킨스는 "명령을 실행하는 로봇"이다젠킨스(Jenkins, 자동 배포를 돌려주는 CI 도구)를 뭐라고 설명하면 좋을까요.공장 자동화 로봇이라고 해봅시다. 코드를 올리면 → 알아서 빌드하고 → 테스트하고 → 서버에 배포합니다. 사람이 매번 손으로 안 해도 되게요. 편하죠.근데 이 로봇의 정체를 한 겹 벗겨보면 좀 무섭습니다. 젠킨스는 결국 "내 서버에서 아무 명령이나 실행할 수 있는 권한"을 가진 프로그램이거든요. 빌드 스크립트라는 게 사실 셸 명령이니까요.즉, 젠킨스.. 2026. 9. 22.
SSL 인증서 7개가 한날 만료됐다 — certbot이 없었던 대가 어느 날 갑자기 내 사이트가 안 열립니다.주소창에 빨간 경고. "연결이 비공개로 설정되어 있지 않습니다." 방문자한테도 똑같이 뜹니다. 심지어 "무시하고 접속" 버튼도 안 보여요. 그냥 벽이 서 있습니다.저는 이걸 몇 주 동안 딴 데서 헤매고 있었습니다. 구글에 색인이 안 되길래 "콘텐츠가 부실한가?" 하고 글만 만지고 있었거든요. 근데 원인은 훨씬 단순하고 치명적인 데 있었습니다.인증서는 신분증이고, 유효기간이 있다SSL 인증서(사이트가 암호화 통신을 한다는 증명서)를 신분증이라고 생각해보세요.신분증은 유효기간이 있죠. 만료되면 은행에서 안 받아줍니다. 아무리 내가 나여도요. 브라우저도 똑같습니다. 인증서가 만료된 사이트는 "이거 위조일 수도 있어" 하고 아예 문을 닫아버립니다.Let's Encrypt.. 2026. 9. 21.
그래서 보안과 편의 사이, 어디에 서야 할까 [서버 침해 대응기 시리즈] 1인 개발자가 크립토재킹 당하고, 서버를 통째로 새로 만든 5일간의 기록1편.내 서버가 6주째 몰래 채굴당하고 있었습니다 2편. docker.sock을 Jenkins한테도 AI한테도 주지 마세요 (socket-proxy)3편. 7개 도메인 무중단 HTTPS 이전기 (nginx + certbot)4편. Jenkins 자동배포, 보안이랑 403 싸운 이야기5편. 그래서 보안과 편의 사이, 어디에 서야 할까 ← 지금 글 긴 시리즈였어요.서버가 6주째 채굴당하는 걸 발견하고.서버를 통째로 새로 만들고.7개 서비스를 옮기고.자동배포까지 붙였어요.5일이 걸렸습니다.이번 편은 좀 달라요.기술 얘기보다.이 5일을 돌아보면서 솔직한 생각을 정리해볼게요.가장 크게 배운 거솔직히 처음엔 화가 .. 2026. 6. 21.
Jenkins 자동배포, 보안이랑 403이랑 한참 싸웠습니다 [서버 침해 대응기 시리즈] 1인 개발자가 크립토재킹 당하고, 서버를 통째로 새로 만든 5일간의 기록1편.내 서버가 6주째 몰래 채굴당하고 있었습니다 2편. docker.sock을 Jenkins한테도 AI한테도 주지 마세요 (socket-proxy)3편. 7개 도메인 무중단 HTTPS 이전기 (nginx + certbot)4편. Jenkins 자동배포, 보안이랑 403 싸운 이야기 ← 지금 글 5편. 그래서 보안과 편의 사이, 어디에 서야 할까자, 이제 마지막 관문이에요.자동배포.코드 push하면 알아서 빌드되고 배포되는 거요.이거 하나 붙이면 끝이라고 생각했어요.솔직히 30분이면 될 줄 알았거든요.근데요.2편에서 세운 그 문지기(socket-proxy)가.제 앞을 막아섰습니다.시작은 가벼웠어요Jenk.. 2026. 6. 20.
7개 도메인을 무중단으로 HTTPS 이전한 이야기 [서버 침해 대응기 시리즈] 1인 개발자가 크립토재킹 당하고, 서버를 통째로 새로 만든 5일간의 기록1편.내 서버가 6주째 몰래 채굴당하고 있었습니다 2편. docker.sock을 Jenkins한테도 AI한테도 주지 마세요 (socket-proxy)3편. 7개 도메인 무중단 HTTPS 이전기 (nginx + certbot) ← 지금 글4편. Jenkins 자동배포, 보안이랑 403 싸운 이야기5편. 그래서 보안과 편의 사이, 어디에 서야 할까docker.sock도 막았고.새 서버도 준비됐어요.이제 서비스를 옮길 차례입니다.근데 저는 도메인이 7개예요.수학 놀이터, 청약맵, 주식모아, 책토리, 힐링숲...이걸 다 새 서버로, 그것도 끊김 없이 옮겨야 합니다.운영 중인 서비스거든요.잘못 옮기면 사용자가 에러.. 2026. 6. 19.