WireGuard로 사내 서비스 ACL·정책 구현
WireGuard 접근 제어 설정과 ACL/Policy 설계를 초보자가 이해하기 쉽게 단계별 예제와 운영 고려사항을 포함해 설명하는 설정사례
목차
개요
사내 네트워크에서 서비스별 접근 권한을 통제하려면 단순한 터널링을 넘는 정책이 필요하다. 이 문서에서는 WireGuard를 이용해 IP 기반 ACL과 네트워크 정책을 설계하고 적용하는 방법을 단계별로 설명한다. 초보자도 이해할 수 있도록 개념 정리, 설계, 설정 예제, 검증 절차와 운영 팁을 담았다.
WireGuard 개념 요약
WireGuard는 경량화된 VPN으로 키 기반 인증과 간단한 설정을 제공한다. 기본적으로 피어의 AllowedIPs로 라우팅을 제어하지만, 서비스별 접근 제어를 위해서는 추가적인 ACL 규칙이 필요하다. 여기서는 WireGuard 접근 제어 설정, WireGuard ACL 구현, WireGuard 네트워크 정책이라는 키워드를 중심으로 설명한다.
접근 제어의 기본 개념
ACL과 네트워크 정책의 차이
- ACL: IP/포트 단위로 허용 또는 차단하는 규칙 집합.
- Policy: 서비스 계층 정책을 포함한 더 높은 수준의 제어. 예를 들어 특정 사용자 그룹만 DB에 접근 허용.
WireGuard에서의 제약
WireGuard 자체는 터널링과 라우팅을 담당한다. AllowedIPs는 라우팅 경로를 제공하지만, 포트나 서비스 단위의 제어는 운영체제의 방화벽(iptables/nftables)나 호스트 레벨 방화벽으로 처리해야 한다.
설계: IP 계획과 역할 분리
먼저 내부 IP 대역과 역할을 정한다. 예를 들어 VPN 서브넷을 10.10.0.0/24로 두고 서비스 그룹별로 IP를 고정하면 ACL 작성이 쉬워진다.
- 10.10.0.1: WireGuard 서버
- 10.10.0.10~10.10.19: 개발자 워크스테이션
- 10.10.0.20~10.10.29: 운영 서버 접근 전용
- 10.10.0.100: 내부 DB 서버(예: 10.20.0.5)
이처럼 IP 대역을 역할별로 분리하면 나중에 ACL 구성과 로그 분석이 쉬워진다.
설정 예제
WireGuard 서버 기본 설정
[Interface]
Address = 10.10.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
PostUp = iptables -A FORWARD -i %i -o eth0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -o eth0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
# Peer: developer
[Peer]
PublicKey = DEV_PUBLIC_KEY
AllowedIPs = 10.10.0.10/32
PostUp/PostDown에서 기본적인 포워딩과 NAT를 걸었다. ACL은 별도 체인으로 관리하는 것이 좋다.
iptables로 ACL 구현 예
서비스별로 ACL 체인을 만들고 WireGuard 인터페이스에 연결한다.
# ACL 체인 생성
iptables -N WG-ACL
# 기본 정책은 DROP
iptables -P FORWARD DROP
# WireGuard 인터페이스에서 FORWARD로 들어오는 트래픽은 WG-ACL로 이동
iptables -A FORWARD -i wg0 -j WG-ACL
# 예: 개발자(10.10.0.10)는 내부 DB(10.20.0.5) 5432 포트만 허용
iptables -A WG-ACL -s 10.10.0.10/32 -d 10.20.0.5/32 -p tcp --dport 5432 -j ACCEPT
# 운영 서버 접근 대역 허용(예: 10.10.0.20/28은 내부 관리망 접근 허용)
iptables -A WG-ACL -s 10.10.0.20/28 -j ACCEPT
# 나머지 드롭
iptables -A WG-ACL -j DROP
이 방식은 WireGuard 트래픽이 허용된 후 서비스 단위 필터링을 적용한다.
고급: 정책 기반 라우팅과 태깅
더 세밀한 제어가 필요하면 네트워크 네임스페이스, ip rule, 또는 VLAN 태깅을 사용해 트래픽을 분리한다. 예를 들어 민감한 서비스는 별도 네임스페이스로 격리해 방화벽 규칙을 따로 적용할 수 있다.
검증 절차
설정 후에는 단계별로 정상 동작을 확인한다.
- wg show로 피어 상태와 전송량 확인
- ping으로 기본 연결 확인
- nc(tcpdump)로 포트별 필터링 동작 확인
# 피어 상태 확인
sudo wg show
# 특정 포트가 열려 있는지 테스트(예: DB 포트)
nc -vz 10.20.0.5 5432
# 트래픽 캡처
sudo tcpdump -i wg0 host 10.10.0.10 and host 10.20.0.5
운영 관점의 권장사항
- 로그와 모니터링: 방화벽 허용/차단 로그를 수집해 정책 이상 징후를 탐지한다.
- 작은 범위부터 적용: 먼저 한 그룹에만 ACL을 적용해 영향도를 검증한다.
- 백업과 자동화: 방화벽 규칙과 WireGuard 설정을 코드화해 재현 가능하도록 유지한다.
- 주기적 검토: 서비스 추가·변경 시 ACL을 갱신하고 불필요한 규칙을 제거한다.
마무리
WireGuard 접근 제어 설정은 AllowedIPs와 운영체제 방화벽을 조합해 구현한다. 설계 단계에서 IP 계획과 역할 분리를 명확히 하면 WireGuard ACL 구현이 단순해진다. 또한 정책 검증과 모니터링을 통해 WireGuard 네트워크 정책을 안정적으로 운영할 수 있다.