Sử dụng kết nối VPN là cách an toàn nhất để truy cập mạng nếu bạn đang làm việc từ xa, nhưng vì cấu hình này có thể yêu cầu phần cứng, thời gian và kiến thức, bạn có thể nên biết các lựa chọn thay thế để thực hiện điều đó . Sử dụng SSH cũng là một cách an toàn để truy cập mạng từ xa mà không cần thêm phần cứng, tốn ít thời gian và ít nỗ lực hơn so với cấu hình máy chủ VPN. Trong blog này, chúng ta sẽ xem cách định cấu hình SSH Tunneling để truy cập cơ sở dữ liệu của bạn một cách an toàn.
SSH là gì?
SSH (Secure SHell), là một chương trình / giao thức cho phép bạn truy cập một máy chủ / mạng từ xa, chạy lệnh hoặc chia sẻ thông tin. Bạn có thể định cấu hình các phương thức xác thực được mã hóa khác nhau và nó sử dụng cổng 22 / TCP theo mặc định, nhưng bạn nên thay đổi nó vì lý do bảo mật.
Cách sử dụng SSH?
Cách an toàn nhất để sử dụng là tạo Cặp khóa SSH. Với điều này, bạn không chỉ cần có mật khẩu mà còn cả khóa cá nhân để có thể truy cập máy chủ từ xa.
Ngoài ra, bạn nên có một máy chủ chỉ có vai trò máy chủ SSH và giữ nó càng cô lập càng tốt, để trong trường hợp có cuộc tấn công bên ngoài, nó sẽ không ảnh hưởng đến các máy chủ cục bộ của bạn. Một cái gì đó như thế này:
Trước tiên, hãy xem cách định cấu hình máy chủ SSH.
Cấu hình máy chủ
Hầu hết Cài đặt Linux đều được cài đặt SSH Server theo mặc định, nhưng có một số trường hợp nó có thể bị thiếu (ISO tối thiểu), vì vậy để cài đặt nó, bạn chỉ cần cài đặt các gói sau:
Hệ điều hành dựa trên RedHat
$ yum install openssh-clients openssh-server
Hệ điều hành dựa trên Debian
Cập nhật$ apt update; apt install openssh-client openssh-server
Bây giờ bạn đã cài đặt Máy chủ SSH, bạn có thể định cấu hình nó để chỉ chấp nhận các kết nối bằng một khóa.
vi /etc/ssh/sshd_config
PasswordAuthentication no
Đảm bảo rằng bạn thay đổi nó sau khi có khóa công khai, nếu không bạn sẽ không thể đăng nhập.
Bạn cũng có thể thay đổi cổng và từ chối quyền truy cập root để đảm bảo an toàn hơn:
Port 20022
PermitRootLogin no
Bạn phải kiểm tra xem cổng đã chọn có đang mở trong cấu hình tường lửa hay không để có thể truy cập vào cổng đó.
Đây là cấu hình cơ bản. Có các thông số khác nhau cần thay đổi ở đây để cải thiện bảo mật SSH, vì vậy bạn có thể làm theo tài liệu cho tác vụ này.
Cấu hình ứng dụng khách
Bây giờ, hãy tạo cặp khóa cho người dùng cục bộ “từ xa” để truy cập Máy chủ SSH. Có nhiều loại khóa khác nhau, trong trường hợp này, chúng tôi sẽ tạo khóa RSA.
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/remote/.ssh/id_rsa):
Created directory '/home/remote/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/remote/.ssh/id_rsa.
Your public key has been saved in /home/remote/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:hT/36miDBbRa3Povz2FktC/zNb8ehAsjNZOiX7eSO4w [email protected]
The key's randomart image is:
+---[RSA 3072]----+
| |
| .. . |
| o.+.=. |
| *o+.o.. |
| +S+o+=o . |
| . o +==o+ |
| =oo=ooo.|
| .E=*o* .+|
| ..BB ooo|
+----[SHA256]-----+
Thao tác này sẽ tạo các tệp sau trong thư mục có tên “.ssh” bên trong thư mục chính của người dùng:
$ whoami
remote
$ pwd
/home/remote/.ssh
$ ls -la
total 20
drwx------ 2 remote remote 4096 Apr 16 15:40 .
drwx------ 3 remote remote 4096 Apr 16 15:27 ..
-rw------- 1 remote remote 2655 Apr 16 15:26 id_rsa
-rw-r--r-- 1 remote remote 569 Apr 16 15:26 id_rsa.pub
Tệp “id_rsa” là khóa cá nhân (giữ nó càng an toàn càng tốt) và “id_rsa.pub” là khóa công khai phải được sao chép sang máy chủ từ xa để truy cập. Đối với điều này, hãy chạy lệnh sau với tư cách là người dùng tương ứng:
$ whoami
remote
$ ssh-copy-id -p 20022 [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/remote/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh -p '20022' '[email protected]"
and check to make sure that only the key(s) you wanted were added.
Trong ví dụ này, tôi đang sử dụng cổng 20022 cho SSH và máy chủ từ xa của tôi là 35.166.37.12. Tôi cũng đã tạo cùng một người dùng (từ xa) trong cả máy chủ cục bộ và máy chủ từ xa. Bạn có thể sử dụng người dùng khác trong máy chủ từ xa, vì vậy trong trường hợp đó, bạn nên thay đổi người dùng thành người dùng chính xác trong lệnh ssh-copy-id:
$ ssh-copy-id -p 20022 [email protected]
Lệnh này sẽ sao chép khóa công khai vào tệp ủy quyền_giúp trong thư mục .ssh từ xa. Vì vậy, trong Máy chủ SSH, bạn sẽ có cái này ngay bây giờ:
$ pwd
/home/remote/.ssh
$ ls -la
total 20
drwx------ 2 remote remote 4096 Apr 16 15:40 .
drwx------ 3 remote remote 4096 Apr 16 15:27 ..
-rw------- 1 remote remote 422 Apr 16 15:40 authorized_keys
-rw------- 1 remote remote 2655 Apr 16 15:26 id_rsa
-rw-r--r-- 1 remote remote 569 Apr 16 15:26 id_rsa.pub
Bây giờ, bạn có thể truy cập máy chủ từ xa:
$ ssh -p 20022 [email protected]
Nhưng điều này là không đủ để truy cập vào nút cơ sở dữ liệu của bạn, vì bạn đang ở trong Máy chủ SSH.
Truy cập Cơ sở dữ liệu SSH
Để truy cập vào nút cơ sở dữ liệu, bạn có hai tùy chọn. Cách cổ điển là, nếu bạn đang ở trong Máy chủ SSH, bạn có thể truy cập nó từ đó vì bạn đang ở trong cùng một mạng, nhưng đối với điều này, bạn nên mở hai hoặc ba kết nối.
Đầu tiên, kết nối SSH được thiết lập với Máy chủ SSH:
$ ssh -p 20022 [email protected]
Sau đó, kết nối SSH với Nút cơ sở dữ liệu:
$ ssh [email protected]
Và cuối cùng, kết nối cơ sở dữ liệu, trong trường hợp của MySQL, là:
$ mysql -h localhost -P3306 -udbuser -p
Và cho PostgreSQL:
$ psql -h localhost -p 5432 -Udbuser postgres
Nếu bạn đã cài đặt ứng dụng khách cơ sở dữ liệu trong Máy chủ SSH, bạn có thể tránh kết nối SSH thứ hai và chỉ chạy kết nối cơ sở dữ liệu trực tiếp từ Máy chủ SSH:
$ mysql -h 192.168.100.120 -P3306 -udbuser -p
hoặc:
$ psql -h 192.168.100.120 -p 5432 -Udbuser postgres
Tuy nhiên, điều này có thể gây khó chịu vì bạn đã từng sử dụng kết nối cơ sở dữ liệu trực tiếp từ máy tính của mình được kết nối trong văn phòng, vì vậy hãy xem cách sử dụng SSH Tunneling cho việc này.
Đường hầm SSH
Theo cùng một ví dụ, chúng ta có:
- Địa chỉ IP công cộng của máy chủ SSH:35.166.37.12
- Cổng máy chủ SSH:20022
- Cơ sở dữ liệu Node Địa chỉ IP riêng:192.168.100.120
- Cổng cơ sở dữ liệu:3306/5432
- Người dùng SSH (cục bộ và từ xa):remote
- Người dùng cơ sở dữ liệu:dbuser
Dòng lệnh
Vì vậy, nếu bạn chạy lệnh sau trong máy cục bộ của mình:
$ ssh -L 8888:192.168.100.120:3306 [email protected] -p 20022 -N
Thao tác này sẽ mở cổng 8888 trong máy cục bộ của bạn, cổng này sẽ truy cập vào nút cơ sở dữ liệu từ xa, cổng 3306, thông qua Máy chủ SSH, cổng 20022, sử dụng người dùng "từ xa".
Vì vậy, để làm rõ hơn, sau khi chạy lệnh này, bạn có thể truy cập vào nút cơ sở dữ liệu từ xa, chạy nút này trong máy cục bộ của bạn:
$ mysql -h localhost -P8888 -udbuser -p
Công cụ đồ họa
Nếu bạn đang sử dụng công cụ đồ họa để quản lý cơ sở dữ liệu, hầu hết có thể nó có tùy chọn sử dụng SSH Tunneling để truy cập vào nút cơ sở dữ liệu.
Hãy xem một ví dụ sử dụng MySQL Workbench:
Và tương tự đối với PgAdmin:
Như bạn có thể thấy, thông tin được hỏi ở đây khá giống với thông tin đã qua sử dụng cho kết nối SSH Tunneling dòng lệnh.
Kết luận
Bảo mật là quan trọng đối với tất cả các công ty, vì vậy nếu bạn đang làm việc tại nhà, bạn phải bảo mật dữ liệu như khi bạn đang làm việc tại văn phòng. Như chúng tôi đã đề cập, đối với điều này, có lẽ giải pháp tốt nhất là có kết nối VPN để truy cập cơ sở dữ liệu, nhưng nếu vì lý do nào đó không thể thực hiện được, bạn cần có một giải pháp thay thế để tránh xử lý dữ liệu qua internet theo cách không an toàn. Như bạn có thể thấy, định cấu hình SSH Tunneling để truy cập cơ sở dữ liệu của bạn không phải là khoa học tên lửa và có lẽ là giải pháp thay thế tốt nhất trong trường hợp này.