第 13 章 使用 MACsec 加密同一物理网络中的第 2 层流量
您可以使用 MACsec 来保护两个设备(点到点)之间的通信。例如,您的分支办公室通过城际以太网与中心办公室连接,您可以在连接办公室的两个主机上配置 MACsec,以提高安全性。
介质访问控制安全(MACsec)是一种第 2 层的协议,用于保护以太网链路上的不同的流量类型,包括:
- 动态主机配置协议(DHCP)
- 地址解析协议(ARP)
-
互联网协议版本 4 / 6(
IPv4
/IPv6
)以及 - 任何使用 IP的流量(如 TCP 或 UDP)
MACsec 默认使用 GCM-AES-128 算法加密并验证 LAN 中的所有流量,并使用预共享密钥在参与的主机之间建立连接。如果要更改预共享密钥,您需要更新网络中使用 MACsec 的所有主机上的 NM 配置。
MACsec 连接将以太网设备(如以太网网卡、VLAN 或隧道设备)用作父设备。您可以只在 MACsec 设备上设置 IP 配置,以便只使用加密连接与其他主机进行通信,也可以在父设备上设置 IP 配置。在后者的情况下,您可以使用父设备使用未加密连接和 MACsec 设备加密连接与其他主机通信。
macsec 不需要任何特殊硬件。例如,您可以使用任何交换机,除非您只想在主机和交换机之间加密流量。在这种情况下,交换机还必须支持 MACsec。
换句话说,有 2 种常用的方法来配置 MACsec:
- 主机到主机,和
- 主机到交换机,然后交换机到其他主机
您只能在相同(物理或虚拟)LAN 的主机间使用 MACsec。
13.1. 使用 nmcli
配置 MACsec 连接
您可以使用 nmcli
工具将以太网接口配置为使用 MACsec。例如,您可以在通过以太网连接的两个主机之间创建一个 MACsec 连接。
步骤
在配置 MACsec 的第一个主机上:
为预共享密钥创建连接关联密钥(CAK)和连接关联密钥名称(CKN):
创建一个 16 字节的十六进制 CAK:
# dd if=/dev/urandom count=16 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"' 50b71a8ef0bd5751ea76de6d6c98c03a
创建一个 32 字节的十六进制 CKN:
# dd if=/dev/urandom count=32 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"' f2b4297d39da7330910a74abc0449feb45b5c0b9fc23df1430e1898fcf1c4550
- 在您要通过 MACsec 连接连接的两个主机上:
创建 MACsec 连接:
# nmcli connection add type macsec con-name macsec0 ifname macsec0 connection.autoconnect yes macsec.parent enp1s0 macsec.mode psk macsec.mka-cak 50b71a8ef0bd5751ea76de6d6c98c03a macsec.mka-ckn f2b4297d39da7330910a74abc0449feb45b5c0b9fc23df1430e1898fcf1c4550
在
macsec.mka-cak
和macsec.mka-ckn
参数中使用上一步生成的 CAK 和 CKN。在 MACsec-protected 网络的每个主机上,这些值必须相同。配置 MACsec 连接中的 IP 设置。
配置
IPv4
设置。例如,要为macsec0
连接设置静态IPv4
地址、网络掩码、默认网关和 DNS 服务器,请输入:# nmcli connection modify macsec0 ipv4.method manual ipv4.addresses '192.0.2.1/24' ipv4.gateway '192.0.2.254' ipv4.dns '192.0.2.253'
配置
IPv6
设置。例如,要为macsec0
连接设置静态IPv6
地址、网络掩码、默认网关和 DNS 服务器,请输入:# nmcli connection modify macsec0 ipv6.method manual ipv6.addresses '2001:db8:1::1/32' ipv6.gateway '2001:db8:1::fffe' ipv6.dns '2001:db8:1::fffd'
激活连接:
# nmcli connection up macsec0
验证
验证流量是否加密:
# tcpdump -nn -i enp1s0
可选:显示未加密的流量:
# tcpdump -nn -i macsec0
显示 MACsec 统计信息:
# ip macsec show
显示每种保护类型的单独的计数器:仅完整性(关闭加密)和加密(打开加密)
# ip -s macsec show