Mạng riêng ảo hoặc VPN cho phép bạn mã hóa lưu lượng một cách an toàn khi lưu lượng truy cập đi qua các mạng không đáng tin cậy, chẳng hạn như mạng ở quán cà phê, hội nghị hoặc sân bay.
Internet Key Exchange v2, hay IKEv2, là một giao thức cho phép tạo đường hầm IPSec trực tiếp giữa máy chủ và máy khách. Trong triển khai IKEv2 VPN, IPSec cung cấp mã hóa cho lưu lượng mạng. IKEv2 vốn được hỗ trợ trên một số nền tảng (OS X 10.11+, iOS 9.1+ và Windows 10) mà không cần thêm ứng dụng nào khác và nó xử lý các trục trặc của máy khách khá mượt mà.
Trong hướng dẫn này, bạn sẽ thiết lập máy chủ VPN IKEv2 bằng StrongSwan trên máy chủ Ubuntu 20.04. Sau đó, bạn sẽ tìm hiểu cách kết nối với ứng dụng khách Windows, macOS, Ubuntu, iOS và Android.
Để hoàn thành hướng dẫn này, bạn sẽ cần:
sudo
non-root user và tường lửa.Trước tiên, chúng tôi sẽ cài đặt StrongSwan, một trình nền IPSec mã nguồn mở mà chúng tôi sẽ thiết lập cấu hình làm máy chủ VPN của mình. Chúng tôi cũng sẽ cài đặt thành phần cơ sở hạ tầng khóa công khai (PKI) để có thể tạo Certificate Authority (Tổ chức phát hành chứng chỉ - CA) nhằm cung cấp thông tin xác thực cho cơ sở hạ tầng của chúng tôi.
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 libcharon-extauth-plugins
bổ sung được sử dụng để đảm bảo rằng các máy khách khác nhau có thể xác thực với máy chủ của bạn bằng tên người dùng và cụm mật khẩu dùng chung. Gói libstrongswan-extra-plugins
được bao gồm để Strongswan hỗ trợ các bộ mật mã đường cong elip sử dụng bộ mật mã Curve25519
.
Bây giờ mọi thứ đã được cài đặt, hãy chuyển sang tạo chứng chỉ của chúng tôi.
Máy chủ IKEv2 yêu cầu chứng chỉ để xác định chính nó cho khách hàng. Để giúp tạo chứng chỉ được yêu cầu, gói strongswan-pki
đi kèm với một tiện ích có tên là 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ả nội dung mà chúng ta sẽ làm việc. Cấu trúc thư mục khớp với một số thư mục trong /etc/ipsec.d
, nơi cuối cùng chúng tôi sẽ di chuyển tất cả các mục mà chúng tôi tạo:
- mkdir -p ~/pki/{cacerts,certs,private}
Sau đó, khóa các quyền để người dùng khác không thể nhìn thấy các tệp riêng tư của chúng tôi:
- chmod 700 ~/pki
Bây giờ chúng ta có cấu trúc thư mục để lưu trữ mọi thứ, chúng ta có thể tạo khóa gốc. Đây sẽ là khóa 4096-bit RSA sẽ được sử dụng để ký cơ quan cấp chứng chỉ gốc của chúng tôi.
Thực hiện các lệnh này để tạo khóa:
- pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem
Sau đó, chúng ta có thể chuyển sang tạo cơ quan cấp chứng chỉ gốc, sử dụng khóa mà chúng ta 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
Cờ --lifetime 3650
được sử dụng để đảm bảo rằng chứng chỉ gốc của tổ chức phát hành chứng chỉ sẽ có hiệu lực trong 10 năm. Chứng chỉ gốc cho một cơ quan có thẩm quyền 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à ứng dụng khách dựa vào nó, vì vậy 10 năm là giá trị hết hạn mặc định an toàn.
Bạn có thể thay đổi giá trị distinguished name (DN) thành giá trị khác nếu muốn. Tên chung (trường CN) ở đây chỉ là chỉ báo, do đó, nó không nhất thiết phải khớp với bất kỳ thứ gì trong cơ sở hạ tầng của bạn.
Bây giờ chúng tôi đã thiết lập và chạy cơ quan cấp chứng chỉ gốc, chúng tôi có thể tạo chứng chỉ mà máy chủ VPN sẽ sử dụng.
Bây giờ chúng ta sẽ tạo chứng chỉ và khóa cho máy chủ VPN. Chứng chỉ này sẽ cho phép khách hàng xác minh tính xác thực của máy chủ bằng chứng chỉ CA mà chúng tôi vừa tạo.
Đầu tiên, tạo khóa riêng cho máy chủ VPN bằng 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 tổ chức phát hành chứng chỉ mà bạn đã tạo ở bước trước. Thực hiện lệnh sau, nhưng thay đổi trường Common Name (CN) và trường Subject Alternate Name (SAN) thành tê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 đang sử dụng địa chỉ IP thay vì tên DNS, bạn sẽ cần chỉ định nhiều mục nhập --san
. 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 nhập bổ sung như dòng được trích dẫn sau:
--dn "CN=IP address" --san @IP_address --san IP_address \
Lý do cho mục nhập --san @IP_address
bổ sung này là vì một số khách hàng 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áy chủ hay không khi họ xác minh danh tính của máy chủ.
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.
Bây giờ chúng tôi đã tạo tất cả các tệp TLS/SSL mà StrongSwan cần, chúng tôi có thể di chuyển các tệp vào vị trí trong thư mục /etc/ipsec.d
bằng cách nhập:
- sudo cp -r ~/pki/* /etc/ipsec.d/
Trong bước này, chúng tôi đã 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ủ. Chúng tôi cũng đã ký các chứng chỉ bằng khóa CA, vì vậy, khách hàng 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, chúng tôi sẽ chuyển sang cấu hình phần mềm.
StrongSwan có tệp cấu hình mặc định với một số ví dụ, nhưng chúng tôi sẽ phải tự thực hiện hầu hết cấu hình. 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 trống mới bằng trình soạn thảo văn bản ưa thích của bạn. Ở đây, chúng tôi sẽ sử dụng nano
:
- sudo nano /etc/ipsec.conf
Lưu ý: Khi bạn thực hiện phần này để thiết lập cấu hình phần máy chủ của VPN, bạn sẽ gặp các cài đặt đề cập đến bên trái và bên phải của kết nối. Khi làm việc với IPSec VPN, phía bên trái theo quy ước đề cập đến hệ thống cục bộ mà bạn đang thiết lập cấu hình, trong trường hợp này là máy chủ. Các chỉ thị bên phải trong các cài đặt này sẽ đề cập đến các máy khách từ xa, như điện thoại và các máy tính khác.
Khi bạn chuyển sang cấu hình ứng dụng khách sau trong hướng dẫn này, các tệp cấu hình ứng dụng khách sẽ tự tham chiếu đến chúng bằng cách sử dụng các chỉ thị bên trái khác nhau và máy chủ sẽ được tham chiếu bằng cách sử dụng thuật ngữ bên phải.
Trước tiên, chúng tôi sẽ yêu cầu StrongSwan ghi nhật ký trạng thái daemon để gỡ lỗi và cho phép các kết nối trùng lặp. Thêm những dòng này vào tệp:
config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=no
Sau đó, chúng tôi sẽ tạo một phần cấu hình cho VPN của chúng tôi. Chúng tôi cũng sẽ yêu cầu StrongSwan tạo Đường hầm VPN IKEv2 và tự động tải phần cấu hình này khi nó khởi động. Nối các dòng sau vào tệp:
. . .
conn ikev2-vpn
auto=add
compress=no
type=tunnel
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
Chúng tôi cũng sẽ thiết lập cấu hình tính năng phát hiện dead-peer để xóa mọi kết nối "dangling" trong trường hợp máy khách ngắt kết nối bất ngờ. Thêm những dòng này:
. . .
conn ikev2-vpn
. . .
dpdaction=clear
dpddelay=300s
rekey=no
Tiếp theo, chúng tôi sẽ thiết lập cấu hình các tham số IPSec bên "trái" 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à nhận dạng chính xác. Bạn sẽ thêm từng cài đặt này vào tệp /etc/ipsec.conf
khi bạn đã quen thuộc với chúng là gì và tại sao 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 để liên lạc tiếp theo với các máy khách. Ví dụ: nếu bạn đang kết nối máy khách qua 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 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 khách hàng. Khi được kết hợp với tùy chọn tiếp theo leftcert
, tùy chọn leftid
đảm bảo rằng tên được thiết lập cấu hình của máy chủ và Distinguished Name (DN) có trong chứng chỉ công khai khớp với 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 đã thiết lập cấu hình ở Bước 3. Nếu không có tùy chọn này, máy chủ sẽ không thể tự xác thực với máy khách hoặc hoàn tất thương lượng 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 bản sao chứng chỉ công khai của máy chủ như một phần của kết nối ban đầu được thiết lập.leftsubnet=0.0.0.0/0
Tùy chọn bên "trái" cuối cùng mà bạn sẽ thêm sẽ cho khách hàng biết về các mạng con có thể truy cập được 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ộ bộ địa chỉ IPv4, nghĩa là máy chủ sẽ yêu cầu khách hàng gửi tất cả lưu lượng truy cập của họ qua VPN theo mặc định.Bây giờ bạn đã quen thuộc với từng tùy chọn bên trái 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 thiết lập 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ởi một tên miền:
. . . leftid=@vpn.example.com
. . .
Nếu máy chủ đượ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ể thiết lập cấu hình các tham số IPSec bên “phải” của máy khách. Mỗi tham số sau đây cho máy chủ biết cách chấp nhận 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à dải địa chỉ IP riêng cũng như 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 là gì và tại sao chúng được sử dụng:
right=%any
Tùy chọn %any
cho phía bên phải của kết nối hướng dẫn 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ừ các máy khách cung cấp danh tính trước khi thiết lập đường hầm mã hóa.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 để có khả năng tương thích rộng nhằm hỗ trợ các ứng dụng khách như thiết bị Windows, macOS và Android.rightsourceip=10.10.10.0/24
Tùy chọn này hướng dẫn máy chủ gán địa chỉ IP riêng cho máy khách từ nhóm 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à trình phân giải DNS công khai của Google. Chúng có thể được thay đổi để sử dụng các trình phân giải công khai khác, trình phân giải của máy chủ VPN hoặc bất kỳ trình phân giải nào khác mà khách hàng có thể tiếp cận.rightsendcert=never
Tùy chọn này hướng dẫn máy chủ rằng các máy khách không cần gửi chứng chỉ để tự xác thực.Bây giờ bạn đã quen thuộc với các tùy chọn bên “phải” 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 tôi sẽ yêu cầu StrongSwan yêu cầu khách hàng cung cấp 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. Những 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 (Bộ mật mã)) 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ật mã đượ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ật mã đượ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 chính xác từng dòng. Nếu bạn đã sử dụng nano
, hãy làm như vậy bằng cách nhấn CTRL + X
, Y
, rồi ENTER
.
Bây giờ chúng tôi đã thiết lập cấu hình các tham số VPN, hãy chuyển sang tạo tài khoản để người dùng của chúng tôi có thể kết nối với máy chủ.
Máy chủ VPN của chúng tôi hiện được thiết lập cấu hình để chấp nhận kết nối máy khách, nhưng chúng tôi chưa có bất kỳ thông tin xác thực nào được thiết lập cấu hình. Chúng tôi sẽ cần thiết lập cấu hình một số thứ trong tệp cấu hình đặc biệt có tên là ipsec.secrets
:
Hãy mở tệp bí mật để chỉnh sửa:
- sudo nano /etc/ipsec.secrets
Trước tiên, chúng tôi sẽ cho StrongSwan biết nơi tìm khóa riêng của chúng tôi và cách phân tích cú pháp khóa đó.
: RSA "server-key.pem"
Đảm bảo rằng dòng bắt đầu bằng ký tự :
và có khoảng trắng sau ký tự đó sao cho toàn bộ dòng có nội dung : RSA "server-key.pem"
.
Sau đó, chúng tôi 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ỳ kết hợp tên người dùng hoặc mật khẩu nào mà bạn muốn:
your_username : EAP "your_password"
Lưu và đóng tập tin. Bây giờ chúng ta đã hoàn thành công việc với các tham số VPN, chúng ta sẽ 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 thiết lập 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.
Khi hoàn tất cấu hình StrongSwan, chúng tôi cần thiết lập 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 tiên quyết, bạn nên bật tường lửa UFW. Nếu bạn chưa thiết lập cấu hình UFW, bạn nên bắt đầu bằng cách thêm quy tắc cho phép kết nối SSH qua tường lửa để phiên hiện tại của bạn không đóng khi bạn bật UFW:
- sudo ufw allow OpenSSH
Sau đó kích hoạt tường lửa bằng cách gõ:
- sudo ufw enable
Sau đó, thêm 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, chúng tôi sẽ mở một trong các tệp cấu hình của UFW để thêm một số chính sách cấp thấp để định tuyến và chuyển tiếp các gói IPSec. Tuy nhiên, trước khi chúng tôi có thể làm điều này, chúng tôi cần tìm giao diện mạng nào trên máy chủ của chúng tôi đượ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 đường mặc định:
- ip route show default
Giao diện công khai của bạn phải tuân theo từ “dev”. Ví dụ: kết quả này hiển thị giao diện có tên eth0
, được đánh dấu trong ví dụ sau:
Outputdefault via your_server_ip dev eth0 proto static
Khi bạn có giao diện mạng công cộng, hãy mở tệp /etc/ufw/b Before.rules
trong trình soạn thảo văn bản của mình. 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 đầu vào và đầu ra thông thường. Chúng được sử dụng để thiết lập 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à 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 dưới đây. Thay đổi từng phiên bản của eth0
trong cấu hình trên để khớp với tên giao diện bạn tìm thấy với ip route
. Các dòng *nat
tạo quy tắc để tường lửa có thể định tuyến và thao tác chính xác lưu lượng giữa máy khách VPN và internet. Dòng *mangle
điều chỉnh kích thước phân đoạn gói tối đa để ngăn các sự cố tiềm ẩn với một số máy khách VPN nhất định:
*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 các dòng định nghĩa *filter
và chain, hãy 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
Những dòng này yêu cầu tường lửa chuyển tiếp lưu lượng ESP (Đóng gói tải trọng bảo mật) để 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 tôi khi chúng đi qua các mạng không đáng tin cậy.
Khi bạn hoàn tất, hãy đóng tệp sau khi bạn đã xác minh rằng bạn đã thêm chính xác từng dòng. Nếu bạn đã sử dụng nano
, hãy làm như vậy bằng cách nhấn CTRL + X
, Y
, rồi ENTER
.
Trước khi khởi động lại tường lửa, chúng tôi sẽ 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
. Chúng tôi sẽ cần thiết lập cấu hình một vài thứ trong tệp.
Đầu tiên cần bật tính năng chuyển tiếp gói IPv4 để lưu lượng có thể di chuyển giữa VPN và các giao diện mạng đối mặt công khai trên máy chủ. Tiếp theo, chúng tôi sẽ vô hiệu hóa khám phá Path MTU để ngăn các sự cố phân mảnh gói. Cuối cùng, chúng tôi 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 trung gian.
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ờ, hãy thêm cài đặt net/ipv4/ip_forward=1
sau vào cuối tệp để bật chuyển tiếp gói giữa các giao diện:
. . .
net/ipv4/ip_forward=1
Khối tiếp theo 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 khám phá 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. Giờ đây, chúng tôi có thể bậ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 quy trình. Nhập Y để bật lại UFW với cài đặt mới.
Bây giờ bạn đã thiết lập xong mọi thứ, đã đến lúc dùng thử. Trước tiên, bạn cần sao chép chứng chỉ CA mà bạn đã tạo và cài đặt nó trên (các) thiết bị khách sẽ kết nối với VPN. Cách dễ nhất để thực hiện việc 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 kết quả 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 có 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.
Khi bạn đã tải tệp ca-cert.pem
xuống máy tính của mình, bạn có thể thiết lập kết nối với VPN.
Có nhiều cách để nhập chứng chỉ gốc và thiết lập 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 viết và sửa đổi theo kịch bản để 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 thử nghiệm trên các bản cài đặt Windows 10 chạy phiên bản 1903 và 1909.
Đầu tiên, nhập chứng chỉ gốc bằng cách làm theo các bước sau:
WINDOWS+R
để hiển thị hộp thoại Run và nhập mmc.exe
để khởi chạy Windows Management Console (Bảng điều khiển quản lý Windows).ca-cert.pem
mà bạn đã lưu. Sau đó nhấp vào Next.Sau đó thiết lập cấu hình VPN theo các bước sau:
Để nhập chứng chỉ CA gốc bằng PowerShell, trước tiên hãy mở lời nhắc PowerShell với đặc quyền của quản trị viên. Để làm như vậy, nhấp chuột phải vào biểu tượng menu Start và chọn Windows PowerShell (Admin)
. Bạn cũng có thể mở dấu nhắc lệnh với tư cách quản trị viên và nhập powershell
.
Tiếp theo, chúng tôi sẽ nhập chứng chỉ bằng cách sử dụng Import-Certificate
PowerShell cmdlet (lệnh ghép ngắn). 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 lưu trữ 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
phải trỏ đến vị trí mà 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í mà 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\Root
Thumbprint Subject
---------- -------
DB00813B4087E9367861E8463A60CEA0ADC5F002 CN=VPN root CA
Bây giờ để thiết lập cấu hình VPN bằng PowerShell, hãy chạy lệnh sau. Thay thế tên DNS 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 mà 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 thiết lập cấu hình chính xác, hãy sử dụng lệnh ghép ngắn Get-VPNConnection
:
- Get-VpnConnection -Name "VPN Connection"
Bạn sẽ nhận được đầu ra như sau:
OutputName : 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 lệnh ghép ngắn Set-VpnConnectionIPsecConfiguration
để nâng cấp các tham số mã hóa mà Windows sẽ sử dụng để 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 nhau, bạn có thể chạy lệnh ghép ngắn Remove-VpnConnection
.
- Remove-VpnConnection -Name "VPN Connection" -Force
Cờ -Force
sẽ bỏ qua lời 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.
Khi bạn đã nhập chứng chỉ và VPN được thiết lập cấu hình 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 mạng. Chọn VPN và nhấp vào 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 vào OK và bạn sẽ được kết nối.
Làm theo các bước sau để nhập chứng chỉ:
Bây giờ chứng chỉ đã được nhập và tin cậy, hãy thiết lập cấu hình kết nối VPN theo các bước sau:
Cuối cùng, nhấp vào Connect để kết nối với VPN. Bây giờ bạn 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 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 như một dịch vụ, bạn cần thực hiện các bước cấu hình sau.
Trước tiên, hãy 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 chứng chỉ CA trong thư mục /etc/ipsec.d/cacerts
để khách hàng 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 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
để vô hiệu hóa StrongSwan chạy tự động:
- sudo systemctl disable --now strongswan-starter
Tiếp theo thiết lập 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 chỉnh sửa ưa thích của bạn:
- sudo nano /etc/ipsec.secrets
Thêm dòng sau, chỉnh sửa giá trị tên người dùng và mật khẩu được đánh dấu để khớp với giá trị bạn đã thiết lập 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
để thiết lập 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 setup
conn ikev2-rw
right=server_domain_or_IP
# This should match the `leftid` value 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, hãy nhập:
- sudo systemctl start strongswan-starter
Để ngắt kết nối lại, gõ:
- sudo systemctl stop strongswan-starter
charon-cmd
cho các kết nối một lầnĐể quản lý StrongSwan như một dịch vụ, bạn cần thực hiện các bước cấu hình sau.
Trước tiên, hãy 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 chứng chỉ CA trong thư mục /etc/ipsec.d/cacerts
để khách hàng 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 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 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 đã thiết lập cấu hình.
Chạy lệnh dưới đây 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, hãy cung cấp mật khẩu của người dùng VPN và bạn sẽ được kết nối với VPN. Để ngắt kết nối, hãy nhấn CTRL+C
trong thiết bị đầu cuối và đợi kết nối đóng lại.
Để thiết lập 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ỉ:
Bây giờ chứng chỉ đã được nhập vào ứng dụng StrongSwan, bạn có thể thiết lập cấu hình kết nối VPN theo các bước sau:
Khi bạn muốn kết nối với VPN, hãy nhấp vào cấu hình 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
chứ 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 đã thiết lập 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 chứng chỉ có CN là vpn.example.com
, thì bạn phải sử dụng vpn.example.com
khi 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.
Cuối cùng, hãy kiểm tra kỹ cấu hình VPN để đảm bảo giá trị leftid
được thiết lập cấu hình bằng ký hiệu @
nếu bạn đang sử dụng một tên miền:
leftid=@vpn.example.com
Nếu bạn đang sử dụng địa chỉ IP, hãy đảm bảo rằng biểu tượng @
bị bỏ qua. Ngoài ra, hãy đảm bảo rằng khi bạn tạo tệp server-cert.pem
, bạn đã bao gồm cả hai cờ --san @IP_address
và --san IP_address
.
Trong hướng dẫn này, bạn đã xây dựng một máy chủ VPN sử dụng giao thức IKEv2. Bạn đã tìm hiểu về các lệnh kiểm soát bên left
và bên right
của kết nối trên cả máy chủ và máy khách. Bạn cũng đã thiết lập cấu hình máy khách Windows, macOS, iOS, Android hoặc Linux để kết nối với VPN.
Để thêm hoặc xóa người dùng, hãy chuyển sang Bước 5 một lần nữa. Mỗi dòng trong /etc/ipsec.secrets
dành cho một người dùng, do đó, việc thêm hoặc xóa người dùng hoặc thay đổi mật khẩu chỉ cần chỉnh sửa tệp.
Giờ đây, bạn có thể yên tâm rằng các hoạt động trực tuyến của mình sẽ được bảo mật mọi lúc mọi nơi và với bất kỳ thiết bị nào bạn sử dụng để truy cập internet.