기능을 추가 하기전에 다시 체크했어요.
LINK에 웹 대시보드 기능이 계속 늘면서 Discord 서버 설정을 바꾸거나 외부 API와 주고받는 요청도 자연스럽게 많아졌어요. 화면에서 잘 동작하는 것만 확인하고 넘어가기에는 운영 중인 기능이 꽤 많아져서, 이번에는 새 기능을 하나 더 붙이기보다 웹으로 들어오는 요청부터 서버 접속까지 먼저 다시 확인했어요.
이번 작업은 뭔가 새로운 보안 서비스를 붙이는 쪽보다는 지금 구조에서 굳이 안쪽까지 들어올 필요가 없는 요청을 먼저 걸러내고, 권한이 필요한 기능은 실제 권한을 다시 확인하는 식으로 하나씩 정리했어요.
웹 요청과 대시보드 API
웹 앞단에서는 짧은 시간에 요청이 몰리거나 연결을 불필요하게 오래 잡고 있는 경우를 그대로 애플리케이션까지 넘기지 않도록 정리했어요. LINK 도메인으로 들어온 정상 요청과 그렇지 않은 요청도 앞단에서 구분하고, 서버 정보가 응답에 필요 이상으로 드러나는 부분도 같이 줄였어요.
대시보드에서 값을 바꾸는 API는 로그인 여부만 보고 처리하지 않아요. 요청한 계정이 해당 Discord 서버를 실제로 관리할 수 있는지 다시 확인하고, 반복 요청이나 예상보다 큰 데이터, 맞지 않는 형식의 입력은 초반에 걸러내도록 맞췄어요.
이미지를 다루는 서버별 봇 프로필도 같은 기준으로 손봤어요. 실제로 바꾼 항목만 Discord에 보내고, 이미지 크기와 형식을 확인하면서 저장 요청이 겹치거나 외부 API가 잠시 요청을 줄여달라고 할 때도 무작정 다시 보내지 않도록 처리했어요.
서버 접속 쪽도 같이 정리했어요
운영 서버 접속 기록을 보다 보니 인터넷에서 자동으로 로그인 계정을 두드려보는 요청이 계속 들어오고 있었어요. 실제 관리할 때는 SSH 키를 사용하고 있어서 비밀번호 로그인은 닫고, 등록된 키를 사용하는 접속 방식만 남겼어요.
반복해서 인증에 실패하는 주소는 자동으로 차단되게 했고, 방화벽도 외부에서 꼭 필요한 연결만 받도록 다시 확인했어요. 웹 애플리케이션과 데이터베이스처럼 밖에서 직접 접근할 이유가 없는 부분은 기존처럼 서버 내부에서만 연결되도록 유지했고요.
업데이트 뒤에 다시 올라오는 것까지 확인했어요
서버 패키지와 커널도 같이 업데이트했어요. 다만 업데이트 자체보다 더 신경 쓴 건 재부팅 뒤에 LINK 웹과 봇이 원래 쓰던 환경 그대로 다시 올라오는지였어요. 실행 중인 프로세스와 자동 시작 설정을 먼저 확인한 다음 재부팅했고, 웹과 봇, 데이터베이스, 방화벽과 접속 관련 서비스가 모두 정상으로 돌아오는 것까지 다시 봤어요.
운영 서버는 한 번 설정하고 잊어버리는 곳이 아니라서, 바꾼 설정이 재부팅 뒤에도 그대로 유지되는지 확인하는 과정까지 작업에 포함해두는 편이 마음이 편하더라고요.
앞으로도 기능과 함께 보안에 신경쓸 생각이에요
이번에 다시 느낀 건 보안 작업을 기능과 따로 떼어두면 결국 나중에 한꺼번에 손볼 일이 생긴다는 점이었어요. 앞으로 새 대시보드 기능을 만들 때는 권한 확인이나 요청 제한, 입력값 검사, 외부 API가 실패했을 때의 처리까지 처음부터 같이 넣으려고 해요.
LINK는 계속 운영하면서 바뀌는 프로젝트라서 이런 내용도 개발 일지에 같이 남겨둘 생각이에요. 새 기능이 생겼을 때 무엇을 만들었는지만 적는 것보다, 실제로 오래 켜두기 위해 어떤 부분을 고쳤는지도 같이 기록해두는 게 나중에 다시 볼 때 더 도움이 될 것 같아요.
그리고 가장 중요한 점은 사용자와 링크봇의 안전을 지킨다는 것에 가장 큰 의미를 두고있어요.

