본문 바로가기
네트워크

SSL VPN(Anyconnect) 실습

by CBROJIN 2025. 6. 2.

🧩 SSL VPN 구성

 

 

  • 목표: 개인 PC(OpenConnect GUI)를 통해 본사 ASA-1(50.50.50.1)에 SSL VPN 접속
  • 환경: PNetLab 내 ASA, Web 서버, 내부망(L3 스위치), 외부망(Home Router)을 연계하여 실제 PC AnyConnect 기반 SSL VPN 환경 구성
  • 핵심: ASA에서 자체 인증서 기반의 WebVPN 포털을 구성하고, 개인 PC에서 암호화된 접속 -> 내부 자원 접근

🧩 구성 주요 포인트 요약

항목 내용
VPN 종류 SSL VPN (AnyConnect + WebVPN)
암호화 TLS 1.0, AES-128-CBC, SHA1 (암호스위트: TLS1.0-RSA-AES128-CBC-SHA1)
IP 할당 vpn_pool (192.168.200.10~20)
사용자 인증 username cbrojin password cisco (LOCAL 인증)
접속 포인트 outside_KT (50.50.50.1)
인증서 자체 CA 기반 asa.crt (서버: ASA) + Root CA
웹포털 그룹 group-alias: ssluser (group-policy: ssl_group_policy)
NAT 예외 VPN 사용자의 내부망/DMZ 접근 허용을 위한 NAT 예외 설정

🧩 ASA 장비 설정 요약

Step 1. ACL  주요 설정

access-list outside_in_ssl extended permit tcp any host 50.50.50.1 eq https
access-list outside_in_ssl extended permit tcp any host 60.60.60.1 eq https
access-list outside_in_ssl extended permit udp any host 50.50.50.1 eq 443
access-list outside_in_ssl extended permit udp any host 60.60.60.1 eq 443
access-list outside_in_ssl extended permit ip 192.168.200.0 255.255.255.0 any

access-group outside_in_ssl in interface outside_KT
access-group outside_in_ssl in interface outside_SKT

username cbrojin password ******** encrypted privilege 15
aaa authentication ssh console LOCAL
aaa authentication enable console LOCAL

ssl encryption 3des-sha1 aes128-sha1 aes256-sha1 dhe-aes128-sha1 dhe-aes256-sha1 null-sha1 rc4-md5 rc4-sha1
#ASA9.15에서 지원하는 모든 ssl encryption

# SSL VPN 접속을 허용하기 위한 Access-List 구성 및 적용, 사용자 계정 등록, 그룹 맵핑 등 실질적인 VPN 허용 정책이 포함됨.

Step 2. VPN Pool, NAT 설정

ip local pool vpn_pool 192.168.200.10-192.168.200.20 mask 255.255.255.0

object network vpn_pool
 subnet 192.168.200.0 255.255.255.0
object network VLAN10-40
 subnet 192.168.10.0 255.255.254.0
object network ASA-KT
 subnet 50.50.50.0 255.255.255.248

nat (inside,outside_KT) source dynamic VLAN10-40 interface
nat (inside,outside_SKT) source dynamic VLAN10-40 interface
nat (DMZ,outside_KT) source static dmz_network dmz_network destination static vpn_pool vpn_pool no-proxy-arp route-lookup
nat (inside,outside_KT) source static VLAN10-40 VLAN10-40 destination static vpn_pool vpn_pool no-proxy-arp route-lookup
nat (inside,outside_KT) source static ASA-KT ASA-KT destination static vpn_pool vpn_pool no-proxy-arp route-lookup

vpn_pool은 SSL VPN 사용자에게 할당될 내부 IP 풀이며, NAT 예외는 VPN 사용자가 내부망에 접근할 수 있도록 설정되어 있음.

Step 3. SSL VPN 기본 구성

webvpn
 enable outside_KT
 anyconnect-essentials
 anyconnect image disk0:/anyconnect-win-4.5.04029-webdeploy-k9.pkg 1
 anyconnect enable
 tunnel-group-list enable

# SSL VPN 기능 활성화, AnyConnect 클라이언트 이미지 등록, Web 포털과 클라이언트 모드를 모두 허용하는 설정. tunnel-group-list enable로 로그인 페이지에서 그룹 선택 가능.

 

Step 4. 그룹 정책 및 터널 그룹

group-policy ssl_group_policy internal
group-policy ssl_group_policy attributes
 vpn-tunnel-protocol ssl-client ssl-clientless
 dns-server value 192.168.50.3
 webvpn
  anyconnect ssl dtls enable
  anyconnect modules value anyconnect

tunnel-group ssl_users type remote-access
tunnel-group ssl_users general-attributes
 address-pool vpn_pool
 default-group-policy ssl_group_policy
tunnel-group ssl_users webvpn-attributes
 group-alias ssluser enable

# VPN 접속자에게 적용될 그룹 정책 정의, vpn-tunnel-protocol로 SSL 전용 설정, group-alias는 접속 시 표시될 그룹 이름.

Step 5. 인증서 및 Trustpoint 구성

crypto key generate rsa label webvpn_key modulus 2048

crypto ca trustpoint webvpn_trustpoint
 enrollment terminal
 subject-name CN=50.50.50.1, hostname=ASA-1
 keypair webvpn_key
 crl configure

ssl trust-point webvpn_trustpoint outside_KT

#SSL VPN에 사용할 인증서를 위한 Trustpoint 설정. subject-name에 CN 값을 50.50.50.1로 지정하고, 생성된 keypair와 연결. 이후 ssl trust-point 명령으로 인터페이스에 인증서 적용. → webvpn_trustpoint에 자체 CA로 서명된 server.crt 적용 완료

Step 6. 인증서 발급 및 적용 절차 (자체 CA 기반)

# [Web 서버에서 수행]
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -days 3650 -out ca.crt -subj "/C=KR/ST=Seoul/O=Network/CN=RootCA"

# [ASA 장비에서 key 생성 + CSR 출력]
crypto key generate rsa label webvpn_key modulus 2048
crypto ca enroll webvpn_trustpoint
# → 터미널에 표시된 CSR 복사

# [Web 서버에서 CSR을 서명 → ASA 인증서 생성]
openssl x509 -req -in asa.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out asa.crt -days 1000 -sha256

# [ASA에 인증서와 CA 인증서 import]
crypto ca import webvpn_trustpoint certificate
# → asa.crt 붙여넣기
crypto ca authenticate webvpn_trustpoint
# → ca.crt 붙여넣기

 #자체 CA를 사용하여 ASA의 CSR을 서명하고, ASA에 서버 인증서와 CA 인증서를 함께 import함. 이 과정을 통해 TLS 핸드쉐이크에서 인증서 신뢰 체인 구성을 완성. → ASA에 자체 CA로 서명된 인증서와 root CA 인증서를 모두 import 완료

 


🧩 HOME router 설정

Step 1. NAT 예외 설정

interface Ethernet0/0
 ip address 192.168.100.1 255.255.255.0
 ip nat inside

interface Ethernet0/3
 ip address 70.70.70.1 255.255.255.252
 ip nat outside

ip access-list standard NAT_INSIDE
 deny   192.168.200.0 0.0.0.255
 permit 192.168.100.0 0.0.0.255

ip nat inside source list NAT_INSIDE interface Ethernet0/3 overload

 

# ASA로부터 할당 받을 vpn_pool 대역(192.168.200.0/24)을 NAT 예외 시켜줍니다.


🧩접속 성공

  • ASA-1로부터 할당받은 192.168.200.10
  • 개인 PC -> Ditsribution Ping
  • SSL VPN (AnyConnect) 접속 세션 정보
  • 개인 PC -> Distribution1(본사) L3 스위치에 접속 
  • 본사의 WEB 서버에 접속


🧩 트러블 슈팅

1. DTLS 핸드쉐이크 중 오류 발생 --> ASA 프로세스 충돌

  • AnyConnect는 접속 시 CSTP(TCP 기반)로 먼저 연결한 뒤, 성능 향상을 위해 DTLS(UDP 기반)로 병렬 터널을 시도합니다.
  • ASA 9.1(5) 이하 또는 PNetLab용 ASA 8.4.x 이미지에서는 DTLS 관련 버그가 많고, DTLS Hello/Cookie exchange에서 잘못된 메모리 참조로 인해 ASA 자체가 죽는 경우가 많다고 합니다. 실제로 Anyconnect로 접속후에 pnetlab 내 ASA가 바로 다운 되는 경험을 했습니다.
  • DTLS 핸드셰이크 중에 아래 로그가 뜹니다.
Invalid handshake packet headers. Discarding. DTLS handshake failed: Resource temporarily unavailable

# group-policy ssl_group_policy attributes
     webvpn
  no anyconnect ssl dtls enable 

  • dtls를 꺼도 Anyconnect에서 계속 시도를 하는지 튕김현상이 지속됬습니다.
  • Openconnect_GUI로 바꾸고 Disable UDP 체크후 접속 성공했습니다.

 

2. Home PC에서 https://50.50.50.1 접속 불가

  • PNETLab 내 ASA 이미지가 9.1(5) 이지만 tls1 밖에 지원을 하지 않습니다.

  • 브라우저에서 TLS 1.0/1.1 지원을 비활성화 (2020년 이후부터 보안상 이유로) 한다고 합니다.
  • 강제적으로 TLS 1.2 이상만 사용 --> ASA가 TLS 1.2 지원 안 하면 handshake 실패
  • 화면에는 "보안 연결을 설정할 수 없음", "ERR_SSL_VERSION_OR_CIPHER_MISMATCH" 등 오류 출력됨
  •  ASA에 webdeploy-k9.pkg를 올렸지만 https://50.50.50.1 접속이 안되서 openconnect_gui로 실습 했습니다.

 

🧩 정리

SSL VPN 구성 전반에 대한 이해가 생겼으며, ASA 설정, 인증서 발급 절차, 사용자 정책 설계, NAT 예외 구성, VPN 장애까지 종합적으로 경험할 수 있었습니다.

아래 링크는 SSL VPN 접속 실패를 겪으며 통신과정에 대해 알아보고 정리해 놨습니다.

'네트워크' 카테고리의 다른 글

SSL VPN(anyconnect) 이론 #2  (0) 2025.06.08
IPSec VPN 실습  (2) 2025.06.06
BGP #3(weight,local preference,MED)  (0) 2025.04.12
BGP #2(Next Hop,Split Horizon)  (0) 2025.04.10
BGP #1(iBGP,eBGP)  (0) 2025.04.07