
strongswan v6.1.0
strongSwan - IPsec-आधारित VPN
strongSwan कॉन्फ़िगरेशन
अवलोकन
strongSwan एक ओपनसोर्स IPsec-आधारित VPN समाधान है।
यह दस्तावेज़ strongSwan swanctl कमांड का एक संक्षिप्त परिचय मात्र है, जो आधुनिक vici वर्सेटाइल IKE कॉन्फ़िगरेशन इंटरफ़ेस का उपयोग करता है। विरासती stroke कॉन्फ़िगरेशन इंटरफ़ेस का उपयोग करने वाला अप्रचलित ipsec कमांड यहाँ वर्णित है। अधिक विस्तृत जानकारी के लिए man पेज, हमारी नई दस्तावेज़ीकरण साइट और विरासती विकी देखें।
त्वरित आरंभ
उपयोगकर्ताओं, होस्टों और गेटवे के लिए प्रमाणपत्र एक काल्पनिक strongSwan CA द्वारा जारी किए जाते हैं।
हमारे उदाहरण परिदृश्यों में, सहकर्मियों को प्रमाणित करने में सक्षम होने के लिए CA प्रमाणपत्र strongswanCert.pem
सभी VPN एंडपॉइंट्स पर मौजूद होना चाहिए। आपके विशेष VPN अनुप्रयोग के लिए आप किसी तृतीय-पक्ष CA से
प्रमाणपत्रों का उपयोग कर सकते हैं या strongSwan pki टूल के साथ आवश्यक निजी कुंजियाँ और प्रमाणपत्र
स्वयं उत्पन्न कर सकते हैं, जिसका उपयोग नीचे दिए गए अनुभागों में से एक में समझाया जाएगा।
साइट-टू-साइट परिदृश्य
इस परिदृश्य में दो सुरक्षा गेटवे moon और sun दोनों गेटवे के बीच स्थापित एक VPN सुरंग के माध्यम से दो सबनेट moon-net और sun-net को एक दूसरे से जोड़ेंगे:
10.1.0.0/16 -- | 192.168.0.1 | === | 192.168.0.2 | -- 10.2.0.0/16
moon-net moon sun sun-net
गेटवे moon पर कॉन्फ़िगरेशन:
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/moonCert.pem
/etc/swanctl/private/moonKey.pem
/etc/swanctl/swanctl.conf:
connections {
net-net {
remote_addrs = 192.168.0.2
local {
auth = pubkey
certs = moonCert.pem
}
remote {
auth = pubkey
id = "C=CH, O=strongSwan, CN=sun.strongswan.org"
}
children {
net-net {
local_ts = 10.1.0.0/16
remote_ts = 10.2.0.0/16
start_action = trap
}
}
}
}
गेटवे sun पर कॉन्फ़िगरेशन:
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/sunCert.pem
/etc/swanctl/private/sunKey.pem
/etc/swanctl/swanctl.conf:
connections {
net-net {
remote_addrs = 192.168.0.1
local {
auth = pubkey
certs = sunCert.pem
}
remote {
auth = pubkey
id = "C=CH, O=strongSwan, CN=moon.strongswan.org"
}
children {
net-net {
local_ts = 10.2.0.0/16
remote_ts = 10.1.0.0/16
start_action = trap
}
}
}
}
इस परिदृश्य में उपयोग की जाने वाली स्थानीय और दूरस्थ पहचान, अंतिम इकाई प्रमाणपत्रों में निहित subjectDistinguishedNames हैं। प्रमाणपत्र और निजी कुंजियाँ निम्न कमांड के साथ charon डेमॉन में लोड की जाती हैं
swanctl --load-creds
जबकि
swanctl --load-conns
swanctl.conf में परिभाषित कनेक्शनों को लोड करता है। start_action = trap के साथ, IPsec कनेक्शन
सुरंग से गुजरने वाले पहले सादे-पाठ पेलोड IP पैकेट के साथ स्वचालित रूप से स्थापित हो जाता है।
होस्ट-टू-होस्ट परिदृश्य
यह दो एकल होस्टों के बीच एक सेटअप है जिनके पीछे कोई सबनेट नहीं होता है। यद्यपि होस्ट-टू-होस्ट कनेक्शनों के लिए IPsec ट्रांसपोर्ट मोड पर्याप्त होगा, हम डिफ़ॉल्ट IPsec टनल मोड का उपयोग करेंगे।
| 192.168.0.1 | === | 192.168.0.2 |
moon sun
होस्ट moon पर कॉन्फ़िगरेशन:
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/moonCert.pem
/etc/swanctl/private/moonKey.pem
/etc/swanctl/swanctl.conf:
connections {
host-host {
remote_addrs = 192.168.0.2
local {
auth=pubkey
certs = moonCert.pem
}
remote {
auth = pubkey
id = "C=CH, O=strongSwan, CN=sun.strongswan.org"
}
children {
net-net {
start_action = trap
}
}
}
}
होस्ट sun पर कॉन्फ़िगरेशन:
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/sunCert.pem
/etc/swanctl/private/sunKey.pem
/etc/swanctl/swanctl.conf:
connections {
host-host {
remote_addrs = 192.168.0.1
local {
auth = pubkey
certs = sunCert.pem
}
remote {
auth = pubkey
id = "C=CH, O=strongSwan, CN=moon.strongswan.org"
}
children {
host-host {
start_action = trap
}
}
}
}
रोडवॉरियर परिदृश्य
यह एक बहुत ही सामान्य मामला है जहाँ एक strongSwan गेटवे सामान्यतः गतिशील IP पते वाले कितने भी दूरस्थ VPN क्लाइंटों को सेवा प्रदान करता है।
10.1.0.0/16 -- | 192.168.0.1 | === | x.x.x.x |
moon-net moon carol
गेटवे moon पर कॉन्फ़िगरेशन:
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/moonCert.pem
/etc/swanctl/private/moonKey.pem
/etc/swanctl/swanctl.conf:
connections {
rw {
local {
auth = pubkey
certs = moonCert.pem
id = moon.strongswan.org
}
remote {
auth = pubkey
}
children {
net-net {
local_ts = 10.1.0.0/16
}
}
}
}
रोडवॉरियर carol पर कॉन्फ़िगरेशन:
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/carolCert.pem
/etc/swanctl/private/carolKey.pem
/etc/swanctl/swanctl.conf:
connections {
home {
remote_addrs = moon.strongswan.org
local {
auth = pubkey
certs = carolCert.pem
id = [email protected]
}
remote {
auth = pubkey
id = moon.strongswan.org
}
children {
home {
local_ts = 10.1.0.0/16
start_action = start
}
}
}
}
remote_addrs के लिए होस्टनाम moon.strongswan.org चुना गया, जिसे DNS द्वारा रनटाइम पर संबंधित
IP गंतव्य पते में हल किया जाएगा। इस परिदृश्य में, रोडवॉरियर carol की पहचान ईमेल पता
[email protected] है, जिसे रोडवॉरियर प्रमाणपत्र carolCert.pem में subjectAlternativeName
के रूप में शामिल किया जाना चाहिए।
वर्चुअल IP के साथ रोडवॉरियर परिदृश्य
रोडवॉरियरों के पास सामान्यतः उनके वर्तमान ISP द्वारा निर्दिष्ट गतिशील IP पते होते हैं। moon-net से दूरस्थ एक्सेस क्लाइंट carol तक रूटिंग को सरल बनाने के लिए, यह वांछनीय होगा यदि रोडवॉरियर के पास पूर्व-परिभाषित पूल से चुना गया आंतरिक IP पता हो।
10.1.0.0/16 -- | 192.168.0.1 | === | x.x.x.x | -- 10.3.0.1
moon-net moon carol virtual IP
हमारे उदाहरण में, वर्चुअल IP पता एड्रेस पूल 10.3.0.0/16 से चुना गया है, जिसे निम्न अनुभाग जोड़कर
कॉन्फ़िगर किया जा सकता है
pools {
rw_pool {
addrs = 10.3.0.0/16
}
}
गेटवे के swanctl.conf में, जहाँ से उन्हें निम्न कमांड का उपयोग करके charon डेमॉन में लोड किया जाता है
swanctl --load-pools
इस पूल से IP पता अनुरोध करने के लिए, एक रोडवॉरियर IKEv1 मोड कॉन्फ़िग या IKEv2 कॉन्फ़िगरेशन पेलोड का उपयोग कर सकता है। दोनों के लिए कॉन्फ़िगरेशन समान है
vips = 0.0.0.0
गेटवे moon पर कॉन्फ़िगरेशन:
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/moonCert.pem
/etc/swanctl/private/moonKey.pem
/etc/swanctl/swanctl.conf:
connections {
rw {
pools = rw_pool
local {
auth = pubkey
certs = moonCert.pem
id = moon.strongswan.org
}
remote {
auth = pubkey
}
children {
net-net {
local_ts = 10.1.0.0/16
}
}
}
}
pools {
rw_pool {
addrs = 10.30.0.0/16
}
}
रोडवॉरियर carol पर कॉन्फ़िगरेशन:
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/carolCert.pem
/etc/swanctl/private/carolKey.pem
/etc/swanctl/swanctl.conf:
connections {
home {
remote_addrs = moon.strongswan.org
vips = 0.0.0.0
local {
auth = pubkey
certs = carolCert.pem
id = [email protected]
}
remote {
auth = pubkey
id = moon.strongswan.org
}
children {
home {
local_ts = 10.1.0.0/16
start_action = start
}
}
}
}
EAP प्रमाणीकरण के साथ रोडवॉरियर परिदृश्य
यह एक बहुत ही सामान्य मामला है जहाँ एक strongSwan गेटवे कितने भी दूरस्थ VPN क्लाइंटों को सेवा प्रदान करता है जो पासवर्ड-आधारित एक्सटेंडेड ऑथेंटिकेशन प्रोटोकॉल जैसे कि EAP-MD5 या EAP-MSCHAPv2 के माध्यम से स्वयं को प्रमाणित करते हैं।
10.1.0.0/16 -- | 192.168.0.1 | === | x.x.x.x |
moon-net moon carol
गेटवे moon पर कॉन्फ़िगरेशन:
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/moonCert.pem
/etc/swanctl/private/moonKey.pem
/etc/swanctl/swanctl.conf:
connections {
rw {
local {
auth = pubkey
certs = moonCert.pem
id = moon.strongswan.org
}
remote {
auth = eap-md5
}
children {
net-net {
local_ts = 10.1.0.0/16
}
}
send_certreq = no
}
}
swanctl.conf फ़ाइल में अतिरिक्त रूप से एक secrets अनुभाग होता है जो सभी क्लाइंट क्रेडेंशियल्स
को परिभाषित करता है
secrets {
eap-carol {
id = [email protected]
secret = Ar3etTnp
}
eap-dave {
id = [email protected]
secret = W7R0g3do
}
}
रोडवॉरियर carol पर कॉन्फ़िगरेशन:
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/swanctl.conf:
connections {
home {
remote_addrs = moon.strongswan.org
local {
auth = eap
id = [email protected]
}
remote {
auth = pubkey
id = moon.strongswan.org
}
children {
home {
local_ts = 10.1.0.0/16
start_action = start
}
}
}
}
secrets {
eap-carol {
id = [email protected]
secret = Ar3etTnp
}
}
EAP पहचान के साथ रोडवॉरियर परिदृश्य
अक्सर, क्लाइंट की EAP पहचान EAP के माध्यम से आदान-प्रदान की जाती है, जो बाहरी IKEv2 पहचान से भिन्न होती है। इस उदाहरण में, IKEv2 पहचान डिफ़ॉल्ट रूप से क्लाइंट का IPv4 पता होती है।
10.1.0.0/16 -- | 192.168.0.1 | === | x.x.x.x |
moon-net moon carol
गेटवे moon पर कॉन्फ़िगरेशन:
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/moonCert.pem
/etc/swanctl/private/moonKey.pem
/etc/swanctl/swanctl.conf:
connections {
rw {
local {
auth = pubkey
certs = moonCert.pem
id = moon.strongswan.org
}
remote {
auth = eap-md5
eap_id = %any
}
children {
net-net {
local_ts = 10.1.0.0/16
}
}
send_certreq = no
}
}
secrets {
eap-carol {
id = carol
secret = Ar3etTnp
}
eap-dave {
id = dave
secret = W7R0g3do
}
}
रोडवॉरियर carol पर कॉन्फ़िगरेशन:
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/swanctl.conf:
connections {
home {
remote_addrs = moon.strongswan.org
local {
auth = eap
eap_id = carol
}
remote {
auth = pubkey
id = moon.strongswan.org
}
children {
home {
local_ts = 10.1.0.0/16
start_action = start
}
}
}
}
secrets {
eap-carol {
id = carol
secret = Ar3etTnp
}
}
प्रमाणपत्र और CRL उत्पन्न करना
यह अनुभाग strongSwan pki टूल का उपयोग करने का संपूर्ण ट्यूटोरियल नहीं है। यह केवल कुछ बिंदुओं को सूचीबद्ध करता है जो तब प्रासंगिक होते हैं जब आप strongSwan के साथ उपयोग के लिए अपने स्वयं के प्रमाणपत्र और CRL उत्पन्न करना चाहते हैं।
CA प्रमाणपत्र उत्पन्न करना
pki स्टेटमेंट
pki --gen --type ed25519 --outform pem > strongswanKey.pem
128 बिट्स की क्रिप्टोग्राफ़िक सामर्थ्य वाली एक अण्डाकार एडवर्ड्स-कर्व कुंजी उत्पन्न करता है। संबंधित सार्वजनिक कुंजी को 10 वर्षों (3652 दिनों) की आयु वाले स्व-हस्ताक्षरित CA प्रमाणपत्र में पैक किया जाता है
pki --self --ca --lifetime 3652 --in strongswanKey.pem \
--dn "C=CH, O=strongSwan, CN=strongSwan Root CA" \
--outform pem > strongswanCert.pem
जिसे निम्न कमांड से सूचीबद्ध किया जा सकता है
pki --print --in strongswanCert.pem
subject: "C=CH, O=strongSwan, CN=strongSwan Root CA"
issuer: "C=CH, O=strongSwan, CN=strongSwan Root CA"
validity: not before May 18 08:32:06 2017, ok
not after May 18 08:32:06 2027, ok (expires in 3651 days)
serial: 57:e0:6b:3a:9a:eb:c6:e0
flags: CA CRLSign self-signed
subjkeyId: 2b:95:14:5b:c3:22:87:de:d1:42:91:88:63:b3:d5:c1:92:7a:0f:5d
pubkey: ED25519 256 bits
keyid: a7:e1:6a:3f:e7:6f:08:9d:89:ec:23:92:a9:a1:14:3c:78:a8:7a:f7
subjkey: 2b:95:14:5b:c3:22:87:de:d1:42:91:88:63:b3:d5:c1:92:7a:0f:5d
यदि आप CA निजी कुंजी और X.509 प्रमाणपत्र को बाइनरी DER प्रारूप में रखना पसंद करते हैं, तो बस
--outform pem विकल्प को हटा दें। निर्देशिका /etc/swanctl/x509ca में सभी आवश्यक CA प्रमाणपत्र
या तो बाइनरी DER या Base64 PEM प्रारूप में होते हैं। फ़ाइल एक्सटेंशन की परवाह किए बिना, सही प्रारूप
strongSwan द्वारा स्वचालित रूप से निर्धारित किया जाएगा।
होस्ट या उपयोगकर्ता अंतिम इकाई प्रमाणपत्र उत्पन्न करना
फिर से हम निम्न कमांड का उपयोग कर रहे हैं
pki --gen --type ed25519 --outform pem > moonKey.pem
होस्ट moon के लिए Ed25519 निजी कुंजी उत्पन्न करने के लिए। वैकल्पिक रूप से, आप निम्न टाइप कर सकते हैं
pki --gen --type rsa --size 3072 > moonKey.der
पारंपरिक 3072-बिट RSA कुंजी उत्पन्न करने और इसे बाइनरी DER प्रारूप में संग्रहीत करने के लिए। वैकल्पिक रूप से, हर आधुनिक Intel प्लेटफ़ॉर्म पर उपलब्ध TPM 2.0 ट्रस्टेड प्लेटफ़ॉर्म मॉड्यूल का उपयोग RSA या ECDSA निजी कुंजी को सुरक्षित रूप से संग्रहीत करने के लिए वर्चुअल स्मार्टकार्ड के रूप में किया जा सकता है। विवरण के लिए, TPM 2.0 HOWTO देखें।
अगले चरण में, निम्न कमांड
pki --req --type priv --in moonKey.pem \
--dn "C=CH, O=strongswan, CN=moon.strongswan.org" \
--san moon.strongswan.org --outform pem > moonReq.pem
एक PKCS#10 प्रमाणपत्र अनुरोध बनाता है जिस पर CA द्वारा हस्ताक्षर किए जाने होते हैं। --san पैरामीटर के
[एकाधिक] उपयोग के माध्यम से, अनुरोध में कितने भी वांछित subjectAlternativeNames जोड़े जा सकते हैं।
ये निम्न रूप के हो सकते हैं
--san sun.strongswan.org # fully qualified host name
--san [email protected] # RFC822 user email address
--san 192.168.0.1 # IPv4 address
--san fec0::1 # IPv6 address
प्रमाणपत्र अनुरोध के आधार पर, CA निम्न कमांड के साथ एक हस्ताक्षरित अंतिम इकाई प्रमाणपत्र जारी करता है
pki --issue --cacert strongswanCert.pem --cakey strongswanKey.pem \
--type pkcs10 --in moonReq.pem --serial 01 --lifetime 1826 \
--outform pem > moonCert.pem
यदि हेक्साडेसिमल तर्क के साथ --serial पैरामीटर छोड़ दिया जाता है, तो एक यादृच्छिक सीरियल नंबर उत्पन्न
होता है। कुछ तृतीय-पक्ष VPN क्लाइंटों को आवश्यकता होती है कि VPN गेटवे प्रमाणपत्र में TLS सर्वर
प्रमाणीकरण एक्सटेंडेड की उपयोग (EKU) फ़्लैग हो, जिसे निम्न विकल्प के साथ शामिल किया जा सकता है
--flag serverAuth
यदि आप निम्नलिखित अनुभागों में से किसी एक में वर्णित गतिशील CRL प्राप्ति सुविधा का उपयोग करना चाहते हैं,
तो आप --crl पैरामीटर का उपयोग करके अपने अंतिम इकाई प्रमाणपत्रों में एक या कई crlDistributionPoints
शामिल कर सकते हैं
--crl http://crl.strongswan.org/strongswan.crl
--crl "ldap://ldap.strongswan.org/cn=strongSwan Root CA, o=strongSwan,c=CH?certificateRevocationList"
जारी किया गया होस्ट प्रमाणपत्र निम्न कमांड से सूचीबद्ध किया जा सकता है
pki --print --in moonCert.pem
subject: "C=CH, O=strongSwan, CN=moon.strongswan.org"
issuer: "C=CH, O=strongSwan, CN=strongSwan Root CA"
validity: not before May 19 10:28:19 2017, ok
not after May 19 10:28:19 2022, ok (expires in 1825 days)
serial: 01
altNames: moon.strongswan.org
flags: serverAuth
CRL URIs: http://crl.strongswan.org/strongswan.crl
authkeyId: 2b:95:14:5b:c3:22:87:de:d1:42:91:88:63:b3:d5:c1:92:7a:0f:5d
subjkeyId: 60:9d:de:30:a6:ca:b9:8e:87:bb:33:23:61:19:18:b8:c4:7e:23:8f
pubkey: ED25519 256 bits
keyid: 39:1b:b3:c2:34:72:1a:01:08:40:ce:97:75:b8:be:ce:24:30:26:29
subjkey: 60:9d:de:30:a6:ca:b9:8e:87:bb:33:23:61:19:18:b8:c4:7e:23:8f
सामान्यतः, Windows, OSX, Android या iOS-आधारित VPN क्लाइंट को अपनी निजी कुंजी, अपना होस्ट या उपयोगकर्ता प्रमाणपत्र और CA प्रमाणपत्र की आवश्यकता होती है। इस जानकारी को लोड करने का सबसे सुविधाजनक तरीका सब कुछ PKCS#12 कंटेनर में डालना है:
openssl pkcs12 -export -inkey carolKey.pem \
-in carolCert.pem -name "carol" \
-certfile strongswanCert.pem -caname "strongSwan Root CA" \
-out carolCert.p12
strongSwan pki टूल वर्तमान में PKCS#12 कंटेनर नहीं बना सकता है, इसलिए openssl का उपयोग किया जाना चाहिए।
CRL उत्पन्न करना
CA द्वारा हस्ताक्षरित एक खाली CRL निम्न कमांड से उत्पन्न किया जा सकता है
pki --signcrl --cacert strongswanCert.pem --cakey strongswanKey.pem \
--lifetime 30 > strongswan.crl
यदि आप --lifetime विकल्प छोड़ देते हैं, तो डिफ़ॉल्ट मान 15 दिनों का उपयोग किया जाता है। CRL को HTTP
या LDAP सर्वर पर अपलोड किया जा सकता है या बाइनरी DER या Base64 PEM प्रारूप में /etc/swanctl/x509crl
निर्देशिका में रखा जा सकता है, जहाँ से उन्हें निम्न कमांड के साथ charon डेमॉन में लोड किया जाता है
swanctl --load-creds### Revoking a Certificate ###
किसी विशिष्ट अंतिम इकाई प्रमाणपत्र को निम्न कमांड से रद्द किया जाता है
pki --signcrl --cacert strongswanCert.pem --cakey strongswanKey.pem \
--lifetime 30 --lastcrl strongswan.crl \
--reason key-compromise --cert moonCert.pem > new.crl
प्रमाणपत्र फ़ाइल (हमारे उदाहरण में moonCert.pem) के बजाय, रद्द किए जाने वाले प्रमाणपत्र की क्रमांक संख्या --serial पैरामीटर का उपयोग करके इंगित की जा सकती है। pki --signcrl --help कमांड सभी संभावित निरसन कारणों का दस्तावेजीकरण करता है, लेकिन --reason पैरामीटर को छोड़ा भी जा सकता है। नई CRL फ़ाइल की सामग्री को निम्न कमांड से सूचीबद्ध किया जा सकता है
pki --print --type crl --in new.crl
issuer: "C=CH, O=strongSwan, CN=strongSwan Root CA"
update: this on May 19 11:13:01 2017, ok
next on Jun 18 11:13:01 2017, ok (expires in 29 days)
serial: 02
authKeyId: 2b:95:14:5b:c3:22:87:de:d1:42:91:88:63:b3:d5:c1:92:7a:0f:5d
1 revoked certificate:
01: May 19 11:13:01 2017, key compromise
Local Caching of CRLs
strongswan.conf विकल्प
charon {
cache_crls = yes
}
उन CRL की स्थानीय कैशिंग सक्रिय करता है जो किसी HTTP या LDAP सर्वर से गतिशील रूप से लाई गई थीं। कैश की गई प्रतियाँ /etc/swanctl/x509crl में जारीकर्ता के subjectKeyIdentifier और .crl सफ़िक्स से बनी एक अद्वितीय फ़ाइलनाम के साथ संग्रहीत की जाती हैं।
कैश की गई प्रति के साथ, स्टार्टअप के तुरंत बाद CRL उपलब्ध हो जाती है। जब स्थानीय प्रति पुरानी हो जाती है, तो अगले IKEv2 प्रमाणीकरण के दौरान परिभाषित CRL वितरण बिंदुओं में से एक से स्वचालित रूप से अद्यतन CRL लाई जाती है।