Quản Trị Mạng – Trước đây chúng ta đã từng biết tới những ưu điểm tuyệt vời của SSH bởi tính an toàn khi truy cập từ xa. Ở bài viết này, hãy cùng xem xét một số vấn đề quan trọng cần “bảo dưỡng” cho nó, điều mà có thể gây bất ổn nếu nó không hoạt động trơn tru.
Lưu ý: Mặc dù phần minh họa sau đây được trình bày trên giao diện Linux, nhưng vẫn có thể áp dụng cho OpenSSH trong Mac OS X và Windows 7 thông qua Cygwin.
Tại sao lại an toàn?
SSH được biết đến là một biện pháp hữu hiệu để bảo mật dữ liệu trên đường truyền từ hệ thống này đến hệ thống khác, với cơ chế mã hóa đủ mạnh nhằm ngăn chặn các hiện tượng nghe trộm, đánh cắp thông tin trên đường truyền.
Trước đây khi thực hiện một kết nối từ máy tính này đến máy tính khác, chúng ta thường sử dụng các giao thức đơn giản dễ sử dụng như Telnet và FTP. Chúng ta sẽ gửi thông tin đến máy chủ từ xa, sau đó được xác nhận lại về các kết nối. Để an toàn, các giao thức này thường sử dụng kết hợp username và password. Điều này có nghĩa là an toàn? Hoàn toàn sai!
Quá trình kết nối như email bằng cách sử dụng FTP hay Telnet giống như tấm bưu thiếp. Nếu một ai đó đứng ở giữa, họ có thể nhìn thấy toàn bộ thông tin, bao gồm địa chỉ hai bên và cả username, password được gửi ra. Do đó họ có thể thay đổi nội dung tin nhắn, giữ lại thông tin và mạo danh một trong hai bên. Bạn không thể chắc chắn rằng mình có thực sự đang nói chuyện với người gửi hay không, và ngay cả khi đang làm điều đó, bạn cũng không thể chắc chắn không có ai đang nhòm ngó giữa hai người.
Còn đối với SSH, không có một trung tâm xác thực nào ở đây. Bạn sẽ gửi thư cho người mình đã biết bằng cách sử dụng một số thuật toán mã hóa, chỉ khi người nhận dùng đúng thuật toán phù hợp để giải mã mới nhận được. Sau đó bạn sẽ nhận được thư hồi âm cũng được bảo vệ bằng thuật toán tuyệt vời này. Cuối cùng thông tin của bạn sẽ được gửi trong một “phong bì” áp dụng thuật toán bí mật tới đích. Nếu thuật toán không phù hợp, người nhận sẽ được xác minh lại địa chỉ lần nữa.
Bây giờ chúng ta sẽ cùng tìm hiểu về tính năng quan trọng nhất của SSH, máy chủ chứng thực.
Các Host key
Máy chủ chứng thực về bản chất là một người nào đó mà bạn tin tưởng có phong bì được đóng dấu bằng thuật toán và xác nhận địa chỉ của người nhận giúp bạn. Đó là một sự mô tả khá chi tiết về địa chỉ, dựa trên thuật toán phức tạp mà chúng tôi không đề cập ở đây. Có một vài điều quan trọng cần lưu ý:
- Do không có trung tâm xác thực nên sự bảo mật an ninh nằm trong các host key này, key public và private. (Hai key này về sau sẽ được cấu hình khi bạn truy cập vào hệ thống).
- Thông thường, khi bạn kết nối tới máy tính khác thông qua SSH, host key được lưu trữ. Điều này giúp cho các hành động sau này nhanh hơn (hoặc ít rườm rà).
- Nếu các host key bị thay đổi, bạn sẽ nhận được cảnh báo nên thận trọng!
Từ khi host key được sử dụng trước khi thiết lập sự xác minh danh tính của máy chủ SSH, bạn phải chắc chắn việc kiểm tra các key trước khi kết nối. Bạn sẽ thấy một hộp thoại xác nhận như dưới đây:
Bạn không nên lo lắng về điều này. Thường thì khi vấn đề bảo mật trở thành mối quan tâm, host key sẽ có vị trí đặc biệt (trên cả nhận dạng vân tay ECDSA). Trong kinh doanh trực tuyến, thường nó sẽ có một sự đăng nhập an toàn duy nhất trên website. Bạn có thể phải (hoặc chọn) điện thoại cho bộ phận IT để xác nhận key này qua điện thoại.
Kiểm tra Host Key trong hệ thống
Có 4 loại thuật toán mã hóa được sử dụng cho các key, nhưng mặc định cho OpenSSH là ECDSA. Sau đây là dòng lệnh bạn có thể chạy trên máy chủ SSH mà bạn truy cập:
ssh-keygen -f /etc/ssh/ssh_host_ecdsa_key.pub -l
Đầu ra của bạn sẽ có dạng như thế này:
256 ca:62:ea:7c:e4:9e:2e:a6:94:20:11:db:9c:78:c3:4c /etc/ssh/ssh_host_ecdsa_key.pub
Con số đầu tiên là độ dài bit của key, sau đó là key của chính nó, cuối cùng bạn sẽ có một tập tin được lưu trữ. Bạn cần so sánh phần giữa của dòng trên khi được nhắc nhở đăng nhập từ xa. Chúng phải phù hợp với nhau, nếu không sẽ có một vài sự khác biệt xảy ra.
Bạn có thể xem toàn bộ các host được kết nối thông qua SSH bằng cách nhìn vào tập tin known_hosts:
~/.ssh/known_hosts
Bạn có thể mở nó bằng bất kỳ trình soạn thảo văn bản nào. Nếu sát, hãy chú ý đến những key được lưu trữ. Chúng sẽ được lưu lại với tên máy chủ (hoặc địa chỉ trang web) và địa chỉ IP của nó.
Sự thay đổi Host Key và các vấn đề phát sinh
Có một vài lý do tại sao host key bị thay đổi hoặc không phù hợp với những gì được đăng nhập trong tập tin knows_hosts của bạn:
- Hệ thống đã được cài đặt/cấu hình lại (re-installed/re-configured).
- Các host key đã được thay đổi thủ công do giao thức bảo mật.
- IP hoặc DNS bị thay đổi.
- Hệ thống bị xâm nhập khiến host key bị thay đổi.
Nhiều khả năng lý do là ở ba câu đầu tiên, và bạn có thể bỏ qua sự thay đổi đó. Nếu IP/DNS bị sửa đổi, bạn sẽ được chuyển đến một máy chủ khác. Nếu bạn không chắc chắn 3 lý do trên, rất có thể lý do cuối cùng đã dẫn đến sự cố các host key bị đổi.
Làm thế nào để OpenSSH xử lý các host “vô danh”?
OpenSSH được thiết lập để xử lý các host chưa được biết đến, được phản ánh trong biến “StrictHostKeyChecking” (không có dấu nháy kép).
Tùy thuộc vào sự cấu hình của bạn, SSH sẽ được kết nối với các host này (không có các key thuộc file know_host của bạn) theo ba cách:
- StrictHostKeyChecking được thiết lập là “no”: OpenSSH sẽ tự động kết nối tới bất kỳ máy chủ SSH nào mà không phụ thuộc vào tình trạng của nó. Điều này là không an toàn và không được khuyến cáo, trừ khi bạn đang thêm một loạt các host sau khi cài đặt lại hệ điều hành, sau đó bạn sẽ thay đổi lại cho nó.
- StrictHostKeyChecking được thiết lập là “ask”: OpenSSH sẽ hiển thị cho bạn thấy các host key mới và yêu cầu bạn xác nhận chúng trước khi thêm vào. Nó sẽ ngăn chặn các kết nối từ việc thay đổi host key. Đây là điều mặc định.
- StrictHostKeyChecking được thiết lập là “yes”: Ngược lại với “no”, điều này sẽ ngăn chặn mọi kết nối tới bất kỳ host nào mà không có trong file known_hosts của bạn.
Bạn có thể dễ dàng thay đổi các biến này bằng cách sử dụng dòng mô hình dòng lệnh sau:
ssh -o 'StrictHostKeyChecking [option]' user@host
Hãy đổi [option] thành “no”, “ask”, “yes”. Tương tự bạn cũng thay đổi user@host thành username và tên host của máy chủ bạn kết nối tới. Ví dụ:
ssh -o 'StrictHostKeyChecking ask' yatri@192.168.1.50
Ngăn chặn host dựa vào sự thay đổi các key
Nếu bạn có một máy chủ và đang thử truy cập vào key đã tự thay đổi, các cấu hình OpenSSH mặc định sẽ ngăn chặn bạn truy cập vào nó. Bạn có thể thay đổi giá trị của StrictHostKeyChecking cho host này, nhưng không được triệt để hoàn toàn. Thay vào đó, đơn giản là chúng ta chỉ cần thay đổi giá trị của tập tin known_hosts.
Hình ảnh hiển thị trên màn hình có thể khiến bạn rối mắt. Đừng hoang mang vội, hãy tập trung nhìn vào dòng mà chúng ta cần (đối với một hệ điều hành được cài đặt lại):
Nó sẽ cho ta thấy trích dẫn file cần chỉnh sửa, thậm chí là cả sổ dòng. Vì thế hãy mở file này trong Nano:
Dưới đây là key gây ra lỗi, trong dòng 1. Việc chúng ta cần làm lúc này là nhấn Ctrl + K để cắt ra toàn bộ dòng.
Tiếp theo nhấn Ctrl + O để ghi lại (save) tập tin, sau đó nhấn Ctrl + X để thoát.
Một nhắc nhở hiện ra, bạn có thể phản hồi lại với “yes.”
Tạo Host Key mới
Đối với các bản ghi, không có quá nhiều lý do khiến bạn cần thay đổi toàn bộ host key, nhưng nếu cần thiết bạn có thể làm điều đó rất dễ dàng.
Đầu tiên, cần thay đổi hệ thống thư mục phù hợp:
cd /etc/ssh/
Tiếp theo chúng ta sẽ xóa toàn bộ key cũ:
sudo rm /etc/ssh/ssh_host_*
Ngoài ra bạn cũng có thể di chuyển chúng tới đường dẫn sao lưu an toàn nếu muốn.
Sau đó chúng ta có thể báo cho máy chủ OpenSSH để cấu hình lại chính nó:
sudo dpkg-reconfigure openssh-server
Bạn sẽ nhận được một thông báo trong khi máy tính tạo key mới.
Hy vọng với bài hướng dẫn này bạn sẽ biết cách làm thế nào cho SSH hoạt động tốt hơn. Chúc các bạn thành công!