홈랩 서버를 외부에 노출하거나, VPS를 하나 빌리면 가장 먼저 해야 할 일이 기본 보안 하드닝입니다. 거창한 게 아니라, 공격 표면을 줄이는 몇 가지 기본기죠. 제가 서버를 올릴 때마다 반복하는 하드닝 체크리스트를 정리합니다. 방어 관점의 교육용 내용입니다.
1. SSH — 비밀번호를 버리고 키로
서버 침입 시도의 대부분은 SSH 비밀번호 무차별 대입입니다. 답은 키 인증 전환 + 비밀번호 로그인 차단입니다.
# (로컬에서) 키 생성 후 서버에 등록
ssh-keygen -t ed25519
ssh-copy-id user@server
# /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
sudo systemctl restart ssh
키 접속이 되는 걸 반드시 먼저 확인한 뒤 비밀번호를 끄세요(안 그러면 잠깁니다).
2. 방화벽 — 필요한 포트만
기본은 “다 막고 필요한 것만 연다”입니다. Ubuntu라면 ufw가 간단합니다.
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp # SSH (포트 바꿨다면 그 포트)
sudo ufw enable
sudo ufw status numbered
웹서버면 80/443만 추가로 엽니다. 열린 포트가 적을수록 안전합니다.
3. fail2ban — 무차별 대입 자동 차단
로그를 감시해 반복 실패하는 IP를 자동으로 밴합니다.
sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban
# /etc/fail2ban/jail.local
[sshd]
enabled = true
maxretry = 5
bantime = 1h
sudo fail2ban-client status sshd # 밴 현황 확인
4. 자동 보안 업데이트
알려진 취약점 대부분은 패치만 제때 하면 막힙니다. 보안 업데이트는 자동으로.
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
5. 최소 권한 — root를 쓰지 않기
- 일반 사용자 +
sudo로 작업하고, root 직접 로그인은 차단 - 서비스는 전용 계정으로 실행(필요 이상 권한 금지)
- 안 쓰는 서비스·패키지는 제거(공격 표면↓)
# 열려 있는 포트/서비스 점검
sudo ss -tulpn
6. 외부 노출은 터널/VPN 우선
관리 포트(SSH, 웹 관리자)를 인터넷에 직접 여는 대신, WireGuard VPN이나 Cloudflare Tunnel로 접근하면 포트를 열지 않고도 안전하게 접속할 수 있습니다. 관리 인터페이스는 가능한 한 공개하지 마세요.
7. 하드닝 체크리스트
| 항목 | 효과 |
|---|---|
| SSH 키 인증 + 비밀번호 차단 | 무차별 대입 원천 차단 |
| 방화벽(필요 포트만) | 공격 표면 축소 |
| fail2ban | 반복 공격 IP 자동 밴 |
| 자동 보안 업데이트 | 알려진 취약점 방어 |
| 최소 권한·서비스 정리 | 피해 범위 축소 |
| VPN/터널로 접근 | 관리 포트 비공개 |
8. 정리
보안은 한 방이 아니라 겹겹이 쌓는 기본기입니다. SSH 키, 방화벽, fail2ban, 자동 업데이트, 최소 권한 — 이 다섯 가지만 해도 자동화된 공격의 대부분을 막습니다. 서버를 새로 올릴 때마다 이 체크리스트를 돌리는 습관을 들이세요. 이 글은 본인 소유 서버의 방어 목적에 한합니다.