如何使用 Libreswan 配置 IPsec VPN

基於 IPsec 的 VPN 的目的是在 OSI 模型的網絡層加密流量,使攻擊者無法在客戶端和 VPN 服務器之間竊聽。 在我們關於 strongswan 的文章中,它也提供了 Windows、Linux 和 Mac OS 上的 IPsec 協議功能。 但是,LibreSwan 和 OpenSwan 工具也可用於相同目的。 在本教程中,我們的重點是 LibreSwan,它是 Unix/Linux 環境下 IPsec 協議的另一個實現。 LibreSwan 從 OpenSwan IPsec 項目分叉出來,可在基於 RedHat 的 Linux 發行版上使用。

在本教程中,LibreSwan 將在 Ubuntu 16.04 LTS 上從源代碼編譯。 自述文件中給出了針對不同 Linux 發行版編譯 LibreSwan 的說明 以下快照顯示了安裝 LibreSwan 所需的軟件包、啟用/禁用功能和命令。

安裝 LibreSwan 後,將在網關到網關模式中配置 VPN 以加密流量。 不同的 LibreSwan 的例子 項目網站上給出了配置。

如何安裝 Libreswan

還假設在 Linux 發行版上啟用了數據包轉發。 在 Ubuntu 16.04 LTS 上編譯 LibreSwan 需要以下軟件包。

apt-get -y update
apt-get -y install libnss3-dev libnspr4-dev pkg-config libpam0g-dev libcap-ng-dev libcap-ng-utils libselinux1-dev libcurl4-nss-dev flex bison gcc make

LibreSwan 的最新源代碼可以從 項目網站. 使用以下命令提取壓縮文件。

tar -xzf libreswan-3.19.tar.gz

現在運行“make”命令來獲取 LibreSwan 編譯的指令。

因此,運行“make all”命令在 Ubuntu VM 上構建 LibreSwan。 此命令將生成以下錯誤,即未找到未綁定的頭文件。

fatal error: unbound.h: No suh file or directory

因此,LibreSwan 還需要更多的軟件包。 以下命令將安裝未綁定的開發庫。

apt-get install libunbound-dev

在編譯 LibreSwan 時會出現另一個由於缺少事件庫而導致的錯誤。

fatal error: event.h: No suh file or directory

運行以下命令安裝 libevent 包。

apt-get install libevent-dev

由於在 Ubuntu 平台上缺少 systemd 包,安裝腳本顯示另一個錯誤。

fatal error: systemd/sd-daemon.h: No suh file or directory

所需包的安裝如下所示。

apt-get install libsystemd-dev

最後,再次運行“make all”或“make install”來編譯和安裝LibreSwan。

make all

上面的命令將在系統上安裝 LibreSwan。 但是,使用“ipsec start”命令時出現以下錯誤。

/usr/local/sbin/ipsec: certutil: Not found

以下命令也給出瞭如下所示的相同錯誤。

ipsec setup start
ipsec initnss

*(需要 NSS 庫生成所需的密鑰)

/usr/local/sbin/ipsec: certutil: Not found
apt-get install libnss3-tools

以下命令初始化 LibreSwan 工具所需的 NSS 加密庫。

ipsec initnss

最後,成功啟動ipsec服務如下圖。

ipsec setup start

成功安裝 LibreSwan 後,下一步是在兩個 VM 上配置 VPN 設置。 在這 example,建立了一個基於 PSK 的隧道來保護網關到網關的流量。

A面——ipsec.conf配置文件

root@test-VirtualBox:/home/test# cat /etc/ipsec.conf
config setup
protostack=netkey
conn vpn

left=192.168.15.50
leftsubnet=10.12.50.0/24
right=192.168.15.5
rightsubnet=10.12.5.0/24
authby=secret
pfs=yes
rekey=yes
keyingtries=3
type=tunnel
auto=start
ike=aes256-sha1;modp2048
phase2alg=aes256-sha1;modp2048

ipsec.secrets

192.168.15.50 192.168.15.5: PSK "12345678asdfghjk1qwe3wqA“

B 面 – ipsec.conf 配置文件

root@test-VirtualBox:/home/test# cat /etc/ipsec.conf
config setup
protostack=netkey
conn vpn

left=192.168.15.50
leftsubnet=10.12.50.0/24
right=192.168.15.5
rightsubnet=10.12.5.0/24
authby=secret
pfs=yes
rekey=yes
keyingtries=3
type=tunnel
auto=start
ike=aes256-sha1;modp2048
phase2alg=aes256-sha1;modp2048

ipsec.secrets

192.168.15.5 192.168.15.50: PSK "12345678asdfghjk1qwe3wqA“

設置好以上配置後,在雙方運行以下命令,ipsec 協商過程將開始。

ipsec restart

A面:

B面:

還使用以下命令檢查 ipsec vpn 的狀態。

setkey -D

上面的快照顯示了在 VM 之間建立的 4 個 SA(安全關聯),並且隧道的狀態為“成熟”。

結論

在本教程中,另一個開源 IPsec 實現“LibreSwan”已成功編譯並安裝在 Ubuntu VM 上。 它還被配置為基於兩個 VM 之間的 PSK 建立網關到網關 VPN。 還觀察到 LibreSwan 的配置與 StrongSwan 不同。