초기 서버 설정을 하면서 발생한 실수 기록...
실수라기보단 그냥 실력인 것 같다. 이런 부분들도 경험해나가면서 노하우가 쌓아나가야겠다.
아무래도 프론트 개발자다 보니 초기 서버를 설정하는 작업을 많이 해보지 않았다.
간단하게 테스트 하거나 화면을 보는 정도 수준으로는 해보았지만...
가장 메인으로 실수한 부분은 서버 비밀번호를 너무 간단하게 해 둔 것이다.
안일하게 생각했다. 이제 막 생성된 서버의 주소를 어떻게 알고, 무슨 중요한 내용이 있다고 내 서버를 공격하겠어라고 생각했던 게 화근이었다. 그리고 여러 가지 실수들로 인해 대응이 늦어졌고, 사태를 키우게 되었다...ㅠ
하나하나 정리해두고, 어떻게 하면 이런 실수를 막을 수 있는지 기록해두자.
사건의 발단
Unfortunately we have had to lock the IP address(es) below due to network issues.
The IP address(es) was/were used to attack other servers.
This has placed a strain on network resources and has negatively affected part of our network.
메일로 몇일 전에 설정해둔 서버가 IP lock 되었다는 걸 받게 되었다.
이게 무슨 소린가 싶어서 그래프를 보니 네트워크를 엄청 많이 쓰고 있었다. 4TB...
내가 뭔가를 잘못 개발해서 계속해서 request 가 날아가서 그런건가 싶어서 한참 동안 고민했었다.
websocket을 사용하는데, 너무 많이 데이터를 주고받은건가? 데이터를 fetch 하는 게 너무 많았나? 등등... 여러 가지 고민을 해보았지만 아무리 생각해도 4TB는 이해가 되지 않았다.
사태를 더 키운건 로그도 제대로 남기고 있지 않아서 어디서부터 잘못되었는지 찾는 게 너무 어려웠던 것이다.
그러다 네트워크 사용량을 모니터링해보니 모르는 곳으로 이상한 요청들을 계속해서 쏘고 있었다. 내가 요청을 보낸 것도 아닌데 보내지고 있었고, 외부에서 root로 접근해서 공격하고 있다는 결론에 도달하게 되었다.
외부에 내 서버 IP를 공개한적도 없고, 비밀번호도 걸려있는데 어떻게 root를 탈취당할 수 있었던 걸까... 의심을 1도 하지 않았다.
그렇지만 조금만 생각해봐도 너무 쉬운 것이다. 그냥 랜덤 하게 ip를 찔러보고, 비밀번호도 대충 찔러보는 것이다. 그러다가 너무 쉽게 설정해둔 서버가 털리는 것이다. (Brute Force Attack)
너무 어이가 없었다. 이런 교과서에나 나올법한 공격에 털려서 고민하고 고통받았다니...
해결 방안: 서버 생성시 SSH Key를 등록하자
가장 쉬우면서 강력한 방법은 root를 통해 들어오지 못하게 하는 것이다.
root의 password를 사용하지 않고, 미리 등록해둔 SSH Key를 가진 사용자만 들어오게 하는 것이다.
EC2 에서는 기본값이 SSH Key로 접근하는 거였던 것 같은데, 그래서 이런 실수를 한 것 같다...
SSH Key를 생성하고 등록하는 건 이미 많은 블로그에서 설명하고 있으니 그 글을 참고하도록 하자.
사소한 실수 1: 터미널을 여러 개 띄워두는 것
사람이 당황하면 안 하던 실수도 하는 것 같다.
여러 개의 탭과 터미널 윈도우를 띄워놓고 작업을 하다 보니 어떤 서버에 어느 경로에 들어와 있는지 헷갈려서 왜 커멘드가 동작이 안되는지 한참 삽질했다.
지금 생각해봐도 너무 멍청하다...
작업할 땐 깔끔한 상태를 만들어두고 해야겠다.
그리고 침착하게 하나씩 차근차근...
아니면 SSH Client 같은걸 사용하는 것도 방법일 것 같다. 자주 사용하는 서버들을 client에 기록해두고, 사용하면 헷갈리지 않고 쓸 수 있을 것이다.
사소한 실수 2: 에러 로그를 남기지 않은 것
개발에만 집중하다 보니 기본적인 로그도 남기지 않았다.
그래도 어느 정도의 간단한 로그만 남겼어도 삽질의 상당 부분은 줄였을 수 있을 것이다.
로그가 없으니 어디서부터 어떻게 추적해야 될지 막막했다.
그러다가 그냥 다시 올려보는 수밖엔 없었다.
무슨 일을 할 때 간단한 로그 정도는 남기는 습관을 들이는 게 좋을 것이다.
이슈가 생기고 나서 대응하려면 너무 늦다.
사소한 실수 3: 에러 로그를 제대로 읽지 않은 것
이건 내가 자주 하는 실수이다. 이번 기회에 꼭 없애버려야지...
영어로 된 텍스트를 보면 자세히 읽지 않고 그냥 대충 넘기게 된다. 보통은 로그에 답이 적혀있는데도 무심하게 지나쳐버리거나 넘겨짚어 생각하다가 삽질로 빠지게 된다.
로그를 정확히 읽고, 어느 부분이 문제가 되는 건지 확인하는 게 기본 중에 기본인데, 빨리 해결하려다 보니 이런 문제가 생겼던 것 같다.
차근차근 읽고 생각해보자.
도움 되는 팁: 설치했던 건 Readme나 sh 파일에 기록
내가 입력했던 명령어와 설치했던 순서 등을 기록해두면 다시 세팅할 때 매우 편하다.
사실 세팅이라는 게 초기에 한번 하면 더 이상 할 일이 없다.
그래서 한번 하고 잊게 되는데, 그 이후에 다시 세팅하려고 하면 다시 처음부터 검색해야 한다.
미리 처음 세팅할 때 명령어들과 설치 순서, 참고한 문서 등등을 기록해두면 다음에 세팅할 때 매우 편하며, 문제가 생겼을 때 어디가 문제였는지도 쉽게 찾을 수 있을 것이다.
그리고 나중에 자동화할 때도 참고할 수 있고 말이다.
후기
써놓고 보니까 진짜 너무 쉬운 거라 다시 한번 한심해진다...
이것 때문에 며칠을 개고생 했던걸 생각하니 빡치네....