使用证书身份验证配置 IPsec - FSx for ONTAP

使用证书身份验证配置 IPsec

以下主题对在 FSx for ONTAP 文件系统和运行 Libreswan IPsec 的客户端上使用证书身份验证配置 IPsec 加密进行了说明。此解决方案使用 AWS Certificate Manager 和 AWS Private Certificate Authority 创建私有证书颁发机构并生成证书。

在 FSx for ONTAP 文件系统和连接的客户端上使用证书身份验证配置 IPsec 加密的概括步骤如下:

  1. 设立证书颁发机构来颁发证书。

  2. 为文件系统和客户端生成和导出 CA 证书。

  3. 在客户端实例上安装证书并配置 IPsec。

  4. 在您的文件系统上安装证书并配置 IPsec。

  5. 定义安全策略数据库 (SPD)。

  6. 配置 IPsec 以实现多客户端访问。

创建和安装 CA 证书

要进行证书身份验证,您需要在 FSx for ONTAP 文件系统和将访问文件系统上数据的客户端上生成并安装来自证书颁发机构的证书。以下示例使用 AWS Private Certificate Authority 来设置私有证书颁发机构,并生成要安装在文件系统和客户端上的证书。使用 AWS Private Certificate Authority,您可以创建完全由 AWS 托管的根和从属证书颁发机构(CA)层次结构,供您的组织内部使用。此过程分为五个步骤:

  1. 使用 AWS Private CA 创建私有证书颁发机构(CA)

  2. 在私有 CA 上颁发并安装根证书

  3. 从 AWS Certificate Manager 为您的文件系统和客户端申请私有证书

  4. 为文件系统和客户端导出证书。

有关更多信息,请参阅《AWS Private Certificate Authority 用户指南》中的私有 CA 管理

创建根私有 CA
  1. 创建 CA 时,必须在提供的文件中指定 CA 配置。以下命令使用 Nano 文本编辑器创建 ca_config.txt 文件,指定以下信息:

    • 算法的名称

    • CA 用来签名的签名算法

    • X.500 主题信息

    $ > nano ca_config.txt

    随即显示文本编辑器。

  2. 编辑 CA 规范文件。

    { "KeyAlgorithm":"RSA_2048", "SigningAlgorithm":"SHA256WITHRSA", "Subject":{ "Country":"US", "Organization":"Example Corp", "OrganizationalUnit":"Sales", "State":"WA", "Locality":"Seattle", "CommonName":"*.ec2.internal" } }
  3. 保存并关闭文件,退出文本编辑器。有关更多信息,请参阅《AWS Private Certificate Authority 用户指南》中创建 CA 的步骤

  4. 使用 create-certificate-authority AWS Private CA CLI 命令创建私有 CA。

    ~/home > aws acm-pca create-certificate-authority \ --certificate-authority-configuration file://ca_config.txt \ --certificate-authority-type "ROOT" \ --idempotency-token 01234567 --region aws-region

    如果成功,此命令将输出 CA 的 Amazon 资源名称(ARN)。

    { "CertificateAuthorityArn": "arn:aws:acm-pca:aws-region:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012" }
为私有根 CA 创建和安装证书(AWS CLI)
  1. 使用 get-certificate-authority-csr AWS CLI 命令生成证书签名请求(CSR)。

    $ aws acm-pca get-certificate-authority-csr \ --certificate-authority-arn arn:aws:acm-pca:aws-region:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012 \ --output text \ --endpoint https://acm-pca.aws-region.amazonaws.com \ --region eu-west-1 > ca.csr

    生成的文件 ca.csr 是以 base64 格式编码的 PEM 文件,其内容显示如下。

    -----BEGIN CERTIFICATE----- MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6 b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ 21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4 nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE= -----END CERTIFICATE-----

    有关更多信息,请参阅《AWS Private Certificate Authority 用户指南》中的安装根 CA 证书

  2. 使用 issue-certificate AWS CLI 命令在私有 CA 上颁发并安装根证书。

    $ aws acm-pca issue-certificate \ --certificate-authority-arn arn:aws:acm-pca:aws-region:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012 \ --csr file://ca.csr \ --signing-algorithm SHA256WITHRSA \ --template-arn arn:aws:acm-pca:::template/RootCACertificate/V1 \ --validity Value=3650,Type=DAYS --region aws-region
  3. 使用 get-certificate AWS CLI 命令下载根证书。

    $ aws acm-pca get-certificate \ --certificate-authority-arn arn:aws:acm-pca:aws-region:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012 \ --certificate-arn arn:aws:acm-pca:aws-region:486768734100:certificate-authority/12345678-1234-1234-1234-123456789012/certificate/abcdef0123456789abcdef0123456789 \ --output text --region aws-region > rootCA.pem
  4. 使用 import-certificate-authority-certificate AWS CLI 命令在私有 CA 上安装根证书。

    $ aws acm-pca import-certificate-authority-certificate \ --certificate-authority-arn arn:aws:acm-pca:aws-region:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012 \ --certificate file://rootCA.pem --region aws-region
生成并导出文件系统和客户端证书
  1. 使用 request-certificate AWS CLI 命令请求 AWS Certificate Manager 证书以在您的文件系统和客户端上使用。

    $ aws acm request-certificate \ --domain-name *.ec2.internal \ --idempotency-token 12345 \ --region aws-region \ --certificate-authority-arn arn:aws:acm-pca:aws-region:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012

    如果请求成功,则返回颁发证书的 ARN。

  2. 为了安全起见,您必须在导出私钥时为其分配密码。创建密码并将其存储在名为 passphrase.txt 的文件中

  3. 使用 export-certificate AWS CLI 命令导出之前颁发的私有证书。导出的文件包含证书、证书链以及与证书中嵌入的公钥关联的加密私有 2048 位 RSA 密钥。为了安全起见,您必须在导出私钥时为其分配密码。以下示例是 Linux EC2 实例。

    $ aws acm export-certificate \ --certificate-arn arn:aws:acm:aws-region:111122223333:certificate/12345678-1234-1234-1234-123456789012 \ --passphrase $(cat passphrase.txt | base64)) --region aws-region > exported_cert.json
  4. 使用以下 jq 命令从 JSON 响应中提取私钥和证书。

    $ cat exported_cert.json | jq -r .PrivateKey > prv.key cat exported_cert.json | jq -r .Certificate > cert.pem openssl rsa -in prv.key -passin pass:$passphrase -out decrypted.key
  5. 使用以下 openssl 命令从 JSON 响应中解密私钥。输入命令后,系统会提示您输入密码。

    $ openssl rsa -in prv.key -passin pass:$passphrase -out decrypted.key

在 Amazon Linux 2 客户端上安装和配置 Libreswan IPsec

以下各节提供了在运行 Amazon Linux 2 的 Amazon EC2 实例上安装和配置 Libreswan IPsec 的说明。

安装和配置 Libreswan
  1. 使用 SSH 连接到 EC2 实例。有关如何执行此操作的具体说明,请参阅《适用于 Linux 实例的 Amazon Elastic Compute Cloud 用户指南》中的使用 SSH 客户端连接到 Linux 实例

  2. 运行以下命令安装 libreswan

    $ sudo yum install libreswan
  3. (可选)在后续步骤中验证 IPsec 时,如果没有这些设置,可能会标记这些属性。我们建议在没有这些设置的情况下先测试您的设置。如果连接出现问题,请返回此步骤并进行以下更改。

    安装完成后,使用您的首选文本编辑器将以下条目添加到 /etc/sysctl.conf 文件中。

    net.ipv4.ip_forward=1 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.lo.accept_redirects = 0 net.ipv4.conf.lo.send_redirects = 0 net.ipv4.conf.all.rp_filter = 0 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.eth0.rp_filter = 0

    保存更改,退出文本编辑器。

  4. 应用更改。

    $ sudo sysctl -p
  5. 验证 IPsec 配置。

    $ sudo ipsec verify

    验证您安装的 Libreswan 版本是否正常运行。

  6. 初始化 IPsec NSS 数据库。

    $ sudo ipsec checknss
在客户端上安装证书
  1. 您为客户端生成的证书复制到 EC2 实例上的工作目录中。您

  2. 将之前生成的证书导出为与 libreswan 兼容的格式。

    $ openssl pkcs12 -export -in cert.pem -inkey decrypted.key \ -certfile rootCA.pem -out certkey.p12 -name fsx
  3. 导入重新格式化的密钥,并在系统提示时提供密码。

    $ sudo ipsec import certkey.p12
  4. 使用首选文本编辑器创建 IPsec 配置文件。

    $ sudo cat /etc/ipsec.d/nfs.conf

    将以下条目添加到配置文件:

    conn fsxn authby=rsasig left=172.31.77.6 right=198.19.254.13 auto=start type=transport ikev2=insist keyexchange=ike ike=aes256-sha2_384;dh20 esp=aes_gcm_c256 leftcert=fsx leftrsasigkey=%cert leftid=%fromcert rightid=%fromcert rightrsasigkey=%cert

在文件系统上配置 IPsec 后,您将在客户端上启动 IPsec。

在文件系统上配置 IPsec

本节提供有关在 FSx for ONTAP 文件系统上安装证书以及配置 IPsec 的说明。

在文件系统上安装证书
  1. 将根证书(rootCA.pem))、客户端证书(cert.pem)和解密的密钥(decrypted.key)文件复制到您的文件系统。您需要知道证书的密码。

  2. 要访问 NetApp ONTAP CLI,请运行以下命令,在 Amazon FSx for NetApp ONTAP 文件系统的管理端口上建立 SSH 会话。将 management_endpoint_ip 替换为文件系统管理端口的 IP 地址。

    [~]$ ssh fsxadmin@management_endpoint_ip

    有关更多信息,请参阅 使用 ONTAP CLI 管理文件系统

  3. 在客户端(而不是在您的文件系统)上使用 cat 列出 rootCA.pemcert.pemdecrypted.key 文件的内容,以便复制每个文件的输出并在系统提示时粘贴到以下步骤中。

    $ > cat cert.pem

    复制证书内容。

  4. 除非已经安装(例如 ONTAP 自签名根 CA),否则必须将双向身份验证期间使用的所有 CA 证书(包括 ONTAP 端和客户端 CA)安装到 ONTAP 证书管理中。

    按如下方式使用 security certificate install NetApp CLI 命令安装客户端证书:

    FSxID123:: > security certificate install -vserver dr -type client -cert-name ipsec-client-cert
    Please enter Certificate: Press <Enter> when done

    粘贴您之前复制的 cert.pem 文件的内容,然后按 Enter。

    Please enter Private Key: Press <Enter> when done

    粘贴 decrypted.key 文件的内容,然后按 Enter。

    Do you want to continue entering root and/or intermediate certificates {y|n}:

    输入 n 以完成客户端证书的输入。

  5. 创建并安装证书以供 SVM 使用。此证书的颁发者 CA 必须已安装到 ONTAP 并已添加到 IPsec 中。

    使用以下命令来安装根证书:

    FSxID123:: > security certificate install -vserver dr -type server-ca -cert-name ipsec-ca-cert
    Please enter Certificate: Press <Enter> when done

    粘贴 rootCA.pem 文件的内容,然后按 Enter。

  6. 要确保身份验证期间安装的 CA 位于 IPsec CA 搜索路径中,请使用“security ipsec ca-certificate add”命令将 ONTAP 证书管理 CA 添加到 IPsec 模块。

    输入以下命令来添加根证书。

    FSxID123:: > security ipsec ca-certificate add -vserver dr -ca-certs ipsec-ca-cert
  7. 输入以下命令,在安全策略数据库(SPD)中创建所需的 IPsec 策略。

    security ipsec policy create -vserver dr -name policy-name -local-ip-subnets 198.19.254.13/32 -remote-ip-subnets 172.31.0.0/16 -auth-method PKI -action ESP_TRA -cipher-suite SUITEB_GCM256 -cert-name ipsec-client-cert -local-identity "CN=*.ec2.internal" -remote-identity "CN=*.ec2.internal"
  8. 使用以下命令显示 IPsec 策略,以便文件系统确认。

    FSxID123:: > security ipsec policy show -vserver dr -instance Vserver: dr Policy Name: promise Local IP Subnets: 198.19.254.13/32 Remote IP Subnets: 172.31.0.0/16 Local Ports: 0-0 Remote Ports: 0-0 Protocols: any Action: ESP_TRA Cipher Suite: SUITEB_GCM256 IKE Security Association Lifetime: 86400 IPsec Security Association Lifetime: 28800 IPsec Security Association Lifetime (bytes): 0 Is Policy Enabled: true Local Identity: CN=*.ec2.internal Remote Identity: CN=*.ec2.internal Authentication Method: PKI Certificate for Local Identity: ipsec-client-cert

在客户端上启动 IPsec

现在,FSx for ONTAP 文件系统和客户端上都配置了 IPsec,您可以在客户端上启动 IPsec。

  1. 使用 SSH 连接到文件系统。

  2. 启动 IPsec。

    $ sudo ipsec start
  3. 检查 IPsec 的状态。

    $ sudo ipsec status
  4. 在您的文件系统上挂载卷。

    $ sudo mount -t nfs 198.19.254.13:/benchmark /home/ec2-user/acm/dr
  5. 在 FSx for ONTAP 文件系统上显示加密连接,以验证 IPsec 设置。

    FSxID123:: > security ipsec show-ikesa -node FsxId123 FsxId08ac16c7ec2781a58::> security ipsec show-ikesa -node FsxId08ac16c7ec2781a58-01 Policy Local Remote Vserver Name Address Address Initator-SPI State ----------- ------ --------------- --------------- ---------------- ----------- dr policy-name 198.19.254.13 172.31.77.6 551c55de57fe8976 ESTABLISHED fsx policy-name 198.19.254.38 172.31.65.193 4fd3f22c993e60c5 ESTABLISHED 2 entries were displayed.

为多个客户端设置 IPsec

当少数客户端需要利用 IPsec 时,为每个客户端使用一个 SPD 条目就足够了。但是,如果成百上千个客户端需要利用 IPsec,我们建议您使用 IPsec 多客户端配置。

FSx for ONTAP 支持在启用 IPsec 的情况下将跨多个网络的多个客户端连接到单个 SVM IP 地址。您可以使用 subnet 配置或 Allow all clients 配置来完成此操作,详细过程如下:

使用子网配置为多个客户端配置 IPsec

要允许特定子网(例如 192.168.134.0/24)上的所有客户端使用单个 SPD 策略条目连接到单个 SVM IP 地址,必须以子网形式指定 remote-ip-subnets。此外,您必须使用正确的客户端标识来指定 remote-identity 字段。

重要

使用证书身份验证时,每个客户端都可以使用其唯一证书或共享证书进行身份验证。FSx for ONTAP IPsec 会根据其本地信任存储上安装的 CA 来检查证书的有效性。FSx for ONTAP 还支持证书吊销列表(CRL)检查。

  1. 要访问 NetApp ONTAP CLI,请运行以下命令,在 Amazon FSx for NetApp ONTAP 文件系统的管理端口上建立 SSH 会话。将 management_endpoint_ip 替换为文件系统管理端口的 IP 地址。

    [~]$ ssh fsxadmin@management_endpoint_ip

    有关更多信息,请参阅 使用 ONTAP CLI 管理文件系统

  2. 按如下方式使用 security ipsec policy create NetApp ONTAP CLI 命令,将示例值替换为您的具体值。

    FsxId123456::> security ipsec policy create -vserver svm_name -name policy_name \ -local-ip-subnets 192.168.134.34/32 -remote-ip-subnets 192.168.134.0/24 \ -local-ports 2049 -protocols tcp -auth-method PSK \ -cert-name my_nfs_server_cert -local-identity ontap_side_identity \ -remote-identity client_side_identity
使用允许所有客户端的配置为多个客户端配置 IPsec

要允许任何客户端(无论其源 IP 地址如何)连接到启用了 SVM IPsec 的 IP 地址,请在指定 remote-ip-subnets 字段时使用 0.0.0.0/0 通配符。

此外,您必须使用正确的客户端标识来指定 remote-identity 字段。对于证书身份验证,您可以输入 ANYTHING

此外,使用 0.0.0.0/0 通配符时,必须配置要使用的特定本地或远程端口号。例如,NFS 端口 2049。

  1. 要访问 NetApp ONTAP CLI,请运行以下命令,在 Amazon FSx for NetApp ONTAP 文件系统的管理端口上建立 SSH 会话。将 management_endpoint_ip 替换为文件系统管理端口的 IP 地址。

    [~]$ ssh fsxadmin@management_endpoint_ip

    有关更多信息,请参阅 使用 ONTAP CLI 管理文件系统

  2. 按如下方式使用 security ipsec policy create NetApp ONTAP CLI 命令,将示例值替换为您的具体值。

    FsxId123456::> security ipsec policy create -vserver svm_name -name policy_name \ -local-ip-subnets 192.168.134.34/32 -remote-ip-subnets 0.0.0.0/0 \ -local-ports 2049 -protocols tcp -auth-method PSK \ -cert-name my_nfs_server_cert -local-identity ontap_side_identity \ -local-ports 2049 -remote-identity client_side_identity