概述
Internet Protocol Security 是一個協議套件,提供各種信息安全特性。個人用戶或組織可使用 IPSec 特性來保護所有應用程序的流量,無需對應用程序本身進行任何修改。IPSec 使用身份驗證、完整性檢查和加密來保護數據流量。數據安全性是在通信棧的 IP 層提供的,所以不需要對應用程序進行任何修改。不過,必須對每台機器單獨配置,以使其能夠使用 IPSec。
在本文中,了解 AIX IPSec 管理特性,它可以簡化對大型網絡應用和管理 IPSec 配置的方式。該特性使用輕量級目錄訪問協議 (Lightweight Directory Access Protocol, LDAP) 作為一個中央存儲庫來維護和分發 IPSec 配置,從而提供配置的集中式管理。從 AIX V61V/71H 起支持此特性。
對 IPSEC 簡化的需要
目前,對於使用 IPSec 隧道的系統,必須使用 XML 配置文件或命令行對它們進行單獨配置。在配置某些系統時,工作量可能不會非常大,但在擁有許多系統的大型企業中,配置就會成為一項艱巨的任務。要在兩個系統之間建立 IPSec 隧道,需要配置超過 20 個配置參數,並且只有少數參數與機器相關。
由於有大量的配置參數,所以 IPSec 配置既容易出錯又耗時。為了減少錯誤配置的工作量和風險,AIX IPSec 中增加了一個新的特性,它為企業簡化了整個流程。該特性提供:
能夠將多組 IPSec 配置策略存儲在 LDAP 服務器上,實現集中管理。
能夠定義 IPSec 配置策略,並將其與一組主機關聯。與某個 IPSec 配置策略相關聯的所有機器將使用由一個 XML 文件定義的同一組 IPSec 配置(規則)。一台機器在同一時間只可以與一個策略關聯。
每 60 分鐘將刷新一次設置。如果隧道配置發生了變化,那麼將會銷毀舊的隧道,並且將創建新的隧道。
僅支持第一階段隧道的基於證書的身份驗證。
新的 AIX 特性為每對 IP 地址創建隧道,這是 IPSec 配置策略的一部分。
配置 AIX IPSec
AIX 用於創建 IPSec 隧道的配置文件是 XML 格式。為了在兩個系統之間創建一條隧道,必須配置超過 20 個配置參數。可配置的參數被放進 XML 文件中。然而,XML 文件中不包含 IP 地址;從與策略關聯的機器獲取 IP 地址。AIX IPSec 提供了一個命令,可將 XML 配置文件加載到 LDAP 服務器中。
清單 1 顯示了存儲在 LDAP 服務器上的一個樣例 XML 配置文件。
清單 1. 樣例 XML 配置文件
$cat ipsec_ldap.xml <?xml version="1.0"?> <AIX_VPN Version="2.0"> <IKEProtection IKE_Role="Both" IKE_Version="2" IKE_XCHGMode="Main" IKE_KeyOverlap="10" IKE_Flags_UseCRL="No" IKE_ProtectionName="P1Pol" IKE_ResponderKeyRefreshMaxKB="200" IKE_ResponderKeyRefreshMinKB="1" IKE_ResponderKeyRefreshMaxMinutes="1440" IKE_ResponderKeyRefreshMinMinutes="1"> <IKETransform IKE_Encryption="3DES-CBC" IKE_Hash="SHA" IKE_DHGroup="2" IKE_PRF="PRF_HMAC_SHA1" IKE_AuthenticationMethod="RSA_signatures" /> </IKEProtection> <IPSecProposal IPSec_ProposalName="P2Prop"> <IPSecESPProtocol ESP_Encryption="ESP_3DES" ESP_KeyRefreshKB="0" ESP_Authentication="HMAC-SHA" ESP_ExtendedSeqNum="0" ESP_EncapsulationMode="Tunnel" ESP_KeyRefreshMinutes="480" /> </IPSecProposal> <IPSecProtection IPSec_Role="Both" IPSec_KeyOverlap="10" IPSec_ProposalRefs="P2Prop " IPSec_ProtectionName="P2Pol" IPSec_InitiatorDHGroup="1" IPSec_ResponderDHGroup="NO_PFS GROUP_1 GROUP_2" IPSec_Flags_UseLifeSize="No" IPSec_Flags_UseCommitBit="No" IPSec_ResponderKeyRefreshMaxKB="200" IPSec_ResponderKeyRefreshMinKB="1" IPSec_ResponderKeyRefreshMaxMinutes="43200" IPSec_ResponderKeyRefreshMinMinutes="1" /> </AIX_VPN>
將 LDAP 客戶端配置為 IPSec 端點
將成為 IPSec 隧道中端點的所有機器必須已配置為 LDAP 客戶端。在 AIX LDAP 客戶端的 ldap.cfg 文件中有兩個新的配置選項,以支持 AIX IPSec 隧道,如清單 2 所示。
清單 2. 配置選項
# Base Dn where IPSec policy and IPSec host data is stored on LDAP server.
ipsecbasedn:ou=ipsec,cn=aixdata
ip_hostbasedn:ou=Ip_host,cn=aixdata
更新 ldap.cfg 文件之後,使用清單 3 中的命令刷新 secldapclntd 守護程序。
清單 3. 刷新
# restart-secldapclntd
The secldapclntd daemon terminated successfully.
Starting the secldapclntd daemon.
The secldapclntd daemon started successfully.
# mkipsecldap -D <binddn> -w <bindpwd> [-b <basedn> ]
例如,您可以使用 # mkipsecldap -D cn=admin -w adminpwd。
為了驗證 IPSec 配置的父對象是否已被添加,使用 ldapsearch 命令,如清單 4 所示。
清單 4. 驗證
# ldapsearch -h vayu17.in.ibm.com -D cn=admin -w
adminpwd -s sub -b "ou=Ip_host,cn=aixdata"
objectclass=*
ou=Ip_host,cn=aixdata
ou=Ip_host
objectClass=organizationalUnit
objectClass=top
# ldapsearch -h vayu17.in.ibm.com -D cn=admin -w
adminpwd -s sub -b " ou=ipsec,cn=aixdata" objectclass=*
ou=ipsec,cn=aixdata
ou=ipsec
objectClass=organizationalUnit
objectClass=top
您還需要確保所有的 IKE 服務都是活動的,如清單 5 所示。
清單 5. IKE 服務
# lssrc -g ike
Subsystem Group PID Status
cpsd ike 2883782 active
tmd ike 5373970 active
iked ike 9175268 active
為客戶端機器創建 GSKit 密鑰文件
AIX IPSec 簡化特性支持基於證書的身份驗證。您可以通過使用 IBM Global Security Kit (GSKit) 命令為每個客戶端機器創建證書。
使用 GSKit 創建證書
本節介紹如何使用 GSKit 為 IPSec 證書身份驗證機制創建證書。IBM GSKit 是許多 IBM 產品所使用的一個庫和一組命令行工具。在 AIX 中的 IPSec 是一個特性,它針對 IPSec 證書身份驗證機制使用這些文件。(對 GSKit 工具的進一步討論超出了本文的范圍。)
下列步驟顯示了用於為通過 IPSec 進行相互相通信的兩台機器創建必要的 GSKit 密鑰文件的典型命令。兩台機器的密鑰文件中的證書由相同的證書授權機構 (CA) 簽署。生成密鑰文件後,必須將它們安裝到每台機器的 /etc/security 目錄。
使用 gskit 命令創建兩個密鑰數據庫文件。使用清單 6 中的代碼為機器 1 創建數據庫。
清單 6. 為機器 1 創建數據庫
#gsk7cmd -keydb -create -db /GSK_CERTS/ikekey -pw
123456 -type cms –stash
使用清單 7 中的代碼為機器 2 創建數據庫。
清單 7. 為機器 2 創建數據庫
#gsk7cmd -keydb -create -db /GSK_CERTS/ikekey1 -pw
123456 -type cms –stash
使用清單 8 中的命令,在第一台機器的密鑰文件中生成根證書授權機構。
清單 8. 根證書授權機構
#gsk7cmd -cert -create -db /GSK_CERTS/ikekey.kdb -pw
123456 -size 1024 -dn "C=IN,O=IBM,CN=ipsecroot"
-label Root_CA -default_cert yes -ca yes
使用清單 9 中的命令,列出數據庫內容。
清單 9. 列出數據庫內容
#gsk7cmd -cert -list -db /GSK_CERTS/ikekey.kdb -pw 123456 Certificates in database:/GSK_CERTS/ikekey.kdb Entrust.net Global Secure Server Certification Authority Entrust.net Global Client Certification Authority Entrust.net Client Certification Authority Entrust.net Certification Authority (2048) Entrust.net Secure Server Certification Authority VeriSign Class 3 Secure Server CA VeriSign Class 3 Public Primary Certification Authority VeriSign Class 2 Public Primary Certification Authority VeriSign Class 1 Public Primary Certification Authority VeriSign Class 4 Public Primary Certification Authority - G2 VeriSign Class 3 Public Primary Certification Authority - G2 VeriSign Class 2 Public Primary Certification Authority - G2 VeriSign Class 1 Public Primary Certification Authority - G2 VeriSign Class 4 Public Primary Certification Authority - G3 VeriSign Class 3 Public Primary Certification Authority - G3 VeriSign Class 2 Public Primary Certification Authority - G3 VeriSign Class 1 Public Primary Certification Authority - G3 Thawte Personal Premium CA Thawte Personal Freemail CA Thawte Personal Basic CA Thawte Premium Server CA Thawte Server CA Root_CA
Root_CA 是所創建的新證書授權機構。
在創建根 CA 後,為第一台機器的用戶證書創建一個證書請求。清單 10 顯示了一個示例。
清單 10. 證書請求
#gsk7cmd -certreq -create -db /GSK_CERTS/ikekey.kdb
-pw 123456 -label Test_Cert1 -dn
"C=IN,ST=KA,L=BA,O=IBM,OU=ISL,CN=test1" -size 1024
-file /GSK_CERTS/cert1_csr.arm
現在,已創建證書請求,使用 Root_CA 證書簽署證書請求,從而生成用戶證書,如清單 11 所示。
清單 11. 簽署證書請求
#gsk7cmd -cert -sign -db /GSK_CERTS/ikekey.kdb -pw
123456 -label Root_CA -target /GSK_CERTS/Test_Cert1.cer
-format ascii -expire 100 -file /GSK_CERTS/cert1_csr.arm
創建證書後,將它添加到第一台機器的 GSKit 密鑰數據庫中。清單 12 顯示了一個示例。
清單 12. 添加證書
#gsk7cmd -cert -receive -file /GSK_CERTS/Test_Cert1.cer
-db /GSK_CERTS/ikekey.kdb -pw 123456 -type cms -format ascii
您可以使用清單 13 中所示的命令列出數據庫。
清單 13. 列出數據庫
#gsk7cmd -cert -list -db /GSK_CERTS/ikekey.kdb -pw 123456 Certificates in database:/GSK_CERTS/ikekey.kdb Entrust.net Global Secure Server Certification Authority Entrust.net Global Client Certification Authority Entrust.net Client Certification Authority Entrust.net Certification Authority (2048) Entrust.net Secure Server Certification Authority VeriSign Class 3 Secure Server CA VeriSign Class 3 Public Primary Certification Authority VeriSign Class 2 Public Primary Certification Authority VeriSign Class 1 Public Primary Certification Authority VeriSign Class 4 Public Primary Certification Authority - G2 VeriSign Class 3 Public Primary Certification Authority - G2 VeriSign Class 2 Public Primary Certification Authority - G2 VeriSign Class 1 Public Primary Certification Authority - G2 VeriSign Class 4 Public Primary Certification Authority - G3 VeriSign Class 3 Public Primary Certification Authority - G3 VeriSign Class 2 Public Primary Certification Authority - G3 VeriSign Class 1 Public Primary Certification Authority - G3 Thawte Personal Premium CA Thawte Personal Freemail CA Thawte Personal Basic CA Thawte Premium Server CA Thawte Server CA Test_Cert1 Root_CA
請注意,清單中的其他條目是在創建密鑰數據庫時默認創建的,可以刪除它們。
按照類似的過程,為第二台機器創建一個證書。首先,創建證書請求,如清單 14 所示。
清單 14. 為機器 2 創建證書請求
(0) root @ vayu09:6.1.0.0:/GSK_CERTS
# gsk7cmd -certreq -create -db /GSK_CERTS/ikekey.kdb
-pw 123456 -label Test_Cert2 -dn
"C=IN,ST=KA,L=BA,O=IBM,OU=ISL,CN=test2" -size 1024 -
file /GSK_CERTS/cert2_csr.arm
下一步是用 ROOT_CA 證書授權機構的證書簽署證書。清單 15 顯示了一個示例。
清單 15. 簽署證書
(0) root @ vayu09:6.1.0.0:/GSK_CERTS
# gsk7cmd -cert -sign -db /GSK_CERTS/ikekey.kdb -pw
123456 -label Root_CA -target /GSK_CERTS/Test_Cert2.cer
-format ascii -expire 100 -file
/GSK_CERTS/cert2_csr.arm
查看本欄目更多精彩內容:http://www.bianceng.cn/OS/unix/
將已簽署的證書導入 GSKit 密鑰文件,如清單 16 所示。
清單 16. 導入已簽署的證書
(0) root @ vayu09:6.1.0.0:/GSK_CERTS
# gsk7cmd -cert -receive -file
/GSK_CERTS/Test_Cert2.cer -db /GSK_CERTS/ikekey.kdb -
pw 123456 -type cms -format ascii
您可以使用清單 17 中的代碼驗證這兩個證書是否都在文件中。
清單 17. 驗證
# gsk7cmd -cert -list -db /GSK_CERTS/ikekey.kdb -pw
123456
Certificates in database:/GSK_CERTS/ikekey.kdb
Test_Cert2
Test_Cert1
Root_CA
此時,客戶端機器的證書都存儲在一個主密鑰文件中。您可以將證書復制到不同的文件,使它們能夠被分發到每一台客戶端機器。請確保 Root_CA 也被復制到客戶端機器的 GSKit 文件。清單 18 顯示了一個示例。
清單 18. 將證書復制到不同的文件
#gsk7cmd -cert -export -db /GSK_CERTS/ikekey1.kdb -pw
123456 -label Root_CA -type cms -target
/GSK_CERTS/ikekey1.kdb -target_pw 123456 -target_type
cms
(127) root @ vayu09:6.1.0.0:/GSK_CERTS
# gsk7cmd -cert -export -db /GSK_CERTS/ikekey1.kdb -pw
123456 -label Test_Cert2 -type cms -target
/GSK_CERTS/ikekey1.kdb -target_pw 123456 -target_type
cms
您可以列出新的密鑰文件的內容,以驗證其內容,如清單 19 所示。
清單 19. 驗證內容
# gsk7cmd -cert -list -db /GSK_CERTS/ikekey1.kdb -pw
123456
Certificates in database:/GSK_CERTS/ikekey1.kdb
Root_CA
Test_Cert2
然後,從主密鑰文件刪除 Test_Cert2 ,使它只包含第一台機器的證書。清單 20 顯示了一個示例。
清單 20. 刪除 Test_Cert2
#gsk7cmd -cert -delete -db ikekey.kdb -pw 123456 -
label " Test_Cert2”
為要驗證每一個文件都只包含其機器所需要的證書,列出各文件的內容,如清單 21 所示。
清單 21. 列出內容
# gsk7cmd -cert -list -db /GSK_CERTS/ikekey1.kdb -pw
123456
Certificates in database:/GSK_CERTS/ikekey1.kdb
Root_CA
Test_Cert2
# gsk7cmd -cert -list -db /GSK_CERTS/ikekey.kdb -pw
123456
Certificates in database:/GSK_CERTS/ikekey.kdb
Test_Cert1
Root_CA
准備好證書後,將密鑰數據庫復制到每台機器的 /etc/security 路徑中。
確保所有與 IPSec 相關的服務都正常運行,如清單 22 所示。
清單 22. 檢查與 IPSec 相關的服務
# lssrc -g ike
Subsystem Group PID Status
cpsd ike 2883782 active
tmd ike 5373970 active
iked ike 9175268 active
現在,通過在 LDAP 服務器上創建策略,就可以在兩台機器之間創建隧道。
定義客戶端機器的 IPSec 策略
使用 ikedb 命令將 IPSec 策略關聯到第一台機器,如清單 23 所示。
清單 23. 將 IPSec 策略關聯到機器 1
# ikedb -R LDAP -A testpolicy -f ldap.xml -h vayu09.in.ibm.com -C
"/C=IN/ST=KA/L=BA/O=IBM/OU=ISL/CN=test1"
testpolicy 是策略的名稱,而 -C 采用可區分的名稱字符串作為輸入。這個可區分的名稱必須與傳遞給 –dn 選項的名稱相同,以便為第一台機器生成證書。
同樣,使用清單 24 中的代碼,將同樣的策略關聯到第二台機器。
清單 24. 將同樣的策略關聯到機器 2
# ikedb -R LDAP -A testpolicy -f ldap.xml -h
vayu07.in.ibm.com -C
"/C=IN/ST=KA/L=BA/O=IBM/OU=ISL/CN=test2"
成功完成命令後,就可以創建隧道。
啟動客戶端機器之間的 IPSec 隧道
要想在 LDAP 服務器中所定義的所有客戶端機器之間創建 IPSec 隧道,使用 ike 命令,如清單 25 所示。
清單 25. ike 命令
# ike cmd=activate
Phase 2 tunnel 1 On_Demand activate request initiated.
要驗證隧道是否正常工作,從一台客戶端機器向另一台客戶端機器發出 ping 命令。然後,也可以運行 ike cmd=list 命令,列出已創建的隧道。清單 26 顯示了一個示例。
清單 26. 列出隧道
# ike cmd=list
Phase Tun Id Status Local Id Remote Id
1 1 Active 9.124.101.209 9.126.85.157
2 1 Active 9.124.101.209 9.126.85.157
其他有用的命令
要顯示一個策略的 XML 文件,使用:# ikedb –R LDAP –g <policy name>
要為存儲在 LDAP 服務器上的 XML 文件轉儲 DTD,使用:# ikedb -R LDAP –o
要在 LDAP 服務器上刪除策略,使用:#ikedb –R LDAP –D <policy name>
要刷新隧道配置,使用:# ikedb -R LDAP
AIX IPSec 特性還具有自動刷新功能。要啟用自動刷新,使用來自 secldapclntd LDAP 守護程序的 ikedb –R LDAP –p。IPSec 隧道將按照 ldap.cfg 文件中的 IPSECrefreshInterval 參數所定義的時間間隔進行刷新。
結束語
本文介紹了如何使用 AIX 中的集中式 IPSec 管理特性來管理大量客戶端機器的 IPSec 配置。