VPN IPsec dựa trên StrongSwan sử dụng chứng chỉ và khóa được chia sẻ trước trên Ubuntu 16.04

theanh

Administrator
Nhân viên
Giới thiệu

Trong bài viết này, chúng tôi tập trung vào việc triển khai mã nguồn mở của giao thức IPsec. Tính bảo mật của lớp mạng được đảm bảo bằng cách sử dụng giao thức IPsec bao gồm hai thành phần sau.
  • Tiêu đề xác thực (AH)
  • Gói tải bảo mật (ESP)
Tính toàn vẹn và xác thực của gói được đảm bảo bằng cách sử dụng AH, thành phần ESP cung cấp các tính năng bảo mật và bảo mật. Việc triển khai mã nguồn mở của IPsec, StrongSwan (Strong Secure WAN), là một công cụ nổi tiếng hỗ trợ cả hai phiên bản trao đổi khóa internet (IKE v1/2)/. Chia sẻ khóa hoặc trao đổi khóa internet là một phần của IPSec VPN (mạng riêng ảo). Cơ chế IKE được sử dụng để chia sẻ khóa giữa hai bên để mã hóa dữ liệu trong giao thức ESP. Mã hóa & Thuật toán toàn vẹn (như AES, SHA, v.v.) của OpenSSL và các thư viện mã hóa được sử dụng trong bước IKE. Tuy nhiên, việc triển khai thuật toán bảo mật của hạt nhân Linux được sử dụng trong phần chính của IPSec (ESP & AH). Strongswan.

Các tính năng của Strongswan
  • Hỗ trợ xác thực dựa trên khóa được chia sẻ trước.
  • Chứng chỉ ở định dạng X.509 được hỗ trợ để xác thực.
  • Một daemon duy nhất hỗ trợ cả IKE v1/v2.
  • Có thể dễ dàng tích hợp các plugin và thư viện của bên thứ ba.
  • Mã thông báo phần cứng được hỗ trợ bằng cách sử dụng dự án openSC.


Strongswan hỗ trợ Gateway-to-Gateway và Road Warrior VPN. Lưu lượng mạng được mã hóa hoặc giải mã tại các thiết bị cổng của một tổ chức trong VPN site-to-site. Tuy nhiên, một kênh bảo mật thứ hai được thiết lập từ thiết bị cổng đến máy người dùng cuối/máy khách.

Trong bài viết này, công cụ strongSwan sẽ được cài đặt trên Ubuntu 16.04 (LTS), tôi sẽ trình bày về tích hợp OpenSC cho các mã thông báo phần cứng và cuối cùng là tạo đường hầm cổng-đến-cổng bằng khóa được chia sẻ trước và chứng chỉ x.509. Mã thông báo phần cứng hoặc Mô-đun bảo mật phần cứng (HSM) như USB và thẻ thông minh có thể được sử dụng với strongswan để lưu trữ khóa mật mã (công khai và riêng tư) và chứng chỉ. Hỗ trợ mã thông báo phần cứng trong strongswanis được cung cấp bằng OpenSC (bộ công cụ & thư viện), một dự án nguồn mở. Cấu trúc tệp dựa trên PKCS#15 và quyền truy cập thẻ thông minh bằng API PKCS#11 cũng được cung cấp bởi công cụ OpenSC. Các thẻ thông minh sau được openSC hỗ trợ.
  • WestCOS
  • SetCOS
  • CardOs
  • STARCOS
  • ASEPCOS

Cài đặt Strongswan (nhị phân và mã nguồn)​

Các gói nhị phân (deb/rpm) của strongswan có sẵn trong hầu hết các bản phân phối Linux được sử dụng rộng rãi. Việc cài đặt strongswan bằng cách sử dụng mã nhị phân và mã nguồn (có các tính năng mong muốn) sẽ được giải thích toàn diện trong bài viết này.

Gói nhị phân của strongswan có thể được cài đặt bằng cách sử dụng lệnh sau trên Ubuntu 16.04 LTS.
Mã:
aptitude install strongswan


Các plugin strongswan có sẵn trong kho lưu trữ Ubuntu được hiển thị bên dưới.



Sau khi cài đặt trên nền tảng Ubuntu, các tệp cấu hình & các thư mục (ipsec.conf, ipsec.secrets, ipsec.d,strongswan.conf, strongswan.d) được lưu trữ trong thư mục /etc.


Biên dịch Strongswan sử dụng nguồn​

  • Opensc (để hỗ trợ HSM trong strongswan).
  • PC/SC (Yêu cầu hỗ trợ đầu đọc thẻ thông minh trên nền tảng Ubuntu).
  • Thư viện GMP (yêu cầu cho phép tính toán trong strongswan).
  • Công cụ OpenSSL (triển khai thuật toán mã hóa nổi tiếng như AES, SHA1).
  • PKCS (Tiêu chuẩn mã hóa khóa công khai) 1,7,8,11,12.
Trong bài viết này, công cụ PCSC-Lite sẽ được cài đặt cùng opensc trên nền tảng Ubuntu để hỗ trợ thêm cho đầu đọc thẻ thông minh. PCSC-Liteđược khuyến nghị cho người đọc CCID.

Chạy các lệnh sau để cài đặt phần mềm tiên quyết trước khi chúng ta bắt đầu biên dịch strongswan.

1. Cài đặt Opensc
Mã:
aptitude install opensc


2. Cài đặt thư viện GMP
Mã:
aptitude install libgmp10


Cài đặt thư viện phát triển của GMP.
Mã:
aptitude install libgmp-dev


OpenSSL libcrypto được cài đặt bằng cách sử dụng lệnh sau.
Mã:
apt-get install libssl-dev


Các bước biên dịch




Đi đến thư mục /usr/src/và tải xuống bản phát hành mới nhất của strongswan bằng lệnh wget.
Mã:
cd /usr/src
Mã:
wget [URL=https://download.strongswan.org/strongswan-5.5.0.tar.gz?utm_source=diendancongnghe.com]https://download.strongswan.org/strongswan-5.5.0.tar.gz[/URL]


Giải nén tệp nén và vào thư mục đã giải nén để chạy tập lệnh cấu hình.
Mã:
tar –xzf strongswan-5.5.0.tar.gz
Mã:
cd strongswan-5.5.0


Chạy tập lệnh cấu hình để kiểm tra các phụ thuộc của strongswan. Hỗ trợ HSM đã được bật trong phiên bản mới nhất của strongswan như được hiển thị bên dưới.



Chạy tập lệnh cấu hình, sử dụng tiền tố /usr/local và bật hỗ trợ openssl.
Mã:
./configure --prefix=/usr/local --enable-openssl
Ảnh chụp nhanh sau đây cho thấy không có lỗi nào được tạo ra bởi tập lệnh cấu hình vì tất cả các phụ thuộc bắt buộc đã được cài đặt trên hệ thống.
Chạy hai lệnh sau để biên dịch và cài đặt strongswan trong thư mục /usr/local.
Mã:
make

Mã:
make install


Việc biên dịch và cài đặt strongswan trên nền tảng Ubuntu đã hoàn tất, một số tệp cấu hình (strongswan.conf, ipsec.conf và ipsec.secrets) và các thư mục (strongswan.d,ipsec.d) được sao chép theo đường dẫn /usr/local/etc. Cấu hình của chính sách VPN được đặt trong tệp ipsec.conf và các bí mật được lưu trữ trong tệp ipsec.secrets. Cấu hình plugin Strongswan được lưu trữ trong thư mục strongswan.d.



Cả VPN truyền tải và VPN đường hầm đều được strongswan hỗ trợ. Ở chế độ đường hầm, bảo mật site-to-site của kênh được cung cấp và nó hoạt động với các nhà cung cấp khác như thiết bị cisco, huawei và juniper.


VPN Site-to-Site​

Hình sau đây cho thấy vị trí của thiết bị cổng VPN dựa trên strongswan trong mạng. Một kênh truyền thông an toàn sẽ được thiết lập giữa các mạng riêng 192.168.223.0/24 và 192.168.222.0/24 của tổ chức.

Trước khi sử dụng IPsec giữa mạng riêng A và B, hãy đảm bảo định tuyến giữa các Cổng VPN của tổ chức đang hoạt động để cổng VPN ở phía A có thể ping máy VPN phía từ xa (B) để đảm bảo kết nối mạng ổn.

Như được hiển thị bên dưới, cấu hình mặc định của công cụ strongswan nằm bên trong thư mục /usr/local/etc/.


Đường hầm dựa trên khóa được chia sẻ trước​

Trong trường hợp đầu tiên, một VPN dựa trên bí mật được chia sẻ sẽ được tạo giữa các thiết bị cổng. Thuật toán chia sẻ khóa nổi tiếng Diffie-Hellman được strongswan sử dụng để xác thực lẫn nhau. Chi tiết về cách thức hoạt động của giao thức IPsec có tại liên kết sau.

http://www.unixwiz.net/techtips/iguide-ipsec.html

Cấu hình VPN:

(A-side)

Cấu hình chính của chính sách VPN strongswan nằm trong tệp ipsec.conf. Thông tin như được cung cấp bên dưới có trong tệp cấu hình này.
  • Phiên bản IKE
  • Loại đường hầm
  • nguồn & cổng đích
  • mạng riêng của VPN
ipsec.conf của A được đưa ra bên dưới.
Mã:
config setup
 charondebug="all"
 uniqueids=yes
 strictcrlpolicy=no
conn %default
conn tunnel #
 left=192.168.1.101
 leftsubnet=192.168.223.0/24
 right=192.168.1.102
 rightsubnet=192.168.222.0/24
 ike=aes256-sha2_256-modp1024!
 esp=aes256-sha2_256!
 keyingtries=0
 ikelifetime=1h
 lifetime=8h
 dpddelay=30
 dpdtimeout=120
 dpdaction=restart
 authby=secret
 auto=start
 keyexchange=ikev2
 type=tunnel


Bí mật IPsec (khóa chia sẻ, mật khẩu của khóa riêng, mã PIN để mở khóa hsm) được lưu trữ trong tệpipsec.secrets. Như được hiển thị bên dưới, bí mật phân mảnh giữa cả hai bên VPN là "test12345".
Mã:
192.168.1.101 192.168.1.102 : PSK 'test12345'[B]
[/b]

(B-side)

Cấu hình trong các tệp ipsec.conf và ipsec.secrets ở phía từ xa sẽ ngược lại với trang web cục bộ như được đưa ra bên dưới.

Nội dung của tệp ipsec.conf được đưa ra bên dưới.
Mã:
cài đặt cấu hình
 charondebug="all"
 uniqueids=yes
 strictcrlpolicy=no
conn %default
conn tunnel #
 left=192.168.1.102
 leftsubnet=192.168.222.0/24
 right=192.168.1.101
 rightsubnet=192.168.223.0/24
 ike=aes256-sha2_256-modp1024!
 esp=aes256-sha2_256!
 keyingtries=0
 ikelifetime=1h
 lifetime=8h
 dpddelay=30
 dpdtimeout=120
 dpdaction=restart
 authby=secret
 auto=start
 keyexchange=ikev2
 type=tunnel


Tệp ipsec.secrets chứa bí mật được chia sẻ ở phía từ xa.
Mã:
192.168.1.102 192.168.1.101 : PSK 'test12345'


Khởi động daemon strongswan (charon) bằng lệnh sau sau khi bạn thiết lập tệp cấu hình trên cả hai phía.

ipsec restart



Lệnh sau hiển thị trạng thái của VPN đã tạo trên các thiết bị.

ipsec statusall

Trạng thái của đường hầm trên cả hai phía (cục bộ và từ xa) được hiển thị bên dưới.





Lệnh Linux này hiển thị các chính sách và trạng thái của đường hầm IPsec.
Mã:
trạng thái ip xfrm
Mã:
chính sách ip xfrm


Như được hiển thị trong đầu ra lệnh ở trên, thông tin nhạy cảm esp/hmac (khóa) cũng được hiển thị bằng lệnh ip xfrm.


Đường hầm dựa trên chứng chỉ X.509​

Trong đường hầm dựa trên chứng chỉ X.509 (Xác thực khóa công khai), cần phải tạo chứng chỉ cho cơ quan cấp chứng chỉ (CA), máy khách A và B.

Tạo chứng chỉ CA tự ký bằng tiện ích PKI của strongswan được hiển thị trong các ảnh chụp màn hình sau.

Vào đường dẫn /usr/local/etc/ipsec.d và chạy các lệnh sau.
Mã:
cd /usr/local/etc/ipsec.d
Mã:
ipsec pki --gen --type rsa --size 4096 --outform pem > private/strongswanKey.pem
Mã:
ipsec pki --self --ca --lifetime 3650 --in private/strongswanKey.pem --type rsa --dn "C=CH, O=strongSwan, CN=Root CA" --outform pem > cacerts/strongswanCert.pem


Việc tạo chứng chỉ cho máy khách A được hiển thị bên dưới.
Mã:
ipsec pki --gen --type rsa --size 2048 --outform pem > private/client1Key.pem
Mã:
chmod 600 private/client1Key.pem
Mã:
ipsec pki --pub --in private/client1Key.pem --type rsa | ipsec pki --issue --lifetime 730 --cacert cacerts/strongswanCert.pem --cakey private/strongswanKey.pem --dn "C=CH, O=strongSwan, CN=device1" --san device1 --flag serverAuth --flag ikeIntermediate --outform pem > certs/client1Cert.pem


Cặp khóa công khai/riêng tư và chứng chỉ tương tự được tạo cho máy khách B.
Mã:
ipsec pki --gen --type rsa --size 2048 --outform pem > private/client2Key.pem
Mã:
chmod 600 private/client2Key.pem
Mã:
ipsec pki --pub --in private/client2Key.pem --type rsa | ipsec pki --issue --lifetime 730 --cacert cacerts/strongswanCert.pem --cakey private/strongswanKey.pem --dn "C=CH, O=strongSwan, CN=device2" --san device2 --flag serverAuth --flag ikeIntermediate --outform pem > certs/client2Cert.pem


Sau khi tạo thành công CA và chứng chỉ máy khách, bước tiếp theo là thay đổi cấu hình ipsec.conf và ipsec.secrets. Vui lòng tham khảo tài liệu Strongswan để biết thêm chi tiết về những thay đổi trong ipsec.conf và tệp bí mật.

Nội dung của ipsec.conf & ipsec.secrets cho phía A được đưa ra bên dưới.
Mã:
config setup
 charondebug="all"
 uniqueids=yes
 strictcrlpolicy=no
conn %default
conn tunnel #
 left=192.168.1.101
 leftsubnet=192.168.223.0/24
 right=192.168.1.102
 rightsubnet=192.168.222.0/24
 ike=aes256-sha2_256-modp1024!
 esp=aes256-sha2_256!
 keyingtries=0
 ikelifetime=1h
 lifetime=8h
 dpddelay=30
 dpdtimeout=120
 dpdaction=restart
 [B]#authby=secret[/b]
 auto=start
 keyexchange=ikev2
 type=tunnel
 [B]leftcert=client1Cert.pem[/b]
[B] leftid="C=CH, O=strongSwan, CN=device1"[/b]
[B] rightid="C=CH, O=strongSwan, CN=device2"[/b]



Mã:
#192.168.1.101 192.168.1.102 : PSK 'test12345'
: RSA client1Key.pem


Cấu hình của phía B cũng được đưa ra bên dưới.
Mã:
cài đặt cấu hình
 charondebug="all"
 uniqueids=yes
 strictcrlpolicy=no
conn %default
conn tunnel #
 left=192.168.1.102
 leftsubnet=192.168.222.0/24
 right=192.168.1.101
 rightsubnet=192.168.223.0/24
 ike=aes256-sha2_256-modp1024!
 esp=aes256-sha2_256!
 keyingtries=0
 ikelifetime=1h
 lifetime=8h
 dpddelay=30
 dpdtimeout=120
 dpdaction=restart
 #authby=secret
 auto=start
 keyexchange=ikev2
 type=tunnel
 leftcert=client2Cert.pem
 leftid="C=CH, O=strongSwan, CN=device2"
 rightid="C=CH, O=strongSwan, CN=device1"

Mã:
#192.168.1.102 192.168.1.101 : PSK 'test12345'
: RSA client2Key.pem


Chạy lệnh ipsec restart để áp dụng các thay đổi trên và kiểm tra trạng thái của đường hầm được tạo bằng chứng chỉ.
Mã:
ipsec statusall # ở phía A

Mã:
ipsec statusall # ở phía B


Cuối cùng, VPN dựa trên chứng chỉ đã được được tạo thành công bằng cách sử dụng công cụ strongswan.
 
Back
Bên trên