Ngăn chặn các cuộc tấn công vũ phu chống lại ssh?


49

Bạn sử dụng công cụ hoặc kỹ thuật nào để ngăn chặn các cuộc tấn công vũ phu chống lại cổng ssh của bạn. Tôi nhận thấy trong nhật ký bảo mật của mình, rằng tôi có hàng triệu lần thử đăng nhập như nhiều người dùng khác nhau thông qua ssh.

Đây là trên một hộp FreeBSD, nhưng tôi tưởng tượng nó sẽ được áp dụng ở bất cứ đâu.

Câu trả lời:


25

Đây là một bài viết hay về chủ đề đó của Rainer Doesmann.

Nó giải thích những ưu và nhược điểm của các phương pháp luận án để làm điều đó:

  • Mật khẩu mạnh
  • Xác thực RSA
  • Sử dụng 'iptables' để chặn cuộc tấn công
  • Sử dụng nhật ký sshd để chặn các cuộc tấn công
  • Sử dụng tcp_wrappers để chặn các cuộc tấn công
  • Cổng gõ

39

Tôi sử dụng fail2ban , nó sẽ khóa IP sau một vài lần thất bại trong một khoảng thời gian có thể định cấu hình.

Kết hợp điều này với kiểm tra độ mạnh của mật khẩu (sử dụng john (John the Ripper)) để đảm bảo các cuộc tấn công vũ phu sẽ không thành công.


4
Fail2ban là tuyệt vời. Thật đơn giản để mở rộng nó để giám sát / var / log / maillog và khiến nó cấm những kẻ gửi thư rác liên tục tấn công máy chủ thư của tôi
Dave Cheney

Fail2ban có thể được kết hợp với chuỗi iptables gửi lưu lượng tcp đến TARPITmục tiêu, nếu bạn cảm thấy khó chịu (từ xtables-addons).
Tobu



15

Một trong những cách dễ nhất để tránh các cuộc tấn công này là thay đổi cổng mà sshd lắng nghe


1
Nếu, tất nhiên, hệ thống của bạn có thể chịu đựng được.
C. Ross

13
Bảo mật thông qua che khuất, hiệu quả mỗi lần.
Chris Ballance

1
Tôi sẽ không thay đổi cổng nhiều như vậy, nhưng tôi đã học được rằng hầu hết các tường lửa (không phải của riêng tôi) có xu hướng khóa tất cả các cổng khác với các cổng thông thường (80,22, 443, v.v.). Nếu tôi ở đằng sau những bức tường lửa đó, tôi không thể đến máy chủ nhà của mình trên cổng không chuẩn đó. Đối với tôi đó là không đi.
đau buồn

@grieve sau đó thay đổi tường lửa của chúng tôi để cho ra cổng đó?
Rory

@Roy Tôi đang nói về tường lửa khác với những cái tôi sở hữu. Ví dụ: nếu tôi muốn ssh vào máy chủ của tôi từ Starbucks, tường lửa của họ chặn cổng gửi đi. Tôi không thể thay đổi điều đó. (Tôi chỉ sử dụng Starbucks làm ví dụ. Tôi không biết họ thực sự chặn cổng nào hay không).
đau buồn

12

Như Chris chỉ ra, sử dụng khóa mã hóa thay vì mật khẩu.

Thêm vào đó:

  • sử dụng danh sách trắng nếu có thể

Có bao nhiêu người hoặc địa điểm (với IP công cộng nổi) mà bạn thực sự cần truy cập vào các kết nối ssh công cộng của bạn?

Tùy thuộc vào số lượng máy chủ ssh công cộng bạn đang duy trì và liệu bạn có thể thu hẹp tiêu chí kết nối chung của mình hay không, đó có thể là cấu hình đơn giản hơn, có thể bảo trì để giới hạn quyền truy cập vào một số máy chủ bên ngoài.

Nếu điều này làm việc cho bạn, nó thực sự có thể đơn giản hóa chi phí quản trị của bạn.


2
Danh sách trắng là cực kỳ quan trọng nếu bạn đang thực hiện bất kỳ loại danh sách đen nào trừ khi bạn muốn bị khóa.
Ryaner

2
+1 cho danh sách trắng chủ động.
Chris Ballance

3
+1 để có câu trả lời tuyệt đối tốt nhất. Hai điều đó là những bước hợp lý duy nhất, và chúng thực sự rất hiệu quả. Hoặc là một mình là đáng giá, và cả hai cùng nhau nhiều hơn như vậy. Boo trên các câu trả lời khác ủng hộ an ninh thông qua tối nghĩa!
dwc

11

Ngoài các đề xuất tốt khác, một điều thực sự dễ dàng là kết nối đến giới hạn tốc độ. Giới hạn ở 3 kết nối mỗi phút trên mỗi IP:

iptables -A INPUT -p tcp --dport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

Tôi có thể đang hiểu nhầm một cái gì đó, nhưng nhiều trình duyệt chính kết nối giữa 4 - 6 kết nối cùng một lúc - mặc dù tiêu chuẩn HTTP đặt nó ở mức 2.
Joshua Enfield

1
Có, đó sẽ là một vấn đề nếu bạn đang cố gắng đánh giá cổng giới hạn 80. Bạn không kết nối với ssh với trình duyệt web của mình và các phiên ssh là các phiên tồn tại lâu dài, không phải là các phiên không trạng thái ngắn như http. Song song các phiên ssh như thế không có ý nghĩa. Điều đó không có nghĩa là không có một số sử dụng ssh thích hợp mà điều này sẽ phá vỡ, nhưng nó rất hiếm.
sherbang

Giải pháp này không tốt lắm nếu như tôi, bạn đang phục vụ Subversion qua ssh. Một truy vấn SVN duy nhất có thể tạo ra một số lượng lớn các kết nối liên tiếp. Nếu cung cấp dịch vụ đó, bạn có thể sử dụng dịch vụ sshd thứ hai trên một cổng khác hoặc danh sách IP được biết trong danh sách trắng. Tôi đang nghĩ đến việc sử dụng fail2ban hoặc sshdfilter để bắt các cuộc tấn công rõ ràng lần đầu tiên, mà không trừng phạt người dùng hợp pháp của tôi.
thóc

thật tốt khi biết tùy chọn này quá ...
ZEE

6

Sử dụng tùy chọn "Cho phép người dùng" trong sshd_config để đảm bảo chỉ một nhóm nhỏ người dùng có thể đăng nhập. Tất cả những người khác sẽ bị từ chối, ngay cả khi tên người dùng và mật khẩu của họ là chính xác.

Bạn thậm chí có thể hạn chế người dùng đăng nhập từ một máy chủ cụ thể.

ví dụ,

AllowUsers user1 user2@host.example.com

Điều này sẽ giảm không gian tìm kiếm và tránh những người dùng cũ vô tình bị bỏ lại hoặc bật (mặc dù tất nhiên những thứ này nên bị vô hiệu hóa, đây là cách dễ dàng để ngăn họ sử dụng cho mục nhập dựa trên SSH).

Điều này không hoàn toàn ngăn chặn các cuộc tấn công vũ phu, nhưng giúp giảm thiểu rủi ro.


3

Sử dụng một cái gì đó như thế với PF:

bảng <ssh-brute> liên tục
chặn trong nhật ký nhanh từ nhãn ssh_brute
truyền vào $ ext_if proto tcp đến ($ ext_if) cổng ssh điều biến trạng thái \
(max-src-Conn-Rate 3/10, quá tải toàn cầu)


2

Port-knocking là một cách khá vững chắc để loại bỏ những thứ này. Hơi khó hiểu, đôi khi gây phiền nhiễu, nhưng nó chắc chắn làm cho vấn đề biến mất.


Tôi đã thử điều này và người dùng thấy khó chịu. Nếu chỉ có một hoặc hai người, đây có thể là một lựa chọn tốt và gần như sẽ loại bỏ các cuộc tấn công vũ phu
Brent

2

Bối cảnh rất quan trọng, nhưng tôi muốn giới thiệu một cái gì đó như vậy:

  • Vì bạn đang sử dụng FreeBSD, hãy xem xét việc chạy tường lửa PF và sử dụng các tính năng giới hạn tốc độ kết nối chắc chắn của nó. Điều này sẽ cho phép bạn gửi các bệnh ung thư vũ phu vào một danh sách đen nếu chúng kết nối thường xuyên
  • Nếu hộp này phải được truy cập từ thế giới bên ngoài, hãy xem xét sử dụng quy tắc PFrdr để không cho phép lưu lượng truy cập đến cổng 22, nhưng để chuyển hướng một số cổng tối nghĩa sang nó. Có nghĩa là, bạn phải kết nối với cổng 9122 thay vì 22. Nó tối nghĩa, nhưng nó khiến người gõ cửa tránh xa
  • chỉ xem xét chuyển sang xác thực dựa trên khóa, làm cho các cuộc tấn công từ điển trở nên vô dụng

2

Hơn nữa đối với đề xuất giới hạn tỷ lệ của sherbang , độ dài của độ trễ là rất quan trọng. Bằng cách tăng độ trễ giữa các nhóm 3 lần đăng nhập từ 2 phút lên 20 phút, số lượng địa chỉ IP khác nhau đã thực hiện nhiều hơn ba lần đăng nhập đã giảm, so sánh hai khoảng thời gian dài một tuần trên một máy của tôi, từ 44 lần thử thành 3 Không ai trong số ba địa chỉ đó cố gắng lâu hơn 11 giờ.

Rất giai thoại, nhưng auth.log trở nên dễ đọc hơn đối với tôi ...


1

Tôi không quan tâm đến nó. Hãy để họ ra khỏi cảng, họ sẽ không bắt bẻ chìa khóa.


-1 Bạn đã từng nghe về các cuộc tấn công DoS chưa?
Chris Ballance

8
Vâng, bởi vì SSH là dịch vụ duy nhất dễ bị tấn công bằng vũ lực. Nếu bạn có một cổng mở với Internet, nó có thể được sử dụng để đập máy của bạn vào quên lãng. Bạn cũng có thể đặt máy chủ HTTP của mình trên các cổng kỳ lạ và đằng sau việc gõ cổng, để "tránh các cuộc tấn công DoS" ...
womble

1

cài đặt OSSEC. không chỉ giám sát các lần đăng nhập lặp đi lặp lại, nó sẽ vào một khối tạm thời với iptables cho ip vi phạm. Và cuối cùng, nó sẽ gửi cho bạn một bản báo cáo nêu chi tiết. Nó ghi lại tất cả mọi thứ, đó là tốt đẹp. Ai đó đã từng thử hơn 8000 tên đăng nhập để đăng nhập. tôi đã phân tích các bản ghi và nhận được một danh sách người dùng tốt đẹp;)

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.