
클라우드든 사무실 구석의 서버든, 리눅스 서버를 켠 직후의 상태는 '누구나 두드릴 수 있는 문'에 가깝습니다. 인터넷에 붙은 서버의 22번 포트에는 켠 지 몇 분 안에 자동화된 로그인 시도가 쏟아집니다. 아래 다섯 단계는 우분투·데비안 계열 기준이며, 다른 배포판도 명령만 다를 뿐 순서는 같습니다. 모두 30분 안에 끝납니다.

1. 일반 사용자를 만들고 sudo 를 준다
root 로 직접 일하지 않습니다. 사용자를 만들고 sudo 그룹에 넣습니다.
adduser ops
usermod -aG sudo ops
2. SSH 키 인증으로 바꾸고, 비밀번호·root 로그인을 끈다
내 PC 에서 키를 만들고(ssh-keygen -t ed25519) 공개키를 서버의 ~ops/.ssh/authorized_keys 에 넣습니다(ssh-copy-id ops@서버 가 편합니다). 새 터미널에서 키로 로그인되는 것을 확인한 뒤 /etc/ssh/sshd_config 를 고칩니다.
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
저장 후 sudo systemctl reload ssh. 기존 세션은 닫지 말고 다른 창에서 다시 접속해 보는 것이 안전합니다. 잠기면 콘솔로 들어가야 합니다.
3. 보안 업데이트는 자동으로
sudo apt update && sudo apt upgrade -y
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
보안 패치만 자동으로 받고, 커널처럼 재부팅이 필요한 것은 알림만 받도록 두면 운영 부담이 줄어듭니다.
4. 방화벽은 '기본 거부' 에서 시작
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
SSH 허용을 먼저 넣고 enable 하는 순서가 중요합니다. 웹 서버가 아니면 80·443 은 빼고, DB 포트는 밖으로 열지 않습니다.
5. fail2ban 으로 반복 실패를 막는다
sudo apt install fail2ban
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
기본 설정만으로도 짧은 시간에 로그인에 여러 번 실패한 IP 를 일정 시간 차단합니다. 키 인증만 쓰면 실제로 뚫릴 일은 거의 없지만, 로그가 시도로 가득 차는 것을 막아 줍니다.

끝나고 확인할 것
서버 보안의 8할은 처음 30분에 정해집니다. 나중에 하려면 열 배의 시간이 듭니다.

댓글