튜토리얼

리눅스 서버 초기 세팅 체크리스트: 안전하고 효율적인 시작을 위한 가이드

강코의 코딩 일기 2026. 3. 12. 13:01

안녕하세요! IT 개발의 여정을 시작하시는 분들, 혹은 새로운 프로젝트를 위해 리눅스 서버를 막 생성하신 분들을 위해 오늘은 초기 서버 세팅의 중요성과 핵심 체크리스트를 공유하고자 합니다. 서버 초기 세팅은 마치 새 집을 짓고 입주하기 전에 튼튼한 기초를 다지고 안전 장치를 마련하는 것과 같습니다. 이 과정을 소홀히 하면 나중에 보안 취약점, 성능 저하, 관리의 어려움 등 다양한 문제에 직면할 수 있습니다. 따라서 이 글을 통해 안전하고 효율적인 서버 운영을 위한 첫걸음을 함께 내딛어 봅시다.

이 가이드는 Ubuntu/Debian 계열 리눅스를 기준으로 작성되었으나, CentOS/RHEL 계열에서도 유사하게 적용할 수 있는 부분이 많습니다. 각 단계별로 필요한 명령어와 설명, 그리고 고려해야 할 사항들을 자세히 다룰 예정이니, 차근차근 따라오시면 좋습니다.

Linux 서버 초기 세팅 체크리스트

Image by heladodementa on Pixabay

1. 서버 접속 및 기본 정보 확인

서버를 처음 생성한 후 가장 먼저 해야 할 일은 서버에 접속하여 기본적인 정보를 확인하고 시스템을 최신 상태로 유지하는 것입니다.

1.1. SSH 접속

대부분의 클라우드 환경에서는 SSH (Secure Shell)를 통해 서버에 접속합니다. 초기 접속 시에는 주로 root 계정이나 클라우드 제공자가 지정한 기본 사용자 계정(예: Ubuntu의 경우 'ubuntu', EC2의 경우 'ec2-user')을 사용하게 됩니다. SSH 클라이언트를 이용하여 서버의 IP 주소와 지정된 사용자 이름으로 접속합니다.

ssh [사용자명]@[서버 IP 주소]

예시: ssh ubuntu@192.168.1.100

1.2. 호스트명(Hostname) 설정

여러 대의 서버를 운영할 때 각 서버를 식별하기 쉽게 호스트명을 설정하는 것이 중요합니다. 이 이름은 로그나 모니터링 시스템에서 서버를 구분하는 데 사용됩니다.

  • 현재 호스트명 확인: hostname
  • 호스트명 변경: sudo hostnamectl set-hostname [새로운_호스트명]

1.3. 시간대(Timezone) 설정

서버의 시간대가 올바르게 설정되어야 로그 기록, 스케줄링된 작업(Cron) 등이 정확하게 동작합니다. 주로 UTCAsia/Seoul로 설정합니다.

  • 현재 시간대 확인: timedatectl
  • 시간대 설정: sudo timedatectl set-timezone Asia/Seoul

1.4. 시스템 업데이트

운영체제를 최신 상태로 유지하는 것은 보안 취약점을 패치하고 버그를 수정하는 데 필수적입니다. 초기 세팅 시 항상 가장 먼저 수행해야 하는 작업입니다.

sudo apt update && sudo apt upgrade -y

2. 보안 강화의 첫걸음: 사용자 및 SSH 설정

서버 보안은 아무리 강조해도 지나치지 않습니다. 외부 공격으로부터 서버를 보호하기 위한 기본적인 설정을 진행합니다.

2.1. 새로운 사용자 생성 및 sudo 권한 부여

root 계정으로 직접 작업하는 것은 매우 위험합니다. 일반 사용자를 생성하고 sudo 그룹에 추가하여 필요한 경우에만 관리자 권한을 사용할 수 있도록 합니다.

  • 새 사용자 생성: sudo adduser [새로운_사용자명]
  • sudo 그룹에 추가: sudo usermod -aG sudo [새로운_사용자명]

이제 새로운 사용자로 SSH 접속을 시도하고, 이후 작업은 이 사용자로 진행하는 것을 권장합니다.

2.2. root 로그인 비활성화

SSH 설정 파일(/etc/ssh/sshd_config)을 수정하여 root 계정의 SSH 직접 접속을 금지합니다. 이는 무차별 대입 공격(Brute-force attack)으로부터 서버를 보호하는 중요한 단계입니다.

  • sudo nano /etc/ssh/sshd_config
  • PermitRootLogin yes를 찾아 PermitRootLogin no로 변경
  • SSH 서비스 재시작: sudo systemctl restart sshd

2.3. SSH 포트 변경

기본 SSH 포트인 22번을 다른 임의의 포트(예: 2222, 50000번대 등)로 변경하여 자동화된 공격 시도를 줄일 수 있습니다. 이는 "보안을 통한 난독화(Security through obscurity)"의 일환으로, 강력한 보안 대책은 아니지만 초기 방어에 도움이 됩니다.

  • sudo nano /etc/ssh/sshd_config
  • #Port 22를 찾아 주석을 해제하고 Port [새로운_포트번호]로 변경
  • SSH 서비스 재시작: sudo systemctl restart sshd

주의: 포트 변경 후에는 반드시 변경된 포트로 접속을 테스트한 후 현재 세션을 종료해야 합니다. 실수로 접속이 불가능해질 수 있습니다.

2.4. SSH Key 인증 사용

비밀번호 인증 대신 SSH Key 인증을 사용하는 것이 훨씬 안전합니다. 이는 공개키(Public Key)와 개인키(Private Key) 쌍을 이용하여 인증하는 방식입니다.

항목 비밀번호 인증 SSH Key 인증 (권장)
보안 수준 취약 (무차별 대입 공격에 노출) 강력 (개인키 없이는 접속 불가)
사용 편의성 비밀번호만 알면 됨 개인키 파일 관리 필요
관리 오버헤드 정기적인 비밀번호 변경 필요 개인키 백업 및 보호 중요

SSH Key 인증 설정 방법:

  • 로컬 PC에서 키 생성: ssh-keygen -t rsa -b 4096
  • 생성된 공개키(~/.ssh/id_rsa.pub)를 서버의 ~/.ssh/authorized_keys 파일에 추가
  • ssh-copy-id [사용자명]@[서버 IP 주소] 명령을 사용하면 편리합니다.
  • SSH 설정 파일에서 PasswordAuthentication no로 변경하여 비밀번호 인증을 완전히 비활성화합니다.

2.5. 방화벽 설정 (UFW/firewalld)

방화벽은 서버로 들어오고 나가는 트래픽을 제어하여 불필요한 포트를 통한 접근을 차단합니다. Ubuntu에서는 UFW (Uncomplicated Firewall), CentOS/RHEL에서는 firewalld가 주로 사용됩니다.

UFW (Ubuntu/Debian)

  • UFW 활성화: sudo ufw enable
  • SSH 포트 허용 (새로운 포트 번호로 변경했다면 해당 포트 허용): sudo ufw allow [SSH_Port]/tcp
  • HTTP/HTTPS 포트 허용 (웹 서버 운영 시): sudo ufw allow http, sudo ufw allow https
  • 다른 필요한 포트 허용: sudo ufw allow [Port]/tcp
  • UFW 상태 확인: sudo ufw status
  • 중요: SSH 포트를 허용하기 전에 UFW를 활성화하면 접속이 끊길 수 있으니, 반드시 SSH 포트 허용 명령어를 먼저 실행하거나, 활성화 전에 모든 필요한 규칙을 추가해야 합니다.

3. 시스템 필수 도구 설치 및 환경 설정

서버 운영 및 개발에 필요한 기본적인 도구들을 설치하고 환경을 설정합니다.

3.1. 텍스트 편집기

서버에서 파일을 편집할 때 필요한 텍스트 편집기를 설치하거나 확인합니다. Vim이나 Nano가 대표적입니다.

sudo apt install vim nano -y

3.2. 네트워크 도구

네트워크 상태를 확인하고 진단하는 데 유용한 도구들입니다.

  • net-tools (ifconfig, netstat 등)
  • iproute2 (ip, ss 등)
  • dnsutils (dig, nslookup 등)
  • sudo apt install net-tools iproute2 dnsutils -y

3.3. 기타 유용한 도구

파일 다운로드, 소스 코드 관리 등 개발 환경에 유용한 도구들을 설치합니다.

  • wget, curl: 파일 다운로드
  • git: 버전 관리 시스템
  • unzip, zip: 압축 파일 관리
  • build-essential: 컴파일 환경 (필요시)
  • htop, glances: 시스템 모니터링 도구 (sudo apt install htop glances -y)
  • sudo apt install wget curl git unzip zip build-essential -y
Linux 서버 초기 세팅 체크리스트

Image by Schäferle on Pixabay

4. 스왑 메모리 설정 (필요시)

물리적 RAM이 부족할 경우, 하드디스크의 일부를 스왑 메모리로 사용하여 시스템 안정성을 높일 수 있습니다. 특히 메모리 사용량이 높은 애플리케이션을 운영하거나 RAM 용량이 작은 서버에서 유용합니다.

주의: SSD에 스왑을 과도하게 사용하면 SSD 수명에 영향을 줄 수 있으므로, 꼭 필요한 경우에만 설정합니다.

  1. 스왑 파일 생성 (예: 2GB 스왑 파일):
    sudo fallocate -l 2G /swapfile
  2. 파일 권한 설정:
    sudo chmod 600 /swapfile
  3. 스왑 공간으로 설정:
    sudo mkswap /swapfile
  4. 스왑 활성화:
    sudo swapon /swapfile
  5. 부팅 시 자동 활성화되도록 /etc/fstab에 등록:
    echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
  6. 스왑 설정 확인:
    free -h
Linux 서버 초기 세팅 체크리스트

Image by bsdrouin on Pixabay

5. 모니터링 및 로깅 설정

서버의 상태를 지속적으로 확인하고 문제를 진단하기 위한 기본적인 모니터링 및 로깅 설정을 합니다.

5.1. 로그 확인

로그 파일은 서버에서 발생하는 모든 이벤트의 기록입니다. 문제가 발생했을 때 원인을 분석하는 데 매우 중요합니다.

  • 시스템 로그: journalctl
  • 주요 로그 디렉토리: /var/log/
  • 예시: tail -f /var/log/syslog (실시간 시스템 로그 확인)
  • 예시: cat /var/log/auth.log | grep Failed (SSH 로그인 실패 기록 확인)

5.2. 로그 로테이션 (logrotate)

로그 파일이 너무 커지는 것을 방지하기 위해 logrotate를 통해 주기적으로 로그 파일을 압축, 삭제, 순환시킵니다. 대부분의 리눅스 시스템에 기본적으로 설정되어 있지만, 애플리케이션별로 커스텀 설정이 필요할 수 있습니다.

sudo nano /etc/logrotate.conf 또는 /etc/logrotate.d/ 디렉토리 확인

6. 정기적인 유지보수 계획

초기 세팅만큼 중요한 것이 꾸준한 유지보수입니다. 안정적인 서버 운영을 위해 다음 사항들을 고려해야 합니다.

6.1. 자동 업데이트 설정

보안 업데이트를 놓치지 않도록 자동 업데이트를 설정하는 것을 고려할 수 있습니다. Ubuntu의 경우 unattended-upgrades 패키지를 통해 설정할 수 있습니다.

sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure --priority=low unattended-upgrades

6.2. 백업 전략 수립

예기치 않은 데이터 손실에 대비하여 정기적인 백업은 필수입니다. 클라우드 서비스의 스냅샷 기능, rsync, 또는 별도의 백업 솔루션을 활용할 수 있습니다.

  • 데이터베이스 백업
  • 설정 파일 백업
  • 애플리케이션 코드 백업

6.3. 정기적인 시스템 점검

CPU, 메모리, 디스크 사용량 등을 주기적으로 모니터링하고, 불필요한 프로세스나 파일을 정리하는 등 시스템 자원을 효율적으로 관리해야 합니다.

지금까지 리눅스 서버를 처음 세팅할 때 필요한 핵심 체크리스트를 살펴보았습니다. 이 과정들은 안전하고 안정적인 서버 환경을 구축하기 위한 필수적인 단계들입니다. 처음에는 다소 복잡하게 느껴질 수 있지만, 한 번 제대로