導讀 | 本文目的是爲服務器配置可供多種操作系統訪問的 IKEv1/IKEv2 接入,需要支持 Radius 認證;按照本文配置,沒有進行流量統計的功能,如果有相關需求,請自行配置 Radius 和 StrongSwan 的 eap-radius 組件。 |
本文實現的 Radius 認證方式有:
EAP-MSCHAPv2(用戶名+密碼)、EAP-TLS(證書)、EAP-TTLS(證書)、PEAP(用戶名+密碼)
已知的問題
PEAP本可以支持兩種認證方式:PEAP-EAP-MSCHAPv2(用戶名+密碼)與PEAP-EAP-TLS(證書)
但 FreeRadius 在PEAP中僅支持PEAP-EAP-MSCHAPv2與PEAP-EAP-TLS必須二選一而不能同時啓用。
FreeRadius 推薦且默認爲PEAP-EAP-MSCHAPv2,鑑於用戶使用PEAP-EAP-MSCHAPv2是主流,且後者替代品豐富,所以放棄對PEAP-EAP-TLS的支持。但出於測試的目的,筆者嘗試配置PEAP-EAP-TLS卻未能成功。
系統環境
公有云上的 CentOS 7 x86_64(非 OpenVZ),雙核,2 GB 內存,SELinux 不開啓
配置StrongSwan
說明:不使用 yum 直接安裝的原因是在庫中的二進制 StrongSwan 的參數配置導致無法通過 OS X 與 iOS 連接
配置環境 & 編譯
編譯安裝默認的配置文件路徑爲 /usr/local/etc,通過 yum 安裝的默認爲 /etc/strongswan
yum -y install pam-devel openssl-devel make gcc curl wget wget --no-check-certificate https://download.strongswan.org/strongswan-5.3.5.tar.gz tar zxvf strongswan-5.3.5.tar.gz cd strongswan-5.3.5 ./configure --enable-eap-identity --enable-eap-md5 \ --enable-eap-mschapv2 --enable-eap-tls --enable-eap-ttls --enable-eap-peap \ --enable-eap-tnc --enable-eap-dynamic --enable-eap-radius --enable-xauth-eap \ --enable-xauth-pam --enable-dhcp --enable-openssl --enable-addrblock --enable-unity \ --enable-certexpire --enable-radattr --enable-swanctl --enable-openssl --disable-gmp make && make install
配置證書
需要生成的證書包括根證書(CA)、服務器證書(Server)和客戶端證書(Client),客戶端證書可用於通過證書認證。
生成根證書
ipsec pki --gen --outform pem > ca.key.pem ipsec pki --self --in ca.key.pem --dn "C=CN, O=VisionSrv, CN=VisionSrv CA" --ca --lifetime 3650 --outform pem > ca.cert.pem
生成服務器證書
ipsec pki --gen --outform pem > server.key.pem ipsec pki --pub --in server.key.pem --outform pem > server.pub.pem ipsec pki --issue --lifetime 1200 --cacert ca.cert.pem --cakey ca.key.pem --in server.pub.pem --dn "C=CN, O=VisionSrv, CN=dev.panic.ml" --san="dev.panic.ml" --flag serverAuth --flag ikeIntermediate --outform pem > server.cert.pem
生成客戶端證書
ipsec pki --gen --outform pem > client.key.pem ipsec pki --pub --in client.key.pem --outform pem > client.pub.pem ipsec pki --issue --lifetime 1200 --cacert ca.cert.pem --cakey ca.key.pem --in client.pub.pem --dn "C=CN, O=VisionSrv, CN=dev.panic.ml" --outform pem > client.cert.pem
生成 p12 證書可以設置密碼,請注意:OS X 無法導入密碼爲空的 p12 證書
openssl pkcs12 -export -inkey client.key.pem -in client.cert.pem -name "VisionSrv Client Cert" -certfile ca.cert.pem -caname "VisionSrv CA" -out client.cert.p12
複製證書
說明:
(1)如果你希望用戶通過用戶名 + 密碼連接 IKEv2,請將 ca.cert.pem 發送給客戶並要求客戶安裝證書 (2)如果你希望用戶直接通過證書登陸,請將 client.cert.p12 發送給客戶並要求客戶安裝證書 (3)如果是 iOS,用戶還需要安裝 ca.cert.pem (4)如果是 OS X,用戶需要設置 CA 根證書爲可信
cp -r ca.key.pem /usr/local/etc/ipsec.d/private/ cp -r ca.cert.pem /usr/local/etc/ipsec.d/cacerts/ cp -r server.cert.pem /usr/local/etc/ipsec.d/certs/ cp -r server.key.pem /usr/local/etc/ipsec.d/private/ cp -r client.cert.pem /usr/local/etc/ipsec.d/certs/ cp -r client.key.pem /usr/local/etc/ipsec.d/private/
配置 ipsec.conf
通過編譯安裝,ipsec.conf 路徑爲 /usr/local/etc/ipsec.conf,通過 yum 安裝路徑爲 /etc/strongswan/ipsec.conf
config setup uniqueids=never conn cisco_cert keyexchange=ikev1 fragmentation=yes left=%defaultroute leftauth=pubkey leftsubnet=0.0.0.0/0 leftcert=server.cert.pem right=%any rightauth=pubkey rightauth2=xauth-radius rightsourceip=10.31.2.0/24 auto=add conn cisco_xauth_psk keyexchange=ikev1 left=%defaultroute leftauth=psk leftsubnet=0.0.0.0/0 right=%any rightauth=psk rightauth2=xauth-radius rightsourceip=10.31.2.0/24 auto=add conn standard_ikev2 keyexchange=ikev2 ike=aes256-sha256-modp1024,3des-sha1-modp1024,aes256-sha1-modp1024! esp=aes256-sha256,3des-sha1,aes256-sha1! rekey=no left=%defaultroute [email protected] leftsendcert=always leftfirewall=yes leftsubnet=0.0.0.0/0 leftcert=server.cert.pem right=%any rightauth=eap-radius rightsourceip=10.31.2.0/24 eap_identity=%any dpdaction=clear fragmentation=yes auto=add
配置 strongswan.conf
通過編譯安裝,ipsec.conf 路徑爲 /usr/local/etc/strongswan.conf,通過 yum 安裝路徑爲 /etc/strongswan/strongswan.conf
charon { load_modular = yes duplicheck.enable = no #是爲了你能同時連接多個設備,所以要把冗餘檢查關閉 compress = yes plugins { include strongswan.d/charon/*.conf eap-radius { servers { server-a { address = YourRadiusServer secret = YourRadiusSecret # nas_identifier = ipsec-gateway } } } } dns1 = 114.114.114.114 dns2 = 8.8.8.8 # for Windows WINS Server nbns1 = 114.114.114.114 nbns2 = 8.8.8.8 } include strongswan.d/*.conf
配置 ipsec.secrets
通過編譯安裝,ipsec.conf 路徑爲 /usr/local/etc/ipsec.secrets,通過 yum 安裝路徑爲 /etc/strongswan/ipsec.secrets
: RSA server.key.pem : PSK "visionsrv" : XAUTH "visionsrv" test : EAP "123456"
我們在這裏增加了一個測試賬號,但在 Radius 認證中並不生效,如果需要使用此認證用於測試或不需要使用 Radius 進行認證,請將 ipsec.conf 中的 rightauth(或 rightauth2) 值改爲 eap-mschapv2(eap-radius) 或 xauth(xauth-radius)
注意: 在停用 Radius 認證後,使用本文配置將無法通過客戶端證書直接連接 ××× 服務器。如有需要,請自行研究配置方式。 下面是一些直接使用證書認證的參考資料: StrongSwan Android、Windows 身份驗證(使用計算機證書)-> IKEv2 Certificate -> rightauth=pubkey StrongSwan Android、OS X、iOS -> EAP-TLS -> rightauth=eap-tls Linux 通過 NetworkManager-strongswan 支持上述所有方式
配置防火牆
本文使用的是 CentOS 7 默認的防火牆 firewalld,如需要 iptables 請查看官方文檔或參閱 Google
firewall-cmd --add-port=500/tcp --permanent firewall-cmd --add-port=500/udp --permanent firewall-cmd --add-port=4500/tcp --permanent firewall-cmd --add-port=4500/udp --permanent firewall-cmd --add-masquerade --permanent firewall-cmd --reload
啓動服務
systemctl start strongswan systemctl enable strongswan
配置 Radius
安裝並配置 FreeRadius
yum install -y freeradius* echo 'test ClearText-Password := "123456"' >> /etc/raddb/users # 配置 Radius 客戶端,0.0.0.0 替換爲 ××× 服務器地址,123456 替換爲您想設置的 Radius 連接密鑰 cat >> /etc/raddb/clients.conf < <-EOF client 0.0.0.0 { secret = 123456 shortname = 0.0.0.0 nas_type = other } EOF
請將 CA 根證書ca.cert.pem放置在/etc/raddb/certs/ca.pem(本項如果不需要通過客戶端證書連接可以不配置)
請將服務器證書server.cert.pem放置在/etc/raddb/certs/server.pem
服務器私鑰server.key.pem放置在/etc/raddb/certs/server.key
完成後,請執行命令cat /etc/raddb/certs/server.key >> /etc/raddb/certs/server.pem
2016-5-8 更新: 新版 OS X 對`用戶名+密碼`不再要求強制校驗服務器身份,所以不使用證書登陸可以不配置 RADIUS 證書。
注意
不配置 Radius 服務器證書時 Windows PEAP 連接將彈出提示(提示信息爲“信息不足,無法驗證服務器”),OS X 將拒絕連接。
需要說明的是,這並不是一般的 Radius 服務器證書配置方法,但出於簡單、實用且易於描述的考慮我們這樣做以免您產生混淆。
正常的做法是通過通用的 CA 根證書、 CA 私鑰、 CSR 文件以及 FreeRadius 內置的私鑰爲 Radius 服務器生成一個證書。
這樣生成的服務器證書可以被 ××× 客戶端的 PEAP 判斷爲合法的服務器並進行連接。
OS X 使用 PEAP-EAP-MSCHAPv2(用戶名)和 EAP-TLS(證書)並強制要求校驗服務器合法性。
Windows 可以選擇使用 PEAP-EAP-MSCHAPv2(用戶名)和 EAP-TLS(證書),但配置更自由,更具靈活性。
在本文所述的方法中,因 server.pem 中的私鑰是未加密的,所以 eap 配置文件中的私鑰密碼是不產生作用的。
配置防火牆
# Radius 認證端口 firewall-cmd --add-port=1812/udp --permanent # Radius 計費端口(本文不會使用) firewall-cmd --add-port=1813/udp --permanent firewall-cmd --reload
客戶端配置
說明:
(1)如果你希望用戶通過用戶名 + 密碼連接 IKEv2,請將 ca.cert.pem 發送給客戶並要求客戶安裝證書 (2)如果你希望用戶直接通過證書登陸,請將 client.cert.p12 發送給客戶並要求客戶安裝證書 (3)如果是 iOS,用戶還需要安裝 ca.cert.pem (4)如果是 OS X,用戶需要設置 CA 根證書爲可信
OS X
OS X 採用了嚴格的安全校驗措施,IKEv2 連接採用 PEAP(用戶名+密碼)/EAP-TLS(證書) 模式並必須驗證服務器身份, 對服務器校驗分兩步:(1)校驗該服務器證書是否是合法 CA 簽發的,(2)校驗被連接服務器的被連接域名是否是證書允許的 OS X 要求這兩部分必須均校驗且通過,Windows 可以選擇是否校驗以及校驗至哪一步。 這意味着爲了保證 OS X 正常使用 IKEv2,您必須爲 Radius 服務器配置證書。 iOS 與 OS X 的要求相似,本文以 OS X 爲例進行說明。
IKEv1
配置位置:系統偏好設置 -> 網絡 -> 新建 -> ××× -> Cisco IPsec 服務器地址:在這裏輸入您的服務器地址 賬戶名稱:在這裏輸入用戶名 密碼:在這裏輸入密碼 在鑑定設置 -> 共享的密鑰中輸入在 ipsec.secrets 中設置的 PSK 預共享密碼
IKEv2
配置位置:系統偏好設置 -> 網絡 -> 新建 -> ××× -> IKEv2 服務器地址:在這裏輸入您的服務器地址 遠程地址:在這裏輸入您的服務器地址 在鑑定設置 -> 用戶名中輸入在 ipsec.secrets 中設置的用戶名和密碼(通過用戶名密碼登陸) 在鑑定設置 -> 證書中選擇安裝的客戶端證書(通過客戶端證書登陸)
Android
由於 Andorid 的版本衆多,配置方法可能不同但大同小異。
IKEv1
說明:您也可以使用 IPSec Xauth RSA 進行連接,但需要安裝證書,連接時選擇客戶端證書,CA 和服務器證書留空
配置位置:設置 -> 其它連接方式 -> ××× -> 添加 ××× 名稱:在這裏填寫任意名稱 類型:IPSec Xauth PSK IPsec 標識符:不更改此項內容 預共享密鑰:在這裏輸入在 ipsec.secrets 中設置的 PSK 預共享密碼
此後,在連接時輸入您的用戶名和密碼。
IKEv2
您需要安裝 StrongSwan Andorid 版本,具體配置方法詳見不同版本的配置方法。
由於該 APP 爲官方出品,支持認證方法衆多,配置簡單,推薦使用。
Windows
說明:鑑於 Windows 支持認證方式較爲廣泛,本文僅示例最簡單的通過 EAP(MSCHAPv2) 與通過本地證書(EAP-TLS)進行認證
Windows 7 以下版本不支持 IKEv2 連接,所有版本均不支持 IKEv1 連接,如有需要請下載第三方組件。 本文配置對於 Windows 7 以上版本的 IKEv2 連接,支持通過 EAP-MSCHAPv2、EAP-TLS、PEAP(部分支持)、EAP-TTLS 認證 本文采用 Windows 10 作爲操作示例,其它受支持的 Windows 版本配置與本文類似,請自行研究。 如前文所述,本文對於 PEAP 僅支持 PEAP-EAP-MSCHAPv2(用戶名+密碼),不支持 PEAP-EAP-TLS(證書)。 有消息稱,不同連接方式之間的性能可能存在差異,但筆者並未進行詳細的性能測試。
注意:筆者測試 StrongSwan 官方的 Windows 7 配置,但 Windows 7 仍不可連接。 錯誤提示爲 IKE 身份驗證憑證不可接受,該問題通常是由於 CA 根證書未安裝導致,但 CA 根實際上已經安裝。 因此,錯誤原因不明,該問題僅在 Windows 7 (Windows Server 2008)上被發現,其他未見影響。
IKEv2
配置位置:網絡與共享中心 -> 設置新的連接或網絡 -> 連接到工作區 -> 使用我的 Internet 連接 Internet 地址:在這裏填寫服務器地址 確認後,在網絡與共享中心 -> 更改適配器設置 -> 選擇剛剛添加的 ××× -> 右鍵選擇屬性 -> “安全”中“××× 類型”選擇 IKEv2
在這裏,我們展示兩種方式:
方法一:通過 EAP-TLS 使用證書連接Linux就該這麼學
(1)安裝客戶端證書 client.cert.p12,設置爲可信 (2)在“安全”中選擇“Microsoft: 智能卡或其他證書(啓用加密)”,在“屬性”中選擇“在此計算機上使用證書” (3)完成上述步驟後,可以勾選“通過驗證證書來驗證服務器身份”,在文本框中輸入 ××× 服務器地址 (4)勾選“連接到這些服務器”,在證書列表中選擇 CA 根證書(一般在最後一個)後確定 (5)嘗試連接到 ××× 服務器即可
說明:用戶可以關閉“通過驗證證書來驗證服務器身份”,但這將降低用戶安全性。
方法二:通過 EAP-MSCHAPv2 使用用戶名與密碼連接
(1)安裝 CA 根證書,設置爲可信 (2)在“安全”中選擇“Microsoft: 安全密碼(EAP-MSCHAP v2)(啓用加密) (3)嘗試輸入賬號密碼進行 ××× 連接即可。