Làm thế nào tôi có thể tăng bảo mật ssh? Tôi có thể yêu cầu cả khóa và mật khẩu không?


16

Tôi có một mạng lưới máy chủ nhỏ và tôi muốn tăng cường bảo mật chung. Tôi không có đủ thời gian / tiền bạc / hoang tưởng để thiết lập VPN - cách cơ bản nào để tôi có thể tăng tính bảo mật cho hệ thống của mình?

Một điều có thể là yêu cầu người dùng gửi cả khóa và nhập mật khẩu. Điều này hơi khó để google vì mọi thứ về "mật khẩu khóa ssh" là về sshing mà không cần mật khẩu. :-)

Một lược đồ mà tôi luôn muốn chơi với nó là yêu cầu các kết nối đến chỉ đến từ danh sách trắng các địa chỉ IP của dyndns. Tôi biết một số người đứng đầu an ninh sẽ nôn mửa khi nghĩ về ý tưởng này, nhưng thực tế của vấn đề là nó sẽ tăng thêm độ phức tạp rất đáng kể để khai thác một hộp.

Bạn nghĩ sao? Có gì khác ngoài đó?


Bạn cũng có thể giới hạn danh sách người dùng được phép kết nối bằng các chỉ thị AllowUsers hoặc DenyUsers. Thêm chi tiết về bài viết này .
Fred

Câu trả lời:


8

Việc đăng nhập bằng mật khẩu và khóa giống như "chỉ với khóa". Trong quá trình tạo khóa, bạn được yêu cầu nhập cụm mật khẩu. Nếu bạn để trống, bạn sẽ không được yêu cầu nhập mật khẩu. Nếu bạn điền một số cụm mật khẩu, bạn sẽ được yêu cầu sử dụng nó mọi lúc khi bạn muốn đăng nhập.

Nếu bạn lo ngại về bảo mật, hãy xem xét một số lời khuyên được đề cập hàng nghìn tỷ lần trong diễn đàn này:

  • Vô hiệu hóa đăng nhập ssh cho root
  • Chỉ cho phép truy cập ssh từ các địa chỉ IP được xác định (iptables, hosts.allow, ...)
  • Di chuyển cổng ssh sang cổng khác (tối nghĩa hơn là bảo mật, nhưng nó hoạt động)
  • Theo dõi các nỗ lực đăng nhập nước ngoài và phản ứng phù hợp
  • Luôn cập nhật hệ thống của bạn

Vân vân.

Cập nhật: Vui lòng tham khảo câu trả lời tại đây để biết cách yêu cầu cả khóa công khai và mật khẩu hệ thống cục bộ với máy chủ OpenSSH.


Cảm ơn tất cả lời khuyên của bạn, sẽ xem xét những người. nếu cả khóa và mật khẩu đều được yêu cầu, thì nếu người khai thác tìm ra mật khẩu (như nếu người dùng sử dụng nó ở nơi không an toàn), họ không thể vào mà không có khóa và nếu người khai thác đánh cắp khóa từ máy của người dùng , họ không thể vào mà không biết mật khẩu, đúng không?
John Bachir

12
Nó không giống nhau. Nếu bạn chỉ yêu cầu khóa, máy chủ không thể thực thi bất kỳ chính sách độ mạnh mật khẩu nào trên khóa. Người dùng bất cẩn có thể có một khóa riêng không được mã hóa nằm xung quanh máy khách khiến máy chủ của bạn dễ bị tổn thương nếu khóa bị đánh cắp.
200_success

mkudlacek - Tôi chưa từng biết về host.allow trước đây - loay hoay, có vẻ như ý tưởng danh sách trắng của tôi không hề ngớ ngẩn, tôi nghĩ tôi sẽ thử.
John Bachir

1
200_success - vì vậy có thể yêu cầu cả khóa và mật khẩu không?
John Bachir

Tôi cũng sử dụng ứng dụng Denyhosts để giúp khóa những người tiếp tục cố gắng truy cập và thất bại. Một cách nhỏ bé tự động chủ động trong danh sách đen ..
James T Snell

6

Một ý tưởng tôi thấy thú vị là gõ cổng - về cơ bản, để thiết lập kết nối ssh, trước tiên bạn phải thăm dò một chuỗi các cổng khác, trước khi máy chủ ssh sẽ xác nhận yêu cầu kết nối. Nếu chuỗi cổng chính xác không được sử dụng, không có phản hồi, vì vậy có vẻ như không có máy chủ ssh nào đang chạy. Trình tự các cổng có thể tùy chỉnh và có thể được chia sẻ với người dùng dự định của bạn; tất cả những người khác sẽ không thể kết nối.

Tôi đã không thử điều này bản thân mình, nhưng từ những gì tôi đã nghe (thực tế không nhiều), chi phí không đáng kể và nó làm giảm đáng kể hồ sơ khả năng hiển thị của bạn.


Tôi sẽ thực hiện điều này nếu bạn chỉ muốn "tăng cường bảo mật chung" nhưng có lẽ bạn nên cố gắng giải quyết các vấn đề bảo mật cụ thể thay thế.
Stefan Thyberg

Tôi sử dụng điều này ở tất cả các trang web mà tôi ssh vào, và nó rất hiệu quả.
Sirex

Đây không phải là điều tương tự như có một mật khẩu dài hơn 4 ký tự sao?
John Bachir

không thực sự Có 65536 cổng và 26 chữ cái. Ngoài ra, bạn có chuỗi gõ bất kỳ độ dài nào và bạn có thể hạn chế thử lại bằng các kỹ thuật tường lửa tiêu chuẩn. Nó không phải là bảo mật, nhưng thật tuyệt khi có.
Sirex

sau đó dài hơn 8 hoặc 12 ký tự :-D
John Bachir

3

Các bản vá liên quan đến việc kích hoạt trực tiếp trong SSH và nhiều cuộc thảo luận liên quan:

Điều này cũng có thể được thực hiện mà không cần sửa đổi bằng cách có một kịch bản xác minh mật khẩu kết hợp với việc sử dụng ForceCommandtùy chọn cấu hình.

Cuối cùng, mặc dù không có mô-đun nào tồn tại cho nó, nhưng nếu bạn đã di chuyển xác thực khóa chung sang PAM thì bạn sẽ có thể yêu cầu cả hai bước để vượt qua trước khi PAM coi xác thực thành công.


2

Chỉ dùng

RequiredAuthentications publickey, password

trong sshd_confignếu bạn đang sử dụng sshd từ ssh.com. Tính năng này không có sẵn trong OpenSSH.


RequiredAuthenticationschắc chắn là phần mở rộng không chuẩn cho OpenSSH
Hubert Kario

Bạn có biết triển khai sshd nào hỗ trợ này không?
John Bachir

Máy chủ SSH Tectia không hỗ trợ nó. BTW: sử dụng @nameOfUser khi trả lời bình luận của họ, bằng cách này, họ sẽ được thông báo về câu trả lời
Hubert Kario

Chức năng tương tự được hỗ trợ trong OpenSSH kể từ phiên bản 6.2: serverfault.com/a/562899
Søren Løvborg

1

Bạn cũng có thể sử dụng mật khẩu một lần để tăng tính bảo mật. Điều này sẽ cho phép người dùng đăng nhập từ một thiết bị đầu cuối không an toàn, có thể có keylogger, nếu trước đó họ đã tạo mật khẩu tiếp theo. Ngoài ra, có những trình tạo mật khẩu có thể được cài đặt ngay cả trên các điện thoại Java MIDP cũ hơn mà bạn luôn mang theo bên mình.


Có, trên máy chủ cá nhân của tôi, tôi sử dụng mã thông báo Yubikey cùng với mật khẩu của mình. Mã thông báo tạo mật khẩu một lần. Cả hai đều được yêu cầu xác thực. Ngoài ra, tôi cho phép bỏ qua cặp mật khẩu / otp nếu bạn xác thực bằng khóa SSH. Yubikey có giá rẻ và có rất nhiều phần mềm để tích hợp nó với hệ thống xác thực mở rộng của Pam, Linux.
Martijn Heemels

1

Tôi khuyên bạn không bao giờ nên chạy sshd, rdp hoặc các dịch vụ quản lý như vậy mà không hạn chế IP. Trên thực tế, tôi sẽ đề xuất giới hạn quyền truy cập vào các dịch vụ như vậy đối với các quản trị viên kết nối qua VPN.


1

Về câu hỏi ban đầu của bạn về việc yêu cầu cả khóa và mật khẩu, nếu bạn đang chạy RHEL hoặc CentOS 6.3, điều này hiện có thể thực hiện được. Các ghi chú RHEL 6.3 phát hành mô tả nó, đó là một vấn đề này thêm vào sshd_config của bạn

RequiredAuthentications2 publickey,password

0

Tôi hoàn toàn đồng ý với 3molo. OpenSSH là máy chủ SSH mặc định của Linux và Unix. Không có lý do gì để chúng tôi thay đổi nó, đặc biệt là về bảo mật. VPN phải là giải pháp tốt nhất, có thể mã hóa lưu lượng của chúng tôi và cung cấp ủy quyền mật khẩu 2 bước.


0

Không chắc chắn tại sao không ai đề cập đến nó nhưng - bạn nên đảm bảo tạo các khóa dài hơn 1024 bit mặc định không còn được coi là an toàn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.