
이 글은 인프런 강의 「백엔드 개발자를 위한 서버 보안 실무」 섹션 1을 입문자용으로 풀어 쓴 글이에요.
새 집에 이사 왔는데 현관 비밀번호가 전 세입자가 쓰던 그대로라면 어떨까요? 창문은 전부 열려 있고, 뒷문 열쇠는 누가 갖고 있는지도 모릅니다.
갓 설치한 서버가 딱 이런 상태예요. 운영체제와 패키지는 누구나 쉽게 쓰도록 기본값이 잡혀 있지, 안전하도록 잡혀 있지 않습니다. 비밀번호 로그인이 켜져 있고, 설치하다 띄운 데이터베이스가 모든 주소에서 접속을 받고, 로그는 서버 안에만 쌓여요.
하드닝은 이 기본값을 하나씩 바꾸는 일입니다. 쓰지 않는 기능은 끄고, 위험한 기본값은 안전한 값으로 바꾸는 거예요. 실제 침해의 상당수가 약한 비밀번호, 밀린 패치, 필요 없이 열린 포트처럼 아주 기본적인 곳에서 시작되기 때문에, 기본만 닫아도 자동화된 공격 대부분은 문 앞에서 멈춥니다.
서버를 인터넷에 연결하면 몇 분 안에 비밀번호 대입이 시작돼요. 봇은 지치지 않으니, 수천 번 중 한 번만 맞아도 끝입니다. 그 계정이 root라면 서버 전체가 넘어가요.

공개키 로그인은 자물쇠(공개키)는 서버에, 열쇠(개인키)는 내 PC에 두는 방식이에요. 열쇠는 네트워크로 나가지 않고, 추측할 비밀번호 자체가 없습니다. 여기에 root 직접 로그인을 막아 두면, 공격자가 노릴 수 있는 문이 확 줄어요.
다만 이 설정은 잘못 적용하면 나도 못 들어가는 대표적인 작업이에요. "적용하고 습관처럼 창을 닫았더니 접속이 안 된다"는 사고가 정말 흔합니다. 강의에서는 잠기지 않는 순서로 적용하는 방법을 따로 한 수업에 걸쳐 다뤄요.
취약점이 공개되면 수정 패치도 함께 나오지만, 공격자도 같은 공지를 읽습니다. 공격 코드가 나오기까지 며칠이면 충분한 경우가 많아요. 한 달에 한 번 몰아서 패치한다면, 그 한 달 동안 서버는 열려 있는 셈입니다.
원칙은 간단해요. 보안 업데이트는 매일 자동으로 받고, 설치 뒤 재시작까지 해야 끝입니다. 설치만 하고 재시작하지 않으면 메모리에서는 여전히 옛 코드가 돌고 있거든요.

공격자는 서버의 모든 포트를 차례로 두드려 봅니다. 웹과 SSH는 그렇다 쳐도, 데이터베이스·캐시·관리 화면까지 응답한다면 시도해 볼 문이 여러 개 생기는 셈이에요. 특히 인증 없이 떠 있는 캐시 서버는 접속하는 순간 데이터가 보입니다.
방화벽의 원칙은 "기본은 차단, 필요한 것만 예외" 예요. 그리고 서비스 자체도 필요한 주소에서만 듣게 해 둡니다. 클라우드라면 보안 그룹과 서버 방화벽, 두 겹을 함께 씁니다.
로그가 없으면 침해를 당했는지조차 알 수 없어요. 그런데 권한을 얻은 공격자가 가장 먼저 하는 일 중 하나가 서버 안의 로그 지우기입니다. 그래서 로그는 기록되는 즉시 서버 밖 중앙 저장소로 보내야 해요. 서버마다 시간이 다르면 사건 순서를 맞출 수 없으니 시간 동기화도 같이 챙깁니다.
웹 서버에서는 웹 루트에 남은 숨김 폴더나 환경 설정 파일, 누군가 잠깐 만든 백업 파일이 그대로 내려받아지는 사고가 자주 납니다. 소스 코드와 DB 비밀번호가 한 번에 새요. 이런 파일은 막는 것도 좋지만, 배포물에 아예 넣지 않는 것이 근본 해결입니다.

항목이 수백 개라 무엇부터 할지 막막하다면 기준 문서를 하나 정하세요. 국내는 KISA 가이드, 해외는 CIS 벤치마크가 사실상 표준이에요. 감으로 하던 설정을 점검할 수 있는 설정으로 바꿔 줍니다.
강의에서는 이걸 직접 고쳐 봅니다
섹션 1에서는 Ubuntu·RHEL 실습 서버를 놓고 위의 다섯 문을 직접 열어 보고, 공격 도구로 두드려 보고, 닫습니다.
- SSH를 잠기지 않는 순서로 적용하는 절차와 계정·sudo 정리
- 보안 업데이트 자동화, 방화벽, 중앙 로그를 배포판별로 설정
- 기준 문서로 OS를 점검하고, 웹셸이 올라오는 경로까지 막기
- 바로 대 볼 수 있는 섹션 1 체크리스트
강의 보러 가기: https://inf.run/XvwyH