리눅스 VPS에서 SSH를 보호하는 방법
공개된 VPS는 온라인에 올라온 지 몇 분 안에 자동화된 로그인 시도를 받습니다. 아래 단계를 따르면 SSH 공격을 훨씬 어렵게 만들 수 있습니다. 이 가이드는 Ubuntu 또는 Debian을 기준으로 작성되었습니다. 아직 서버가 없다면 Linux VPS를 임대한 뒤 깨끗한 이미지에서 시작하세요. 새 설정을 두 번째 창에서 테스트하기 전까지는 현재 SSH 세션을 닫지 마세요.
1. sudo 권한이 있는 일반 사용자 만들기
adduser deploy
usermod -aG sudo deploy2. 비밀번호 대신 SSH 키 사용하기
자신의 컴퓨터에서 실행합니다:
ssh-keygen -t ed25519 -C "you@example.com"
ssh-copy-id deploy@YOUR_SERVER_IP
ssh deploy@YOUR_SERVER_IP비밀번호 로그인을 끄기 전에, 키로 한 번 로그인해서 정상 작동하는지 확인하세요.
3. 비밀번호 및 root 로그인 끄기
/etc/ssh/sshd_config.d/99-hardening.conf 파일을 만드세요:
PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
MaxAuthTries 3문법을 검사한 뒤 서비스를 다시 불러오세요. 서비스 이름은 Ubuntu와 Debian에서는 ssh, RHEL 계열에서는 sshd입니다:
sudo sshd -t && sudo systemctl reload ssh두 번째 터미널을 열고 다시 로그인해 보세요. 그다음에만 기존 세션을 닫으세요.
4. 방화벽 활성화하기
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status verbose꼭 필요한 포트만 여세요. 예를 들어 웹 서버라면 80과 443만 엽니다. 클라우드 콘솔의 방화벽 규칙으로 SSH 접속을 자신의 IP 주소로 제한할 수도 있습니다.
5. Fail2ban으로 반복된 실패 차단하기
sudo apt install -y fail2ban/etc/fail2ban/jail.local 파일을 만드세요:
[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 1hsudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd6. 보안 업데이트 자동 설치하기
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades7. 선택 사항
- SSH 포트를 변경하면 로그 노이즈는 줄어들지만, 그 자체로는 보안 조치가 되지 않습니다.
- 개인 키에는 패스프레이즈를 설정하고, 백업본을 안전한 곳에 보관하세요.
last및sudo journalctl -u ssh --since today명령으로 로그인 기록을 확인하세요.- 서버 설정이 끝나면 스냅샷을 만들어 두세요. 그래야 깨끗한 기준 상태로 복원할 수 있습니다.
실수로 접속이 막혔다면, 클라우드 패널의 브라우저 콘솔을 사용해 로그인한 뒤 설정을 고치세요. 다음 단계의 방어에 대해서는 DDoS 보호 가이드를 참고하세요.
자주 묻는 질문
root 로그인을 끄는 것은 안전한가요?
네, 먼저 sudo 사용자를 만들고 그 사용자의 키가 작동하는지 테스트했다면 안전합니다. 관리 명령은 여전히 sudo로 실행할 수 있습니다.
키만 사용한다면 Fail2ban이 필요한가요?
선택 사항입니다. 비밀번호 로그인을 끄면 무차별 대입 공격은 성공할 수 없지만, Fail2ban은 로그 노이즈와 부하를 줄여 줍니다.
SSH 키를 잃어버리면 어떻게 하나요?
클라우드 패널의 콘솔을 사용해 로그인한 뒤, 새 공개 키를 ~/.ssh/authorized_keys에 추가하고 기존 키는 삭제하세요.