서버 보안은 서비스의 안정성을 유지하고 고객 데이터를 보호하는 가장 기본적인 조치입니다. 특히, 초기 설정 단계에서 몇 가지 핵심 보안 조치를 하지 않으면 해킹이나 무단 침입에 쉽게 노출될 수 있습니다.
여기 초보자도 쉽게 따라 할 수 있는, 가장 중요하고 필수적인 서버 보안 설정 5가지를 정리했습니다.
1. 비밀번호 및 SSH 접속 강화
접속 경로인 **SSH(Secure Shell)**와 서버 계정의 비밀번호를 안전하게 설정하는 것이 보안의 첫걸음입니다.
강력한 비밀번호 설정
- 규칙: 루트(Root) 계정을 포함한 모든 사용자 계정의 비밀번호는 10자 이상으로 설정하며, 대문자, 소문자, 숫자, 특수문자를 반드시 조합해야 합니다.
- 목적: 무차별 대입 공격(Brute Force Attack)을 어렵게 만듭니다.
22번 포트 변경 및 비밀번호 로그인 비활성화
- SSH 포트 변경: SSH의 기본 포트 번호인 22번은 해커들이 가장 먼저 공격을 시도하는 대상입니다. 기본 포트를 사용하지 않는 **임의의 번호(예: 22000 이상)**로 변경하면 공격 시도를 상당 부분 줄일 수 있습니다.
- 비밀번호 로그인 비활성화: 비밀번호 대신 **SSH 키(Key Pair)**를 사용한 접속만 허용합니다. 공개 키(Public Key)를 서버에 등록하고, 개인 키(Private Key)를 로컬 컴퓨터에 보관하여 접속하는 방식으로, 비밀번호가 유출될 위험을 근본적으로 차단합니다. 공개 키 인증은 서버 보안에서 가장 강력한 방법 중 하나입니다.
2. 방화벽 설정 및 관리 (Firewall)
방화벽은 서버로 들어오고 나가는 모든 네트워크 트래픽을 감시하고 제어하는 문지기 역할을 합니다. 꼭 필요한 포트만 개방하는 것이 원칙입니다.
사용하지 않는 포트 차단
- 원칙: 웹 서비스(HTTP: 80, HTTPS: 443), SSH 포트(변경한 번호), 그리고 서비스 운영에 필요한 포트(예: DB 포트)를 제외한 모든 포트를 기본적으로 차단해야 합니다.
- 도구: 리눅스 환경에서는 **UFW(Uncomplicated Firewall)**나 iptables 같은 도구를 사용하여 쉽게 방화벽 규칙을 설정할 수 있습니다. 예를 들어, UFW를 사용해 SSH 포트만 허용하는 규칙을 설정합니다.
특정 IP만 접근 허용
- 관리용 포트 제한: 데이터베이스 관리나 서버 접속(SSH) 같은 민감한 포트는 특정 관리자 IP 주소에서만 접근을 허용하도록 방화벽 규칙을 설정하여 보안을 극대화합니다.
3. 주기적인 시스템 업데이트
운영체제(OS)와 설치된 모든 소프트웨어의 최신 상태 유지는 보안 패치를 적용하는 가장 기본적인 방법입니다.
보안 패치 즉시 적용
- 목적: 소프트웨어 개발사들은 발견된 보안 취약점(Vulnerability)을 개선한 보안 패치를 정기적으로 배포합니다. 이 패치를 적용하지 않으면 알려진 취약점을 통해 쉽게 공격당할 수 있습니다.
- 방법: 리눅스(Ubuntu/CentOS) 환경에서는
apt update또는yum update명령어를 사용하여 주기적으로 시스템 패키지를 업데이트해야 합니다.
불필요한 서비스 제거
- 원칙: 서버 운영에 **불필요한 서비스(예: 게임 서버, 테스트용 FTP 서버)**는 모두 설치 목록에서 제거하거나 비활성화해야 합니다. 실행 중인 서비스 하나하나가 잠재적인 공격 통로가 될 수 있습니다.
4. 침입 탐지 및 방지 시스템 (IDS/IPS)
Fail2Ban과 같은 도구를 사용하여 반복적인 무단 침입 시도를 자동으로 탐지하고 차단해야 합니다.
Fail2Ban 설치 및 설정
- 작동 방식: Fail2Ban은 서버의 로그 파일을 실시간으로 감시합니다. 만약 특정 IP 주소에서 정해진 횟수(예: 5회) 이상 SSH 로그인 실패나 웹 요청 오류를 반복하면, 해당 IP를 방화벽에서 일정 시간 동안 자동으로 차단해 버립니다.
- 효과: 무차별 대입 공격(Brute Force Attack)을 즉각적으로 방어하여 서버 자원을 보호하고 무단 접근을 막는 데 매우 효과적입니다.
5. 정기적인 백업 및 모니터링
보안 조치를 철저히 하더라도 장애나 침입은 언제든 발생할 수 있습니다. 따라서 복구 계획과 상태 감시가 필수적입니다.
데이터 백업 및 이중화
- 백업 주기: 데이터베이스와 중요한 설정 파일은 매일(Daily) 또는 최소한 주간(Weekly) 단위로 정기적으로 백업하고, 백업 데이터는 **별도의 안전한 공간(클라우드 또는 외부 저장소)**에 보관해야 합니다.
- 복구 테스트: 백업된 데이터가 실제로 복원 가능한지 정기적으로 테스트하여 유사시 서비스를 빠르게 복구할 수 있도록 준비해야 합니다.
로그 및 자원 모니터링
- 비정상 활동 감시: 서버 로그(Error Log, Access Log)를 정기적으로 확인하여 의심스러운 접속 시도나 비정상적인 활동이 없는지 감시해야 합니다.
- 자원 사용량 감시: CPU, 메모리, 디스크 I/O 사용률을 상시 모니터링하여 평소와 다른 갑작스러운 자원 사용 증가가 발생하면 즉시 확인하여 해킹이나 서비스 과부하 여부를 판단해야 합니다.
이 다섯 가지 기본 설정을 통해 초보자도 서버의 기본적인 방어 체계를 갖출 수 있습니다. 혹시 이 중 Fail2Ban 설정에 대해 더 구체적인 방법을 알고 싶으신가요?


