Building IKEv1 and IKEv2 on CentOS 7

導讀本文目的是爲服務器配置可供多種操作系統訪問的 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)嘗試輸入賬號密碼進行 ××× 連接即可。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章