대상 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