Cách bảo mật máy chủ SSH

Bảo mật kết nối SSH giúp bạn bảo vệ hệ thống Linux và dữ liệu. Quản trị viên hệ thống và người dùng gia đình cũng cần phải bảo mật máy tính truy cập từ mạng Internet công khai (internet-facing computer). Dưới đây là 10 cách dễ dàng giúp bạn bảo vệ máy chủ SSH của mình.

Đôi điều cơ bản về bảo mật SSH

SSH viết tắt của Secure Shell. Giao thức SSH hoặc công cụ phần mềm cho phép quản trị hệ thống và người dùng thực hiện kết nối an toàn với máy tính từ xa bằng giao thức đó.

Giao thức SSH là giao thức được mã hóa, thiết kế để cung cấp kết nối an toàn qua mạng không an toàn chẳng hạn như Internet. SSH trong Linux được xây dựng trên phiên bản di động của dự án OpenSSH. Nó được triển khai trong model máy khách - máy chủ cổ điển với máy chủ SSH chấp nhận kết nối từ máy khách SSH. Máy khách được sử dụng để kết nối với máy chủ và hiển thị phiên cho người dùng từ xa. Máy chủ chấp nhận kết nối và thực hiện phiên.

Trong cấu hình mặc định của nó, máy chủ SSH sẽ “nghe” kết nối đang đến trên Transmission Control Protocol (TCP), cổng 22. Vì đây là cổng được chuẩn hóa và phổ biến, nên nó là mục tiêu của các tác nhân đe dọa và bot độc hại.

Các tác nhân độc hại khởi chạy bot quét phạm vi địa chỉ IP để tìm kiếm cổng mở. Sau đó nó thăm dò các cổng này xem có lỗ hổng có thể khai thác không. Suy nghĩ, tôi an toàn, có nhiều mục tiêu lớn và tốt hơn tôi để những kẻ xấu nhắm đến là hoàn toàn sai lầm. Các bot này không chọn mục tiêu dựa trên bất cứ tiêu chí nào, nó chỉ đang tìm kiếm một cách để xâm nhập vào hệ thống.

Bạn sẽ là nạn nhân nếu không bảo mật hệ thống của mình.

Security Friction (Ma sát bảo mật)

Điểm Security Friction là bất kì tình huống nào mà nhiệm vụ chính bị ngăn chặn hoặc trì hoãn do yêu cầu bảo mật.

Ma sát bảo mật gây ra sự khó chịu (ở bất cứ cấp độ nào) cho người dùng và những người khác khi bạn thực hiện các biện pháp bảo mật. Người mới dùng hệ thống máy tính có thể lo lắng liệu họ có thực sự phải nhập mật khẩu mỗi khi đăng nhập vào mainframe không. Điều này đối với họ mà nói cũng là một dạng ma sát bảo mật.

Giới thiệu các biện pháp bảo mật thường sẽ bao gồm vài dạng ma sát cho một số người. Chủ doanh nghiệp phải trả tiền cho các biện pháp này. Người dùng máy tính có thể phải thay đổi các thói quen hoặc nhớ thông tin xác thực khác, thêm các bước để kết nối thành công. Quản trị viên hệ thống sẽ có thêm việc để thực hiện và bảo trì các biện pháp bảo mật mới.

Thắt chặt và khóa hệ điều hành Linux hoặc hệ điều hành giống Unix có thể nhanh chóng. Những biện pháp bảo mật ở đây là một bộ các bước dễ thực hiện sẽ cải thiện bảo mật máy tính mà không cần ứng dụng bên thứ ba và can thiệp sâu vào tường lửa.

Sử dụng giao thức SSH phiên bản 2

Năm 2006, giao thức SSH đã được cập nhật từ phiên bản 1 lên phiên bản 2. Đây là một nâng cấp đáng kể. Có rất nhiều thay đổi và cải tiến, đặc biệt là về mã hóa và bảo mật, phiên bản 2 không tương thích ngược với phiên bản 1. Để ngăn kết nối từ máy khách phiên bản 1, bạn có thể quy định máy tính chỉ chấp nhận kết nối từ phiên bản 2.

Để làm điều này, chỉnh sửa file /etc/ssh/sshd_config sử dụng lệnh sau:

sudo gedit /etc/ssh/sshd_config

Chỉnh sửa file /etc/ssh/sshd_config

Thêm dòng sau:

Protocol 2

Thêm dòng Protocol 2

Và lưu file, sau đó khởi động lại quá trình SSH daemon (trình nền) sử dụng lệnh sau:

sudo systemctl restart sshd

Khởi động lại quá trình SSH daemon

Kiểm tra hoạt động của thiết lập mới bằng cách chuyển sang một máy khác và thử SSH vào máy thử nghiệm. Chúng ta sẽ sử dụng tùy chọn -1 (giao thức 1) để buộc lệnh ssh sử dụng giao thức phiên bản 1.

ssh -1 dave@howtogeek.local

Thử kết nối với máy chủ SSH qua giao thức 1

Yêu cầu kết nối bị từ chối. Hãy đảm bảo bạn vẫn có thể kết nối với giao thức 2. Chúng ta sẽ sử dụng -2 (giao thức 2) để kiểm tra.

ssh -2 dave@howtogeek.local

Thử kết nối với máy chủ SSH qua giao thức 2

Thực tế, máy chủ SSH đang yêu cầu mật khẩu là một dấu hiệu tích cực cho thấy kết nối đã được thực hiện và bạn đang tương tác với máy chủ. Các máy khách SSH hiện đại sẽ mặc định sử dụng giao thức 2, chúng ta không cần phải chỉ định giao thức 2 với điều kiện máy khách được cập nhật.

ssh dave@howtogeek.local

Máy khách SSH hiện đại sẽ mặc định sử dụng giao thức 2

Kết nối đã được chấp nhận.

Tránh cổng 22

Cổng 22 là cổng tiêu chuẩn cho kết nối SSH. Nếu sử dụng cổng khác, nó thêm một chút bảo mật qua trạng thái mập mờ (Security Through Obscurity - STO) vào hệ thống của bạn. Bảo mật qua trạng thái mập mờ không bao giờ được xem là một biện pháp bảo mật thực sự. Thực tế, một vài bot tấn công thông minh hơn thăm dò tất cả các cổng mở và quyết định dịch vụ nào chúng đang thực hiện, thay vì dựa vào danh sách tìm kiếm đơn giản của các cổng và cho là chúng cung cấp dịch vụ thông thường. Nhưng sử dụng cổng không tiêu chuẩn có thể giúp giảm lưu lượng xấu trên cổng 22.

Để định cấu hình cổng không chuẩn, hãy chỉnh sửa file cấu hình SSH như trên.

Sử dụng cổng khác

Xóa # ở đầu dòng của dòng Port và thay thế 22 với số bạn chọn. Lưu file cấu hình và khởi động lại SSH daemon.

Trên máy tính khác chúng ta sẽ sử dụng lệnh ssh để kết nối với máy chủ. Lệnh ssh mặc định sử dụng cổng 22:

ssh dave@howtogeek.local

Sử dụng lệnh ssh để kết nối với máy chủ

Kết nối bị từ chối. Hãy thử lại và chỉ định cổng 470 sử dụng tùy chọn –p (cổng):

ssh -p 479 dave@howtogeek.local

Sử dụng cổng 470

Kết nối được xác nhận.

Kết nối bộ lọc sử dụng TCP Wrappers

TCP Wrappers là một danh sách kiểm soát truy cập dễ hiểu. Nó cho phép bạn từ chối và cho phép các kết nối dựa trên các đặc điểm của yêu cầu kết nối như địa chỉ IP hoặc tên máy chủ. TCP Wrappers nên được sử dụng với, không thay thế tường lửa cấu hình thích hợp.

TCP Wrappers đã được cài đặt sẵn trên máy Ubuntu 18.04 LTS. Nó phải được cài đặt trên Manjaro 18.10 và Fedora 30.

Để cài đặt trên Fedora, sử dụng lệnh sau:

sudo yum install tcp_wrappers

Cài đặt TCP Wrappers trên Fedora

Để cài đặt trên Manjaro, sử dụng lệnh này:

sudo pacman -Syu tcp-wrappers

Cài đặt TCP Wrappers trên Manjaro

Có hai file đi kèm, một file giữ danh sách cho phép và một file giữ danh sách từ chối. Chỉnh sửa danh sách từ chối sử dụng lệnh sau:

sudo gedit /etc/hosts.deny

Chỉnh sửa danh sách từ chối

Lệnh trên sẽ mở trình chỉnh sửa gedit với file từ chối tải trong đó.

Thêm dòng ALL : ALL

Bạn cần thêm dòng:

ALL : ALL

Và lưu file. Dòng này sẽ chặn tất cả các truy cập không được phép. Bây giờ, chúng ta cần cấp quyền cho các kết nối bạn muốn chấp nhận. Để làm điều đó, cần chỉnh sửa file cho phép:

sudo gedit /etc/hosts.allow

Chỉnh sửa file cho phép

Lệnh trên sẽ mở trình chỉnh sửa gedit với file cho phép tải trong đó.

Tải file cho phép

Chúng ta đã thêm vào tên SSH daemon, SSHD và địa chỉ IP của máy tính cho phép tạo kết nối. Lưu file và xem các hạn chế, quyền có hiệu lực không.

Đầu tiên, bạn sẽ thử kết nối từ máy tính không có trong file hosts.allow:

Thử kết nối từ máy tính không có trong file hosts.allow

Kết nối bị từ chối. Chúng ta sẽ thử kết nối từ máy có địa chỉ IP 192.168.4.23:

Kết nối từ máy có địa chỉ IP 192.168.4.23

Kết nối được chấp nhận.

Ví dụ ở đây chỉ cho phép duy nhất một máy có thể kết nối. TCP wrappers khá linh hoạt, nó hỗ trợ tên máy chủ, ký tự đại diện và mặt nạ subnet để chấp nhận kết nối từ phạm vi địa chỉ IP.

Từ chối yêu cầu kết nối không có mật khẩu

Mặc dù không tốt nhưng quản trị viên hệ thống Linux có thể tạo tài khoản người dùng không có mật khẩu. Điều đó có nghĩa là không yêu cầu mật khẩu cho kết nối từ xa từ tài khoản này. Những kết nối này sẽ được chấp nhận nhưng không được xác thực.

Cài đặt mặc định cho SSH chấp nhận yêu cầu kết nối không có mật khẩu. Chúng ta có thể thay đổi nó một cách dễ dàng và đảm bảo tất cả các kết nối đó được xác thực.

Bạn cần chỉnh sửa file cấu hình SSH.

Từ chối yêu cầu kết nối không có mật khẩu

Cuộn xuống trong file cho đến khi bạn thấy dòng ghi #PermitEmptyPasswords no. Xóa # ở đầu dòng và lưu file. Khởi động lại SSH daemon.

Sử dụng key SSH thay cho mật khẩu

Key SSH cung cấp cách đăng nhập vào máy chủ SSH một cách an toàn. Mật khẩu có thể bị crack, đoán hoặc sử dụng phương thức tấn công Brute-forced. Key SSH không dễ dàng bị tấn công bởi các loại tấn công này.

Khi tạo key SSH, bạn tạo một cặp key. Một là key chung và một là key riêng. Key chung được cài đặt trên các máy chủ bạn muốn kết nối. Key riêng được giữ an toàn trên máy tính của bạn.

Key SSH cho phép tạo kết nối mà không cần mật khẩu, an toàn hơn kết nối sử dụng xác thực mật khẩu.

Khi tạo yêu cầu kết nối, máy tính từ xa sử dụng bản sao của key chung để tạo thông báo được mã hóa gửi ngược lại cho máy tính. Vì nó được mã hóa với key chung, máy tính có thể giải mã nó với key riêng.

Sau đó, máy tính sẽ trích xuất một số thông tin từ thông báo, mã hóa nó và gửi lại cho máy chủ. Nếu máy chủ có thể giải mã nó với bản sao key chung. Nếu thông tin trong thông báo khớp với những gì máy chủ gửi cho bạn, kết nối sẽ được xác nhận.

Ở đây, kết nối được tạo cho máy chủ tại 192.168.4.11 bởi người dùng có key SSH. Lưu ý họ không được nhắc để nhập mật khẩu.

ssh dave@192.168.4.11

Sử dụng key SSH thay cho mật khẩu

Vô hiệu hóa xác thực mật khẩu hoàn toàn

Bạn có thể tắt hoàn toàn xác thực mật khẩu nếu sử dụng key SSH. Chúng ta cần chỉnh sửa file cấu hình SSH.

Vô hiệu hóa xác thực mật khẩu hoàn toàn

Cuộn xuống file cho đến khi nhìn thấy dòng bắt đầu với #PasswordAuthentication yes. Xóa # ở đầu dòng, thay đổi yes thành no và lưu file. Khởi động lại SSH daemon.

Vô hiệu hóa chuyển tiếp X11

Chuyển tiếp X11 cho phép người dùng từ xa chạy ứng dụng đồ họa từ máy chủ của bạn qua phiên SSH nhưng dễ bị kẻ xấu lợi dụng. Tốt hơn hết bạn nên tắt nó đi bằng cách chỉnh sửa file cấu hình SSH.

Vô hiệu hóa chuyển tiếp X11

Cuộn xuống file cho đến khi thấy dòng #X11Forwarding no, xóa # ở đầu dòng và lưu file. Khởi động lại SSH daemon.

Thiết lập giá trị thời gian chờ nhàn rỗi

Nếu thiết lập kết nối SSH với máy tính và không có hoạt động trên đó trong một khoảng thời gian, điều này có thể gây rủi ro bảo mật.

Do đó bạn nên thiết lập giới hạn thời gian chờ. Kết nối SSH sẽ bị ngắt kết nối nếu không có hoạt động trong giới hạn thời gian. Lại một lần nữa, chúng ta cần chỉnh sửa file cấu hình SSH.

Thiết lập giá trị thời gian chờ nhàn rỗi

Cuộn xuống file cho đến khi thấy dòng bắt đầu với #ClientAliveInterval 0. Xóa # ở đầu dòng, thay đổi số 0 thành giá trị bạn mong muốn. Thường mọi người thiết lập thành 300 giây, tức 5 phút. Lưu file và khởi động lại SSH daemon.

Thiết lập giới hạn số lần nhập mật khẩu

Xác định giới hạn số lần xác nhận có thể giúp ngăn chặn việc đoán mật khẩu và tấn công brute-force. Sau số lượng yêu cầu xác thực được chỉ định, người dùng sẽ bị ngắt kết nối khỏi máy chủ SSH. Theo mặc định, không có giới hạn số lần thử mật khẩu nhưng bạn có thể chỉnh sửa điều đó trong file cấu hình SSH.

Thiết lập giới hạn số lần nhập mật khẩu

Cuộn xuống file cho đến khi thấy dòng bắt đầu với #MaxAuthTries 0. Xóa # ở đầu dòng thay đổi số thành giá trị mong muốn. Bạn có thể đặt là 3. Lưu file khi thực hiện thay đổi và khởi động lại SSH daemon.

Bạn có thể kiểm tra điều này bằng cách thử kết nối và nhập sai mật khẩu.

Thử kết nối và nhập sai mật khẩu

Lưu ý, số MaxAuthTries nhiều hơn số lần thử mà người dùng được phép. Sau hai lần thử không thành công, bạn bị ngắt kết nối thì có nghĩa MaxAuthTries được thiết lập là 3.

Vô hiệu hóa đăng nhập bằng root

Bạn được khuyên không nên đăng nhập bằng root, chỉ nên dùng như người dùng bình thường trên Linux và sử dụng sudo để thực hiện hành động yêu cầu quyền root. Bạn cũng không nên cho phép root đăng nhập vào máy chủ SSH. Chỉ người dùng bình thường mới được phép kết nối. Nếu cần thực hiện một nhiệm vụ mức quản trị, họ cũng có thể sử dụng sudo. Nếu buộc phải cho phép người dùng root đăng nhập, bạn có thể buộc họ sử dụng key SSH.

Chỉnh sửa file cấu hình để vô hiệu hóa đăng nhập root.

Cuộn xuống file cho đến khi thấy dòng bắt đầu bằng #PermitRootLogin prohibit-password, xóa # ở đầu dòng.

  • Nếu muốn ngăn root không đăng nhập, thay thế prohibit-password bằng no.
  • Nếu cho phép root đăng nhập nhưng buộc sử dụng key SSH để nguyên prohibit-password.

Lưu thay đổi và khởi động lại SSH daemon.

Bước cuối cùng

Tất nhiên, nếu không cần SSH chạy trên máy tính của mình, hãy tắt nó đi với lệnh sau:

sudo systemctl stop sshd
sudo systemctl disable sshd

Chúc các bạn thực hiện thành công!

Chủ Nhật, 27/10/2019 08:25
53 👨 1.132
0 Bình luận
Sắp xếp theo