!26-vpn-고급-설계-diagram
VPN 고급 설계 (Advanced VPN Design)
VPN의 고급 구성과 보안 최적화 방법을 학습합니다.
📌 학습 목표
1. VPN 개요
정의
Virtual Private Network - 공용 네트워크를 통해 안전한 사설 네트워크 연결
VPN 유형
유형 설명 사용 사례 Site-to-Site 오피스 간 안전한 연결 본사-지사 연결 Remote Access 원격 직원 접속 재택근무 SSL VPN 웹 브라우저 기반 클라이언트 설치 불필요 Layer 2 VPN L2 터널링 VLAN 확장
2. IPsec VPN
IPsec 프로토콜 스텍
IPsec Stack:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
IKE (Internet Key Exchange)
- IKE Phase 1: 인증 및 키 교환
- IKE Phase 2: SA (Security Association) 설정
IPsec Protocols:
- AH (Authentication Header): 인증만
- ESP (Encapsulating Security Payload): 인증 + 암호화
Modes:
- Transport Mode: 페이로드만 암호화
- Tunnel Mode: 전체 패킷 암호화 (헤더 포함)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
IKE Phase 1
모드
모드 설명 Main Mode 6단계 핸드셰이크 (안전) Aggressive Mode 3단계 핸드셰이크 (빠름)
핸드셰이크 (Main Mode)
1. SA 제안 (Initiator → Responder)
2. SA 승인 (Responder → Initiator)
3. Diffie-Hellman 교환 (Initiator → Responder)
4. Diffie-Hellman 응답 (Responder → Initiator)
5. 인증 (Initiator → Responder)
6. 인증 승인 (Responder → Initiator)
IKE Phase 2
1. Quick Mode SA 제안 (Initiator → Responder)
2. Quick Mode SA 승인 (Responder → Initiator)
3. IPsec SA 설정 완료
IPsec 구성 예시 (Cisco ASA)
! Site-to-Site VPN
crypto ipsec transform-set TRANSFORM-A esp-aes 256 esp-sha-hmac
mode tunnel
access-list VPN-ACL extended permit ip 192.168.1.0 0.0.0.255 10.0.0.0 0.0.0.255
crypto map CMAP-A 10 match address VPN-ACL
crypto map CMAP-A 10 set peer 203.0.113.1
crypto map CMAP-A 10 set transform-set TRANSFORM-A
crypto map CMAP-A interface outside
crypto isakmp enable
crypto isakmp key SecretKey123 address 203.0.113.1
crypto isakmp policy 10
encryption aes 256
hash sha
authentication pre-share
group 14
lifetime 86400
3. OpenVPN
특징
오픈 소스
SSL/TLS 기반
유연한 설정
크로스 플랫폼
구성 요소
컴포넌트 설명 CA (Certificate Authority) 인증서 발급 Server Certificate 서버 인증서 Client Certificate 클라이언트 인증서 TLS Auth Key DoS 공격 방지
서버 구성
# /etc/openvpn/server.conf
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
tls-auth ta.key 0
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 120
cipher AES-256-CBC
auth SHA256
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
클라이언트 구성
# client.ovpn
client
dev tun
proto udp
remote vpn.example.com 1194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
auth SHA256
verb 3
4. WireGuard
특징
가벼움 (~4,000 코드 라인)
빠름 (커널 레벨)
현대적 암호화
단순한 설정
WireGuard vs OpenVPN
항목 WireGuard OpenVPN 코드 라인 ~4,000 ~100,000+ 속도 더 빠름 느림 설치 쉬움 복잡 유연성 낮음 높음
서버 구성
# /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.0.0.2/32
클라이언트 구성
# client.conf
[Interface]
Address = 10.0.0.2/24
PrivateKey = CLIENT_PRIVATE_KEY
DNS = 8.8.8.8
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = vpn.example.com:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
WireGuard 시작
# 서버
sudo wg-quick up wg0
# 클라이언트
sudo wg-quick up client.conf
5. Site-to-Site VPN 설계
토폴로지
┌─────────────────┐ ┌─────────────────┐
│ Site A │ │ Site B │
│ 192.168.1.0/24│ │ 192.168.2.0/24 │
│ │ │ │
│ [Router A] │ │ [Router B] │
│ 203.0.113.1 │───────┬────────│ 198.51.100.1 │
└────────┬────────┘ │ Internet│ └───────┬────────┘
│ │ │
└─────────────────┴──────────────┘
Public IP
IPsec Site-to-Site 구성 (StrongSwan)
# /etc/ipsec.conf
config setup
charondebug = "ike 1, knl 1, cfg 0"
uniqueids = no
conn site-to-site
keyexchange = ikev2
ike = aes256-sha256-modp2048!
esp = aes256-sha256!
left = 203.0.113.1
leftsubnet = 192.168.1.0/24
leftid = @sitea.example.com
leftauth = pubkey
leftcert = sitea.crt
leftfirewall = yes
right = 198.51.100.1
rightsubnet = 192.168.2.0/24
rightid = @siteb.example.com
rightauth = pubkey
rightcert = siteb.crt
auto = add
# /etc/ipsec.secrets
: RSA sitea.key
6. Remote Access VPN
RADIUS 인증 통합
VPN Client → RADIUS Server → AD/LDAP
(인증)
RADIUS 구성 (FreeRADIUS)
# /etc/freeradius/3.0/clients.conf
client vpn_server {
ipaddr = 10.8.0.1
secret = RadiusSecret123
shortname = vpn
}
# /etc/freeradius/3.0/users
bob Cleartext-Password := "BobPassword123"
Framed-IP-Address = 10.8.0.10
OpenVPN RADIUS 통합
# /etc/openvpn/server.conf
plugin /usr/lib/openvpn/radiusplugin.so /etc/openvpn/radiusplugin.cnf
# /etc/openvpn/radiusplugin.cnf
NAS-Identifier =OpenVPN
Service-Type =5
Framed-Protocol =1
NAS-IP-Address =10.0.0.1
NAS-Port =1194
Secret =RadiusSecret123
Server =10.0.0.2
timeout =10
7. VPN 보안 최적화
암호화 설정
암호화 키 길이 상태 AES-256-CBC 256비트 권장 AES-256-GCM 256비트 권장 (더 빠름) ChaCha20-Poly1305 256비트 권장 (모바일)
인증 방식
방식 설명 보안성 PSK (Pre-Shared Key) 공유 키 중간 Certificate X.509 인증서 높음 MFA 2단계 인증 매우 높음
보안 설정 예시
# OpenVPN 보안 강화
cipher AES-256-GCM
auth SHA256
tls-cipher TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384
tls-version-min 1.3
remote-cert-tls server
tls-auth ta.key 0
IKEv2 설정 (StrongSwan)
# /etc/ipsec.conf
config setup
charondebug = "ike 1, knl 1"
conn ikev2
keyexchange = ikev2
ike = aes256gcm16-prfsha384-modp2048!
esp = aes256gcm16-prfsha384!
left = %any
leftsubnet = 0.0.0.0/0
leftauth = eap-radius
leftid = %any
leftfirewall = yes
right = 10.0.0.1
rightauth = pubkey
rightid = @vpn.example.com
rightcert = vpn.crt
auto = add
eap_identity = %identity
8. VPN 고가용성 (HA)
Active-Active 구성
[Load Balancer]
/ \
VPN-1 VPN-2
/ \ / \
Subnet1 Subnet2 Subnet3 Subnet4
VRRP (Virtual Router Redundancy Protocol)
# VPN 서버 1 (Master)
sudo apt-get install keepalived
# /etc/keepalived/keepalived.conf
vrrp_instance VPN {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass Keepalived123
}
virtual_ipaddress {
10.0.0.10
}
}
Active-Active 구성 (DNS Round Robin)
vpn1.example.com → 10.0.0.1
vpn2.example.com → 10.0.0.2
DNS 라운드 로빈:
vpn.example.com → {10.0.0.1, 10.0.0.2}
9. VPN 모니터링
연결 상태 확인
# WireGuard
sudo wg show
# OpenVPN
sudo systemctl status openvpn@server
# IPsec
sudo ipsec status
로그 모니터링
# OpenVPN 로그
tail -f /var/log/openvpn/openvpn.log
# StrongSwan 로그
tail -f /var/log/syslog | grep ipsec
# WireGuard 로그
journalctl -u wg-quick@wg0 -f
🎯 실습 과제
1. OpenVPN Server 구성
# 1. CA 생성
./easyrsa init-pki
./easyrsa build-ca nopass
# 2. 서버 인증서 생성
./easyrsa build-server-full server nopass
# 3. 클라이언트 인증서 생성
./easyrsa build-client-full client1 nopass
# 4. Diffie-Hellman 파라미터 생성
./easyrsa gen-dh
# 5. TLS Auth 키 생성
openvpn --genkey secret ta.key
# 6. 서버 시작
sudo systemctl start openvpn@server
2. WireGuard Site-to-Site VPN
# 서버 A
wg genkey > privatekey_a
wg pubkey < privatekey_a > publickey_a
# 서버 B
wg genkey > privatekey_b
wg pubkey < privatekey_b > publickey_b
# 키 교환 후 구성
wg-quick up wg0
3. VPN 성능 테스트
# iperf3로 대역폭 테스트
iperf3 -c 10.8.0.1
# 지연 측정
ping -c 100 10.8.0.1
✅ 학습 체크리스트
🔗 관련 노트
📚 참고 자료
다음 학습 : WiFi 보안