1. 새 서버를 켰을 때 가장 먼저 해야 할 일
클라우드에서 서버를 만들면 운영체제만 설치된 빈 컴퓨터가 하나 생깁니다. 아무것도 없는 이 상태로 바로 서비스를 올리면 어떤 위험이 있을까요?
인터넷에 연결된 서버는 생성되는 순간부터 전 세계에서 자동화된 해킹 시도에 노출됩니다. 실제로 아무 보안 설정 없이 서버를 24시간 방치하면 로그 파일에 수천 건의 로그인 시도 흔적이 남게 됩니다.
이 글에서는 서버를 받은 직후 꼭 해야 할 필수 설정 5가지를 Ubuntu 서버 기준으로 안내합니다.
2. 첫 번째 – 시스템 패키지 업데이트
서버 이미지는 만들어진 시점의 소프트웨어 버전을 담고 있습니다. 그 이후 발견된 보안 취약점의 패치가 적용되지 않은 상태일 수 있습니다. 따라서 가장 먼저 모든 패키지를 최신 상태로 업데이트해야 합니다.
패키지 목록을 새로 불러오는 명령어입니다.
sudo apt update
실제 업그레이드를 적용하는 명령어입니다.
sudo apt upgrade -y
업데이트 완료 후에는 서버를 재부팅해 변경 사항을 완전히 적용합니다.
sudo reboot
재부팅 후 SSH로 다시 접속하면 됩니다.
3. 두 번째 – 전용 사용자 계정 만들기
처음 접속할 때 사용하는 root 또는 ubuntu 계정은 모든 권한을 가진 최고 관리자입니다. 이 계정을 일상적인 작업에 직접 사용하는 것은 위험합니다.
실수 한 번으로 시스템 전체를 망가뜨릴 수 있고, 해커가 이 계정을 탈취하면 서버 전체가 위험에 처합니다.
작업 전용 계정을 만들고 필요할 때만 sudo로 관리자 권한을 사용하는 방식을 권장합니다.
새 사용자를 생성합니다. (devuser 자리에 원하는 이름 입력)
adduser devuser
해당 계정에 sudo 권한을 부여합니다.
usermod -aG sudo devuser
이후 SSH 접속도 root 대신 이 계정으로 하고, 필요한 작업에서만 sudo 명령을 사용하면 됩니다.
4. 세 번째 – SSH 접속 보안 강화
SSH는 서버 접속의 문입니다. 이 문을 최대한 튼튼하게 만들어야 합니다. SSH 설정 파일을 열어 아래 항목들을 수정합니다.
sudo nano /etc/ssh/sshd_config
파일에서 수정해야 할 세 가지 항목이 있습니다.
첫째로 root 계정으로의 직접 SSH 접속을 차단합니다. PermitRootLogin 항목을 찾아 값을 no로 변경합니다.
둘째로 비밀번호 인증을 비활성화합니다. PasswordAuthentication 항목을 찾아 값을 no로 변경합니다. 이 설정을 적용하기 전에 반드시 SSH 키 인증이 정상 동작하는지 확인해야 합니다.
셋째로 기본 포트 22번을 다른 번호로 변경합니다. Port 항목을 찾아 원하는 번호로 변경합니다. 자동화된 해킹 시도의 상당수를 차단할 수 있습니다.
수정 후 SSH 서비스를 재시작합니다.
sudo systemctl restart sshd
포트를 변경했다면 기존 세션을 닫기 전에 새 포트로 접속이 되는지 먼저 확인해야 합니다.
5. 네 번째 – 방화벽 활성화 및 규칙 설정
**UFW(Uncomplicated Firewall)**를 사용하면 간단한 명령어로 방화벽을 설정할 수 있습니다.
기본 정책을 설정합니다. 들어오는 요청은 모두 차단하고, 나가는 요청은 허용합니다.
sudo ufw default deny incoming sudo ufw default allow outgoing
SSH 포트를 허용합니다. 포트를 변경했다면 해당 번호로 입력합니다.
sudo ufw allow 22
웹 서비스를 운영할 경우 HTTP와 HTTPS 포트도 허용합니다.
sudo ufw allow 80 sudo ufw allow 443
방화벽을 활성화합니다.
sudo ufw enable
활성화 전에 반드시 SSH 포트를 허용해 두어야 현재 접속이 끊기지 않습니다.
6. 다섯 번째 – 서버 시간 설정
서버의 기본 타임존은 UTC로 설정되어 있습니다. 국내 서비스를 운영한다면 한국 시간(KST)으로 변경하는 것이 좋습니다.
로그 기록, 데이터베이스 시간 데이터, cron 작업 실행 시간 등 모두 서버 타임존을 기준으로 처리되기 때문입니다.
타임존을 서울로 변경합니다.
sudo timedatectl set-timezone Asia/Seoul
변경 후 확인합니다.
timedatectl
Time zone: Asia/Seoul (KST, +0900)이 표시되면 성공입니다.
7. 설정 완료 후 확인 방법
5가지 설정을 모두 마쳤다면 아래 항목을 순서대로 확인합니다.
패키지가 최신인지 확인합니다. apt list --upgradable 명령으로 업그레이드 대상이 없어야 합니다.
새 계정이 정상 생성됐는지 확인합니다. id devuser 명령으로 uid와 gid 정보가 출력되면 됩니다.
SSH 설정이 적용됐는지 확인합니다. sudo sshd -T | grep permitrootlogin 명령으로 no가 표시되면 됩니다.
방화벽 상태를 확인합니다. sudo ufw status로 허용한 포트들이 ALLOW로 표시되는지 봅니다.
타임존을 확인합니다. timedatectl 명령으로 Asia/Seoul이 표시되면 됩니다.
8. 정리 및 다음 단계
서버를 처음 받은 뒤 해야 할 5가지 필수 설정을 정리합니다.
- 패키지 업데이트로 보안 취약점을 사전에 차단합니다.
- 전용 사용자 계정을 만들어 root 계정 직접 사용을 줄입니다.
- SSH root 로그인 차단, 비밀번호 인증 비활성화, 포트 변경으로 접속 보안을 강화합니다.
- UFW 방화벽으로 필요한 포트만 열고 나머지를 차단합니다.
- 타임존을 한국 시간(Asia/Seoul)으로 맞춥니다.
다음 글에서는 서버에서 파일을 주고받는 방법 – SFTP와 SCP를 활용하는 실전 가이드를 알아보겠습니다.