Các vấn đề bảo mật có thể xảy ra với trình nền SSH là gì?


14

Tôi muốn có thể SSH đến PC văn phòng Ubuntu 10.04 của tôi từ bên ngoài. Do đó, tôi đang suy nghĩ để khởi động một trình nền SSH trên PC. Các vấn đề bảo mật, trục trặc có thể xảy ra, cài đặt cấu hình cụ thể, v.v. Tôi nên biết điều gì?

Trong trường hợp có vấn đề: đây thực chất chỉ là mục đích sử dụng của riêng tôi, tôi không nghĩ sẽ có người khác sử dụng nó; đó là PC Ubuntu 10.04 trong môi trường chủ yếu là Windows 7 / Vista / XP.


1
Bạn cũng có thể muốn xem xét việc cài đặt OpenVPN và tạo một đường hầm VPN vào PC để kết nối ssh của bạn. Bằng cách này, bạn không cần phải mở cổng ssh của mình ra thế giới.
Linker3000

@ Linker3000 Cảm ơn! Tôi sẽ suy nghĩ --- mặc dù tôi đã có một trải nghiệm khá khó chịu với VPN cách đây một thời gian.
ev-br

@Zhenya Nếu bạn không ghi "@" và tên người dùng, họ sẽ nhận được thông báo về việc bạn trả lời họ. ;) Vì vậy, bạn sẽ nhận được một nhận xét khi tôi sử dụng @Zhenya, nhưng không phải khi tôi sử dụng @ Zhenya
BloodPhilia

@Zhenya Và bây giờ bạn đang làm lại XD
BloodPhilia

@Linker, bạn có thể giải thích một chút về lý do OpenVPN an toàn hơn SSH không?
Arjan

Câu trả lời:


20

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.

  1. 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.

  2. 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 ChrootDirectorychỉ 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 .

  3. 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 đủ.

  4. 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
    
  5. 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
    
  6. 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
    
  7. 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.denyvà thêm vào như sau:

    sshd: ALL
    

    và để /etc/hosts.allowthê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 sshthay vì sshd. Trong trường hợp đó, bạn nên thử ssh: 192.168.1.*ssh: ALLthay vào đó.

  8. 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/etc/hosts.denynhư được mô tả trong 6, nhưng /etc/hosts.allowthê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.}
    
  9. 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
    
  10. 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
    
  11. 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
    
  12. 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.


= sau khi đã chỉnh sửa tệp cấu hình SSH, đừng quên khởi động lại trình nền để áp dụng các thay đổi. Khởi động lại daemon bằng cách thực thi:

sudo /etc/init.d/ssh restart

hoặc là

sudo /etc/init.d/sshd restart

tùy thuộc vào phân phối Linux mà bạn đang sử dụng.


2
sudo service ssh restarttrên Ubuntu.
ulidtko

@ulidtko Câu hỏi này được hợp nhất với một câu hỏi tổng quát hơn vì vậy tôi đã trả lời chung chung hơn và phù hợp với các bản phân phối khác nhau. Điều này sẽ hoạt động trên gần như tất cả các bản phân phối, nhưng bạn đã đúng.
BloodPhilia

@BloodPhilia Cảm ơn rất nhiều cho câu trả lời chi tiết và dễ tiếp cận như vậy! Một vài câu hỏi nữa về quan điểm của bạn: 1. Ưu điểm của việc bỏ tù người dùng chỉ là hạn chế quyền là gì? Giả sử, đăng nhập với tư cách là một 'người dùng' Tôi chỉ có quyền truy cập đọc vào những thứ bên ngoài / nhà của tôi, nhưng không có quyền ghi hoặc thực thi quyền truy cập [theo mặc định của Ubuntu, tôi cho rằng]. Là nó tốt hơn / tồi tệ hơn so với bỏ tù? 2. Nhật ký xác thực thường nằm ở đâu? Tôi muốn có thể kiểm tra chúng bằng tay / qua grep một lần trong một thời gian.
ev-br

@BloodPhilia 4. Nếu tôi làm cho sshd nghe một cổng không chuẩn trên máy chủ, ví dụ 1234, thì cách kết nối với máy chủ này từ dòng lệnh linux trên máy khách là gì? Ý tôi là, một lệnh ssh tiêu chuẩn có cần một loại công tắc không?
ev-br

1
@ulidtko: Với Upstart , sudo restart ssh.
Hello71

7

IT tiên boa:

  1. Sử dụng xác thực dựa trên khóa, là cách an toàn hơn mật khẩu
  2. Chỉ có SSH 2
  3. Vô hiệu hóa đăng nhập Root
  4. Đối với hoang tưởng, thay đổi cổng từ cổng tiêu chuẩn 22
  5. Để thuận tiện, hãy sử dụng một công cụ để ánh xạ IP của bạn sang tên DNS, như Dyndns hoặc ilk của nó. Bạn có thể đi một thời gian dài với cùng một IP, nhưng một lần bạn đi du lịch và cần nó, bạn sẽ thấy bạn đã được cấp một địa chỉ mới.
  6. Tất nhiên, chỉ cho phép cổng cần thiết cho SSH (cổng 22 hoặc không chuẩn nếu bạn chọn) thông qua tường lửa của bạn.

1
Re 5: Nếu bạn có một tài khoản e-mail trên một máy bên ngoài nhà của bạn, bạn có thể thiết lập một công việc định kỳ để định kỳ gửi tin nhắn từ máy chủ của bạn đến địa chỉ đó. IP nhà của bạn sẽ ở trong tiêu đề. Không thuận tiện như DNS, nhưng có thể sử dụng.
garyjohn

Bạn cũng có thể liên hệ với ISP của bạn và hỏi giá cho một địa chỉ IP tĩnh. Đây là giải pháp đơn giản nhất cho đến nay, nhưng thường đắt hơn một DNS động
Steen Schütt

2

Rủi ro chính là quên rằng bạn đang chạy một máy chủ ssh và đặt mật khẩu yếu vào tài khoản. Có những kẻ tấn công ngoài kia có hệ thống thử tên tài khoản phổ biến (như webmasterbob) và mật khẩu yếu. Bạn có thể loại bỏ rủi ro này bằng cách cấm đăng nhập mật khẩu (đưa PasswordAuthentication novào sshd_configvà cũng có thể đặt UsePAM Nohoặc tắt xác thực mật khẩu trong cài đặt PAM cho ssh). Một biện pháp trung gian là hạn chế đăng nhập ssh vào danh sách trắng của người dùng có AllowUsershoặc AllowGroupstrong sshd_config.

Lưu ý rằng việc cho phép đăng nhập mật khẩu không phải là vấn đề bảo mật. Mật khẩu yếu và mật khẩu rình mò là những vấn đề và cho phép xác thực mật khẩu trong máy chủ ssh là một yếu tố hỗ trợ. Để bảo vệ chống lại việc rình mò mật khẩu, đừng bao giờ nhập mật khẩu của bạn vào máy mà bạn không hoàn toàn tin tưởng (nhưng sau đó nếu bạn tin tưởng vào máy thì bạn cũng có thể cài đặt khóa riêng trên đó và sau đó bạn không cần xác thực mật khẩu).

Yêu cầu tối thiểu để sử dụng máy khách ssh trên máy là bạn tin tưởng rằng sẽ không có hoạt động chiếm quyền điều khiển giao tiếp ssh (bạn có thể thực hiện một cuộc tấn công trung gian nếu nó chạy trên máy khách - bạn nghĩ bạn đang gõ các lệnh vào một máy khách ssh nguyên sơ nhưng thực tế máy khách đang truyền dữ liệu xác thực của bạn một cách trung thực nhưng cũng chèn một con ngựa trojan vào liên lạc sau đó). Đây là một yêu cầu yếu hơn so với việc tin tưởng sẽ không có kẻ rình mò mật khẩu (thường được thực hiện thông qua keylogger, nhưng có các phương pháp ít tự động hơn như lướt vai). Nếu bạn có sự tin tưởng tối thiểu nhưng vẫn sợ những kẻ rình mò, bạn có thể sử dụng mật khẩu một lần (OpenSSH hỗ trợ họ thông qua hỗ trợ PAM của nó).

Tất nhiên, như bất kỳ chương trình nào khác tương tác với các máy nằm ngoài sự kiểm soát của bạn (không chỉ máy chủ mạng mà còn cả máy khách), bạn phải theo kịp các cập nhật bảo mật.


2

Ba điều xuất hiện trong tâm trí tôi:

  1. Nếu bạn mở cổng mặc định 22 thì sẽ sớm bị phát hiện và PC của bạn sẽ bị tấn công bởi các cuộc tấn công vũ phu. Tôi đề nghị bạn cấu hình sshd để nghe một số cổng khác hoặc thực hiện ánh xạ cổng trên tường lửa của bạn. Mặc dù đây không phải là một viên đạn ma thuật, nhưng nó chắc chắn sẽ giúp bạn tiết kiệm ít nhất các chu kỳ CPU.

    Cảng 12345

  2. Hoàn toàn vô hiệu hóa xác thực mật khẩu và chỉ sử dụng các khóa. Bất kỳ khóa nào sẽ tốt hơn mật khẩu phức tạp nhất bạn có thể nhớ.

    Mật khẩu không xác thực

  3. Mặc dù Ubuntu đã vô hiệu hóa người dùng root theo mặc định, nhưng rõ ràng vô hiệu hóa đăng nhập root

    PermitRootLogin không

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.