왜 보안에 집착하게 되었나

게임 서버를 운영하면서 가장 먼저 마주친 문제는 DDoS 공격이었습니다. CS2 서버가 알려지면서 경쟁 서버 운영자나 악의적인 플레이어의 공격을 받기 시작했습니다. 처음에는 단순히 IP를 차단하는 수준이었지만, 공격이 정교해지면서 체계적인 방어가 필요해졌습니다.

단순히 게임 서버만의 문제가 아니었습니다. 같은 네트워크에 포트폴리오 웹사이트, 교회 홈페이지, 각종 웹 애플리케이션이 함께 운영되고 있었으니까요. 하나의 서비스가 뚫리면 전체 인프라가 위험해지는 구조였습니다. 이때부터 "깊이 있는 방어(Defense in Depth)" 전략을 본격적으로 적용하기 시작했습니다.

1계층: Cloudflare — 엣지에서의 첫 번째 방어선

Cloudflare는 모든 트래픽이 서버에 도달하기 전에 거치는 첫 번째 방어선입니다. 역할은 크게 세 가지입니다:

Cloudflare 설정에서 특히 신경 쓴 부분은 방화벽 규칙입니다. 알려진 봇 트래픽 차단, 특정 국가 제한, 요청 빈도 제한(Rate Limiting) 등을 세밀하게 설정했습니다. 예를 들어, 로그인 엔드포인트에는 10초당 5회 제한을 걸어 브루트포스 공격을 방지합니다.

2계층: OPNsense — 하드웨어 방화벽

Cloudflare가 웹 트래픽을 보호한다면, OPNsense는 네트워크 레벨에서 모든 트래픽을 관장합니다. 전용 하드웨어에 설치한 오픈소스 방화벽 OS로, 소프트웨어 방화벽(iptables, ufw 등)보다 훨씬 강력한 제어가 가능합니다.

핵심 설정들:

OPNsense의 가장 큰 장점은 가시성입니다. 실시간 트래픽 그래프, 연결 상태, 차단 로그를 웹 UI에서 한눈에 볼 수 있어서, 비정상적인 트래픽을 즉시 감지하고 대응할 수 있습니다.

3계층: Docker 네트워크 격리

서버 내부에서는 Docker가 서비스 간 격리를 담당합니다. 각 서비스(웹사이트, 게임 서버, 데이터베이스, 모니터링 등)는 독립된 컨테이너에서 실행되며, Docker 네트워크로 통신을 제어합니다.

격리 전략:

4계층: 모니터링과 대응

아무리 방어를 잘 해도 모니터링 없는 보안은 무의미합니다. 공격이 들어오고 있는지, 방어가 제대로 동작하고 있는지, 비정상적인 패턴은 없는지 지속적으로 확인해야 합니다.

현재 운영 중인 모니터링 체계:

실전에서 배운 교훈

보안은 제품이 아니라 과정이다. 한 번 설정하고 끝나는 것이 아니라 지속적으로 관리해야 한다.

이 아키텍처를 운영하면서 얻은 가장 큰 교훈은 단순함의 가치입니다. 처음에는 최대한 많은 보안 도구를 도입하려 했지만, 복잡한 설정은 오히려 실수와 취약점을 만듭니다. 각 계층이 명확한 역할을 가지고, 서로 겹치지 않으면서 보완하는 구조가 가장 효과적이었습니다.

또 하나는 자동화의 중요성입니다. 수동으로 로그를 확인하고 규칙을 업데이트하는 것은 지속 가능하지 않습니다. 가능한 많은 것을 자동화하고, 사람은 판단과 의사결정에 집중해야 합니다. Cloudflare의 자동 DDoS 방어, OPNsense의 자동 룰 업데이트, Docker의 자동 재시작 등이 이 원칙을 실현합니다.

개인 서버라도 실제 사용자가 있는 서비스를 운영한다면, 보안은 선택이 아닌 의무입니다. 이 글이 비슷한 환경에서 서버를 운영하는 분들에게 참고가 되면 좋겠습니다.