--- title: 해킹인 줄 알았던 netstat의 정체는 루프백이었다 — 서버 보안 점검 실화 date: 2026-10-18 time: 22:50 model: admin category: stories author_type: human summary: lnav로 실시간 로그를 보다가 해외 스캔 봇들의 무차별 공격을 목격했고, netstat에서 내 공인 IP가 보이는 순간 "루트킷에 장악당했나" 싶었지만 정체는 127.0.0.1과 같은 루프백이었다. 3중 방어막과 함께 남긴 보안 점검 기록. tags: 보안점검,netstat,루프백,lnav,서버보안,운영일지 --- # 해킹인 줄 알았던 netstat의 정체는 루프백이었다 — 서버 보안 점검 실화 서버를 운영하다 보면 하루에도 몇 번씩 심장이 철렁 내려앉는 순간이 온다. 이번에는 실시간 로그를 보다가 해외에서 날아오는 무차별 스캔을 목격했고, 이어서 `netstat` 화면에서 내 공인 IP가 통신 중인 것을 보고 "이미 게임이 끝난 건가" 싶었지만, 결론부터 말하면 전부 정상이었다. 그 정체는 다름 아닌 루프백(Loopback)이었다. ## 1. 발단: lnav 실시간 로그 속 의문의 외부 찌르기 리눅스 로그 분석 도구인 lnav로 실시간으로 들어오는 전체 로그를 모니터링하던 중, 정체불명의 해외 IP들이 무차별적으로 유입되는 것을 발견했다. 추적 결과 이들은 세이셸, 네덜란드, 중국 알리바바 및 텐센트 가상 서버 대역에서 유입된 100% 악성 해킹 스캔 봇들이었다. 이들은 `/database.sql`, `/config.php.bak`, `www/.git` 폴더 등 서버의 핵심 소스코드와 DB 백업본을 털어가기 위해 호시탐탐 문을 두드리고 있었다. 새벽에 이런 로그를 실시간으로 보고 있으면 괜히 등 뒤가 서늘해진다. 남의 집 대문 손잡이를 하나하나 돌려보고 다니는 사람들을 실시간 중계로 구경하는 기분이다. ## 2. 전개: 난공불락, 내 서버의 3중 철통 방어막 해커들이 사방에서 찔러대고 있었지만, 내 서버는 이미 완벽한 요새였다. 무작위 대입(Brute-force)으로 대문을 뚫는 것은 수학적으로 불가능한 구조였다. 1. **1중 방어**: 영어 대소문자, 숫자, 특수문자가 뒤섞인 무작위 15자리 초강력 패스워드 사용 2. **2중 방어**: 비밀번호 오답 시 다음 로그인 대기 시간이 복리로 증가하는 시스템 지연 기능 작동 3. **3중 방어**: 디도스 및 무차별 대입을 원천 차단하는 초당 접속 제한(Rate Limit) 규칙 적용 후속 조치도 했다. 쓸모없는 웹 안의 개발 흔적인 `.git` 폴더는 어차피 쓸 일이 없으므로 깔끔하게 물리적으로 삭제 완료하여 취약점을 원천 봉쇄했다. 남겨두면 언젠가 누군가에게 문 열어주는 열쇠가 될 테니, 미련 없이 지우는 편이 낫다. ## 3. 위기: netstat 분석 중 발견한 해킹(?)의 정황 서버 연결 상태를 확인하려고 `netstat -tp` 명령어를 실행했는데, 소름 돋는 주소가 발견됐다. 외부 주소(Foreign Address) 칸에 내 서버의 진짜 공인 IP(103.124.100.90)가 떡하니 박힌 채, 내가 실행한 개발 프로그램인 `orca-dev`와 바쁘게 통신 중(ESTABLISHED)인 것으로 뜬 것이다. ```text $ netstat -tp Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 103.124.100.90:xxxxx 103.124.100.90:yyyyy ESTABLISHED xxxxx/orca-dev ``` "혹시 고도화된 해커가 루트킷으로 시스템을 장악하고 netstat 결과까지 완벽하게 위조해서 나를 속이고 있는 건가? 이미 게임이 끝난 건가?" 하는 엄청난 긴장감이 맴돌았다. 그 순간만큼은 서버가 아니라 내가 루트킷에 감염된 것 같았다. ## 4. 절정 및 결론: "아! 이게 루프백이었구나! ㅋㅋㅋㅋ" 주소를 다시 차분히 뜯어보며 마침내 이 의문의 연결이 해킹이 아닌 100% 안전한 내부 통신이라는 반전의 비밀을 깨달았다. 그 정체는 바로 **루프백(Loopback)**이었다. - **루프백의 진짜 정체**: 개발하면서 하루에도 수십 번씩 보던 전설의 주소 `127.0.0.1`과 `localhost`가 바로 루프백을 부르는 이름이었다. - **동작 원리**: 내 서버 안의 프로그램(`orca-dev`)이 내부 통신을 하려고 공인 IP 주소창에 편지를 보냈더니, 똑똑한 리눅스 시스템이 "어? 이거 내 주소네? 외부 인터넷으로 내보내지 말고 우리 안방에서 돌리자!" 하고 랜선 밖으로 안 보내고 안에서 뱅글 돌려버린 것이었다. 결국 내 방 안에서 내가 나 자신에게 전화를 걸어 통화 중인 상태를 `netstat`이 외부 연결처럼 보여준 해프닝이었다. 수화기를 들고 "여보세요?" 했더니 상대가 나였던 셈이다. ## 마무리: 공포는 짧고, 교훈은 남는다 이번 일로 두 가지를 다시 확인했다. 첫째, 로그에 해외 IP가 잔뜩 찍히는 것은 놀라운 일이 아니라 인터넷에 문을 열어둔 서버의 일상이다. 둘째, `netstat`에 내 IP가 보인다고 해서 무조건 해킹은 아니며, 루프백처럼 시스템이 알아서 안에서 돌려주는 정상 통신도 얼마든지 있다. 물론 방어막은 계속 유지해야 한다. 무작위 15자리 패스워드, 복리로 늘어나는 로그인 지연, 초당 접속 제한, 그리고 삭제한 `.git` 폴더까지. 이 네 가지가 있으면 적어도 새벽에 로그를 보다가 심장이 두 번 내려앉는 일은 없을 것이다. 한 번은 스캔 봇 때문에, 한 번은 내가 나 자신에게 전화를 걸어서.