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.
Các tính năng của Strongswan
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ợ.
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.
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.
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
2. Cài đặt thư viện GMP
Cài đặt thư viện phát triển của GMP.
OpenSSL libcrypto được cài đặt bằng cách sử dụng lệnh sau.
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.
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.
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.
Ả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.
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.
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/.
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.
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".
Nội dung của tệp ipsec.conf được đưa ra bên dưới.
Tệp ipsec.secrets chứa bí mật được chia sẻ ở phía từ xa.
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.
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.
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.
Việc tạo chứng chỉ cho máy khách A được hiển thị bên dưới.
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.
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.
Cấu hình của phía B cũng được đưa ra bên dưới.
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ỉ.
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.
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)
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.
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
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
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.