Thứ tư, 16/09/2020 | 00:00 GMT+7

Cách thiết lập server VPN IKEv2 với StrongSwan trên Ubuntu 20.04

Mạng riêng ảo, hay VPN, cho phép bạn mã hóa lưu lượng một cách an toàn khi nó di chuyển qua các mạng không tin cậy , chẳng hạn như các mạng tại quán cà phê, hội nghị hoặc sân bay.

Internet Key Exchange v2 , hoặc IKEv2, là một giao thức cho phép tạo tunnel IPSec trực tiếp giữa server và client . Trong triển khai IKEv2 VPN, IPSec cung cấp mã hóa cho lưu lượng mạng. IKEv2 được hỗ trợ nguyên bản trên một số nền tảng (OS X 10.11+, iOS 9.1+ và Windows 10) mà không cần ứng dụng bổ sung nào và nó xử lý các trục trặc của client khá trơn tru.

Trong hướng dẫn này, bạn sẽ cài đặt server VPN IKEv2 bằng StrongSwan trên server Ubuntu 20.04 . Sau đó, bạn sẽ học cách kết nối nó với các ứng dụng client Windows, macOS, Ubuntu, iOS và Android.

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần :

Bước 1 - Cài đặt StrongSwan

Đầu tiên, ta sẽ cài đặt StrongSwan, một daemon IPSec open-souce mà ta sẽ cấu hình làm server VPN của bạn . Ta cũng sẽ cài đặt thành phần cơ sở hạ tầng public key (PKI) để ta có thể tạo Tổ chức phát hành certificate (CA) để cung cấp thông tin đăng nhập cho cơ sở hạ tầng của ta .

Bắt đầu bằng cách cập nhật cache ẩn gói local :

  • sudo apt update

Sau đó cài đặt phần mềm bằng lệnh :

  • sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins

Gói bổ sung libcharon-extauth-plugins được sử dụng đảm bảo rằng các client khác nhau có thể xác thực với server của bạn bằng cách sử dụng tên user và passphrase (password bảo vệ) được chia sẻ.

Bây giờ mọi thứ đã được cài đặt, hãy chuyển sang tạo certificate của ta .

Bước 2 - Tạo Tổ chức phát hành certificate

Server IKEv2 certificate request để tự nhận dạng đối với client . Để giúp tạo certificate cần thiết, gói strongswan-pki đi kèm với một tiện ích gọi là pki để tạo Cơ quan cấp certificate và certificate server .

Để bắt đầu, hãy tạo một vài folder để lưu trữ tất cả các tài sản mà ta sẽ làm việc. Cấu trúc folder trùng với một số folder trong /etc/ipsec.d , nơi cuối cùng ta sẽ di chuyển tất cả các mục ta tạo:

  • mkdir -p ~/pki/{cacerts,certs,private}

Sau đó khóa các quyền để user khác không thể nhìn thấy các file riêng tư của ta :

  • chmod 700 ~/pki

Bây giờ ta có cấu trúc folder để lưu trữ mọi thứ, ta có thể tạo một khóa root . Đây sẽ là khóa RSA 4096-bit sẽ được sử dụng để ký cơ quan cấp certificate root của ta .

Thực thi các lệnh này để tạo khóa:

  • pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem

Sau đó, ta có thể chuyển sang tạo tổ chức phát hành certificate root của bạn , sử dụng khóa mà ta vừa tạo để ký certificate root :

  • 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

--lifetime 3650 được sử dụng đảm bảo rằng certificate root của tổ chức phát hành certificate sẽ có hiệu lực trong 10 năm. Chứng chỉ root cho một cơ quan thường không thay đổi, vì nó sẽ phải được phân phối lại cho mọi server và client 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ị tên phân biệt (DN) thành một giá trị khác nếu bạn muốn. Tên chung (trường CN) ở đây chỉ là chỉ báo, vì vậy nó không cần phải trùng với bất kỳ thứ gì trong cơ sở hạ tầng của bạn.

Bây giờ ta đã có cơ quan cấp certificate root của bạn và đang chạy, ta có thể tạo certificate mà server VPN sẽ sử dụng.

Bước 3 - Tạo certificate cho server VPN

Bây giờ ta sẽ tạo certificate và khóa cho server VPN. Chứng chỉ này sẽ cho phép client xác minh tính xác thực của server bằng certificate CA mà ta vừa tạo.

Đầu tiên, tạo private key cho server 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ý certificate server VPN bằng khóa của tổ chức phát hành certificate mà bạn đã tạo ở bước trước. Thực thi lệnh sau, nhưng thay đổi trường Tên chung (CN) và Chủ đề Tên thay thế (SAN) thành tên DNS hoặc địa chỉ IP của server 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 cần chỉ định nhiều mục --san . Dòng trong khối lệnh trước mà bạn chỉ định tên phân biệt ( --dn ... ) 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à một số ứng dụng client sẽ kiểm tra xem certificate TLS có cả mục nhập DNS và mục nhập Địa chỉ IP cho server hay không khi họ xác minh danh tính của nó.

Tùy chọn --flag serverAuth được sử dụng để cho biết certificate sẽ được sử dụng một cách rõ ràng để xác thực server , trước khi tunnel được mã hóa được cài đặt . Tùy chọn --flag ikeIntermediate được sử dụng để hỗ trợ các client macOS cũ hơn.

Bây giờ ta đã tạo tất cả các file TLS / SSL mà StrongSwan cần, ta có thể di chuyển các file vào vị trí trong folder /etc/ipsec.d bằng lệnh :

  • sudo cp -r ~/pki/* /etc/ipsec.d/

Trong bước này, ta đã tạo một cặp certificate sẽ được sử dụng để bảo mật thông tin liên lạc giữa client và server . Ta cũng đã ký các certificate bằng khóa CA, vì vậy client sẽ có thể xác minh tính xác thực của server VPN bằng certificate CA. Với tất cả các certificate này đã sẵn sàng, ta sẽ chuyển sang cấu hình phần mềm.

Bước 4 - Cấu hình StrongSwan

StrongSwan có một file cấu hình mặc định với một số ví dụ, nhưng ta sẽ phải tự mình thực hiện hầu hết các cấu hình. Hãy backup file để tham khảo trước khi bắt đầu từ đầu:

  • sudo mv /etc/ipsec.conf{,.original}

Tạo và mở file cấu hình trống mới bằng editor bạn muốn . Ở đây, ta sẽ sử dụng nano :

  • sudo nano /etc/ipsec.conf

Lưu ý : Khi làm việc trong phần này để cấu hình phần server của VPN, bạn sẽ gặp phải các cài đặt đề cập đến các bên tráiphả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 local mà bạn đang cấu hình, trong trường hợp này server . Các lệnh bên phải trong các cài đặt này sẽ tham chiếu đến các client 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 khách hàng sau này trong hướng dẫn này, các file cấu hình client sẽ tham khảo để tự sử dụng chỉ thị khác nhau bên trái, và các server sẽ được gọi bằng thuật ngữ phía bên phải.

Đầu tiên, ta sẽ yêu cầu StrongSwan ghi lại các 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 file :

/etc/ipsec.conf
config setup     charondebug="ike 1, knl 1, cfg 0"     uniqueids=no 

Sau đó, ta sẽ tạo phần cấu hình cho VPN của bạn . Ta 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 file :

/etc/ipsec.conf
. . . conn ikev2-vpn     auto=add     compress=no     type=tunnel     keyexchange=ikev2     fragmentation=yes     forceencaps=yes 

Ta cũng sẽ cấu hình tính năng phát hiện mạng ngang hàng để xóa mọi kết nối "lơ lửng" trong trường hợp client ngắt kết nối bất ngờ. Thêm những dòng này:

/etc/ipsec.conf
. . . conn ikev2-vpn     . . .     dpdaction=clear     dpddelay=300s     rekey=no 

Tiếp theo, ta sẽ cấu hình các thông số IPSec bên trái của server . Mỗi tham số sau đây đảm bảo server được cấu hình để chấp nhận các kết nối từ client và tự nhận dạng chính xác. Bạn sẽ thêm từng cài đặt này vào file /etc/ipsec.conf khi bạn đã quen với chúng là gì và tại sao chúng được sử dụng:

  • left=%any Giá trị %any đảm bảo server sẽ sử dụng network interface nơi nó nhận các kết nối đến để liên lạc tiếp theo với client . Ví dụ: nếu bạn đang kết nối một client qua mạng riêng, server 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à server 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 tên được cấu hình của server và Tên phân biệt (DN) có trong public certificate khớp nhau.
  • leftcert=server-cert.pem Tùy chọn này là đường dẫn đến public certificate cho server mà bạn đã cấu hình ở Bước 3. Nếu không có nó, server sẽ không thể tự xác thực với client hoặc kết thúc thương lượng cài đặt IKEv2.
  • leftsendcert=always Giá trị always đảm bảo bất kỳ client nào kết nối với server sẽ luôn nhận được bản sao public certificate của server như một phần của kết nối ban đầu được cài đặt .
  • 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 server . 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 địa chỉ IPv4, nghĩa là server sẽ yêu cầu client gửi tất cả lưu lượng truy cập của họ qua VPN theo mặc định.

Đến đây bạn đã quen 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 file như sau:

/etc/ipsec.conf
. . . 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 server ( leftid ), chỉ bao gồm ký tự @ nếu server VPN của bạn sẽ được xác định bằng domain :

/etc/ipsec.conf
    . . .    leftid=@vpn.example.com     . . . 

Nếu server sẽ được xác định bằng địa chỉ IP của nó, chỉ cần đặt địa chỉ IP vào:

/etc/ipsec.conf
    . . .     leftid=your_server_ip     . . . 

Tiếp theo, ta có thể cấu hình các tham số IPSec bên phải của client . Mỗi tham số sau đây cho server biết cách chấp nhận kết nối từ client , cách client nên xác thực với server , phạm vi địa chỉ IP riêng và server DNS mà client sẽ sử dụng. Thêm từng cài đặt này vào file /etc/ipsec.conf khi bạn đã quen với chúng là gì và tại sao chúng được sử dụng:

  • right=%any Sự %any tùy chọn cho right phía của kết nối chỉ thị các server để chấp nhận các kết nối đến từ bất kỳ khách hàng từ xa.
  • rightid=%any Tùy chọn này đảm bảo server sẽ không từ chối các kết nối từ các client cung cấp danh tính trước khi tunnel mã hóa được cài đặt .
  • rightauth=eap-mschapv2 Tùy chọn này cấu hình phương thức xác thực mà client sẽ sử dụng để xác thực với server . eap-mschapv2 được sử dụng ở đây để tương thích rộng rãi để hỗ trợ các client như thiết bị Windows, macOS và Android.
  • rightsourceip=10.10.10.0/24 Tùy chọn này hướng dẫn server gán địa chỉ IP riêng cho client từ group IP 10.10.10.0/24 được 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 server 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 server rằng các client không cần gửi certificate để tự xác thực.

Đến đây bạn đã quen với các tùy chọn bên phải "bắt buộc" cho VPN, hãy thêm các dòng sau vào /etc/ipsec.conf :

/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ờ ta 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 user khi họ kết nối:

/etc/ipsec.conf
. . . conn ikev2-vpn     . . .     eap_identity=%identity 

Cuối cùng, thêm các dòng sau để hỗ trợ client 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à Bộ mật mã ) mà StrongSwan sẽ cho phép các client khác nhau sử dụng:

/etc/ipsec.conf
. . . 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 client Windows, macOS, iOS, Android và Linux.

Tệp cấu hình hoàn chỉnh sẽ giống như sau:

/etc/ipsec.conf
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 file khi bạn đã xác minh bạn đã thêm đúng 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 , sau đó ENTER .

Bây giờ ta đã cấu hình các thông số VPN, hãy chuyển sang tạo account để user của ta có thể kết nối với server .

Bước 5 - Cấu hình xác thực VPN

Server VPN của ta hiện đã được cấu hình để chấp nhận các kết nối client , nhưng ta chưa có bất kỳ thông tin đăng nhập nào được cấu hình . Ta cần cấu hình một số thứ trong file cấu hình đặc biệt có tên ipsec.secrets :

  • Ta cần cho StrongSwan biết nơi tìm private key cho certificate server của ta , vì vậy server sẽ có thể xác thực cho khách hàng.
  • Ta cũng cần cài đặt danh sách user sẽ được phép kết nối với VPN.

Hãy mở file bí mật để chỉnh sửa:

  • sudo nano /etc/ipsec.secrets

Đầu tiên, ta sẽ cho StrongSwan biết nơi tìm private key của ta và cách phân tích cú pháp.

/etc/ipsec.secrets
: 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 ghi : RSA "server-key.pem" .

Sau đó, ta sẽ xác định thông tin đăng nhập của user . Bạn có thể tạo bất kỳ kết hợp tên user hoặc password nào bạn muốn :

/etc/ipsec.secrets
your_username : EAP "your_password" 

Lưu và đóng file . Bây giờ ta đã làm việc xong với các thông số VPN, ta sẽ khởi động lại dịch vụ VPN để cấu hình của ta được áp dụng:

  • sudo systemctl restart strongswan-starter

Bây giờ server VPN đã được cấu hình đầy đủ với cả tùy chọn server và thông tin đăng nhập của user , đã đến lúc chuyển sang cấu hình phần quan trọng nhất: firewall .

Bước 6 - Cấu hình Tường lửa & Chuyển tiếp IP Nhân

Với cấu hình StrongSwan hoàn tất, ta cần cấu hình firewall để 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 cài đặt server ban đầu tiên quyết, bạn nên bật firewall UFW. Nếu bạn chưa cấu hình UFW, bạn nên bắt đầu bằng cách thêm luật cho phép kết nối SSH thông qua firewall để 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 firewall bằng lệnh :

  • sudo ufw enable

Sau đó, thêm luật để cho phép lưu lượng UDP đến các cổng IPSec tiêu chuẩn, 5004500 :

  • sudo ufw allow 500,4500/udp

Tiếp theo, ta sẽ mở một trong các file cấu hình của UFW để thêm một vài policy 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 ta có thể làm điều này, ta cần tìm network interface nào trên server của 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 khai của bạn phải 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:

Output
default via your_server_ip dev eth0 proto static

Khi bạn có network interface công cộng, hãy mở file /etc/ufw/before.rules trong editor của bạn. Các luật trong file này được thêm vào firewall trước phần còn lại của các luật đầu vào và kết quả thông thường. Chúng được sử dụng để cấu hình bản dịch địa chỉ mạng (NAT) để server có thể định tuyến chính xác các kết nối đến và đi từ client và Internet.

  • sudo nano /etc/ufw/before.rules

Gần đầu file (trước dòng *filter ), thêm đoạn cấu hình sau. Thay đổi từng version của eth0 trong cấu hình trên để trùng với tên giao diện mà bạn tìm thấy với ip route . Các dòng *nat tạo ra các luật để firewall có thể định tuyến và thao tác chính xác lưu lượng giữa các client 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 chặn các vấn đề tiềm ẩn với một số ứng dụng client VPN:

/etc/ufw/before.rules
*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 chuỗi *filter*filter , hãy thêm một đoạn cấu hình nữa:

/etc/ufw/before.rules
. . . *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 firewall chuyển tiếp lưu lượng ESP (Encapsulation Security Payload) để các client 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 ta khi chúng truyền qua các mạng không tin cậy .

Khi bạn hoàn tất, hãy duyệt và đóng file khi bạn đã xác minh 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 , sau đó ENTER .

Trước khi khởi động lại firewall , ta sẽ thay đổi một số thông số nhân mạng để cho phép định tuyến từ giao diện này sang giao diện khác. Tệp điều khiển các cài đặt này được gọi là /etc/ufw/sysctl.conf . Ta cần cấu hình một số thứ trong file bao gồm.

Chuyển tiếp gói IPv4 đầu tiên cần được bật để lưu lượng truy cập có thể di chuyển giữa VPN và các network interface công khai trên server . Tiếp theo, ta sẽ vô hiệu hóa tính năng phát hiện Path MTU để ngăn chặn sự cố phân mảnh gói. Cuối cù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ở file cấu hình tham số kernel của UFW bằng nano hoặc editor bạn muốn :

  • sudo nano /etc/ufw/sysctl.conf

Bây giờ, hãy thêm cài đặt net/ipv4/ip_forward=1 vào cuối file để cho phép chuyển tiếp các gói giữa các giao diện:

/etc/ufw/sysctl.conf
. . . net/ipv4/ip_forward=1 

Tiếp theo, chặn gửi và nhận gói chuyển hướng ICMP bằng cách thêm các dòng sau vào cuối file :

/etc/ufw/sysctl.conf
. . . net/ipv4/conf/all/accept_redirects=0 net/ipv4/conf/all/send_redirects=0 

Cuối cùng, tắt tính năng khám phá Đường dẫn MTU bằng cách thêm dòng này vào cuối file :

/etc/ufw/sysctl.conf
. . . net/ipv4/ip_no_pmtu_disc=1 

Lưu file khi bạn hoàn thành. Như vậy, ta có thể bật tất cả các thay đổi của bạn bằng cách tắt và bật lại firewall , vì UFW áp dụng các cài đặt này bất kỳ lúc nào khi nó khởi động lại:

  • sudo ufw disable
  • sudo ufw enable

Bạn sẽ được yêu cầu xác nhận quy trình. Gõ Y để bật lại UFW với cài đặt mới.

Bước 7 - Kiểm tra kết nối VPN trên Windows, macOS, Ubuntu, iOS và Android

Đến đây bạn đã cài đặt mọi thứ, đã đến lúc dùng thử. Trước tiên, bạn cần sao chép certificate 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 để làm điều này là đăng nhập vào server của bạn và xuất nội dung của file certificate :

  • cat /etc/ipsec.d/cacerts/ca-cert.pem

Bạn sẽ thấy kết quả 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----------END CERTIFICATE----- và lưu nó vào một file có tên dễ nhận biết, chẳng hạn như ca-cert.pem . Đảm bảo file bạn tạo có phần mở rộng .pem .

Ngoài ra, sử dụng SFTP để chuyển file vào máy tính của bạn .

Khi bạn đã tải file ca-cert.pem xuống máy tính của bạn , bạn có thể cài đặt kết nối với VPN.

Kết nối từ Windows

Có nhiều cách để nhập certificate root 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 viết mã 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 thử nghiệm trên các bản cài đặt Windows 10 chạy version 1903 và 1909.

Cấu hình Windows bằng các công cụ đồ họa

Đầu tiên, nhập certificate root theo các bước sau:

  1. Nhấn WINDOWS+R để hiển thị hộp thoại Chạy và nhập mmc.exe để chạy Control panel quản lý Windows.
  2. Từ menu Tệp , chuyển đến Thêm hoặc Xóa phần đính kèm , chọn Chứng chỉ từ danh sách các phần bổ trợ có sẵn và nhấp vào Thêm .
  3. Ta muốn VPN hoạt động với mọi user , vì vậy hãy chọn Tài khoản máy tính và nhấp vào Tiếp theo .
  4. Ta đang cấu hình mọi thứ trên máy tính local , vì vậy hãy chọn Máy tính local , sau đó nhấp vào Kết thúc .
  5. Trong nút Gốc của console , hãy mở rộng mục nhập Chứng chỉ (Máy tính local ) , mở rộng Tổ chức phát hành certificate root tin cậy , sau đó chọn mục nhập Chứng chỉ :
    Chế độ xem certificate

  6. Từ menu Hành động , chọn Tất cả Công việc và nhấp vào Nhập để hiển thị Trình hướng dẫn Nhập Chứng chỉ. Nhấp vào Tiếp theo để chuyển qua phần giới thiệu.

  7. Trên màn hình Tệp để nhập , nhấn nút Duyệt qua , đảm bảo bạn thay đổi loại file từ “Chứng chỉ X.509 ( .cer; .crt)” thành “Tất cả file ( . )” Và chọn ca-cert.pem file mà bạn đã lưu. Sau đó nhấp vào Tiếp theo .

  8. Đảm bảo rằng Kho lưu trữ certificate được đặt thành Tổ chức phát hành certificate root tin cậy và nhấp vào Tiếp theo .

  9. Nhấp vào Hoàn tất để nhập certificate .

Sau đó, cấu hình VPN bằng các bước sau:

  1. Chạy Control Panel , sau đó chuyển đến Network and Sharing Center .
  2. Nhấp vào Cài đặt kết nối hoặc mạng mới , sau đó chọn Kết nối với nơi làm việc .
  3. Chọn Sử dụng kết nối Internet của tôi (VPN) .
  4. Nhập chi tiết server VPN. Nhập domain hoặc địa chỉ IP của server vào trường địa chỉ Internet , sau đó điền Tên đích cùng với nội dung mô tả kết nối VPN của bạn. Sau đó nhấp vào Xong .

Cấu hình Windows bằng PowerShell

Để nhập certificate CA root bằng PowerShell, trước tiên hãy mở dấu nhắc PowerShell với quyền của administrator . Để làm như vậy, hãy nhấp chuột phải vào biểu tượng menu Bắt đầu và chọn Windows PowerShell (Admin) . Bạn cũng có thể mở dấu nhắc lệnh với quyền là administrator và nhập powershell .

Tiếp theo, ta sẽ nhập certificate bằng lệnh ghép ngắn Import-Certificate PowerShell. Trong lệnh sau, đối số -CertStoreLocation đầu tiên sẽ đảm bảo certificate được nhập vào repository của Tổ chức phát hành certificate root tin cậy của máy tính để tất cả các chương trình và user có thể xác minh certificate của server VPN. Đối số -FilePath phải trỏ đến vị trí bạn đã sao chép certificate . 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 để trùng 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ì đó giống như sau:

Output
PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\Root Thumbprint 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 DNS hoặc địa chỉ IP của server của bạn trên dòng -ServerAddress . Các cờ khác nhau sẽ đảm bảo Windows được cấu hình chính xác với các thông số bảo mật phù hợp trùng 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ỳ kết quả nào. Để xác nhận VPN được 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 kết quả 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 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 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 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 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.

Kết nối với VPN

Sau khi bạn đã nhập certificate 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 mạng. Chọn VPN và nhấp vào Kết nối . Bạn sẽ được yêu cầu nhập tên user và password của bạn . Nhập chúng vào, bấm OK , và bạn sẽ được kết nối.

Kết nối từ macOS

Làm theo các bước sau để nhập certificate :

  1. Bấm đúp vào file certificate . Keychain Access sẽ bật lên với hộp thoại cho biết “Keychain Access đang cố gắng sửa đổi chuỗi khóa hệ thống. Nhập password của bạn để cho phép điều này. ”
  2. Nhập password của bạn, sau đó nhấp vào Sửa đổi chuỗi khóa
  3. Bấm đúp vào certificate VPN mới được nhập. Thao tác này sẽ trả về một cửa sổ thuộc tính nhỏ, nơi bạn có thể chỉ định mức độ tin cậy. Đặt Bảo mật IP (IPSec) thành Luôn tin cậy và bạn sẽ được yêu cầu nhập lại password của bạn . Cài đặt này sẽ tự động lưu sau khi nhập password .

Bây giờ certificate đã được nhập và tin cậy , hãy cấu hình kết nối VPN theo các bước sau:

  1. Đi tới Tùy chọn Hệ thống và chọn Mạng .
  2. Nhấp vào nút “dấu cộng” nhỏ ở phía dưới bên trái của danh sách các mạng.
  3. Trong cửa sổ bật lên xuất hiện, đặt Giao diện thành VPN , đặt Loại VPN thành IKEv2 và đặt tên cho kết nối.
  4. Trong trường Server ID từ xa , hãy nhập domain hoặc địa chỉ IP của server . Để trống Local ID .
  5. Nhấp vào Cài đặt xác thực , chọn Tên user và nhập tên user và password bạn đã cấu hình cho user VPN của bạn . Sau đó bấm OK .

Cuối cùng, nhấp vào Kết nối để kết nối với VPN. Đến đây bạn sẽ được kết nối với VPN.

Kết nối từ Ubuntu

Để kết nối từ máy Ubuntu, bạn có thể cài đặt và quản lý StrongSwan như 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 như một dịch vụ

Để 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ộ nhớ cache gói local 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 bắt buộc để xác thực:

  • sudo apt install strongswan libcharon-extra-plugins

Đến đây bạn cần một bản sao của certificate CA trong folder /etc/ipsec.d/cacerts để client của bạn có thể xác minh danh tính của server . Chạy lệnh sau để sao chép file 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 để tắt StrongSwan tự động chạy:

  • sudo systemctl disable --now strongswan-starter

Tiếp theo, cấu hình tên user và password mà bạn sẽ sử dụng để xác thực với server VPN. Chỉnh sửa /etc/ipsec.secrets bằng nano hoặc trình soạn thảo bạn muốn :

  • sudo nano /etc/ipsec.secrets

Thêm dòng sau, chỉnh sửa giá trị tên user và password được đánh dấu để trùng với những giá trị mà bạn đã cấu hình trên server :

/etc/ipsec.secrets
your_username : EAP "your_password" 

Cuối cùng, chỉnh sửa file /etc/ipsec.conf để cấu hình client của bạn phù hợp với cấu hình của server :

/etc/ipsec.conf
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, hãy nhập:

  • sudo systemctl stop strongswan-starter

Sử dụng ứng dụng charon-cmd cho 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ộ nhớ cache gói local 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 bắt buộc để xác thực:

  • sudo apt install strongswan libcharon-extra-plugins

Đến đây bạn cần một bản sao của certificate CA trong folder /etc/ipsec.d/cacerts để client của bạn có thể xác minh danh tính của server . Chạy lệnh sau để sao chép file ca-cert.pem vào vị trí:

  • sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

Đến đây, bạn có thể kết nối với server VPN bằng charon-cmd bằng certificate CA của server , địa chỉ IP của server VPN và tên user bạn đã cấu hình .

Chạy lệnh sau 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 yêu cầu , hãy cung cấp password của user 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.

Kết nối từ iOS

Để 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:

  1. Gửi cho bạn một email có đính kèm certificate root .
  2. Mở email trên thiết bị iOS của bạn và nhấn vào file certificate đính kèm, sau đó nhấn Cài đặt và nhập mật mã của bạn. Sau khi cài đặt xong , hãy nhấn vào Xong .
  3. Đi tới Cài đặt , Chung , VPN và nhấn Thêm cấu hình VPN . Thao tác này sẽ hiển thị màn hình cấu hình kết nối VPN.
  4. Nhấn vào Loại và chọn IKEv2 .
  5. Trong trường Mô tả , hãy nhập tên ngắn cho kết nối VPN. Đây có thể là bất cứ thứ gì bạn thích.
  6. Trong trường Server ID từ xa , hãy nhập domain hoặc địa chỉ IP của server . Trường Local ID có thể được để trống.
  7. Nhập tên user và password của bạn vào phần Xác thực , sau đó chạm vào Xong .
  8. Chọn kết nối VPN mà bạn vừa tạo, chạm vào lựa chọn ở đầu trang và bạn sẽ được kết nối.

Kết nối từ Android

Làm theo các bước sau để nhập certificate :

  1. Gửi cho bạn một email có đính kèm certificate CA. Lưu certificate CA vào folder download của bạn.
  2. Download ứng dụng client StrongSwan VPN từ Cửa hàng Play.
  3. Mở ứng dụng. Nhấn vào biểu tượng “thêm” ( ) ở góc trên bên phải và chọn chứng chỉ CA.
  4. Nhấn lại vào biểu tượng “thêm” ( ) ở góc trên bên phải. Chọn Nhập certificate .
  5. Duyệt đến file certificate CA trong folder download của bạn và chọn file đó để nhập vào ứng dụng.

Bây giờ certificate đã được nhập vào ứng dụng StrongSwan, bạn có thể cấu hình kết nối VPN bằng các bước sau:

  1. Trong ứng dụng, hãy nhấn vào THÊM HỒ SƠ VPN ở trên cùng.
  2. Điền vào Server bằng domain của server VPN hoặc địa chỉ IP công cộng của bạn.
  3. Đảm bảo IKEv2 EAP (Tên user / Mật khẩu) được chọn làm Loại VPN.
  4. Điền Tên user Mật khẩu với thông tin đăng nhập bạn đã xác định trên server .
  5. Bỏ chọn Chọn tự động trong phần chứng chỉ CA và nhấp vào Chọn certificate CA.
  6. Nhấn vào tab ĐÃ NHẬP ở đầu màn hình và chọn CA bạn đã nhập (nó sẽ được đặt tên là “VPN root CA” nếu bạn không thay đổi “DN” trước đó).
  7. Nếu bạn muốn, hãy điền vào Tên profile (tùy chọn) với một tên mô tả hơn.

Khi bạn muốn kết nối với VPN, hãy nhấp vào profile bạn vừa tạo trong ứng dụng StrongSwan.

Khắc phục sự cố kết nối

Nếu bạn không thể nhập certificate , hãy đảm bảo file 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 server hoặc địa chỉ IP bạn đã sử dụng. Tên domain hoặc địa chỉ IP của server phải trùng với những gì bạn đã cấu hình làm tên chung (CN) trong khi tạo certificate . 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 cài đặt certificate với CN của vpn.example.com , bạn phải sử dụng vpn.example.com khi nhập chi tiết server VPN. Kiểm tra kỹ lệnh bạn đã sử dụng để tạo certificate 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 cấu hình với ký hiệu @ nếu bạn đang sử dụng domain :

/etc/ipsec.conf
    leftid=@vpn.example.com 

Nếu bạn đang sử dụng địa chỉ IP, hãy đảm bảo ký hiệu @ được bỏ qua. Ngoài ra, hãy đảm bảo khi bạn tạo file server-cert.pem , bạn đã bao gồm cả --san @ IP_address--san IP_address .

Kết luận

Trong hướng dẫn này, bạn đã xây dựng một server VPN sử dụng giao thức IKEv2. Bạn đã học về các lệnh điều khiển leftright của kết nối trên cả server và client . Bạn cũng đã cấu hình ứng dụng client Windows, macOS, iOS, Android hoặc Linux để kết nối với VPN.

Để thêm hoặc xóa user , hãy chuyển sang Bước 5 . Mỗi dòng trong /etc/ipsec.secrets dành cho một user , vì vậy việc thêm hoặc xóa user hoặc thay đổi password chỉ cần chỉnh sửa file .

Như vậy, bạn có thể yên tâm rằng các hoạt động trực tuyến của bạn sẽ vẫn an toàn dù bạn đi đâu và với bất kỳ thiết bị nào bạn sử dụng để truy cập internet.


Tags:

Các tin liên quan

Cách tạo server Ebook tầm cỡ trên Ubuntu 14.04
2020-09-11
Cách cài đặt và cấu hình Postfix làm server SMTP chỉ gửi trên Ubuntu 20.04
2020-07-23
Cách bật tính năng hiển thị phía server cho ứng dụng React
2020-07-14
Cách cài đặt và cấu hình Postfix làm server SMTP chỉ gửi trên Ubuntu 18.04
2020-07-06
Cách thiết lập Nền tảng Cloud IDE server mã trên CentOS 7
2020-06-12
Cách thiết lập Nền tảng Cloud IDE server mã trên Debian 10
2020-06-11
Sử dụng Grep & Biểu thức chính quy để tìm kiếm các mẫu văn bản trong Linux
2020-06-05
Cách sử dụng ngôn ngữ AWK để thao tác văn bản trong Linux
2020-05-26
Cách thiết lập Nền tảng Cloud IDE server mã trên Ubuntu 20.04
2020-05-20
Khái niệm cơ bản về việc sử dụng Sed Stream Editor để thao tác văn bản trong Linux
2020-05-19