Trong môi trường mạng phức tạp, việc truy cập trực tiếp vào các máy chủ từ xa thường gặp nhiều khó khăn do chính sách mạng, tường lửa hoặc các biện pháp bảo mật nghiêm ngặt. Bài viết này sẽ hướng dẫn bạn cách sử dụng SSH ProxyJump và Jump Host (còn gọi là bastion host) để thiết lập kết nối an toàn và hiệu quả đến các máy chủ đích, đồng thời đảm bảo tuân thủ các tiêu chuẩn bảo mật.
SSH (Secure Shell) là một giao thức mạng được thiết kế để bảo vệ dữ liệu truyền qua các mạng không an toàn. Nó cho phép đăng nhập từ xa, thực thi lệnh và truyền tệp an toàn (thông qua SFTP và SCP) thông qua giao tiếp được mã hóa. SSH đảm bảo rằng dữ liệu được bảo vệ khỏi sự đánh chặn và truy cập trái phép.
Các tính năng cốt lõi của SSH bao gồm mã hóa dữ liệu, xác thực danh tính của cả máy khách và máy chủ, đảm bảo tính toàn vẹn dữ liệu và khả năng chuyển tiếp cổng (port forwarding) an toàn. SSH đóng vai trò quan trọng trong việc thay thế các giao thức cũ và không an toàn như Telnet, đảm bảo quyền riêng tư và tuân thủ các tiêu chuẩn bảo mật, đặc biệt quan trọng đối với các tổ chức quản lý dữ liệu nhạy cảm.
Một Jump Host, hay còn gọi là bastion host, là một hệ thống trung gian cho phép lưu lượng mạng chuyển mạch để truy cập các máy chủ mục tiêu từ một miền bảo mật hoặc lớp mạng logic khác. Đây là một cổng được kiểm soát, thông qua đó các mạng bên ngoài có thể truy cập một số máy chủ không thể nhận diện trực tiếp từ mạng bên ngoài bởi những người dùng khác, chẳng hạn như quản trị viên và người dùng được ủy quyền.
Trước đây, khi sử dụng Jump Host, cần phải thiết lập kết nối SSH đến Jump Host trước, sau đó khởi tạo một kết nối SSH khác đến máy chủ đích. Quá trình này thường tẻ nhạt và kém hiệu quả. ProxyJump, được giới thiệu trong OpenSSH 7.3, cho phép người dùng dễ dàng chỉ định Jump Host trực tiếp trong lệnh hoặc tệp cấu hình SSH, giúp đơn giản hóa quy trình kết nối.
Về cơ bản, ProxyJump là một cách an toàn hơn và dễ dàng hơn để tạo đường hầm (tunnel) qua một hoặc nhiều máy chủ trung gian để đến đích cuối cùng. Nó loại bỏ nhu cầu sử dụng các cấu hình phức tạp hoặc lưu trữ khóa riêng tư trên các máy chủ trung gian.
ssh -J [user@]jump_host[:port] target_host
Để truy cập server.destination.com
thông qua jump.example.com
, hãy sử dụng lệnh sau:
ssh -J user@jump.example.com user@server.destination.com
Lệnh này hướng dẫn SSH kết nối đến jump.example.com
với tư cách là người dùng user
, sau đó kết nối đến server.destination.com
cũng với tư cách là người dùng user
.
Trong các môi trường phức tạp, bạn có thể cần phải đi qua nhiều Jump Host để đến máy chủ đích. Ví dụ:
ssh -J user@jump1.example.com,user@jump2.example.com user@server.destination.com
Lệnh này xâu chuỗi hai Jump Host, jump1.example.com
và jump2.example.com
, trước khi truy cập máy chủ đích.
Việc gõ các lệnh này mỗi lần có thể khá rườm rà. Do đó, bạn có thể thiết lập máy khách SSH bằng cách tạo các mục trong tệp ~/.ssh/config
.
Host jump-host
HostName jump.example.com
User user
Host host_destination
HostName server.destination.com
User user
ProxyJump jump-host
Với cấu hình này, bạn có thể kết nối đến máy chủ đích bằng cách sử dụng:
ssh host_destination
Khi kết nối thông qua Jump Host, bạn có thể sử dụng chuyển tiếp cổng SSH. Nếu bạn cố gắng kết nối trực tiếp đến số cổng của máy chủ đích, bạn sẽ không được cấp quyền truy cập do chuyển tiếp cổng TCP.
ssh -J user@jump.example.com -L 8080:remote_service:80 user@destination_server.hostname
Lệnh này chuyển tiếp cổng cục bộ 8080 của bạn đến remote_service:80
trên server.destination.com
, cho phép truy cập dịch vụ từ xa thông qua localhost:8080
trên máy của bạn.
Một trong những lợi ích của SSH là khả năng sử dụng xác thực dựa trên khóa. Bằng cách sử dụng khóa ssh, bạn có thể đăng nhập vào máy chủ của mình mà không cần nhập mật khẩu mỗi lần, điều này không chỉ tăng cường sự tiện lợi mà còn cả bảo mật.
Để tạo một cặp khóa SSH, sử dụng lệnh sau:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Tiếp theo, nhấn enter để lưu cặp khóa theo đường dẫn mặc định (~/.ssh/id_rsa
và ~/.ssh/id_rsa.pub
), sau đó đặt một mật khẩu nếu cần.
Sử dụng lệnh ssh-copy-id
để sao chép khóa công khai của bạn lên máy chủ từ xa:
ssh-copy-id user@server.destination.com
Lệnh này thêm khóa công khai của bạn vào tệp ~/.ssh/authorized_keys
trên máy chủ, cho phép bạn xác thực mà không cần mật khẩu.
Khi kết nối thông qua Jump Host, hãy đảm bảo rằng khóa SSH của bạn được thiết lập trên cả Jump Host và máy chủ đích.
Sao chép khóa của bạn lên Jump Host:
ssh-copy-id user@jump.example.com
Sau đó, từ Jump Host, sao chép khóa của bạn lên máy chủ đích:
ssh user@jump.example.com ssh-copy-id user@server.destination.com
Hoặc, bạn có thể sao chép trực tiếp khóa công khai của mình lên máy chủ đích bằng cách sử dụng:
ssh -J user@jump.example.com user@server.destination.com 'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys' < ~/.ssh/id_rsa.pub
Nếu bạn không thể sao chép khóa SSH của mình lên máy chủ đích, bạn có thể sử dụng chuyển tiếp SSH agent. Điều này cho phép bạn xác thực đến máy chủ đích bằng cách sử dụng khóa SSH cục bộ của mình.
Thêm đoạn mã sau vào cấu hình SSH của bạn:
Host *
ForwardAgent yes
Lưu ý rằng chuyển tiếp SSH agent nên được sử dụng một cách thận trọng, vì nó có thể là một rủi ro bảo mật nếu Jump Host bị xâm phạm.
Mặc dù ProxyJump đơn giản hóa quy trình kết nối thông qua Jump Host, nhưng có những trường hợp sử dụng ProxyCommand thích hợp hơn, đặc biệt trong các môi trường yêu cầu cài đặt proxy tùy chỉnh hoặc proxy không phải SSH.
Bạn có thể thiết lập ProxyCommand trong tệp ~/.ssh/config
của bạn:
Host host_destination
HostName server.destination.com
User user
ProxyCommand ssh -W %h:%p user@jump.example.com
Cấu hình này hướng dẫn SSH kết nối một phiên SSH khác tại jump.example.com
và sau đó chuyển kênh đến máy chủ đích.
Trong khi việc sử dụng Jump Host và ProxyJump giúp làm việc dễ dàng hơn, người ta cần đảm bảo rằng mạng và hệ thống đủ an toàn.
Sử dụng Jump Host và ProxyJump trong các tình huống sau:
Giải quyết các vấn đề phổ biến như hết thời gian chờ kết nối, lỗi xác thực và sự cố tương thích phiên bản SSH bằng cách kiểm tra khả năng tiếp cận mạng, quy tắc tường lửa, phân giải DNS, quyền khóa SSH, khóa được ủy quyền và tài khoản người dùng.
SSH ProxyJump và Jump Host là những công cụ có giá trị trong việc quản lý một mạng phức tạp và an toàn. Thông qua các tính năng này, quản trị viên có thể kiểm soát dễ dàng truy cập vào các máy chủ từ xa trong các cấu trúc liên kết mạng lớn cũng như cải thiện tính bảo mật và hiệu quả của các hoạt động đang chạy. Bên cạnh đó, những công cụ này xác định cách tăng cường khả năng truy cập đồng thời củng cố cơ sở hạ tầng mạng của tổ chức trước các mối đe dọa mạng khác nhau.
Bài viết liên quan