Bảo mật kết nối SSH của hệ thống Linux của bạn để bảo vệ hệ thống và dữ liệu của bạn. Quản trị viên hệ thống và người dùng gia đình đều cần tăng cường và bảo mật các máy tính sử dụng internet, nhưng SSH có thể phức tạp. Dưới đây là mười chiến thắng nhanh dễ dàng giúp bảo vệ máy chủ SSH của bạn.
Khái niệm cơ bản về bảo mật SSH
SSH là viết tắt của Vỏ an toàn . Tên “SSH” được sử dụng thay thế cho nhau có nghĩa là bản thân giao thức SSH hoặc các công cụ phần mềm cho phép quản trị viên hệ thống và người dùng tạo kết nối an toàn đến các máy tính từ xa bằng giao thức đó.
Giao thức SSH là một giao thức được mã hóa được thiết kế để cung cấp một kết nối an toàn qua một 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 OpenSSH dự án. Nó được thực hiện trong một mô hình 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à trưng bày phiên cho người dùng từ xa. Máy chủ chấp nhận kết nối và thi hành phiên họp.
Trong cấu hình mặc định của nó, một máy chủ SSH sẽ lắng nghe các kết nối đến trên Giao thức điều khiển truyền ( TCP ) cổng 22. Bởi vì đây là một tiêu chuẩn hóa, cảng nổi tiếng , nó là một mục tiêu cho các tác nhân đe dọa và bot độc hại .
Các tác nhân đe dọa khởi chạy các chương trình quét một loạt các địa chỉ IP để tìm kiếm các cổng mở. Các cổng sau đó sẽ được thăm dò để xem liệu có lỗ hổng nào có thể bị khai thác hay không. Suy nghĩ “Tôi an toàn, có những mục tiêu lớn hơn và tốt hơn tôi để kẻ xấu nhắm đến” là suy luận sai lầm. Các bot không chọn mục tiêu dựa trên bất kỳ thành tích nào; họ đang tìm kiếm một cách có phương pháp các hệ thống mà họ có thể vi phạm.
Bạn tự coi mình là nạn nhân nếu bạn chưa bảo vệ hệ thống của mình.
Ma sát an ninh
Xung đột về bảo mật là sự khó chịu — ở bất kỳ mức độ nào — mà người dùng và những người khác sẽ gặp phải khi bạn triển khai các biện pháp bảo mật. Chúng tôi đã có những kỷ niệm dài và có thể nhớ đã giới thiệu cho người dùng mới một hệ thống máy tính và nghe họ hỏi với giọng kinh hoàng liệu họ có có thật không phải nhập mật khẩu mỗi lần họ đã đăng nhập vào máy tính lớn. Đó - đối với họ - là xung đột về an ninh.
(Tình cờ, việc phát minh ra mật khẩu được cho là Fernando J. Corbató , một nhân vật khác trong đội ngũ các nhà khoa học máy tính có công việc kết hợp đã góp phần vào hoàn cảnh dẫn đến sự ra đời của Unix .)
Việc giới thiệu các biện pháp an ninh thường liên quan đến một số hình thức gây xích mích cho một người nào đó. Chủ doanh nghiệp phải trả tiền cho nó. Người dùng máy tính có thể phải thay đổi các thông lệ quen thuộc của họ, hoặc nhớ một tập hợp chi tiết xác thực khác hoặc thêm các bước bổ sung để kết nối thành công. Quản trị viên hệ thống sẽ có thêm công việc phải làm để thực hiện và duy trì các biện pháp bảo mật mới.
Việc làm cứng và khóa hệ điều hành giống Linux hoặc Unix có thể rất nhanh chóng. Những gì chúng tôi trình bày ở đây là một tập hợp các bước dễ thực hiện sẽ cải thiện bảo mật cho máy tính của bạn mà không cần các ứng dụng của bên thứ ba và không cần đào tường lửa của bạn.
Các bước này không phải là bước cuối cùng trong bảo mật SSH, nhưng chúng sẽ giúp bạn tiến thêm một chặng đường dài so với cài đặt mặc định và không có quá nhiều rắc rối.
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 thành phiên bản 2 . Đó 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ừ các ứng dụng khách phiên bản 1, bạn có thể quy định rằng máy tính của mình chỉ chấp nhận kết nối từ các ứng dụng khách phiên bản 2.
Để làm như vậy, hãy chỉnh sửa
/ etc / ssh / sshd_config
tập tin. Chúng tôi sẽ làm điều này rất nhiều trong suốt bài viết này. Bất cứ khi nào bạn cần chỉnh sửa tệp này, đây là lệnh sử dụng:
sudo gedit / etc / ssh / sshd_config
Thêm dòng:
Giao thức 2
Và lưu tệp. Chúng tôi sẽ khởi động lại quá trình daemon SSH. Một lần nữa, chúng tôi sẽ làm điều này rất nhiều trong suốt bài viết này. Đây là lệnh sử dụng trong mỗi trường hợp:
sudo systemctl khởi động lại sshd
Hãy kiểm tra xem cài đặt mới của chúng tôi có hiệu lực hay không. Chúng tôi sẽ chuyển sang một máy khác và thử SSH trên máy thử nghiệm của mình. Và chúng tôi sẽ sử dụng
-1
(giao thức 1) tùy chọn để buộc
ssh
lệnh sử dụng phiên bản giao thức 1.
ssh -1 [email protected]
Tuyệt vời, yêu cầu kết nối của chúng tôi bị từ chối. Hãy đảm bảo rằng chúng tôi vẫn có thể kết nối với giao thức 2. Chúng tôi sẽ sử dụng
-2
(giao thức 2) tùy chọn để chứng minh thực tế.
ssh -2 [email protected]
Thực tế là máy chủ SSH đang yêu cầu mật khẩu của chúng tôi là một dấu hiệu tích cực rằng kết nối đã được thực hiện và bạn đang tương tác với máy chủ. Trên thực tế, vì các ứng dụng SSH hiện đại sẽ mặc định sử dụng giao thức 2, chúng tôi không cần chỉ định giao thức 2 miễn là ứng dụng của chúng tôi được cập nhật.
ssh [email protected]
Và kết nối của chúng tôi được chấp nhận. Vì vậy, chỉ có các kết nối giao thức 1 yếu hơn và kém an toàn hơn mới bị từ chối.
Tránh cổng 22
Cổng 22 là cổng tiêu chuẩn cho các kết nối SSH. Nếu bạn sử dụng một cổng khác, nó sẽ tăng thêm một chút bảo mật thông qua sự che khuất cho hệ thống của bạn. Bảo mật thông qua che giấu không bao giờ được coi là một biện pháp an ninh thực sự, và tôi đã phản đối nó trong các bài báo khác. Trên thực tế, một số bot tấn công thông minh hơn sẽ thăm dò tất cả các cổng đang mở và xác định dịch vụ mà chúng đang thực hiện, thay vì dựa vào danh sách các cổng tra cứu đơn giản và giả sử chúng cung cấp các dịch vụ thông thường. Nhưng sử dụng cổng không chuẩn có thể giúp giảm nhiễu và lưu lượng kém trên cổng 22.
Để định cấu hình một cổng không chuẩn, hãy chỉnh sửa tệp cấu hình SSH của bạn:
sudo gedit / etc / ssh / sshd_config
Xóa mã băm # khỏi đầu dòng “Cổng” và thay thế “22” bằng số cổng bạn chọn. Lưu tệp cấu hình của bạn và khởi động lại daemon SSH:
sudo systemctl khởi động lại sshd
Hãy xem điều đó đã có tác dụng gì. Trên máy tính khác của chúng tôi, chúng tôi sẽ sử dụng
ssh
lệnh để kết nối với máy chủ của chúng tôi. Các
ssh
lệnh mặc định sử dụng cổng 22:
ssh [email protected]
Kết nối của chúng tô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 [email protected]
Kết nối của chúng tôi được chấp nhận.
Lọc các kết nối bằng TCP Wrappers
TCP Wrappers rất dễ hiểu danh sách điều khiển truy cập . Nó cho phép bạn loại trừ 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, chẳng hạn như địa chỉ IP hoặc tên máy chủ. Trình bao bọc TCP nên được sử dụng cùng với chứ không phải thay vì tường lửa được định cấu hình đúng cách. Trong kịch bản cụ thể của chúng tôi, chúng tôi có thể thắt chặt mọi thứ đáng kể bằng cách sử dụng trình bao bọc TCP.
Trình bao bọc TCP đã được cài đặt trên máy Ubuntu 18.04 LTS được sử dụng để nghiên cứu bài viết này. Nó phải được cài đặt trên Manjaro 18.10 và Fedora 30.
Để cài đặt trên Fedora, hãy sử dụng lệnh sau:
sudo yum cài đặt tcp_wrappers
Để cài đặt trên Manjaro, hãy sử dụng lệnh sau:
sudo pacman -Syu tcp-wrappers
Có hai tệp liên quan. Một giữ danh sách được phép, và một giữ danh sách bị từ chối. Chỉnh sửa danh sách từ chối bằng cách sử dụng:
sudo gedit /etc/hosts.deny
Điều này sẽ mở ra
gedit
trình soạn thảo với tệp từ chối được tải trong đó.
Bạn cần thêm dòng:
TẤT CẢ
Và lưu tệp. Điều đó chặn tất cả quyền truy cập chưa được cấp phép. Bây giờ chúng tôi cần cho phép các kết nối bạn muốn chấp nhận. Để làm điều đó, bạn cần chỉnh sửa tệp cho phép:
sudo gedit /etc/hosts.allow
Điều này sẽ mở ra
gedit
trình soạn thảo với tệp cho phép được tải trong đó.
Chúng tôi đã thêm vào tên daemon SSH,
SSHD
Và địa chỉ IP của máy tính mà chúng tôi sẽ cho phép tạo kết nối. Lưu tệp và xem các giới hạn và quyền có hiệu lực hay không.
Trước tiên, chúng tôi sẽ cố gắng kết nối từ một máy tính không có trong
hosts.allow
file:
Kết nối bị từ chối. Bây giờ chúng tôi sẽ cố gắng kết nối từ máy theo địa chỉ IP 192.168.4.23:
Kết nối của chúng tôi được chấp nhận.
Ví dụ của chúng tôi ở đây hơi tàn bạo - chỉ một máy tính duy nhất có thể kết nối. Trình bao bọc TCP khá linh hoạt và linh hoạt hơn thế này. Nó hỗ trợ tên máy chủ, ký tự đại diện và mặt nạ mạng con để chấp nhận các kết nối từ các dải địa chỉ IP. Bạn được khuyến khích kiểm tra trang người đàn ông .
Từ chối yêu cầu kết nối mà không có mật khẩu
Mặc dù đó là một thực tiễn xấu, quản trị viên hệ thống Linux có thể tạo tài khoản người dùng mà không cần mật khẩu. Điều đó có nghĩa là các yêu cầu kết nối từ xa từ tài khoản đó sẽ không có mật khẩu để kiểm tra. Những kết nối đó sẽ được chấp nhận nhưng chưa được xác thực.
Cài đặt mặc định cho SSH chấp nhận các yêu cầu kết nối mà không cần mật khẩu. Chúng tôi có thể thay đổi điều đó rất dễ dàng và đảm bảo tất cả các kết nối đều được xác thực.
Chúng tôi cần chỉnh sửa tệp cấu hình SSH của bạn:
sudo gedit / etc / ssh / sshd_config
Cuộn qua tệp cho đến khi bạn thấy dòng có nội dung “#PermitEmptyPasswords no.” Xóa hàm băm
#
từ đầu dòng và lưu tệp. Khởi động lại daemon SSH:
sudo systemctl khởi động lại sshd
Sử dụng khóa SSH thay vì mật khẩu
Khóa SSH cung cấp một phương tiện an toàn để đăng nhập vào máy chủ SSH. Mật khẩu có thể được đoán, bẻ khóa hoặc vũ phu cưỡng bức . Các khóa SSH không mở cho các kiểu tấn công như vậy.
Khi bạn tạo khóa SSH, bạn sẽ tạo một cặp khóa. Một là khóa công khai và khóa còn lại là khóa cá nhân. Khóa công khai được cài đặt trên máy chủ mà bạn muốn kết nối. Khóa riêng tư, như tên gợi ý, được giữ an toàn trên máy tính của bạn.
Khóa SSH cho phép bạn tạo kết nối mà không cần mật khẩu — một cách phản trực giác — an toàn hơn các kết nối sử dụng xác thực mật khẩu.
Khi bạn đưa ra yêu cầu kết nối, máy tính từ xa sẽ sử dụng bản sao khóa công khai của bạn để tạo một thông báo được mã hóa gửi trở lại máy tính của bạn. Vì nó đã được mã hóa bằng khóa công khai của bạn nên máy tính của bạn có thể giải mã nó bằng khóa riêng của bạn.
Sau đó, máy tính của bạn trích xuất một số thông tin từ thư, đặc biệt là ID phiên, mã hóa thông tin đó và gửi lại máy chủ. Nếu máy chủ có thể giải mã nó bằng bản sao khóa công khai của bạn và nếu thông tin bên trong thư khớp với thông tin máy chủ đã gửi cho bạn, kết nối của bạn được xác nhận là đến từ bạn.
Ở đây, một kết nối đang được thực hiện với máy chủ tại 192.168.4.11, bởi một người dùng có khóa SSH. Lưu ý rằng họ không được nhắc nhập mật khẩu.
ssh [email protected]
Các khóa SSH xứng đáng với một bài báo cho chính họ. Thật tiện lợi, chúng tôi có một cái cho bạn. Đây là cách tạo và cài đặt khóa SSH .
LIÊN QUAN: Cách tạo và cài đặt khóa SSH từ Linux Shell
Tắt hoàn toàn xác thực mật khẩu
Tất nhiên, phần mở rộng hợp lý của việc sử dụng khóa SSH là nếu tất cả người dùng từ xa bị buộc phải sử dụng chúng, bạn có thể tắt hoàn toàn xác thực mật khẩu.
Chúng tôi cần chỉnh sửa tệp cấu hình SSH của bạn:
sudo gedit / etc / ssh / sshd_config
Cuộn qua tệp cho đến khi bạn thấy dòng bắt đầu bằng “#PasswordAuthentication yes”. Xóa hàm băm
#
từ đầu dòng, thay đổi “có” thành “không” và lưu tệp. Khởi động lại daemon SSH:
sudo systemctl khởi động lại sshd
Tắt chuyển tiếp X11
Chuyển tiếp X11 cho phép người dùng từ xa chạy các ứng dụng đồ họa từ máy chủ của bạn qua phiên SSH. Dưới bàn tay của kẻ đe dọa hoặc người dùng độc hại, giao diện GUI có thể làm cho mục đích xấu của họ dễ dàng hơn.
Một câu thần chú tiêu chuẩn trong an ninh mạng là nếu bạn không có lý do chính đáng để bật nó, hãy tắt nó đi. Chúng tôi sẽ làm như vậy bằng cách chỉnh sửa tệp cấu hình SSH của bạn:
sudo gedit / etc / ssh / sshd_config
Cuộn qua tệp cho đến khi bạn thấy dòng bắt đầu bằng “# X11Forwarding no.” Xóa hàm băm
#
từ đầu dòng và lưu tệp. Khởi động lại daemon SSH:
sudo systemctl khởi động lại sshd
Đặt giá trị thời gian chờ không hoạt động
Nếu có một kết nối SSH được thiết lập với máy tính của bạn và không có hoạt động nào trên đó trong một khoảng thời gian, nó có thể gây ra rủi ro bảo mật. Có khả năng người dùng đã rời khỏi bàn của họ và đang bận ở nơi khác. Bất kỳ ai khác đi ngang qua bàn của họ đều có thể ngồi xuống và bắt đầu sử dụng máy tính của họ và thông qua SSH, máy tính của bạn.
Sẽ an toàn hơn nhiều nếu thiết lập giới hạn thời gian chờ. Kết nối SSH sẽ bị ngắt nếu khoảng thời gian không hoạt động khớp với thời hạn. Một lần nữa, chúng tôi sẽ chỉnh sửa tệp cấu hình SSH của bạn:
sudo gedit / etc / ssh / sshd_config
Cuộn qua tệp cho đến khi bạn thấy dòng bắt đầu bằng “#ClientAliveInterval 0” Xóa hàm băm
#
từ đầu dòng, thay đổi chữ số 0 thành giá trị mong muốn của bạn. Chúng tôi đã sử dụng 300 giây, tức là 5 phút. Lưu tệp và khởi động lại daemon SSH:
sudo systemctl khởi động lại sshd
Đặt giới hạn cho các nỗ lực mật khẩu
Việc xác định giới hạn về số lần xác thực có thể giúp ngăn chặn các cuộc tấn công đoán mật khẩu và tấn công bạo lực. 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. Nhưng điều đó nhanh chóng được khắc phục.
Một lần nữa, chúng tôi cần chỉnh sửa tệp cấu hình SSH của bạn:
sudo gedit / etc / ssh / sshd_config
Cuộn qua tệp cho đến khi bạn thấy dòng bắt đầu bằng “#MaxAuthTries 0”. Xóa hàm băm
#
từ đầu dòng, thay đổi chữ số 0 thành giá trị mong muốn của bạn. Chúng tôi đã sử dụng 3 ở đây. Lưu tệp khi bạn thực hiện các thay đổi của mình và khởi động lại daemon SSH:
sudo systemctl khởi động lại sshd
Chúng tôi có thể kiểm tra điều này bằng cách cố gắng kết nối và cố tình nhập sai mật khẩu.
Lưu ý rằng số MaxAuthTries dường như nhiều hơn số lần thử mà người dùng được phép. Sau hai lần thử không tốt, người dùng thử nghiệm của chúng tôi bị ngắt kết nối. Điều này là với MaxAuthTries được đặt thành ba.
Tắt thông tin đăng nhập gốc
Đây là một cách đăng nhập với quyền root trên máy tính Linux của bạn. Bạn nên đăng nhập như một người dùng bình thường và sử dụng
sudo
để thực hiện các hành động yêu cầu quyền root. Thậm chí, bạn không nên cho phép root đăng nhập vào máy chủ SSH của mình. Chỉ những người dùng thông thường mới được phép kết nối. Nếu họ cần thực hiện một tác vụ quản trị, họ nên sử dụng
sudo
quá. Nếu bạn buộc phải cho phép người dùng root đăng nhập, ít nhất bạn có thể buộc họ sử dụng khóa SSH.
Lần cuối cùng, chúng tôi sẽ phải chỉnh sửa tệp cấu hình SSH của bạn:
sudo gedit / etc / ssh / sshd_config
Cuộn qua tệp cho đến khi bạn thấy dòng bắt đầu bằng “#PermitRootLogin cấm-mật khẩu” Xóa mã băm
#
từ đầu dòng.
- Nếu bạn muốn ngăn người chủ đăng nhập, hãy thay thế "cấm mật khẩu" bằng "không".
- Nếu bạn định cho phép root đăng nhập nhưng buộc họ phải sử dụng khóa SSH, hãy để nguyên "mật khẩu cấm".
Lưu các thay đổi của bạn và khởi động lại daemon SSH:
sudo systemctl khởi động lại sshd
Bước cuối cùng
Tất nhiên, nếu bạn không cần SSH chạy trên máy tính của mình, hãy đảm bảo rằng nó đã được tắt.
sudo systemctl dừng sshd
sudo systemctl vô hiệu hóa sshd
Nếu bạn không mở cửa sổ, không ai có thể trèo vào.