공격은 매일 들어온다
서버가 인터넷에 노출되는 순간부터 스캔은 시작된다. 봇넷은 열려 있는 포트와 취약한 로그인 페이지를 자동으로 찾아다니고, 관리자가 신경 쓰지 않은 사이 오래된 계정 하나가 침입 경로가 되는 경우가 많다. 대규모 침해 사고의 상당수는 화려한 해킹 기술이 아니라 방치된 포트, 재사용된 비밀번호, 미적용 패치처럼 기본적인 허점에서 시작된다. 아래 다섯 가지는 규모와 예산에 관계없이 우선 적용할 수 있는 조치다.
1. 방화벽으로 불필요한 노출을 줄인다
서비스에 실제로 필요한 포트만 열어두는 것이 가장 기본이면서 효과가 큰 조치다. 웹서버라면 80·443 포트, 관리용 접속이라면 SSH 포트 정도만 외부에 노출하고 나머지는 전부 차단한다. 리눅스라면 ufw나 firewalld, iptables로 인바운드 규칙을 화이트리스트 방식으로 구성하고, 클라우드 환경이라면 보안 그룹(Security Group)에서 같은 원칙을 적용한다. 데이터베이스 포트(3306, 5432 등)를 외부에 그대로 열어두는 실수가 특히 흔한데, 이런 포트는 애초에 내부 네트워크에서만 접근 가능하도록 막아야 한다.
2. SSH 접근을 통제한다
비밀번호 로그인을 끄고 키 기반 인증으로 전환하는 것만으로 무차별 대입 공격(brute force)의 상당수를 무력화할 수 있다. 여기에 SSH 기본 포트(22번)를 다른 포트로 변경하면 자동화된 스캔 트래픽을 줄이는 데 도움이 된다. fail2ban 같은 도구를 함께 쓰면 로그인 실패가 반복되는 IP를 자동으로 차단할 수 있고, root 계정의 직접 로그인을 금지하고 sudo 권한을 가진 별도 계정을 쓰는 것도 기본 원칙이다.
3. 패치와 취약점 점검을 정기적으로 한다
운영체제와 웹서버, 애플리케이션 프레임워크는 취약점이 공개되는 즉시 공격 대상이 된다. 보안 업데이트는 발표 후 최대한 빠르게 적용하는 것이 원칙이고, 자동 업데이트를 켜둘 수 있는 항목은 켜두는 편이 안전하다. 점검 도구도 용도별로 나눠 쓸 수 있다. TLS 설정은 testssl.sh나 SSL Labs로, 보안 헤더는 securityheaders.com이나 curl -I 명령으로, 열려 있는 포트는 nmap으로, 알려진 CVE는 nuclei 같은 스캐너로 확인하는 식이다. 한국인터넷진흥원(KISA)도 주요 정보통신기반시설을 대상으로 기술적 취약점 분석·평가 가이드를 배포하고 있어 점검 항목을 구성할 때 참고할 만하다.
4. 다단계 인증(MFA)을 적용한다
관리자 계정 하나가 뚫리면 서버 전체가 위험해진다. 아이디와 비밀번호만으로 접근을 허용하는 대신, OTP 앱이나 하드웨어 보안키를 이용한 2단계 인증을 관리 콘솔·호스팅 패널·서버 접속 계정에 적용하면 계정 탈취로 인한 피해를 크게 줄일 수 있다. 특히 여러 관리자가 같은 계정을 공유하는 구조라면, 계정을 개별화하고 각자 MFA를 적용하는 것이 사고 발생 시 원인 추적에도 유리하다.
5. 트래픽을 모니터링하고 DDoS에 대비한다
SK쉴더스 등 보안 업체들은 최근 몇 년간 디도스(DDoS) 공격 시도가 꾸준히 증가하는 추세라고 밝히고 있다. 디도스 대응의 핵심은 장비를 갖추는 것 자체가 아니라, 트래픽 이상 징후를 실시간으로 탐지하고 즉시 대응할 수 있는 체계를 갖추는 데 있다. 평소 서비스가 사용하는 대역폭과 요청량의 평균치를 파악해두면 이상 트래픽을 훨씬 빠르게 알아챌 수 있다. 자체 대응이 어려운 규모라면 CDN이나 트래픽 스크러빙 서비스를 통해 공격 트래픽을 오리진 서버 앞단에서 걸러내는 방식도 널리 쓰인다.
정리
서버 보안은 한 번의 설정으로 끝나는 작업이 아니다. 방화벽, 접근 통제, 패치, 인증, 모니터링을 겹겹이 쌓아두면 한 겹이 뚫려도 다음 겹에서 피해를 막을 수 있다. 예산이 크지 않은 서비스라도 위 다섯 가지는 대부분 추가 비용 없이 설정만으로 적용할 수 있는 조치이므로, 아직 점검하지 않았다면 우선순위를 두고 하나씩 확인해보는 것이 좋다.