Hướng dẫn cơ bản để thiết lập Máy chủ OpenVPN an toàn trên Ubuntu 20.04
Mạng riêng ảo (VPN) cho phép bạn kết nối an toàn và riêng tư với mạng riêng từ xa, chẳng hạn như mạng văn phòng của bạn hoặc Internet theo cách như thể bạn đang kết nối trực tiếp với mạng riêng.
VPN hoạt động theo kiến trúc máy chủ-máy khách. Máy chủ VPN được triển khai trên một máy và có thể truy cập công khai qua Internet. Máy chủ VPN có thể được cấu hình để cho phép kết nối với mạng LAN riêng, chẳng hạn như mạng văn phòng hoặc cho phép kết nối với Internet. Người dùng kết nối với máy chủ VPN bằng máy khách VPN trên máy cục bộ của mình. Giao tiếp giữa máy chủ VPN và máy khách diễn ra bằng giao thức đường hầm an toàn. Đối với Internet, có vẻ như đích của lưu lượng truy cập là máy chủ VPN; tuy nhiên, lưu lượng chuyển đến máy khách thông qua máy chủ.
VPN có nhiều công dụng trong cuộc sống hàng ngày, chẳng hạn như kết nối an toàn với mạng Wifi công cộng, mạng này thường bị xâm phạm hoặc vượt qua các giới hạn địa lý trên một số trang web bằng cách kết nối với VPN có trụ sở tại quốc gia được trang web cho phép.
OpenVPN là một triển khai VPN được sử dụng rộng rãi cho phép một loạt các cấu hình và tùy chọn. Nó sử dụng giao thức Lớp cổng bảo mật (SSL) để mã hóa dữ liệu và các khóa chia sẻ trước, tên người dùng / mật khẩu hoặc chứng chỉ để xác thực máy khách VPN. Trong bài viết này, chúng ta sẽ xem cách thiết lập máy chủ VPN và máy khách VPN trên Ubuntu 20.04.
Cài đặt
OpenVPN có sẵn trong kho lưu trữ Ubuntu chính thức trong gói openvpn
. Gói này cài đặt cả máy chủ OpenVPN cũng như máy khách.
sudo apt cài đặt openvpn
Như đã đề cập trước đó, OpenVPN sử dụng chứng chỉ SSL để mã hóa dữ liệu giữa máy chủ và máy khách. Chúng tôi cần thiết lập tổ chức phát hành chứng chỉ (CA) của riêng mình để cấp chứng chỉ cho VPN. Lưu ý rằng điều này phải được thiết lập trên một máy khác với máy mà OpenVPN được thiết lập; lý do là nếu nó nằm trên cùng một máy chủ và nếu nó bị xâm nhập, kẻ tấn công có thể truy cập vào khóa riêng tư và do đó tấn công kết nối VPN.
Chúng tôi sẽ sử dụng một công cụ có tên là ‘Easy-RSA’ để thiết lập tổ chức phát hành chứng chỉ. Để cài đặt nó, hãy chạy phần sau trên máy CA, máy chủ OpenVPN và máy khách, vì cấu hình được yêu cầu trên cả ba máy này để thiết lập CA.
sudo apt install easy-rsa
Bây giờ, trước tiên chúng ta sẽ định cấu hình tổ chức phát hành chứng chỉ trên máy CA và thực hiện một số bước cấu hình bắt buộc tương tự trên máy chủ Open VPN.
Thiết lập tổ chức phát hành chứng chỉ
Thiết lập ban đầu trên máy CA
Bây giờ, gói này cài đặt một lệnh có tên là make-cadir
được sử dụng để tạo một thư mục cho cấu hình tổ chức phát hành chứng chỉ. Hãy tạo một thư mục bằng cách sử dụng cái này và nhập thư mục.
make-cadir cert_authority && cd cert_authority
Mở tệp có tên vars
được tạo trong thư mục này. Tệp này chứa một số biến cấu hình mà chúng tôi cần sửa đổi. Các giá trị cần được sửa đổi nằm trên các dòng 91-96, sau nhận xét về Các lĩnh vực tổ chức trong đó mô tả các trường này. Bỏ ghi chú các dòng và điền các giá trị thích hợp vào vị trí của các giá trị mẫu.
Lưu và thoát khỏi tệp. Nếu bạn đang sử dụng trình soạn thảo vim, hãy nhấn Thoát ra
, loại : wq
và hãy nhấn đi vào
để lưu và thoát.
Tiếp theo, chúng tôi chạy easyrsa
chương trình trong thư mục để thiết lập cơ sở hạ tầng khóa công khai (PKI), cơ sở hạ tầng này sẽ được sử dụng để tạo khóa công khai và chứng chỉ.
./easyrsa init-pki
Bước tiếp theo sẽ tạo khóa CA và chứng chỉ. Khi lệnh nhắc nhập mật khẩu, hãy nhập mật khẩu cho khóa CA. Ngoài ra, hãy nhập một tên thông thường khi được nhắc. Nếu bạn để trống phần này, tên mặc định là tên Easy-RSA CA sẽ được sử dụng.
./easyrsa build-ca
Như chúng ta có thể thấy từ đầu ra, chứng chỉ và khóa đã được tạo. Khóa này sẽ được sử dụng để ký chứng chỉ máy khách và máy chủ, do đó không bao giờ được chạm vào / sửa đổi.
Bây giờ, chúng tôi đã thiết lập PKI. Bước tiếp theo là tạo khóa máy chủ và chứng chỉ trên máy mà chúng tôi sẽ sử dụng làm máy chủ OpenVPN. Chứng chỉ này sau đó sẽ được máy CA ký.
Tạo khóa máy chủ và chứng chỉ trên máy chủ
Chúng tôi đã cài đặt Easy RSA trên máy chủ. Bây giờ thực hiện ba bước trên máy chủ, mà chúng tôi đã thực hiện trước đó trên máy CA, viz. tạo một thư mục CA bằng cách sử dụng make-cadir
và đi vào bên trong nó, sửa đổi các biến trong vars
tệp và tạo PKI bằng cách sử dụng ./easyrsa init-pki
yêu cầu.
Tiếp theo, chúng ta cần chạy lệnh để tạo yêu cầu chứng chỉ máy chủ và khóa.
./easyrsa gen-req máy chủ nopass
Lưu ý rằng chúng tôi đã vượt qua tùy chọn nopass
để lệnh sẽ không nhắc chúng ta nhập mật khẩu cho khóa máy chủ. Nó vẫn sẽ nhắc tên chung cho máy chủ, bạn có thể nhập bất cứ thứ gì hoặc để trống cho tên mặc định (máy chủ) được sử dụng.
Di chuyển tệp khóa đã tạo bên trong / etc / openvpn
danh mục.
sudo mv pki / private / server.key / etc / openvpn
Gửi yêu cầu chứng chỉ đến máy CA. Chúng tôi sẽ sử dụng lệnh scp
vì mục đích này.
scp pki / reqs / server.req user @ CA_MACHINE_HOSTNAME: / directory
Trong ảnh chụp màn hình ở trên, máy chủ 45.79.125.41 là máy CA. Chúng tôi đã sao chép chứng chỉ trong thư mục / root.
Bây giờ, chứng chỉ của máy chủ đã được sao chép vào máy CA. Bước tiếp theo là quay lại máy CA và ký chứng chỉ này.
Ký chứng chỉ máy chủ trong CA
Trước tiên, hãy xác minh xem tệp yêu cầu chứng chỉ từ máy chủ đã được sao chép trên máy CA hay chưa. Đi tới thư mục mà chúng tôi đã sao chép tệp (/ root trong ví dụ của tôi) và chạy ls
.
: ~ # cd / root && ls cert_authority server.req
Như chúng ta có thể thấy, tệp server.req
là món quà. Tiếp theo, chuyển đến thư mục CA và nhập yêu cầu này.
cd cert_authority ./easyrsa import-req /root/server.req server
Để ký yêu cầu này, hãy chạy lệnh sau.
./easyrsa máy chủ đăng ký yêu cầu
Ở đây, đối số đầu tiên là loại yêu cầu, tức là máy chủ, và đối số thứ hai là tên chung của máy chủ mà trước đây chúng tôi đã sử dụng giá trị mặc định, tức là máy chủ.
Nhập cụm từ Đúng, và mật khẩu cho khóa CA khi được nhắc.
Bây giờ chúng ta có thể xóa tệp yêu cầu chứng chỉ và sao chép chứng chỉ đã tạo cho máy chủ, cũng như chứng chỉ công cộng CA trở lại máy chủ.
rm /root/server.req scp pki / ban hành / server.crt [email protected]: / root scp pki / ca.crt [email protected]: / root
Tiếp theo, chúng ta phải thực hiện thêm một số bước nữa để đảm bảo kết nối VPN an toàn.
DH Parameters Generation
Trao đổi khóa DH (Diffie-Hellman) là một thuật toán để đảm bảo trao đổi khóa tiền điện tử một cách an toàn qua một kênh không an toàn. Đầu tiên, hãy chuyển chứng chỉ đã nhận và chứng chỉ công khai CA sang / etc / openvpn
.
mv /root/ca.crt /root/server.crt / etc / openvpn
Đi tới thư mục CA trên máy chủ và chạy lệnh sau để tạo các tham số DH. Có thể mất nhiều thời gian để tạo.
./easyrsa gen-dh
Bây giờ, hãy di chuyển tệp đã tạo sang / etc / openvpn
.
mv /root/cert_authority/pki/dh.pem / etc / openvpn
Tạo khóa TA
OpenVPN sử dụng một biện pháp bảo mật bổ sung khác bằng cách sử dụng khóa xác thực TLS. Để tạo khóa xác thực TLS, hãy chạy:
openvpn --genkey --secret tls_auth.key
Và di chuyển chìa khóa đến / etc / openvpn
.
mv tls_auth.key / etc / openvpn
Cấu hình khóa máy chủ và thiết lập tổ chức phát hành chứng chỉ đã hoàn tất. Bây giờ chúng ta hãy chuyển sang cấu hình thực của máy chủ VPN.
Cấu hình máy chủ OpenVPN
Tệp cấu hình cho máy chủ OpenVPN không được tạo tự động, tuy nhiên, chúng tôi có thể sử dụng tệp cấu hình mẫu từ openvpn
Bưu kiện.
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz / etc / openvpn / sudo gzip -d /etc/openvpn/server.conf.gz
Mở tệp bằng vim hoặc bất kỳ trình chỉnh sửa nào bạn chọn.
cd / etc / openvpn vim server.conf
Chúng tôi phải nhập tên chung của các khóa và chứng chỉ mà chúng tôi đã tạo trước đó. Chuyển đến dòng số. 78. Vì chúng tôi đã sử dụng tất cả các tên mặc định, chúng tôi giữ chúng không thay đổi. Sau đó, kiểm tra tên cho tệp tham số DH trên dòng 85. Chúng tôi đã sử dụng tên dh.pem, vì vậy hãy thay đổi nó.
Tiếp theo, hãy sửa đổi các đặc quyền cho máy chủ OpenVPN. Chuyển đến dòng 274 và 275 và xóa phần đầu ;
bỏ ghi chú nó.
Tương tự đến dòng 192 và bỏ dấu chấm phẩy. Chỉ thị này cho phép lưu lượng của tất cả các máy khách đi qua VPN.
Lưu và thoát khỏi tệp.
Thay đổi quyền sở hữu của thư mục / etc / openvpn thành root.
sudo chown -R root: root / etc / openvpn
Thiết lập mạng và tường lửa
Chúng tôi cần cho phép chuyển tiếp IP trên máy chủ để cho phép các gói được chuyển tiếp từ và đến máy khách VPN. Dòng bỏ ghi chú 28 trên /etc/sysctl.conf
:
Lưu và thoát khỏi tệp.
Khởi động lại systemctl
để những thay đổi này diễn ra.
sudo sysctl -p
Chúng tôi cần thiết lập Dịch địa chỉ mạng (NAT) trên máy chủ bằng cách sử dụng tường lửa UFW để cho phép Máy khách VPN truy cập Internet bằng Địa chỉ IP của máy chủ VPN. Đầu tiên, hãy bật chuyển tiếp gói trong cấu hình tường lửa. Mở / etc / default / ufw
và thay đổi biến ở dòng 19 thành CHẤP NHẬN.
Lưu và thoát khỏi tệp.
Bây giờ hãy thêm các quy tắc sau vào tệp /etc/ufw/before.rules
trước lọc dòng trong tệp.
* nat: POSTROUTING ACCEPT [0: 0] -A POSTROUTING -s 10.8.0.0/8 -o -j MASQUERADE CAM KẾT
Nhập giao diện mạng của bạn thay cho . Bạn có thể thấy giao diện mạng của mình bằng lệnh ifconfig
.
Cho phép lưu lượng truy cập cho dịch vụ OpenVPN trên Tường lửa và cho phép cổng 1194.
sudo ufw allow openvpn && sudo ufw allow 1194
Tải lại dịch vụ tường lửa.
sudo ufw tải lại
Bây giờ chúng ta có thể khởi động lại daemon máy chủ Open VPN bằng cách chạy:
khởi động lại dịch vụ sudo openvpn
Cho phép nó bắt đầu lúc khởi động bằng cách chạy:
sudo systemctl kích hoạt openvpn
Máy chủ OpenVPN hiện đã được định cấu hình và đã khởi động. Bây giờ chúng ta hãy tiến hành yêu cầu chứng chỉ ứng dụng khách và tạo khóa và cấu hình khác.
Cấu hình máy khách OpenVPN
Chúng tôi cần tạo một khóa và một yêu cầu chứng chỉ cho ứng dụng khách. Quy trình để thực hiện việc này giống như quy trình đối với máy chủ.
Mặc dù khóa máy khách và yêu cầu chứng chỉ có thể được tạo trên máy khách và sau đó được chuyển đến máy CA, bạn nên tạo nó trên máy chủ. Lợi thế của việc thực hiện việc này trên máy chủ là bạn có thể tạo một tập lệnh để thực hiện tất cả các bước cần thiết trên máy chủ, giúp một máy khách mới tham gia VPN dễ dàng hơn.
Đi tới thư mục CA trên máy chủ và chạy như sau:
cd ~ / cert_authority ./easyrsa gen-req client nopass
Theo cách tương tự như đã làm trước đây, hãy nhập tên chung khi được nhắc hoặc để trống để sử dụng tên chung mặc định, tức là khách hàng.
Bây giờ, hãy sao chép yêu cầu chứng chỉ ứng dụng khách đã tạo vào máy CA.
scp pki / reqs / client.req [email protected]: / root
Hãy nhập yêu cầu này vào máy CA:
./easyrsa import-req /root/client.req client
Và bây giờ chúng ta hãy ký nó:
./easyrsa ứng dụng khách đăng ký yêu cầu
đi vàoĐúng
khi được nhắc tiếp tục. Nhập mật khẩu cho khóa CA khi được hỏi.
Bây giờ chúng tôi có thể xóa tệp được yêu cầu cho máy khách và sao chép yêu cầu trở lại máy chủ VPN.
rm /root/client.req scp pki / ban hành / client.crt [email protected]: / root
Hãy tạo một thư mục có tên là khách hàng
để giữ tất cả các tệp liên quan đến máy khách trên máy chủ VPN. Chúng tôi sẽ di chuyển khóa ứng dụng khách và chứng chỉ vào thư mục này.
mkdir ~ / client sudo mv ~ / client.crt ~ / cert_authority / pki / private / client.key ~ / client
Bây giờ, hãy tạo tệp cấu hình từ một mẫu có sẵn, tương tự như cách chúng tôi tạo tệp cấu hình máy chủ.
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~ / client
Mở tập tin client.conf
. Trên dòng 42, nhập tên máy chủ hoặc Địa chỉ IP của máy chủ của bạn thay cho my-server-1
.
Bỏ ghi chú dòng 61 và 62 bằng cách xóa dấu chấm phẩy ở đầu, để hạ cấp đặc quyền cho tệp.
Tiếp theo, nhận xét dòng 88-90 và dòng 108. Lý do là chúng tôi muốn thêm nội dung của các tệp được đề cập theo cách thủ công thay vì sử dụng các vị trí tệp. Mục đích của việc này là tệp cấu hình máy khách sau này sẽ được chuyển sang máy khách, nơi chúng tôi thực sự sẽ không có khóa máy khách và tệp chứng chỉ; do đó chúng tôi sao chép nội dung của chúng trong chính tệp cấu hình.
Nối phần sau vào tệp cấu hình máy khách. Nhập nội dung tệp của các tệp tương ứng bên trong các thẻ đã cho.
# Dán nội dung của tệp ca.crt tại đây # Dán nội dung của tệp client.crt vào đây # Dán nội dung của tệp client.key vào đây theo hướng phím 1 # Dán nội dung của tệp tls_auth.key vào đây
Lưu và thoát khỏi tệp. Đổi tên tệp này từ client.conf
đến client.ovpn
, vì cái sau là phần mở rộng cần thiết cho các tệp cấu hình có thể được nhập dưới dạng cấu hình mạng.
Bây giờ, chuyển tệp client.ovpn
cho máy khách, tức là máy cục bộ.
Chạy scp
trên máy khách của bạn để chuyển tệp từ máy chủ sang máy cục bộ của bạn.
scp user @ server_ip: / path_to_file local_destination_path
Cuối cùng, chúng ta cần sử dụng tệp cấu hình này để kết nối với máy chủ VPN. Điều này có thể được thực hiện cả thông qua dòng lệnh cũng như GUI.
Để khởi động ứng dụng khách VPN từ dòng lệnh, hãy chạy:
sudo openvpn --config client.ovpn
Và đó là lệnh duy nhất bạn cần chạy để khởi động Máy khách VPN.
Để khởi động ứng dụng khách VPN qua GUI, hãy thực hiện các bước sau.
Đi tới Cài đặt »Mạng trên máy khách của bạn.
Bấm vào + trong phần VPN và chọn ‘Nhập từ tệp…’ từ các tùy chọn.
Nhấp vào ‘Thêm’ để bắt đầu sử dụng VPN.
Lưu ý rằng trong ‘Gateway’, đó là Địa chỉ IP của máy chủ.
Cuối cùng, chuyển đổi nút ‘client VPN’ để bật VPN trên máy.
Có thể mất vài giây để thiết lập kết nối VPN. Biểu trưng tiến trình mới cho VPN sẽ xuất hiện ở góc trên cùng bên trái của màn hình khi nó đang được thiết lập và nó sẽ thay đổi thành biểu trưng VPN sau khi được thiết lập.
Để xác minh xem VPN có hoạt động chính xác hay không, hãy chạy như sau:
curl //ipinfo.io/ip
Nó sẽ trả về địa chỉ IP của máy chủ của bạn. Hoặc nếu không, bạn cũng có thể kiểm tra địa chỉ IP của mình bằng cách đơn giản tìm kiếm "IP của tôi" trên Google. Nó sẽ hiển thị địa chỉ IP của máy chủ VPN của bạn nếu thiết lập VPN của chúng tôi hoạt động bình thường.
Sự kết luận
Trong bài viết này, chúng tôi đã giới thiệu cho các bạn cách định cấu hình máy chủ OpenVPN, Tổ chức phát hành chứng chỉ và Máy khách OpenVPN. Để thêm nhiều máy khách hơn vào VPN, bây giờ chúng ta cần làm theo quy trình để tạo và ký chứng chỉ cho máy khách và sử dụng cùng một tệp cấu hình được tạo ở đây, chỉ thay đổi khóa máy khách và giá trị chứng chỉ.
Trong trường hợp kết nối internet chậm hơn, có thể là nếu UDP đang được sử dụng để liên lạc, thì sẽ bị mất gói đáng kể. Người dùng có thể chuyển sang TCP bằng cách bỏ ghi chú dòng proto tcp
và bình luận về dòng proto udp
trong tệp cấu hình máy chủ.
Ngoài ra, trong trường hợp có các lỗi khác, bạn có thể đặt cấp độ ghi nhật ký với động từ
chỉ thị trong cả tệp cấu hình máy chủ và máy khách. Bạn có thể nhập các giá trị từ 0 đến 9. Giá trị của chỉ thị này càng cao thì nhật ký sẽ càng dài.