대상 OS: Debian 12 (bookworm)

SSH를 인터넷에 열어두는 순간, 그 서버는 매일 수천 번의 스캔과 무차별 대입을 받습니다.
키 인증을 쓰고 Fail2ban을 붙여도 “노출 자체”는 사라지지 않습니다.
가장 단단한 방법은 SSH를 공용망에서 없애고, 관리 트래픽만 들어오는 ‘관리망’을 따로 만드는 겁니다.
WireGuard는 설정이 단순하고 성능이 좋아, 이 관리망을 만들기 위한 현실적인 선택지입니다.

이 글에서는 Debian 12에서 WireGuard로 관리 전용 VPN을 구성한 뒤, SSH를 VPN 인터페이스(wg0)로만 받도록 묶는 방법을 단계별로 정리합니다.

---

오늘의 목표(구성 요약)

1) 서버는 WireGuard로 VPN 포트(UDP)만 외부에 노출한다

2) SSH(22/tcp)는 공용 인터페이스에서 차단하고 wg0에서만 허용한다

3) 운영자가 VPN에 붙으면 내부 IP로 SSH 접속한다

4) 장애 시 원복/점검 루틴을 준비한다

예시 네트워크
- 서버(관리 대상): VPN IP `10.10.10.1/24`
- 운영자 노트북(클라이언트): VPN IP `10.10.10.2/32`
- WireGuard 포트: `51820/udp`

---

1) 설치와 커널 모듈 확인

1) 패키지 설치

sudo apt update
sudo apt -y install wireguard

2) 모듈/버전 확인

uname -r
sudo modprobe wireguard
lsmod | grep -i wireguard || true

---

2) 서버 키 생성 및 설정 파일 만들기

WireGuard는 “서버/클라이언트”라는 개념보다 피어(peer) 기반이지만, 운영 관점에서 서버를 허브로 두는 구성이 가장 흔합니다.

1) 서버 키 생성(권한 주의)

sudo install -d -m 0700 /etc/wireguard
cd /etc/wireguard
sudo bash -lc 'umask 077; wg genkey | tee server.key | wg pubkey > server.pub'
sudo chmod 600 /etc/wireguard/server.key
sudo chmod 644 /etc/wireguard/server.pub

2) 서버 wg0 설정 파일 작성

sudo tee /etc/wireguard/wg0.conf >/dev/null /dev/null