Mối quan tâm lớn nhất sẽ là những người đăng nhập với tư cách quản trị viên của máy tính qua SSH. Điều này có thể được thực hiện bằng vũ lực nếu bạn có mật khẩu dễ đoán.
Có một số biện pháp an toàn mà bạn có thể thực hiện, dưới đây là một số biện pháp tôi luôn thực hiện khi thiết lập máy chủ SSH và một số biện pháp bổ sung.
Sử dụng một mật khẩu mạnh, bao gồm ít nhất (giả sử) 10 chữ cái viết thường và chữ thường, số và các ký tự khác.
Người dùng tù vào thư mục nhà của họ. Người dùng bị bỏ tù sẽ không thể truy cập / chỉnh sửa các tập tin nằm ngoài thư mục chính của họ. Vì vậy, người dùng của bạn sẽ không thể truy cập / chỉnh sửa các tệp hệ thống chính. Rất nhiều hướng dẫn có thể được tìm thấy trực tuyến về cách bỏ tù người dùng. Hầu hết trong số họ sử dụng JailKit . Một ví dụ về một hướng dẫn như vậy có thể được tìm thấy ở đây . Ngoài ra, bạn cũng có thể sử dụng ChrootDirectory
chỉ thị riêng của máy chủ OpenSSH . Một ví dụ về một hướng dẫn về điều này có thể được tìm thấy ở đây .
Cài đặt Fail2Ban . Fail2Ban là một chương trình kiểm tra nhật ký xác thực cho các mục sai. Khi đạt đến một giới hạn nhất định, nó sẽ thêm một khối tường lửa cho IP nhất định đó trong một khoảng thời gian định sẵn. Ngoài ra còn có một số hướng dẫn trực tuyến được tìm thấy trực tuyến về cách thiết lập Fail2Ban với SSH, một ví dụ sẽ là hướng dẫn này . Trang chủ Fail2Ban cũng chứa một số HOWTO đẹp và đầy đủ.
Vô hiệu hóa đăng nhập root thông qua SSH. Đây là người dùng có quyền truy cập vào khá nhiều tệp trên hệ thống của bạn, do đó không nên sử dụng tính năng đăng nhập shell của nó. Trong các phiên bản mới nhất của Ubuntu, người dùng root sẽ tự động bị vô hiệu hóa nhưng dù sao cũng không thể vô hiệu hóa quyền truy cập SSH của nó. Điều này được thực hiện bằng cách chỉnh sửa các tập tin /etc/ssh/sshd_config
. ✝ Hãy tìm dòng sau và chắc chắn rằng không có # ở phía trước nó.
#PermitRootLogin no
Sử dụng cổng không chuẩn (Ví dụ: 22) Điều này được thực hiện thông qua chuyển tiếp cổng trong bộ định tuyến của bạn (Ví dụ: 16121 -> 22 thay vì 22 -> 22) hoặc bằng cách làm cho daemon SSH nghe trên một cổng khác. Điều này sẽ làm cho dịch vụ SSH của bạn ít bị phát hiện hơn đối với người dùng độc hại. Điều này được thực hiện bằng cách chỉnh sửa các tập tin /etc/ssh/sshd_config
. ✝ Hãy tìm dòng sau và thay đổi từ 22 đến bất cứ cổng nào bạn muốn. Đừng quên chuyển tiếp cổng chính xác trong bộ định tuyến của bạn sau đó.
Port 22
Không sử dụng mật khẩu để đăng nhập. Bên cạnh mật khẩu, SSH cũng cho phép đăng nhập bằng cách sử dụng khóa riêng. Điều này có nghĩa là một khóa được lưu trữ trên máy tính của bạn mà bạn truy cập SSH của máy SSH. Khi kết nối được thử, máy khách SSH sử dụng khóa để đăng nhập vào máy chủ thay vì thông qua xác thực mật khẩu. Khóa xác thực mạnh hơn rất nhiều về mật mã so với mật khẩu và do đó không dễ bị bẻ khóa. Ngoài ra còn có một số hướng dẫn trực tuyến được tìm thấy trực tuyến về cách thiết lập xác thực dựa trên khóa với SSH, một ví dụ sẽ là hướng dẫn này . (Nếu bạn SSH từ các cửa sổ với PuTTY, hãy kiểm tra liên kết này để biết cách thực hiện PuTTY.) Sau khi bạn thiết lập xác thực dựa trên khóa, bạn có thể vô hiệu hóa xác thực mật khẩu bằng cách chỉnh sửa tệp /etc/ssh/sshd_config
. ✝ Tìm dòng sau và đảm bảo không có # phía trước nó.
#PasswordAuthentication no
Tùy chọn, như @ Linker3000 đã đề cập trong bình luận của anh ấy, bạn có thể thiết lập một đường hầm VPN tới PC mà bạn muốn truy cập thông qua SSH và sau đó không cho phép truy cập mạng không cục bộ trên máy chủ SSH. Bằng cách đó, không có thiết bị bên ngoài nào không có kết nối VPN sẽ có thể truy cập máy chủ SSH của bạn. Điều này có thể được thực hiện bằng cách từ chối TẤT CẢ các máy chủ và sau đó chỉ cho phép các IP mạng cục bộ đăng nhập. Điều này được thực hiện bằng cách chỉnh sửa /etc/hosts.deny
và thêm vào như sau:
sshd: ALL
và để /etc/hosts.allow
thêm vào như sau:
sshd: 192.168.1.*
trong đó IP khớp với một trong các mạng cục bộ của bạn. *
là ký tự đại diện, vì vậy tất cả các địa chỉ IP bắt đầu bằng 192.168.1.
sẽ được chấp nhận. Nếu điều này không hoạt động, phân phối của bạn có thể sử dụng ssh
thay vì sshd
. Trong trường hợp đó, bạn nên thử ssh: 192.168.1.*
và ssh: ALL
thay vào đó.
Bạn chỉ có thể cho phép các máy chủ cụ thể, thực hiện tương tự với /etc/hosts.allow
và /etc/hosts.deny
như được mô tả trong 6, nhưng /etc/hosts.allow
thêm dòng sau và mọi máy chủ để cho phép cách nhau bởi khoảng trắng:
sshd: {IP OF HOST TO ALLOW 1} {IP OF HOST TO ALLOW 2} {IP OF HOST TO ALLOW 3} {ETC.}
Chỉ cho phép người dùng cụ thể truy cập máy chủ SSH của bạn. Điều này được thực hiện bằng cách chỉnh sửa các tập tin /etc/ssh/sshd_config
. ✝ Hãy tìm dòng sau và chắc chắn rằng không có # ở phía trước nó. Nếu nó không tồn tại, tạo nó. Ví dụ: nếu bạn chỉ muốn cho phép john, tom và mary, hãy thêm / chỉnh sửa dòng này:
AllowUsers john tom mary
Bạn cũng có thể từ chối người dùng cụ thể, ví dụ, nếu bạn muốn từ chối quyền truy cập vào john, tom và mary, hãy thêm / chỉnh sửa dòng này:
DenyUsers john tom mary
Chỉ cho phép giao thức SSH2 cho các kết nối đến. Có hai phiên bản của giao thức SSH. SSH1 là đối tượng của vấn đề bảo mật nên sử dụng SSH 2. Điều này có thể được ép buộc bằng cách chỉnh sửa các tập tin /etc/ssh/sshd_config
. ✝ Hãy tìm dòng sau và chắc chắn rằng không có # ở phía trước nó. Nếu nó không tồn tại, tạo nó.
Protocol 2,1
loại bỏ, 1 để dòng sẽ được
Protocol 2
Không cho phép người dùng đăng nhập mà không có mật khẩu được đặt. Điều này có thể được ép buộc bằng cách chỉnh sửa các tập tin /etc/ssh/sshd_config
. ✝ Hãy tìm dòng sau và chắc chắn rằng không có # ở phía trước nó. Nếu nó không tồn tại, tạo nó.
PermitEmptyPasswords no
Và mặc dù đơn giản và có lẽ không cần phải nói nhưng đã được chứng minh là rất quan trọng trong nhiều trường hợp, hãy luôn cập nhật phần mềm của bạn. Thường xuyên cập nhật các gói / phần mềm đã cài đặt của bạn.
tùy thuộc vào phân phối Linux mà bạn đang sử dụng.