- Sản phẩm & Dịch vụSản phẩm & Dịch vụ
- Giải phápGiải pháp
- Bảng giáBảng giá
- Công tyCông ty
- Tài liệuTài liệu
vi
vi
Chuyên mục với các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.
Technical Writer
I have over 5 years of experience writing technical documentation for tech products, making them accessible and user-friendly. My focus is always on providing clear and precise information. @#@ Tôi đã có hơn 5 năm kinh nghiệm viết tài liệu kỹ thuật cho các sản phẩm công nghệ, giúp người dùng dễ dàng tiếp cận và sử dụng. Tôi luôn tập trung vào việc cung cấp thông tin chính xác và dễ hiểu.
Thảo luận (0)
Đăng nhập để thảo luận
Mạng riêng ảo (VPN) là một công cụ mạnh mẽ cho phép bạn mã hóa an toàn lưu lượng truy cập khi đi qua các mạng không tin cậy, ví dụ như ở quán cà phê, hội nghị, hay sân bay. Với một VPN, bạn có thể duy trì quyền riêng tư và bảo mật dữ liệu của mình, bất kể bạn đang ở đâu.

Trong số các giao thức VPN, Internet Key Exchange v2 (IKEv2) nổi bật với khả năng hoạt động ổn định và hiệu quả. IKEv2 là một giao thức cho phép thiết lập đường hầm IPSec trực tiếp giữa máy chủ và máy khách.
Trong các triển khai VPN IKEv2, IPSec cung cấp mã hóa cho toàn bộ lưu lượng mạng, đảm bảo rằng dữ liệu của bạn được bảo vệ toàn diện. Một ưu điểm lớn của IKEv2 là nó được hỗ trợ nguyên bản trên một số nền tảng phổ biến như OS X 10.11+, iOS 9.1+, và Windows 10 mà không cần ứng dụng bổ sung, đồng thời xử lý các sự cố kết nối từ phía máy khách (như mất sóng di động tạm thời) khá mượt mà.
Trong hướng dẫn chi tiết này, chúng ta sẽ xây dựng một máy chủ VPN IKEv2 sử dụng StrongSwan – một daemon IPSec mã nguồn mở mạnh mẽ – trên hệ điều hành Ubuntu 22.04. Sau khi hoàn tất việc thiết lập máy chủ, tôi sẽ hướng dẫn bạn cách kết nối tới VPN từ nhiều loại máy khách khác nhau, bao gồm Windows, macOS, Ubuntu, iOS và Android.
sudo và có cài sẵn tường lửa.Đầu tiên, bạn sẽ cài đặt StrongSwan, một daemon IPSec mã nguồn mở mà chúng ta sẽ cấu hình làm máy chủ VPN của mình. Bạn cũng sẽ cài đặt thành phần hạ tầng khóa công khai (PKI) để có thể tạo Certificate Authority (CA – Tổ chức cấp chứng chỉ) nhằm cung cấp thông tin xác thực cho hạ tầng của bạn.
Bắt đầu bằng cách cập nhật bộ đệm gói cục bộ:
sudo apt update
Sau đó, cài đặt phần mềm bằng cách gõ:
sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins libstrongswan-extra-plugins
Gói bổ sung libcharon-extauth-plugins được sử dụng để đảm bảo rằng nhiều máy khách khác nhau có thể xác thực với máy chủ của bạn bằng cách sử dụng tên người dùng và mật khẩu chia sẻ. Gói libstrongswan-extra-plugins được bao gồm để StrongSwan hỗ trợ các bộ mã hóa đường cong elip sử dụng bộ mật mã Curve25519.
Giờ đây, mọi thứ đã được cài đặt, hãy chuyển sang tạo chứng chỉ của bạn.
Một máy chủ IKEv2 yêu cầu một chứng chỉ để xác định chính nó với các máy khách. Để giúp tạo chứng chỉ cần thiết, gói strongswan-pki đi kèm với một tiện ích có tên pki để tạo Certificate Authority và chứng chỉ máy chủ.
Để bắt đầu, hãy tạo một vài thư mục để lưu trữ tất cả các tệp mà bạn sẽ làm việc. Cấu trúc thư mục này khớp với một số thư mục trong /etc/ipsec.d .
mkdir -p ~/pki/{cacerts,certs,private}
Sau đó, hãy khóa quyền hạn để các tệp riêng tư của chúng ta không thể bị người dùng khác nhìn thấy:
chmod 700 ~/pki
Giờ đây, bạn đã có một cấu trúc thư mục để lưu trữ mọi thứ, bạn có thể tạo một khóa gốc. Đây sẽ là một khóa RSA 4096-bit sẽ được sử dụng để ký chứng chỉ Certificate Authority gốc của bạn.
Thực thi các lệnh sau để tạo khóa:
pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem
Sau đó, bạn có thể chuyển sang tạo Certificate Authority gốc của mình, sử dụng khóa bạn vừa tạo để ký chứng chỉ gốc:
pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \\\\
--type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem
Tùy chọn --lifetime 3650 được sử dụng để đảm bảo rằng chứng chỉ gốc của tổ chức cấp chứng chỉ sẽ có hiệu lực trong 10 năm. Chứng chỉ gốc cho một tổ chức thường không thay đổi, vì nó sẽ phải được phân phối lại cho mọi máy chủ và máy khách dựa vào nó, vì vậy 10 năm là một giá trị mặc định an toàn.
Bạn có thể thay đổi giá trị “tên phân biệt” (distinguished name – DN) thành thứ khác nếu muốn. Trường tên chung (CN) ở đây chỉ là một chỉ báo, vì vậy nó không nhất thiết phải khớp với bất kỳ thứ gì trong hạ tầng của bạn.
Giờ đây, bạn đã có Certificate Authority gốc hoạt động, bạn có thể tạo một chứng chỉ mà máy chủ VPN sẽ sử dụng.
Bạn sẽ tạo một chứng chỉ và khóa cho máy chủ VPN. Chứng chỉ này sẽ cho phép máy khách xác minh tính xác thực của máy chủ bằng cách sử dụng chứng chỉ CA mà chúng ta vừa tạo.
Đầu tiên, tạo một khóa riêng tư cho máy chủ VPN với lệnh sau:
pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem
Bây giờ, hãy tạo và ký chứng chỉ máy chủ VPN bằng khóa của Certificate Authority mà bạn đã tạo ở bước trước. Thực thi lệnh sau, nhưng hãy thay đổi trường Common Name (CN) và Subject Alternate Name (SAN) thành tên miền DNS hoặc địa chỉ IP của máy chủ VPN của bạn:
pki --pub --in ~/pki/private/server-key.pem --type rsa \\\\
| pki --issue --lifetime 1825 \\\\
--cacert ~/pki/cacerts/ca-cert.pem \\\\
--cakey ~/pki/private/ca-key.pem \\\\
--dn "CN=server_domain_or_IP" --san server_domain_or_IP \\\\
--flag serverAuth --flag ikeIntermediate --outform pem \\\\
> ~/pki/certs/server-cert.pem
Lưu ý: Nếu bạn sử dụng địa chỉ IP thay vì tên miền DNS, bạn sẽ cần chỉ định nhiều --san entries. Dòng trong khối lệnh trước đó nơi bạn chỉ định tên phân biệt (--dn ...) sẽ cần được sửa đổi với mục bổ sung như đoạn trích sau:
--dn "CN=IP address" --san @IP_address --san IP_address \\\\
Lý do cho mục --san @IP_address bổ sung này là một số máy khách sẽ kiểm tra xem chứng chỉ TLS có cả mục nhập DNS và mục nhập Địa chỉ IP cho một máy chủ khi chúng xác minh danh tính của nó.
Tùy chọn --flag serverAuth được sử dụng để chỉ ra rằng chứng chỉ sẽ được sử dụng rõ ràng để xác thực máy chủ, trước khi đường hầm mã hóa được thiết lập. Tùy chọn --flag ikeIntermediate được sử dụng để hỗ trợ các máy khách macOS cũ hơn.
Giờ đây, bạn đã tạo tất cả các tệp TLS/SSL mà StrongSwan cần, bạn có thể di chuyển các tệp vào vị trí trong thư mục /etc/ipsec.d bằng cách gõ:
sudo cp -r ~/pki/* /etc/ipsec.d/
Trong bước này, bạn đã tạo một cặp chứng chỉ sẽ được sử dụng để bảo mật thông tin liên lạc giữa máy khách và máy chủ.
Bạn cũng đã ký các chứng chỉ bằng khóa CA, vì vậy máy khách sẽ có thể xác minh tính xác thực của máy chủ VPN bằng chứng chỉ CA. Với tất cả các chứng chỉ này đã sẵn sàng, bạn đã sẵn sàng chuyển sang cấu hình StrongSwan.
StrongSwan có một tệp cấu hình mặc định với một số ví dụ, nhưng chúng ta sẽ phải tự cấu hình phần lớn. Hãy sao lưu tệp để tham khảo trước khi bắt đầu lại từ đầu:
sudo mv /etc/ipsec.conf{,.original}
Tạo và mở một tệp cấu hình mới trống bằng trình soạn thảo văn bản ưa thích của bạn. Ở đây, bạn sẽ sử dụng nano:
sudo nano /etc/ipsec.conf
Đầu tiên, chúng ta sẽ yêu cầu StrongSwan ghi lại trạng thái daemon để gỡ lỗi và cho phép các kết nối trùng lặp. Thêm các dòng này vào tệp:
config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=no
Sau đó, chúng ta sẽ tạo một phần cấu hình cho VPN của chúng ta. Chúng ta cũng sẽ yêu cầu StrongSwan tạo IKEv2 VPN Tunnels và tự động tải phần cấu hình này khi nó khởi động.
. . .
conn ikev2-vpn
auto=add
compress=no
type=tunnel
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
Chúng ta cũng sẽ cấu hình phát hiện “peer chết” (dead-peer detection) để xóa bất kỳ kết nối “treo” nào trong trường hợp máy khách ngắt kết nối đột ngột. Thêm các dòng này:
. . .
conn ikev2-vpn
. . .
dpdaction=clear
dpddelay=300s
rekey=no
Tiếp theo, chúng ta sẽ cấu hình các tham số IPSec phía “left” của máy chủ. Mỗi tham số sau đây đảm bảo rằng máy chủ được cấu hình để chấp nhận các kết nối từ máy khách và tự xác định chính xác. Bạn sẽ thêm từng cài đặt này vào tệp /etc/ipsec.conf sau khi bạn đã quen thuộc với chúng và lý do chúng được sử dụng:
left=%any: Giá trị %any đảm bảo rằng máy chủ sẽ sử dụng giao diện mạng nơi nó nhận các kết nối đến cho các giao tiếp tiếp theo với máy khách. Ví dụ, nếu bạn đang kết nối máy khách qua một mạng riêng, máy chủ sẽ sử dụng địa chỉ IP riêng nơi nó nhận lưu lượng truy cập cho phần còn lại của kết nối.leftid=@server_domain_or_IP: Tùy chọn này kiểm soát tên mà máy chủ hiển thị cho máy khách. Khi kết hợp với tùy chọn leftcert tiếp theo, tùy chọn leftid đảm bảo rằng tên được cấu hình của máy chủ và Distinguished Name (DN) có trong chứng chỉ công khai khớp nhau.leftcert=server-cert.pem: Tùy chọn này là đường dẫn đến chứng chỉ công khai cho máy chủ mà bạn đã cấu hình ở Bước 3. Nếu không có nó, máy chủ sẽ không thể tự xác thực với máy khách, hoặc hoàn tất việc đàm phán thiết lập IKEv2.leftsendcert=always: Giá trị always đảm bảo rằng bất kỳ máy khách nào kết nối với máy chủ sẽ luôn nhận được một bản sao chứng chỉ công khai của máy chủ như một phần của thiết lập kết nối ban đầu.leftsubnet=0.0.0.0/0: Tùy chọn phía “left” cuối cùng mà bạn sẽ thêm cho máy khách biết về các mạng con có thể truy cập phía sau máy chủ. Trong trường hợp này, 0.0.0.0/0 được sử dụng để đại diện cho toàn bộ tập hợp các địa chỉ IPv4, có nghĩa là máy chủ sẽ yêu cầu máy khách gửi tất cả lưu lượng của chúng qua VPN theo mặc định.Giờ đây bạn đã quen thuộc với từng tùy chọn phía “left” có liên quan, hãy thêm tất cả chúng vào tệp như sau:
. . .
conn ikev2-vpn
. . .
left=%any
leftid=@server_domain_or_IP
leftcert=server-cert.pem
leftsendcert=always
leftsubnet=0.0.0.0/0
Lưu ý: Khi cấu hình ID máy chủ (leftid), chỉ bao gồm ký tự @ nếu máy chủ VPN của bạn sẽ được xác định bằng một tên miền:
. . . leftid=@vpn.example.com
. . .
Nếu máy chủ sẽ được xác định bằng địa chỉ IP của nó, chỉ cần đặt địa chỉ IP vào:
. . .
leftid=your_server_ip
. . .
Tiếp theo, chúng ta có thể cấu hình các tham số IPSec phía “right” của máy khách. Mỗi tham số sau đây cho máy chủ biết cách chấp nhận các kết nối từ máy khách, cách máy khách nên xác thực với máy chủ, và các dải địa chỉ IP riêng và máy chủ DNS mà máy khách sẽ sử dụng. Thêm từng cài đặt này vào tệp /etc/ipsec.conf sau khi bạn đã quen thuộc với chúng và lý do chúng được sử dụng:
right=%any: Tùy chọn %any cho phía “right” của kết nối chỉ thị máy chủ chấp nhận các kết nối đến từ bất kỳ máy khách từ xa nào.rightid=%any: Tùy chọn này đảm bảo rằng máy chủ sẽ không từ chối các kết nối từ máy khách cung cấp danh tính trước khi đường hầm mã hóa được thiết lập.rightauth=eap-mschapv2: Tùy chọn này cấu hình phương thức xác thực mà máy khách sẽ sử dụng để xác thực với máy chủ. eap-mschapv2 được sử dụng ở đây để tương thích rộng rãi, hỗ trợ các máy khách như Windows, macOS và thiết bị Android.rightsourceip=10.10.10.0/24: Tùy chọn này chỉ thị máy chủ gán địa chỉ IP riêng cho máy khách từ pool IP 10.10.10.0/24 đã chỉ định.rightdns=8.8.8.8,8.8.4.4: Các địa chỉ IP này là các bộ phân giải DNS công khai của Google. Chúng có thể được thay đổi để sử dụng các bộ phân giải công khai khác, bộ phân giải của máy chủ VPN, hoặc bất kỳ bộ phân giải nào khác mà máy khách có thể truy cập.rightsendcert=never: Tùy chọn này chỉ thị máy chủ rằng máy khách không cần gửi chứng chỉ để xác thực chính chúng.Giờ đây bạn đã quen thuộc với các tùy chọn phía “right” cần thiết cho VPN, hãy thêm các dòng sau vào /etc/ipsec.conf:
. . .
conn ikev2-vpn
. . .
right=%any
rightid=%any
rightauth=eap-mschapv2
rightsourceip=10.10.10.0/24
rightdns=8.8.8.8,8.8.4.4
rightsendcert=never
Bây giờ chúng ta sẽ yêu cầu StrongSwan hỏi thông tin đăng nhập của người dùng khi họ kết nối:
. . .
conn ikev2-vpn
. . .
eap_identity=%identity
Cuối cùng, thêm các dòng sau để hỗ trợ máy khách Linux, Windows, macOS, iOS và Android. Các dòng này chỉ định các thuật toán trao đổi khóa, băm, xác thực và mã hóa khác nhau (thường được gọi là Cipher Suites) mà StrongSwan sẽ cho phép các máy khách khác nhau sử dụng:
. . .
conn ikev2-vpn
. . .
ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!
Mỗi bộ mã hóa được hỗ trợ được phân định với các bộ khác bằng dấu phẩy. Ví dụ, chacha20poly1305-sha512-curve25519-prfsha512 là một bộ, và aes256gcm16-sha384-prfsha384-ecp384 là một bộ khác. Các bộ mã hóa được liệt kê ở đây được chọn để đảm bảo phạm vi tương thích rộng nhất trên các máy khách Windows, macOS, iOS, Android và Linux.
Tệp cấu hình hoàn chỉnh sẽ trông như thế này:
config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=no
conn ikev2-vpn
auto=add
compress=no
type=tunnel
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
dpdaction=clear
dpddelay=300s
rekey=no
left=%any
leftid=@server_domain_or_IP
leftcert=server-cert.pem
leftsendcert=always
leftsubnet=0.0.0.0/0
right=%any
rightid=%any
rightauth=eap-mschapv2
rightsourceip=10.10.10.0/24
rightdns=8.8.8.8,8.8.4.4
rightsendcert=never
eap_identity=%identity
ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!
Lưu và đóng tệp sau khi bạn đã xác minh rằng bạn đã thêm từng dòng một cách chính xác. Nếu bạn sử dụng nano, hãy nhấn CTRL + X, Y, sau đó ENTER.
Giờ đây bạn đã cấu hình các tham số VPN, bạn có thể chuyển sang tạo một tài khoản để người dùng có thể kết nối với máy chủ.
Máy chủ VPN của bạn hiện đã được cấu hình để chấp nhận các kết nối máy khách, nhưng chưa có thông tin đăng nhập nào được cấu hình. Bạn sẽ cần cấu hình một vài thứ trong một tệp cấu hình đặc biệt có tên ipsec.secrets:
Hãy mở tệp secrets để chỉnh sửa:
sudo nano /etc/ipsec.secrets
Đầu tiên, cho StrongSwan biết nơi tìm khóa riêng tư và cách phân tích nó.
: RSA "server-key.pem"
Đảm bảo rằng dòng bắt đầu bằng ký tự : và có một khoảng trắng sau nó để toàn bộ dòng đọc là : RSA "server-key.pem".
Sau đó, bạn sẽ xác định thông tin đăng nhập của người dùng. Bạn có thể tạo bất kỳ sự kết hợp tên người dùng hoặc mật khẩu nào bạn muốn:
your_username : EAP "your_password"
Lưu và đóng tệp. Giờ đây bạn đã hoàn tất làm việc với các tham số VPN, hãy khởi động lại dịch vụ VPN để cấu hình của chúng ta được áp dụng:
sudo systemctl restart strongswan-starter
Giờ đây, máy chủ VPN đã được cấu hình đầy đủ với cả tùy chọn máy chủ và thông tin đăng nhập của người dùng, đã đến lúc chuyển sang cấu hình phần quan trọng nhất: tường lửa.
Với cấu hình StrongSwan đã hoàn tất, bạn cần cấu hình tường lửa để cho phép lưu lượng VPN đi qua và chuyển tiếp nó.
Nếu bạn đã làm theo hướng dẫn thiết lập máy chủ ban đầu, bạn sẽ có một tường lửa UFW được bật. Nếu bạn chưa cấu hình UFW, bạn nên bắt đầu bằng cách thêm một quy tắc để cho phép các kết nối SSH qua tường lửa để phiên hiện tại của bạn không bị đóng khi bạn bật UFW:
sudo ufw allow OpenSSH
Sau đó bật tường lửa bằng cách gõ:
sudo ufw enable
Sau đó, thêm một quy tắc để cho phép lưu lượng UDP đến các cổng IPSec tiêu chuẩn, 500 và 4500:
sudo ufw allow 500,4500/udp
Tiếp theo, bạn sẽ mở một trong các tệp cấu hình của UFW để thêm một vài chính sách cấp thấp cho việc định tuyến và chuyển tiếp các gói IPSec. Tuy nhiên, trước khi làm điều này, bạn cần tìm giao diện mạng nào trên máy chủ của chúng ta được sử dụng để truy cập internet. Tìm giao diện này bằng cách truy vấn thiết bị được liên kết với tuyến mặc định:
ip route show default
Giao diện công cộng của bạn sẽ nằm sau từ “dev”. Ví dụ, kết quả này hiển thị giao diện có tên eth0, được tô sáng trong ví dụ sau:
Output default via your_server_ip dev eth0 proto static
Khi bạn có giao diện mạng công cộng của mình, hãy mở tệp /etc/ufw/before.rules trong trình soạn thảo văn bản của bạn. Các quy tắc trong tệp này được thêm vào tường lửa trước phần còn lại của các quy tắc input và output thông thường. Chúng được sử dụng để cấu hình dịch địa chỉ mạng (NAT) để máy chủ có thể định tuyến chính xác các kết nối đến và đi từ máy khách và Internet.
sudo nano /etc/ufw/before.rules
Gần đầu tệp (trước dòng *filter), thêm khối cấu hình sau. Thay đổi mỗi trường hợp eth0 trong cấu hình trên để khớp với tên giao diện bạn tìm thấy bằng ip route. Các dòng *nat tạo ra các quy tắc để tường lửa có thể định tuyến và thao tác lưu lượng giữa các máy khách VPN và internet một cách chính xác. Dòng *mangle điều chỉnh kích thước phân đoạn gói tối đa để ngăn ngừa các sự cố tiềm ẩn với một số máy khách VPN:
*nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE COMMIT*mangle -A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360 COMMIT
*filter :ufw-before-input - [0:0] :ufw-before-output - [0:0] :ufw-before-forward - [0:0] :ufw-not-local - [0:0] . . .
Tiếp theo, sau dòng *filter và định nghĩa chuỗi, thêm một khối cấu hình nữa:
. . . *filter :ufw-before-input - [0:0] :ufw-before-output - [0:0] :ufw-before-forward - [0:0] :ufw-not-local - [0:0]-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT -A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT
Các dòng này yêu cầu tường lửa chuyển tiếp lưu lượng ESP (Encapsulating Security Payload) để các máy khách VPN có thể kết nối. ESP cung cấp bảo mật bổ sung cho các gói VPN của chúng ta khi chúng đi qua các mạng không tin cậy.
Khi bạn hoàn tất, lưu và đóng tệp sau khi bạn đã xác minh rằng bạn đã thêm từng dòng một cách chính xác. Nếu bạn sử dụng nano, hãy nhấn CTRL + X, Y, sau đó ENTER.
Trước khi khởi động lại tường lửa, bạn cũng cần thay đổi một số tham số kernel mạng để cho phép định tuyến từ giao diện này sang giao diện khác. Tệp kiểm soát các cài đặt này được gọi là /etc/ufw/sysctl.conf. Bạn sẽ cần cấu hình một vài thứ trong tệp.
Đầu tiên, chuyển tiếp gói IPv4 cần được bật để lưu lượng có thể di chuyển giữa VPN và các giao diện mạng hướng ra công cộng trên máy chủ. Tiếp theo, bạn sẽ tắt tính năng phát hiện Path MTU để ngăn ngừa các vấn đề phân mảnh gói. Cuối cùng, chúng ta sẽ không chấp nhận chuyển hướng ICMP cũng như không gửi chuyển hướng ICMP để ngăn chặn các cuộc tấn công man-in-the-middle.
Mở tệp cấu hình tham số kernel của UFW bằng nano hoặc trình soạn thảo văn bản ưa thích của bạn:
sudo nano /etc/ufw/sysctl.conf
Bây giờ thêm cài đặt net/ipv4/ip_forward=1 sau cùng của tệp để bật chuyển tiếp gói giữa các giao diện:
. . . net/ipv4/ip_forward=1
Tiếp theo, chặn việc gửi và nhận các gói chuyển hướng ICMP bằng cách thêm các dòng sau vào cuối tệp:
. . . net/ipv4/conf/all/accept_redirects=0 net/ipv4/conf/all/send_redirects=0
Cuối cùng, tắt tính năng phát hiện Path MTU bằng cách thêm dòng này vào cuối tệp:
. . . net/ipv4/ip_no_pmtu_disc=1
Lưu tệp khi bạn hoàn tất. Bây giờ bạn có thể kích hoạt tất cả các thay đổi của mình bằng cách tắt và bật lại tường lửa, vì UFW áp dụng các cài đặt này bất cứ khi nào nó khởi động lại:
sudo ufw disable sudo ufw enable
Bạn sẽ được nhắc xác nhận quá trình. Gõ Y để bật lại UFW với các cài đặt mới.
Giờ đây bạn đã thiết lập mọi thứ, đã đến lúc thử nghiệm. Đầu tiên, bạn sẽ cần sao chép chứng chỉ CA bạn đã tạo và cài đặt nó trên (các) thiết bị máy khách của bạn sẽ kết nối với VPN. Cách dễ nhất để làm điều này là đăng nhập vào máy chủ của bạn và xuất nội dung của tệp chứng chỉ:
cat /etc/ipsec.d/cacerts/ca-cert.pem
Bạn sẽ thấy đầu ra tương tự như sau:
Output -----BEGIN CERTIFICATE----- MIIFNDCCAxygAwIBAgIIHCsidG5mXzgwDQYJKoZIhvcNAQEMBQAwODELMAkGA1UE. . .
H2YUdz8XNHrJHvMQKWFpi0rlEcMs+MSXPFWE3Q7UbaZJ/h8wpSldSUbQRUlphExJ dJ4PX+MUJO/vjG1/ie6Kh25xbBAc3qNq8siiJZDwrg6vjEK7eiZ1rA== -----END CERTIFICATE-----
Sao chép đầu ra này vào máy tính của bạn, bao gồm các dòng -----BEGIN CERTIFICATE----- và -----END CERTIFICATE-----, và lưu nó vào một tệp với tên dễ nhận biết, chẳng hạn như ca-cert.pem. Đảm bảo tệp bạn tạo có phần mở rộng .pem.
Ngoài ra, hãy sử dụng SFTP để chuyển tệp sang máy tính của bạn.
Sau khi bạn có tệp ca-cert.pem được tải xuống máy tính của bạn, bạn có thể thiết lập kết nối tới VPN.
Có nhiều cách để nhập chứng chỉ gốc và cấu hình Windows để kết nối với VPN. Phương pháp đầu tiên sử dụng các công cụ đồ họa cho mỗi bước. Phương pháp thứ hai sử dụng các lệnh PowerShell, có thể được script hóa và sửa đổi để phù hợp với cấu hình VPN của bạn.
Lưu ý: Các hướng dẫn này đã được kiểm tra trên các cài đặt Windows 10 chạy phiên bản 1903 và 1909.
Cấu hình Windows bằng Công cụ Đồ họa
Đầu tiên, nhập chứng chỉ gốc bằng cách làm theo các bước sau:
WINDOWS+R để mở hộp thoại Run, và nhập mmc.exe để khởi chạy Windows Management Console.
ca-cert.pem mà bạn đã lưu. Sau đó nhấp Next.Sau đó cấu hình VPN với các bước sau:
Cấu hình Windows bằng PowerShell:
Để nhập chứng chỉ CA gốc bằng PowerShell, trước tiên hãy mở một dấu nhắc PowerShell với quyền quản trị. Để làm như vậy, nhấp chuột phải vào biểu tượng Start menu và chọn Windows PowerShell (Admin). Bạn cũng có thể mở một dấu nhắc lệnh với quyền quản trị và gõ powershell.
Tiếp theo, chúng ta sẽ nhập chứng chỉ bằng cmdlet Import-Certificate của PowerShell. Trong lệnh sau, đối số -CertStoreLocation đầu tiên sẽ đảm bảo rằng chứng chỉ được nhập vào kho Trusted Root Certification Authorities của máy tính để tất cả các chương trình và người dùng có thể xác minh chứng chỉ của máy chủ VPN.
Đối số -FilePath nên trỏ đến vị trí bạn đã sao chép chứng chỉ. Trong ví dụ sau, đường dẫn là C:\\\\Users\\\\sammy\\\\Documents\\\\ca-cert.pem. Đảm bảo rằng bạn chỉnh sửa lệnh để khớp với vị trí bạn đã sử dụng.
Import-Certificate `
-CertStoreLocation cert:\\\\LocalMachine\\\\Root\\\\ `
-FilePath C:\\\\users\\\\sammy\\\\Documents\\\\ca-cert.pem
Lệnh sẽ xuất ra một cái gì đó như sau:
Output PSParentPath: Microsoft.PowerShell.Security\\\\Certificate::LocalMachine\\\\RootThumbprint Subject
DB00813B4087E9367861E8463A60CEA0ADC5F002 CN=VPN root CA
Bây giờ để cấu hình VPN bằng PowerShell, hãy chạy lệnh sau. Thay thế tên miền hoặc địa chỉ IP của máy chủ của bạn trên dòng -ServerAddress. Các cờ khác nhau sẽ đảm bảo rằng Windows được cấu hình đúng với các tham số bảo mật thích hợp khớp với các tùy chọn bạn đã đặt trong /etc/ipsec.conf.
Add-VpnConnection -Name "VPN Connection" `
-ServerAddress "server_domain_or_IP" `
-TunnelType "IKEv2" `
-AuthenticationMethod "EAP" `
-EncryptionLevel "Maximum" `
-RememberCredential `
Nếu lệnh thành công sẽ không có bất kỳ đầu ra nào. Để xác nhận VPN được cấu hình đúng, hãy sử dụng cmdlet Get-VPNConnection:
Get-VpnConnection -Name "VPN Connection"
Bạn sẽ nhận được đầu ra như sau:
Output
Name : VPN Connection
ServerAddress : your_server_ip
AllUserConnection : False
Guid : {B055A1AB-175C-4028-B4A8-D34309A2B20E}
TunnelType : Ikev2
AuthenticationMethod : {Eap}
EncryptionLevel : Maximum
L2tpIPsecAuth :
UseWinlogonCredential : False
EapConfigXmlStream : #document
ConnectionStatus : Disconnected
RememberCredential : True
SplitTunneling : False
DnsSuffix :
IdleDisconnectSeconds : 0
Theo mặc định, Windows chọn các thuật toán cũ hơn và chậm hơn. Chạy cmdlet Set-VpnConnectionIPsecConfiguration để nâng cấp các tham số mã hóa mà Windows sẽ sử dụng cho trao đổi khóa IKEv2 và để mã hóa các gói:
Set-VpnConnectionIPsecConfiguration -Name "VPN Connection" `
-AuthenticationTransformConstants GCMAES256 `
-CipherTransformConstants GCMAES256 `
-DHGroup ECP384 `
-IntegrityCheckMethod SHA384 `
-PfsGroup ECP384 `
-EncryptionMethod GCMAES256
Lưu ý: Nếu bạn muốn xóa kết nối VPN và cấu hình lại nó với các tùy chọn khác, bạn có thể chạy cmdlet Remove-VpnConnection.
Remove-VpnConnection -Name "VPN Connection" -Force
Cờ -Force sẽ bỏ qua việc nhắc bạn xác nhận việc xóa. Bạn phải ngắt kết nối khỏi VPN nếu bạn cố gắng xóa nó bằng lệnh này.
Sau khi bạn đã nhập chứng chỉ và cấu hình VPN bằng một trong hai phương pháp, kết nối VPN mới của bạn sẽ hiển thị trong danh sách các mạng. Chọn VPN và nhấp Connect. Bạn sẽ được nhắc nhập tên người dùng và mật khẩu của mình. Nhập chúng vào, nhấp OK, và bạn sẽ được kết nối.
Làm theo các bước sau để nhập chứng chỉ:
Giờ đây chứng chỉ đã được nhập và tin cậy, hãy cấu hình kết nối VPN với các bước sau:
Cuối cùng, nhấp vào Connect để kết nối với VPN. Bạn bây giờ sẽ được kết nối với VPN.
Để kết nối từ máy Ubuntu, bạn có thể thiết lập và quản lý StrongSwan dưới dạng một dịch vụ hoặc sử dụng lệnh một lần mỗi khi bạn muốn kết nối. Hướng dẫn được cung cấp cho cả hai.
Để quản lý StrongSwan dưới dạng một dịch vụ, bạn sẽ cần thực hiện các bước cấu hình sau. Đầu tiên, cập nhật bộ đệm gói cục bộ của bạn bằng cách sử dụng apt
sudo apt update
Tiếp theo, cài đặt StrongSwan và các plugin cần thiết để xác thực:
sudo apt install strongswan libcharon-extra-plugins
Bây giờ bạn sẽ cần một bản sao của chứng chỉ CA trong thư mục /etc/ipsec.d/cacerts để máy khách của bạn có thể xác minh danh tính của máy chủ. Chạy lệnh sau để sao chép tệp ca-cert.pem vào đúng vị trí:
sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts
Để đảm bảo VPN chỉ chạy theo yêu cầu, hãy sử dụng systemctl để tắt StrongSwan khỏi việc tự động chạy:
sudo systemctl disable --now strongswan-starter
Tiếp theo, cấu hình tên người dùng và mật khẩu mà bạn sẽ sử dụng để xác thực với máy chủ VPN. Chỉnh sửa /etc/ipsec.secrets bằng nano hoặc trình soạn thảo ưa thích của bạn:
sudo nano /etc/ipsec.secrets
Thêm dòng sau, chỉnh sửa các giá trị tên người dùng và mật khẩu được tô sáng để khớp với những gì bạn đã cấu hình trên máy chủ:
your_username : EAP "your_password"
Cuối cùng, chỉnh sửa tệp /etc/ipsec.conf để cấu hình máy khách của bạn khớp với cấu hình của máy chủ:
config setupconn ikev2-rw right=server_domain_or_IP # This should match the
leftidvalue on your server's configuration rightid=server_domain_or_IP rightsubnet=0.0.0.0/0 rightauth=pubkey leftsourceip=%config leftid=username leftauth=eap-mschapv2 eap_identity=%identity auto=start
Để kết nối với VPN, gõ:
sudo systemctl start strongswan-starter
Để ngắt kết nối lại, gõ:
sudo systemctl stop strongswan-starter
Để quản lý StrongSwan dưới dạng một dịch vụ, bạn sẽ cần thực hiện các bước cấu hình sau. Đầu tiên, cập nhật bộ đệm gói cục bộ của bạn bằng cách sử dụng apt
sudo apt update
Tiếp theo, cài đặt StrongSwan và các plugin cần thiết để xác thực:
sudo apt install strongswan libcharon-extra-plugins
Bây giờ bạn sẽ cần một bản sao của chứng chỉ CA trong thư mục /etc/ipsec.d/cacerts để máy khách của bạn có thể xác minh danh tính của máy chủ. Chạy lệnh sau để sao chép tệp ca-cert.pem vào đúng vị trí:
sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts
Tại thời điểm này, bạn có thể kết nối với máy chủ VPN bằng charon-cmd bằng cách sử dụng chứng chỉ CA của máy chủ, địa chỉ IP của máy chủ VPN và tên người dùng bạn đã cấu hình.
Chạy lệnh sau bất cứ khi nào bạn muốn kết nối với VPN:
sudo charon-cmd --cert ca-cert.pem --host vpn_domain_or_IP --identity your_username
Khi được nhắc, cung cấp mật khẩu người dùng VPN và bạn sẽ được kết nối với VPN. Để ngắt kết nối, nhấn CTRL+C trong terminal và đợi kết nối đóng.
Để cấu hình kết nối VPN trên thiết bị iOS, hãy làm theo các bước sau:
Làm theo các bước sau để nhập chứng chỉ:
Giờ đây chứng chỉ đã được nhập vào ứng dụng StrongSwan, bạn có thể cấu hình kết nối VPN với các bước sau:
Khi bạn muốn kết nối với VPN, hãy nhấp vào hồ sơ bạn vừa tạo trong ứng dụng StrongSwan.
Nếu bạn không thể nhập chứng chỉ, hãy đảm bảo tệp có phần mở rộng .pem, và không phải .pem.txt.
Nếu bạn không thể kết nối với VPN, hãy kiểm tra tên máy chủ hoặc địa chỉ IP bạn đã sử dụng. Tên miền hoặc địa chỉ IP của máy chủ phải khớp với những gì bạn đã cấu hình làm tên chung (CN) trong khi tạo chứng chỉ.
Nếu chúng không khớp, kết nối VPN sẽ không hoạt động. Ví dụ, nếu bạn thiết lập một chứng chỉ với CN là vpn.example.com, bạn phải sử dụng vpn.example.com khi bạn nhập chi tiết máy chủ VPN. Kiểm tra kỹ lệnh bạn đã sử dụng để tạo chứng chỉ và các giá trị bạn đã sử dụng khi tạo kết nối VPN của mình.
Cuối cùng, kiểm tra kỹ cấu hình VPN để đảm bảo giá trị leftid được cấu hình với ký hiệu @ nếu bạn đang sử dụng tên miền:
leftid=@vpn.example.com
Nếu bạn đang sử dụng địa chỉ IP, đảm bảo rằng ký hiệu @ được bỏ qua. Cũng đảm bảo rằng khi bạn tạo tệp server-cert.pem rằng bạn đã bao gồm cả cờ --san @IP_address và --san IP_address.
Trong hướng dẫn này, chúng ta đã cùng nhau xây dựng một máy chủ VPN mạnh mẽ sử dụng giao thức IKEv2. Hơn nữa, bạn cũng đã tự tay cấu hình các máy khách phổ biến như Windows, macOS, iOS, Android và Linux để kết nối thành công với máy chủ VPN của mình.
Việc thêm hoặc xóa người dùng VPN rất đơn giản: bạn chỉ cần quay lại Bước 5 và chỉnh sửa tệp /etc/ipsec.secrets. Mỗi dòng trong tệp này đại diện cho một người dùng, vì vậy việc thêm hoặc xóa người dùng, hay thay đổi mật khẩu, chỉ đơn giản là việc chỉnh sửa tệp này.
Giờ đây, bạn đã trang bị kiến thức và kỹ năng để tự mình triển khai một giải pháp VPN bảo mật.