14strongSwan 클라이언트strongSwan 클라이언트
strongSwan 은 널리 쓰이는 오픈소스 IPsec 클라이언트 입니다. Check Point는 IKEv2를 쓰는 Remote Access 클라이언트가 Check Point 전용 클라이언트 대신 strongSwan 클라이언트로도 게이트웨이에 접속 할 수 있도록 지원합니다. 즉 IKEv2 기반 Remote Access 환경에서, Linux 등에서 표준 오픈소스 IPsec 클라이언트로 Check Point Security Gateway에 붙 으려는 경우에 유용합니다. 이 장은 strongSwan 클라이언트를 설치하고 구성하는 전체 과정을 — 인증서 인증, 사용자 이름·암호 인증, 기능별 세부 설정, 특수 구성, 유용한 명령, 그리고 알려진 제한까지 — 빠짐없이 다룹니다.
설치
strongSwan 클라이언트 설치는 strongSwan 공식 문서의 안내를 따릅 니다. Check Point는 별도의 설치 프로그램을 제공하지 않으며, 표준 strongSwan을 그대로 씁니다.
구성 개요
strongSwan 클라이언트 구성은 여러 절(section)로 나뉩니다. 전체 그림을 먼저 잡아 두면 이후 세부 설정을 이해하기 쉽습니다.
| 절 | 다루는 내용 |
|---|---|
| Certificate(인증서) | ipsec.conf, ipsec.secrets, strongswan.conf 파일과 cacerts·certs·private 폴더 |
| Username and Password(사용자 이름·암호) | ipsec.conf, ipsec.secrets, strongswan.conf 파일 |
| Features Configuration(기능 구성) | pfs·reauth·rekey 기능, IKE·ESP 방식의 엄격(strict) 사용, Dead Peer Detection(DPD) |
| Special Configuration(특수 구성) | 암호화된 개인 키로 연결하는 방법, 암호화 도메인(encryption domain) |
인증서(Certificate) 인증
인증서 인증 방식은 클라이언트가 인증서를 사용해 Check Point Security Gateway와 통신하도록 구성합니다. 관련 파일과 폴더는 다음과 같습니다.
1. ipsec.conf 파일
파일 경로:
/etc/strongswan/ipsec.conf이 파일에서 strongSwan 클라이언트가 인증서 인증을 통해 게이트웨이와 통신하는 방식을 구성합니다. 내용의 기본 골격은 다음과 같습니다.
config setup
charondebug="ike 4, knl 4, cfg 3, chd 4"
conn CONNECTION_NAME
type=tunnel
leftfirewall=yes
authby=pubkey
keyexchange=ikev2
left=<CLIENT_EXTERNAL_IP_ADDRESS>
leftsourceip=%config
right=<GW_EXTERNAL_IP_ADDRESS>
rightid=<GW_EXTERNAL_IP_ADDRESS>
leftcert=<CLIENT_CERTIFICATE_FILE>
rightsubnet=ENCRYPTION_DOMAIN_WE_WANT_TO_CONNECT
ike=<IKE_METHODS_AS_CONFIGURED_ON_THE_GW>
esp=<IPSEC_METHODS_AS_CONFIGURED_ON_THE_GW>
ikelifetime=<TIME_WHICH_AFTER_THE_IKE_SA_IS_NOT_VALID>
lifetime=<TIME_WHICH_AFTER_THE_IPSEC_SA_IS_NOT_VALID>
reauth=yes
rekey=yes
margintime=<TIME_TO_START_REKEY_OR_REAUTH_BEFORE_EXPIRY>
rekeyfuzz=<RANDOM_TIME_PERCENTAGE_FOR_REKEY_AND_REAUTH>
auto=add
dpdaction=restart
dpddelay=<TIME_TO_SEND_R_U_THERE_MESSAGE>
dpdtimeout=<TIMEOUT_INTERVAL_TO_DELETE_THE_CONNECTION>각 파라미터의 의미는 다음과 같습니다.
| 파라미터 | 의미 |
|---|---|
type=tunnel | 연결 종류. 기본값이 tunnel 입니다. |
leftfirewall=yes | 로컬 측 방화벽을 사용합니다. |
authby=pubkey | 공개 키(인증서)로 인증합니다. |
keyexchange=ikev2 | 키 교환에 IKEv2를 씁니다. |
left=<CLIENT_EXTERNAL_IP_ADDRESS> | 클라이언트(로컬)의 외부 IP. 기본값은 %any 로, 협상 중 자동 키잉으로 채워질 주소를 뜻합니다. 로컬 피어가 연결을 시작하면 라우팅 테이블 조회로 올바른 로컬 IP가 결정됩니다. |
leftsourceip=%config | 피어가 가상 IP(Office Mode IP)·DNS·기타 설정 을 요청하게 만듭니다. |
right=<GW_EXTERNAL_IP_ADDRESS> | 게이트웨이(원격)의 외부 IP. |
rightid=<GW_EXTERNAL_IP_ADDRESS> | 게이트웨이의 ID. |
leftcert=<CLIENT_CERTIFICATE_FILE> | 클라이언트 인증서 파일(예: StrongSwanPublicCert.cer). |
rightsubnet=... | 연결하려는 암호화 도메인. 전체 암호화 도메인에 연결하려면 0.0.0.0/0 을 씁니다. |
ike=... | 게이트웨이에 구성된 IKE 방식(예: aes256-sha1-modp1024). 게이트웨이도 이 방식을 지원하도록 구성 해야 합니다. |
esp=... | 게이트웨이에 구성된 IPsec 방식(예: 3des-sha1). 게이트웨이가 지원하도록 편집해야 합니다. |
ikelifetime=... | IKE SA가 만료되는 절대 시간(예: 24h). 시간(h)·분(m)·초(s)로 지정합니다. |
lifetime=... | IPsec SA가 만료되는 절대 시간(예: 1h). |
reauth=yes | 재인증을 사용합니다. |
rekey=yes | 키 재협상을 사용합니다. |
margintime=... | 만료 전 얼마나 미리 rekey/reauth를 시작 할지(예: 1m). lifetime이 1h, margintime이 1m이면 1h가 끝나기 1m 전에 게이트웨이가 rekey를 시작합니다. |
rekeyfuzz=... | margintime을 무작위로 늘리는 비율(예: 50%). 100%를 넘을 수도 있으며, rekeyfuzz=0% 로 무작위화를 끌 수 있습니다. |
auto=add | 연결을 등록하지만 자동으로 올리지는 않습니다. |
dpdaction=restart | Dead Peer Detection 동작. 게이트웨이가 응답하지 않으면 즉시 연결 재협상을 시도 합니다. |
dpddelay=... | R_U_THERE 메시지와 INFORMATIONAL 교환을 피어에 보내는 주기(예: 30s). 다른 트래픽이 없을 때만 보냅니다. |
dpdtimeout=... | 비활성 상태에서 피어로의 모든 연결을 삭제하기까지의 타임아웃(예: 60s). |
IPsec SA와 IKE SA의 rekey 시점은 다음 공식으로 계산됩니다.
rekeytime = lifetime - (margintime + random(0, margintime * rekeyfuzz))2. ipsec.secrets 파일
파일 경로:
/etc/strongswan/ipsec.secrets이 파일에서 strongSwan 개인 키(private key) 를 구성합니다. 내용 형식은 다음과 같습니다.
THE_SITE_IP_ADDRESS (OPTIONAL) : RSA CLIENT_CERT_KEY_FILE3. strongswan.conf 파일
파일 경로:
/etc/strongswan/strongswan.conf이 구성 파일은 플러그인을 추가하고, 벤더 ID를 보내며, DNS를 해석 하도록 합니다. 내용은 다음과 같습니다.
charon {
load_modular = yes
send_vendor_id = yes
plugins {
include strongswan.d/charon
resolve {
file = /etc/resolv.conf
}
}
}
include strongswan.d/*.conf4. certs 폴더
디렉터리 경로:
/etc/strongswan/ipsec.d/certs파일 예: StrongSwanPublicCert.cer 또는 StrongSwanPublicCert.pem. 이 폴더에는 모든 클라이언트 공개 인증서 가 들어갑니다.
5. private 폴더
디렉터리 경로:
/etc/strongswan/ipsec.d/private파일 예: StrongSwanPrivateKey.pem. 이 폴더에는 모든 클라이언트 개인 인증서 가 들어갑니다.
사용자 이름·암호(Username and Password) 인증
인증서 대신 사용자 이름과 암호로 인증하는 방식입니다. 인증서 방식과 파일 구조는 같지만 인증 관련 파라미터가 다릅니다.
1. ipsec.conf 파일
파일 경로:
/etc/strongswan/ipsec.conf이 파일에서 strongSwan 클라이언트가 사용자 이름·암호 인증을 통해 게이트웨이와 통신하는 방식을 구성합니다. 기본 골격은 다음과 같습니다.
config setup
charondebug="ike 4, knl 4, cfg 3, chd 4"
conn CONNECTION_NAME
type=tunnel
leftfirewall=yes
rightauth=pubkey
leftauth=eap-gtc
keyexchange=ikev2
eap_identity=<USERNAME>
left=<CLIENT_EXTERNAL_IP_ADDRESS>
leftsourceip=%config
right=<GW_EXTERNAL_IP_ADDRESS>
rightid=<GW_EXTERNAL_IP_ADDRESS>
rightsubnet=<ENCRYPTION_DOMAIN_WE_WANT_TO_CONNECT>
ike=<IKE_METHODS_AS_CONFIGURED_ON_THE_GW>
esp=<IPSEC_METHODS_AS_CONFIGURED_ON_THE_GW>
ikelifetime=<TIME_WHICH_AFTER_THE_IKE_SA_IS_NOT_VALID>
lifetime=<TIME_WHICH_AFTER_THE_IPSEC_SA_IS_NOT_VALID>
reauth=yes
rekey=yes
margintime=<TIME_TO_START_REKEY_OR_REAUTH_BEFORE>
rekeyfuzz=<RANDOM_TIME_PERCENTAGE_FOR_REKEY_AND_REAUTH>
auto=add
dpdaction=restart
dpddelay=<TIME_TO_SEND_R_U_THERE_MESSAGE>
dpdtimeout=<TIMEOUT_INTERVAL_TO_DELETE_THE_CONNECTION>인증서 방식과 비교해 달라진 핵심 파라미터 는 다음과 같습니다.
| 파라미터 | 의미 |
|---|---|
rightauth=pubkey | 게이트웨이(원격) 측은 공개 키(인증서)로 인증 합니다. |
leftauth=eap-gtc | 클라이언트(로컬) 측은 EAP-GTC 방식으로 인증 합니다. |
eap_identity=<USERNAME> | EAP 인증에 쓸 사용자 이름. |
left=<CLIENT_EXTERNAL_IP_ADDRESS> | 클라이언트의 외부 IP. 반드시 지정할 필요는 없으며 기본값은 %any 입니다. |
나머지 파라미터(rightsubnet, ike, esp, ikelifetime, lifetime, reauth, rekey, margintime, rekeyfuzz, auto, dpdaction, dpddelay, dpdtimeout)의 의미와 rekey 공식은 인증서 방식과 동일합니다. ike·esp 방식은 게이트웨이도 지원하도록 구성 해야 한다는 점도 같습니다.
2. ipsec.secrets 파일
파일 경로:
/etc/strongswan/ipsec.secrets이 파일에서 strongSwan 암호(password) 를 구성합니다. 내용 형식은 다음과 같습니다.
USERNAME : EAP "PASSWORD"3. strongswan.conf 파일
파일 경로:
/etc/strongswan/strongswan.conf내용은 인증서 방식과 동일합니다(플러그인 추가, 벤더 ID 전송, DNS 해석).
charon {
load_modular = yes
send_vendor_id = yes
plugins {
include strongswan.d/charon
resolve {
file = /etc/resolv.conf
}
}
}
include strongswan.d/*.conf4. cacerts 폴더
디렉터리 경로:
/etc/strongswan/ipsec.d/cacerts파일 예: internal_ca.crt. 모든 게이트웨이·LDAP·RADIUS 서버의 내부 CA 파일 이 클라이언트가 매 연결마다 서버를 인증하는 데 쓰는 Trusted CA 입니다. 이 설정은 SmartConsole의 Trusted CA 에서 찾을 수 있습니다.
기능 구성(Features Configuration)
개별 기능을 켜려면 ipsec.conf 에 다음 항목을 추가합니다.
- pfs(Perfect Forward Secrecy) —
esp=절에 알맞은 DH 그룹을 추가합니다. 예:esp=3des-sha1-modp1024 - reauth —
ikelifetime=<...> , reauth=yes - rekey —
lifetime=<...> , rekey=yes - IKE·ESP 방식의 엄격(strict) 사용 —
ike=또는esp=, 혹은 둘 다를 끝에 느낌표(!) 를 붙여 추가합니다. 예:ike=aes256-sha1-modp1024! , esp=3des-sha1! - Dead Peer Detection(DPD) — IPsec 피어의 생존 여부를 확인하고 연결을 살려 두려면
ipsec.conf에dpdaction=restart를 추가합니다.
특수 구성(Special Configuration)
암호화된 개인 키로 연결하기
암호화된 개인 키를 쓰려면 ipsec.secrets 파일에 개인 키의 passphrase를 추가 해야 합니다.
파일 경로:
/etc/strongswan/ipsec.secrets이 파일에서 strongSwan 암호를 구성합니다. 내용 예는 다음과 같습니다.
암호화 도메인(Encryption Domain)
암호화 도메인에 네트워크를 추가하거나 제거해 변경할 경우, 시나리오에 따라 클라이언트의 ipsec.conf 파일도 수정 해야 할 수 있습니다. 구성 방법은 세 가지입니다.
예로 암호화 도메인에 세 개의 네트워크가 있다고 가정합니다.

- 전체 암호화 도메인에 연결(권장) —
rightsubnet을 범용 IP인0.0.0.0/0으로 구성합니다. 이렇게 하면 전체 암호화 도메인으로 가는 경로가 생기며, 네트워크를 추가·제거해도 클라이언트 측 수정이 필요 없 습니다.
- 특정 네트워크 하나만 지정 — 예를 들어
eth0의10.10.1.0/24같은 특정 네트워크 하나를 골라,rightsubnet을10.10.1.0/24로 구성해 그 네트워크로 가는 터널 하나를 만듭니다. 이후 암호화 도메인이10.10.10.0/24처럼 바뀌면 클라이언트 측에서도 바꿔 줘야 합니다.
- 여러 네트워크 지정 — 전체 도메인이나 한 네트워크가 아니라 두 개 이상의 네트워크에 연결하고 싶을 때 씁니다.
also매크로 로ipsec.conf에 정의된 연결 정의를 포함시키고 변경을 더합니다. 예:
conn conn_to_eth0
//full configuration with "rightsubnet=10.10.10.0/24"
conn conn_to_eth1
rightsubnet=192.168.1.0/24
also=conn_to_eth0참고할 점은, 이 연결을 맺으려면 여전히 up 명령을 실행 해야 하고, 해당 네트워크와 관련해 암호화 도메인이 바뀌면 클라이언트 측을 다시 구성해야 하며, 접근할 수 없는 네트워크가 있으면 연결이 실패 한다는 것입니다.
Debian·Ubuntu 특수 구성
Debian과 Ubuntu 머신에서 EAP 인증을 쓰려면, strongSwan을 재시작하기 전에 필요한 플러그인을 먼저 설치 해야 합니다.
sudo apt-get install libstrongswan-extra-plugins
sudo apt-get install libcharon-extra-plugins유용한 strongSwan 명령
기본 명령 이름은 배포판에 따라 다릅니다.
- CentOS·Fedora — 기본 명령은
strongswan - Ubuntu·Debian — 기본 명령은
ipsec
| 명령 | 하는 일 |
|---|---|
strongswan restart / ipsec restart | 모든 IPsec 연결을 끊고, IKE 데몬 charon 을 멈춘 뒤, ipsec.conf 를 파싱하고 charon 을 다시 시작합니다. |
strongswan rereadsecrets / ipsec rereadsecrets | ipsec.secrets 에 정의된 모든 비밀(secret)을 다시 읽어 갱신합니다. |
strongswan update / ipsec update | ipsec.conf 의 변경을 감지해 활성 IKE 데몬 charon 의 구성을 갱신합니다. 이미 맺어진 연결에는 영향이 없 습니다. |
P12 파일을 개인 키와 공개 인증서로 변환하기
P12 인증서 파일을 개인 키와 공개 인증서로 나누는 방법은 두 가지입니다.
- XCA 도구 — XCA 도구를 사용합니다. hohnstaedt.de 사이트의 XCA 디렉터리에서 내려받습니다.
- OpenSSL 명령:
openssl pkcs12 -in <P12_CERTIFICATE>.p12 -clcerts -nokeys -out <EXTRACTED_CERTIFICATE>.crt
openssl pkcs12 -in <P12_CERTIFICATE>.p12 -nocerts -out <EXTRACTED_PRIVATE>.key알려진 제한(Known Limitations)
strongSwan 클라이언트를 도입하기 전에, 다음 제한을 반드시 확인해야 합니다.
| 항목 | 제한 내용 |
|---|---|
| Simultaneous Login | 같은 사용자의 동시 연결 2개는 지원되지 않습니다. 각 연결은 개별 사용자여야 하며, 그렇지 않으면 첫 번째 연결이 끊깁니다. |
| Office Mode with Multiple External Interfaces | 외부 인터페이스가 여러 개인 게이트웨이에 대한 향상 기능은 클라이언트 측 NAT-T 사용 이 필요합니다. NAT-T 환경이거나, ipsec.conf 에 forceencaps = yes 를 구성해야 합니다. |
| Back Connection | 암호화 도메인에서 게이트웨이가 클라이언트에 할당한 IP 주소로의 연결은 지원되지 않습니다. |
| Realms | Realm은 지원되지 않습니다. 클라이언트는 "Legacy authentication"을 사용합니다. |
| Machine Authentication | 머신 인증은 지원되지 않습니다. |
| Two-Factor Authentication | 이중 인증(2FA)은 지원되지 않습니다. |
| Encryption Domain | 일부 시나리오에서는 암호화 도메인 변경을 클라이언트 측 구성 파일 변경으로 반영해야 합니다. |
| IPv6 | IPv6는 지원되지 않습니다. |
| Certificate Usage | 인증서는 고객이 직접 배포합니다. |
| Certificate Authentication | ICA를 통한 인증서 인증은 CRL 검사 없이만 지원 됩니다. |
또한 다음 고급 Remote Access 기능은 strongSwan 클라이언트에서 지원되지 않 습니다 — Certificate enrollment, Link Selection, Location Awareness, Multiple Entry Point(MEP), Secondary Connect, Secure Configuration Verification(SCV), Visitor Mode.
정리하면, strongSwan 지원은 Check Point 전용 클라이언트가 아닌 표준 IKEv2 오픈소스 클라이언트로도 원격 접속할 수 있게 열어 주어 클라이언트 선택의 폭을 넓힙니다. 다만 전용 클라이언트가 주는 Desktop Security·SCV 같은 단말 보안 기능은 위 제한 목록에서 보듯 별도로 고려해야 합니다.