새 VPS 서버 초기 보안 설정 10분 런북
새로 생성된 VPS는 즉시 공격 대상이 됩니다. root 계정 비활성화, sudo 사용자 생성, SSH 키 설정 및 방화벽 구성을 통해 서버를 안전하게 보호하는 10분 핵심 가이드를 확인하십시오.
서버의 보안은 초기 10분이 결정합니다
새로 생성된 VPS는 안전하지 않습니다. 공인 IP가 할당되는 순간부터 스캐너들이 로그인을 시도하며, 기본 이미지는 root 계정 접근 허용, 비밀번호 인증 활성화, 방화벽 부재, 보안 패치 미비 등 공격자에게 큰 표적이 됩니다. 다행히 이 모든 취약점을 해결하는 데는 10분 정도의 시간과 몇 가지 명령어면 충분합니다. 다음은 제가 새로운 서버를 설정할 때마다 서비스 배포 전에 반드시 수행하는 런북입니다.
각 단계는 서로 의존적이므로 순서대로 진행하십시오. 각 단계별 상세 가이드는 링크를 통해 확인할 수 있으며, 이 페이지는 전체 과정을 하나로 묶은 빠른 경로입니다.
1분: 모든 항목 업데이트
제공업체에서 받은 자격 증명을 사용하여 root 계정으로 로그인합니다. 다른 작업을 수행하기 전에 시스템을 완전히 최신 상태로 업데이트하십시오.
apt update && apt upgrade -y패치되지 않은 서버는 가장 공격하기 쉬운 대상이므로 이 작업을 최우선으로 수행해야 합니다. 업데이트가 완료되면 보안 업데이트가 자동으로 적용되도록 설정하여, 매번 기억할 필요 없이 시스템이 항상 패치된 상태를 유지하도록 하십시오.
2분: sudo 권한을 가진 일반 사용자 생성
root 계정으로 계속 작업하지 마십시오. 본인을 위한 사용자를 생성하고 sudo 권한을 부여하십시오.
adduser matt
usermod -aG sudo matt이제부터는 이 사용자로 로그인하여 관리 작업 시 sudo을 사용하십시오. 항상 root로 실행하면 모든 실수와 침해 사고가 무제한 권한 상태에서 발생하게 되며, 권한이 없는 사용자로 실행하는 것은 바로 이러한 위험을 방지하기 위한 것입니다.
4분: SSH 키 설정
비밀번호는 추측될 수 있지만, 키는 그렇지 않습니다. 본인의 노트북에 아직 키가 없다면 다음 명령어로 생성합니다.
ssh-keygen -t ed25519그다음 공개 키를 서버로 복사합니다.
ssh-copy-id matt@YOUR_SERVERssh-copy-id를 사용하려면 새 사용자에 대해 비밀번호 로그인이 활성화되어 있어야 합니다. 이미 비활성화된 상태라면 root의 ~/.ssh/authorized_keys을 matt 소유의 /home/matt/.ssh/authorized_keys로 복사하거나, 공개 키를 해당 파일에 직접 붙여넣으십시오.
장치당 하나의 키를 사용하는 모델, 키 로그인을 방해하는 권한 설정, 분실한 키를 폐기하는 방법 등은 SSH 키 관리 기초에서 다룹니다.
로그아웃한 뒤 matt 계정으로 키를 사용하여 다시 로그인하고, 다음 단계로 넘어가기 전에 정상 작동하는지 확인하십시오. 키로 로그인할 수 없는 상태에서 SSH를 제한하면 서버 접근이 차단됩니다. 로그인 시 Permission denied (publickey) 메시지가 나타난다면 비밀번호로 돌아가려 하지 말고 지금 해결하십시오. 해당 메시지는 다섯 가지 서로 다른 오류를 포괄하며, ssh -v 출력 내용을 확인하면 실제 원인을 파악할 수 있습니다.
6분: root 로그인 및 비밀번호 인증 비활성화
이제 SSH 키가 정상적으로 작동하므로, 스캐너가 주로 노리는 두 가지 경로를 차단합니다. 패키지 업그레이드 시 설정이 덮어쓰이지 않도록 드롭인(drop-in) 파일을 사용합니다. 파일 이름을 00-로 지정하여 50-cloud-init.conf보다 먼저 정렬되도록 합니다. Ubuntu 클라우드 이미지는 기본적으로 PasswordAuthentication yes을 포함하고 있으며, sshd는 가장 먼저 읽은 값을 우선하므로 나중에 정렬되는 파일은 무시되기 때문입니다.
sudo nano /etc/ssh/sshd_config.d/00-hardening.confPasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no그런 다음 SSH 설정을 다시 불러옵니다.
sudo systemctl restart ssh이제 sshd가 실제로 적용 중인 설정을 확인하여, 드롭인 파일이 의도대로 작동하는지 검증합니다.
sudo sshd -T | grep -Ei 'passwordauthentication|permitrootlogin'비밀번호 인증을 끄고 root 로그인을 차단하면, 서버를 향한 지속적인 무차별 대입(brute-force) 공격은 성공할 수 없습니다. 포트 변경을 포함한 전체 보안 강화 절차는 VPS의 SSH 보안 강화에서 확인할 수 있습니다.
8분: 방화벽 활성화
모든 인바운드 트래픽을 기본적으로 차단하고, 필요한 트래픽만 허용하십시오. 방화벽을 활성화하기 전에 SSH를 먼저 허용해야 합니다. 그렇지 않으면 연결이 끊깁니다.
sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw enable실제로 운영 중인 서비스에 대해 allow 규칙을 추가하십시오. 예를 들어 웹사이트를 운영한다면 80/tcp 및 443/tcp를 허용해야 합니다. 이 작업 이후 새로운 SSH 세션 연결이 되지 않는다면, 설정을 변경하기 전에 오류 메시지를 먼저 읽어보십시오. 연결 거부는 sshd가 응답했음을 의미하고, 타임아웃은 보통 방화벽이 패킷을 차단했음을 의미하기 때문입니다. IPv4와 IPv6가 모두 포함되었는지 확인하십시오. IPv4만 필터링하는 방화벽은 IPv6 측면을 완전히 개방된 상태로 두기 때문입니다. 전체 가이드는 VPS에서의 방화벽 기초에서 확인할 수 있습니다. 이 ufw 명령어들은 Ubuntu 또는 Debian을 기준으로 합니다. Rocky 또는 AlmaLinux 환경에서도 기본 차단 목표는 동일하지만 사용하는 도구는 firewalld이므로, 대신 이 단계의 firewalld 버전을 진행하십시오.
10분: Fail2ban으로 스캐너 속도 제한하기
마지막으로, 포트를 무차별적으로 공격하는 주소를 차단하기 위해 Fail2ban을 추가합니다.
sudo apt install -y fail2banUbuntu 24.04의 기본 설치 환경에서는 부팅 시점부터 SSH를 보호합니다. 이미 키 인증이 필수이므로, 이는 주된 방어 수단이라기보다 로그 노이즈를 줄이고 반복적인 공격자를 차단하는 최후의 보루 역할을 합니다.
점검 목록
이것이 런북입니다. 아래 생성기를 사용하여 각 통제 항목을 확인하고, 각 단계별 정확한 명령어가 포함된 개인화된 체크리스트를 생성하여 서버와 함께 보관하십시오.
새 서버를 설정할 때마다 이 목록을 순서대로 수행하면 전체 과정이 숙달될 것입니다. 지금 10분을 투자하면 서버가 해킹당한 뒤 겪게 될 끔찍한 오후를 예방할 수 있습니다.
필수 설정이 완료되면 Ubuntu의 자동 보안 업데이트를 통해 다시 로그인하지 않아도 서버를 최신 상태로 유지할 수 있습니다. 그 위에 올리는 각 서비스는 별도의 검토가 필요하며, 취약점의 위치도 달라집니다. 예를 들어 자체 호스팅하는 비밀번호 관리자를 사용하면 서버에 평문이 저장되지 않으므로, Vaultwarden의 실제 위험 요소는 관리자 토큰과 백업 파일이 됩니다.
FAQ
새 VPS를 할당받으면 가장 먼저 무엇을 해야 합니까?
apt update && apt upgrade -y을 사용하여 시스템을 업데이트한 다음, sudo 권한을 가진 일반 사용자를 생성하고 root 계정으로 작업하는 것을 중단하십시오. 그 후 SSH 키를 설정하고, root 로그인과 비밀번호 인증을 비활성화하며, 기본 거부(default-deny) 방화벽을 활성화하고 Fail2ban을 설치하십시오. 이 순서대로 진행하면 서버 접근 권한을 잃지 않고 안전하게 각 단계를 완료할 수 있습니다.
SSH 보안을 강화하는 동안 서버 접근이 차단되지 않으려면 어떻게 해야 합니까?
비밀번호나 root 로그인을 비활성화하기 전에 SSH 키 로그인을 설정하고 테스트하십시오. 로그아웃 후 키를 사용하여 다시 로그인하여 정상 작동하는지 확인한 뒤에만 PasswordAuthentication과 PermitRootLogin을 끄십시오. 방화벽을 활성화할 때는 ufw enable를 실행하기 전에 22번 포트를 허용해야 합니다. 만약 접근이 차단되었다면, 서비스 제공업체의 웹 콘솔을 통해 SSH 없이 다시 접속할 수 있습니다.
작은 서버에도 이 모든 설정이 정말 필요합니까?
네, 스캐너는 서버의 규모를 가리지 않기 때문입니다. 스캐너는 모든 공인 IP를 동일한 방식으로 공격합니다. 이 전체 가이드를 수행하는 데는 약 10분 정도 소요되며, root 로그인 금지, 비밀번호 추측 방지, 의도하지 않은 서비스 노출 차단, 알려진 버그의 자동 패치 등 공격자가 이용하기 쉬운 경로를 모두 제거합니다.
가장 중요한 단계를 하나만 꼽는다면 무엇입니까?
root 로그인을 비활성화하고 SSH 키만 사용하는 것입니다. 새로 생성된 VPS에 대한 대부분의 공격은 root 계정을 대상으로 한 자동화된 비밀번호 추측 공격이며, 이 두 가지를 모두 차단하면 해당 유형의 공격을 원천적으로 불가능하게 만들 수 있습니다. 이후 방화벽과 Fail2ban이 노출 범위를 제한하고 남은 공격 시도를 지연시킵니다.
서버가 실제로 안전하게 잠겼는지 어떻게 확인합니까?
신뢰하기 전에 다음 세 가지를 직접 확인하십시오. sudo ss -tlnp을 실행하여 의도한 포트만 공인 주소에서 수신 대기 중인지 확인하고, 잊고 있던 0.0.0.0이나 [::] 서비스가 없는지 점검하십시오. sudo ufw status verbose을 실행하여 기본 수신 정책이 deny로 설정되어 있는지, 그리고 일반 규칙과 (v6) 규칙이 모두 존재하는지 확인하십시오. 또한 첫 번째 SSH 세션을 닫기 전에 항상 두 번째 세션을 열어두어, SSH 설정 실수로 인해 서버 접근이 차단되는 상황을 방지하십시오. 이 세 가지가 모두 정상이라면 기본적인 보안 설정은 완료된 것입니다.