Mục lục

Không có mục lục
Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly

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

Ngày đăng: 6 tháng 3 năm 2023

Ubuntu

Giới thiệu

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.

Điều kiện tiên quyết

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

  • Một máy chủ Ubuntu 20.04 được thiết lập cấu hình bằng cách làm theo hướng dẫn thiết lập máy chủ ban đầu của Ubuntu 20.04, bao gồm sudo non-root user và tường lửa.

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

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ộ:

  1. sudo apt update

Sau đó cài đặt phần mềm bằng cách gõ:

  1. 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.

Bước 2 — Tạo một tổ chức phát hành chứng chỉ

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:

  1. 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:

  1. 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:

  1. 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:

  1. pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \
  2. --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ước 3 — Tạo chứng chỉ cho máy chủ VPN

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:

  1. 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:

  1. pki --pub --in ~/pki/private/server-key.pem --type rsa \
  2. | pki --issue --lifetime 1825 \
  3. --cacert ~/pki/cacerts/ca-cert.pem \
  4. --cakey ~/pki/private/ca-key.pem \
  5. --dn "CN=server_domain_or_IP" --san server_domain_or_IP \
  6. --flag serverAuth --flag ikeIntermediate --outform pem \
  7. > ~/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:

  1. 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.

Bước 4 — Thiết lập cấu hình StrongSwan

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:

  1. 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:

  1. 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:

/etc/ipsec.conf
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:

/etc/ipsec.conf
. . .
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:

/etc/ipsec.conf
. . .
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:

/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 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:

/etc/ipsec.conf
    . . .    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:

/etc/ipsec.conf
    . . .
    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:

/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:

/etc/ipsec.conf
. . .
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:

/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 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:

/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 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ủ.

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

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:

  • Chúng tôi cần cho StrongSwan biết nơi tìm khóa riêng cho chứng chỉ máy chủ của chúng tôi, để máy chủ có thể xác thực với khách hàng.
  • Chúng tôi cũng cần thiết lập danh sách người dùng sẽ được phép kết nối với VPN.

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

  1. 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 đó.

/etc/ipsec.secrets
: 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:

/etc/ipsec.secrets
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:

  1. 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.

Bước 6 — Thiết lập cấu hình Tường lửa & Chuyển tiếp IP Kernel

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:

  1. sudo ufw allow OpenSSH

Sau đó kích hoạt tường lửa bằng cách gõ:

  1. 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, 5004500:

  1. 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:

  1. 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:

Output
default 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.

  1. 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:

/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 *filter và chain, hãy thêm một khối 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 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:

  1. 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:

/etc/ufw/sysctl.conf
. . .
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:

/etc/ufw/sysctl.conf
. . .
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:

/etc/ufw/sysctl.conf
. . .
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:

  1. sudo ufw disable
  2. 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ước 7 — Kiểm tra kết nối VPN trên Windows, macOS, Ubuntu, iOS và Android

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ỉ:

  1. 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----------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.

Kết nối từ Windows

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.

Thiết lập cấu hình Windows bằng Graphical Tools

Đầu tiên, nhập chứng chỉ gốc bằng cách làm theo các bước sau:

  1. Nhấn 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).
  2. Từ menu File, điều hướng đến Add or Remove Snap-in, chọn Certificates từ danh sách các phần đính kèm có sẵn và nhấp vào Add.
  3. Chúng tôi muốn VPN hoạt động với bất kỳ người dùng nào, vì vậy hãy chọn Computer Account và nhấp vào Next.
  4. Chúng tôi đang thiết lập cấu hình mọi thứ trên máy tính cục bộ, vì vậy hãy chọn Local Computer, sau đó nhấp vào Finish.
  5. Trong nút Console Root, mở rộng mục Certificates (Local Computer), mở rộng Trusted Root Certification Authorities, sau đó chọn mục Certificates:

description image

  1. Từ menu Action, chọn All Tasks và nhấp vào Import để hiển thị Certificate Import Wizard (Trình hướng dẫn nhập chứng chỉ). Nhấp vào Next để chuyển qua phần giới thiệu.
  2. Trên màn hình File to Import, nhấn nút Browse, đảm bảo rằng bạn thay đổi loại tệp từ “X.509 Certificate (.cer;.crt)” thành “All Files (.)”, và chọn tập tin ca-cert.pem mà bạn đã lưu. Sau đó nhấp vào Next.
  3. Đảm bảo rằng Certificate Store được đặt thành Trusted Root Certification Authorities và nhấp vào Next.
  4. Nhấp vào Finish để nhập chứng chỉ.

Sau đó thiết lập cấu hình VPN theo các bước sau:

  1. Khởi chạy Control Panel, sau đó điều hướng đến Network and Sharing Center.
  2. Nhấp vào Set up a new connection or network, sau đó chọn Connect to a workplace.
  3. Chọn Use my Internet connection (VPN).
  4. Nhập chi tiết máy chủ VPN. Nhập tên miền hoặc địa chỉ IP của máy chủ vào trường Internet address, sau đó điền vào Destination name bằng nội dung mô tả kết nối VPN của bạn. Sau đó bấm Done.

Thiết lập 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ở 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.

  1. Import-Certificate `
  2. -CertStoreLocation cert:\LocalMachine\Root\ `
  3. -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.

  1. Add-VpnConnection -Name "VPN Connection" `
  2. -ServerAddress "server_domain_or_IP" `
  3. -TunnelType "IKEv2" `
  4. -AuthenticationMethod "EAP" `
  5. -EncryptionLevel "Maximum" `
  6. -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:

  1. 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 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:

  1. Set-VpnConnectionIPsecConfiguration -Name "VPN Connection" `
  2. -AuthenticationTransformConstants GCMAES256 `
  3. -CipherTransformConstants GCMAES256 `
  4. -DHGroup ECP384 `
  5. -IntegrityCheckMethod SHA384 `
  6. -PfsGroup ECP384 `
  7. -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.

  1. 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.

Kết nối với VPN

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.

Kết nối từ macOS

Làm theo các bước sau để nhập chứng chỉ:

  1. Bấm đúp vào tệp chứng chỉ. Keychain Access sẽ bật lên với hộp thoại có nội dung “Keychain Access is trying to modify the system keychain. Enter your password to allow this." (Truy cập chuỗi khóa đang cố sửa đổi chuỗi khóa hệ thống. Nhập mật khẩu của bạn để cho phép điều này.)
  2. Nhập mật khẩu của bạn, sau đó nhấp vào Modify Keychain
  3. Bấm đúp vào chứng chỉ VPN mới được nhập. Thao tác này sẽ mở ra một cửa sổ thuộc tính nhỏ nơi bạn có thể chỉ định mức độ tin cậy. Đặt IP Security (IPSec) thành Always Trust và bạn sẽ được nhắc nhập lại mật khẩu của mình. Cài đặt này sẽ tự động lưu sau khi nhập mật khẩu.

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:

  1. Chuyển đến System Preferences và chọn Network.
  2. Nhấp vào nút “plus” nhỏ ở phía dưới bên trái danh sách mạng.
  3. Trong cửa sổ bật lên xuất hiện, đặt Interface thành VPN, đặt VPN Type thành IKEv2 và đặt tên cho kết nối.
  4. Trong trường ServerRemote ID, hãy nhập tên miền hoặc địa chỉ IP của máy chủ. Để trống Local ID.
  5. Nhấp vào Authentication Settings, chọn Username và nhập tên người dùng và mật khẩu mà bạn đã thiết lập cấu hình cho người dùng VPN của mình. Sau đó bấm OK.

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ừ Ubuntu

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

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

  1. sudo apt update

Tiếp theo, cài đặt StrongSwan và các plugin cần thiết để xác thực:

  1. 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í:

  1. 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:

  1. 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:

  1. 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ủ:

/etc/ipsec.secrets
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ủ:

/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:

  1. sudo systemctl start strongswan-starter

Để ngắt kết nối lại, gõ:

  1. sudo systemctl stop strongswan-starter

Sử dụng Ứng dụng khách 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

  1. sudo apt update

Tiếp theo, cài đặt StrongSwan và các plugin cần thiết để xác thực:

  1. 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í:

  1. 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:

  1. 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.

Kết nối từ iOS

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

  1. Gửi cho bạn một email có đính kèm chứng chỉ gốc.
  2. Mở email trên thiết bị iOS của bạn và nhấn vào tệp chứng chỉ đính kèm, sau đó nhấn Install và nhập mật mã của bạn. Sau khi cài đặt, hãy nhấn Done.
  3. Chuyển đến Settings, General, VPN và nhấn Add VPN Configuration. 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 Type và chọn IKEv2.
  5. Trong trường Description, 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 ServerRemote ID, hãy nhập tên miền hoặc địa chỉ IP của máy chủ. Trường Local ID có thể để trống.
  7. Nhập tên người dùng và mật khẩu của bạn vào phần Authentication, sau đó nhấn vào Done.
  8. Chọn kết nối VPN mà bạn vừa tạo, nhấn vào công tắc ở đầ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 chứng chỉ:

  1. Gửi cho bạn một email có đính kèm chứng chỉ CA. Lưu chứng chỉ CA vào thư mục tải xuống của bạn.
  2. Tải xuống ứng dụng khách StrongSwan VPN từ Play Store.
  3. Mở ứng dụng. Nhấn vào biểu tượng “more” (...) ở 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 “more” (...) ở góc trên bên phải. Chọn Import certificate.
  5. Duyệt đến tệp chứng chỉ CA trong thư mục tải xuống của bạn và chọn nó để nhập vào ứng dụng.

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:

  1. Trong ứng dụng, nhấn vào ADD VPN PROFILE ở trên cùng.
  2. Điền vào Server bằng tên miền hoặc địa chỉ IP công cộng của máy chủ VPN của bạn.
  3. Đảm bảo IKEv2 EAP (Username/Password) được chọn làm VPN Type.
  4. Điền vào UsernamePassword với thông tin đăng nhập bạn đã xác định trên máy chủ.
  5. Bỏ chọn Select automatically trong phần CA certificate và nhấp vào Select CA certificate.
  6. Nhấn vào tab IMPORTED ở đầu màn hình và chọn CA bạn đã nhập (nó sẽ có 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 Profile name (optional) bằng 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 cấu hình 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 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:

/etc/ipsec.conf
   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--san IP_address.

Kết luận

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.

Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly
Chia sẻ

0 câu trả lời