Hàng trăm thông tin đăng nhập ssh không thành công


81

Mỗi đêm tôi nhận được hàng trăm, đôi khi hàng ngàn lần đăng nhập ssh không thành công trên máy chủ RedHat 4 của mình. Vì lý do tường lửa từ các trang web từ xa, tôi cần chạy trên cổng tiêu chuẩn. Có bất cứ điều gì tôi nên làm để chặn điều này. Tôi nhận thấy rằng nhiều người đến từ cùng một địa chỉ IP. Không nên dừng lại sau một thời gian sao?

Câu trả lời:


67

Bạn có thể sử dụng iptables để xếp hạng giới hạn các kết nối mới đến cổng SSH. Tôi phải xem toàn bộ cấu hình iptables của bạn để cung cấp cho bạn giải pháp chìa khóa trao tay, nhưng về cơ bản bạn đang nói về việc thêm các quy tắc như:

iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 5 --name SSH --rsource -j DROP 
iptables -A INPUT -p tcp --dport 22 -m recent --set --name SSH --rsource -j ACCEPT 

Các quy tắc này giả định rằng bạn chấp nhận các kết nối THÀNH LẬP sớm hơn trong bảng (để chỉ các kết nối mới đạt được các quy tắc này). Các kết nối SSH mới sẽ đạt các quy tắc này và được đánh dấu. Trong 60 giây, 5 lần thử từ một địa chỉ IP duy nhất sẽ dẫn đến các kết nối mới đến từ IP đó bị hủy.

Điều này đã làm việc tốt cho tôi.

Chỉnh sửa: Tôi thích phương thức này hơn "fail2ban" vì không có phần mềm bổ sung nào được cài đặt và hoàn toàn xảy ra ở chế độ kernel. Nó không xử lý các tệp nhật ký phân tích cú pháp như "fail2ban", nhưng nếu vấn đề của bạn chỉ xảy ra với SSH, tôi sẽ không sử dụng chế độ người dùng yêu cầu cài đặt phần mềm và phức tạp hơn.


1
Tôi thích giải pháp này và tôi đang lên kế hoạch đưa nó vào vị trí tối nay, một khi tôi nhận được ngày hôm nay.
MattMcKnight

2
Nó làm chậm các cuộc tấn công và tôi khuyên bạn nên làm điều đó, nhưng vì có các botnet quét được phân bổ ngoài kia, nó không phải là thuốc chữa bách bệnh. Vẫn sẽ có thông tin đăng nhập không hợp lệ từ các botnet chạy quét phân tán đối với bạn. Bạn thực sự không thể làm được gì nhiều về điều đó, thiếu một loại kế hoạch "gõ cổng" nào đó để đưa cổng SSH lên cao khi bạn muốn vào.
Evan Anderson

1
+1 cho đề xuất "gõ cổng" của @ Evan. Một số thông tin: linux.die.net/man/1/knockd . Nhưng đừng làm theo cách của trang man (nghĩa là thêm / xóa quy tắc iptables), mà thay vào đó hãy sử dụng -m conditionkết hợp iptables.
pepoluan

2
bạn không cần - nhập 22 trong các quy tắc này để chúng chỉ được áp dụng cho lưu lượng ssh?
clime

2
@clime - Đúng. Khó có thể tin điều này đã ở đây 2 năm rưỡi và không ai để ý! Nắm bắt tốt.
Evan Anderson


25

Tôi khuyên bạn nên sử dụng một cổng không chuẩn cho SSH nếu bạn có thể (ví dụ: cổng 10222) nhưng vì bạn đã đề cập nên bạn không nên làm điều đó, tôi khuyên bạn nên sử dụng một cái gì đó như Denyhost.

http://denyhosts.sourceforge.net/

Gói lớn, dễ cài đặt và cấu hình.


6
Tôi không biết tại sao mọi người lại ủng hộ điều này; SSH ở trên một cổng tiêu chuẩn 22. Điều này có nghĩa là khi bạn ở trên một mạng nước ngoài, bạn không dựa vào việc họ đã mở một cổng không chuẩn thông qua tường lửa đi. Giải pháp thực sự cho vấn đề này được ghi lại ở trên, hoặc hạn chế số lượng kết nối lặp lại thông qua tường lửa gửi đến của bạn hoặc tắt đăng nhập mật khẩu.
Andrew Taylor

1
OpenSSH 6.7 giảm hỗ trợ tcpwrappers , đó là những gì denyhosts sử dụng.
Zoredache

15

Mặc dù có thể rất tốt để có thể ssh vào hệ thống của bạn từ các vị trí tùy ý trên internet, có các hệ thống tấn công mật khẩu tự động sẽ khóa vào một cổng ssh mở và áp dụng các cuộc tấn công từ điển và tài khoản joe khác nhau vào hệ thống của bạn. Điều này có thể gây khó chịu khi đọc trong bản tóm tắt nhật ký hàng đêm của bạn và gây lãng phí băng thông của bạn.

Nếu bạn có một máy chủ web trên cùng một hệ thống, bạn có thể sử dụng các trình bao bọc php và tcp để hạn chế lưu lượng truy cập ssh đến các hệ thống đã biết, cộng với cung cấp cho bạn một khóa cửa sau để cho phép bạn truy cập từ các hệ thống tùy ý trên internet.

Đây là cách bạn làm điều đó:

từ chối tất cả các kết nối ssh trong /etc/hosts.deny:

# /etc/hosts.deny fragment
sshd:  all

Cho phép các hệ thống được biết đến bằng IP trong /etc/hosts.allow, cộng với thêm tệp để truy cập tạm thời:

# /etc/hosts.allow fragment
sshd:  10.0.10.2     # some system
sshd:  172.99.99.99  # some other system
sshd:  /etc/hosts.allow.temporary-sshd-access

Tạo một tệp php trong máy chủ web của bạn và đặt cho nó một cái tên không rõ ràng như my-sshd-access.php:

<?php
function get_ip()
{
    return getenv("REMOTE_ADDR"); 
}

?>

<?php
$out='/etc/hosts.allow.temporary-sshd-access';
$log='/var/log/sshd-access-addition-log';

print "Was:";
readfile($out);
print "<br>";
$ip=get_ip();
$fp=fopen($out,"w");
fputs($fp,$ip);
fclose($fp);

$lfp=fopen($log,"a");
fputs($lfp,$ip);
fputs($lfp,"n");
fclose($lfp);

print "Wrote: ";
readfile($out);
?>

Tha thứ cho mã php - Tôi đã quét nó từ một nơi khác, vì vậy nó có thể đứng để được dọn sạch cả một bó. Tất cả những gì nó làm là thêm địa chỉ IP của hệ thống truy cập vào tệp /etc/hosts.allow.t tạm-sshd-access, được đọc bởi sshd (do được bao gồm bởi /etc/hosts.allow) tại thời điểm kết nối .

Bây giờ khi bạn đang ở một số hệ thống tùy ý trên web và muốn ssh với hệ thống này, trước tiên hãy sử dụng trình duyệt web và nhấn tệp này (hoặc sử dụng wget hoặc tương đương):

$ wget http://your.system.name/my-sshd-access.php

Bây giờ bạn sẽ có thể ssh vào hệ thống của bạn. Nếu đây là nơi nào đó bạn có thể sẽ thường xuyên tham gia, thì việc đọc nội dung của tập tin /etc/hosts.allow.t tạm-sshd-access và vĩnh viễn thêm địa chỉ IP vào / etc / hosts sẽ là chuyện nhỏ. cho phép


Để làm cho điều này an toàn hơn, hãy chạy trang này trên https.
Robert Munteanu

Nếu bạn thay đổi tập lệnh để nó không xuất ra nội dung của tệp "địa chỉ IP tạm thời được phép", sẽ không có bất cứ điều gì cho một người đánh hơi sẽ đánh hơi. Sau đó, bạn có thể chạy nó trên http thay vì https.
Barry Brown

"Địa chỉ IP tạm thời được phép" luôn là địa chỉ của người yêu cầu (tức là của bạn). Tôi không nghĩ nó quan trọng bằng cách này hay cách khác. Https không có nghĩa là URL được yêu cầu được mã hóa có nghĩa là nó không tầm thường để đánh hơi nó ra khỏi dây.
David Mackffy

Điều này sẽ không hoạt động nếu bạn đang ở trên một mạng hỗ trợ các kết nối HTTP nhưng tuyến trực tiếp của bạn đến internet thông qua một đầu ra khác.
Andrew Taylor

OpenSSH 6.7 giảm hỗ trợ tcpwrappers , đó là những gì đang được sử dụng trong câu trả lời của bạn.
Zoredache


8

Làm cho mình một ưu tiên và vô hiệu hóa đăng nhập mật khẩu. Sử dụng các khóa xác thực độc quyền (ví dụ: google ssh-keygen - Ví dụ: http://www.puddingonline.com/~dave/publications/SSH-with-Keys-HOWTO/document/html/SSH-with-Keys-HOWTO-4 .html ) Máy chủ của bạn sẽ an toàn hơn, bạn sẽ kết nối với nó thoải mái hơn (kiểm tra ssh-agent, ssh-add, móc khóa) và bạn sẽ không còn là nạn nhân của các cuộc tấn công vũ phu ssh.


2

giải pháp khác là chỉ cần di chuyển ssh sang cổng khác. Những con sâu này khá là ngu ngốc.


3
Các poster ban đầu cho biết anh cần phải chạy trên cổng tiêu chuẩn.
kbyrd

1
xin lỗi, tôi phải đọc các câu hỏi cẩn thận hơn :)
diserman

1
Tôi phải đồng ý ... Tôi có SSH của tôi chạy trên các cổng "thay thế" và nó tạo ra một THẾ GIỚI khác biệt trong nhật ký. Những con sâu thông minh như một viên gạch, vì vậy nó hoạt động tốt chống lại các kịch bản tự động hóa câm; không tốt để chống lại những kẻ tấn công con người. Tuy nhiên, các bản ghi có âm thanh của sự im lặng trong đó ...
Avery Payne

.. không phải là các bot "ngu ngốc", mà chúng được thiết kế để tìm kiếm trái cây treo thấp. Vì vậy, việc di chuyển cổng SSH theo kiểu .. giữ trái cây của bạn khỏi mặt đất.
elrobis

2

Một tùy chọn khác có thể là yêu cầu tất cả các kết nối ssh được xác nhận bằng chứng chỉ và loại bỏ hoàn toàn mật khẩu.

Tôi sử dụng để sử dụng Denyhost, nhưng tôi thấy tôi chỉ kết nối thường xuyên từ xa từ một số nơi, vì vậy tôi đã chặn tất cả các kết nối cổng 22 ngoại trừ mọi nơi khác và sử dụng cổng gõ để tôi có thể kết nối từ bất cứ đâu với máy tính xách tay của mình nếu tôi phải .


1

Bất kỳ giải pháp nào liên quan đến việc tự động chặn IP sau nhiều lần thất bại đều có nguy cơ bị từ chối dịch vụ. Miễn là có chính sách mật khẩu tốt để giảm hiệu quả của các cuộc tấn công từ điển hoặc tấn công từ điển, tôi sẽ không lo lắng quá nhiều về chúng.

Nếu bạn giới hạn người dùng / nhóm chỉ ở những người được phép ssh ở vị trí đầu tiên và vô hiệu hóa đăng nhập với quyền root, bạn sẽ đủ an toàn hơn. Và, nếu điều đó là không đủ, luôn có xác thực dựa trên khóa.


1

Thành thật mà nói, nếu bạn phải chạy SSH (và trên cổng 22), bạn không thể tránh những thứ này. Nếu bạn phải chấp nhận mật khẩu, bạn thậm chí còn ở trong tình trạng tồi tệ hơn.

Đặt cược tốt nhất của bạn là định cấu hình phần mềm phân tích nhật ký của bạn để loại trừ nhật ký SSH. Sau đó chạy một phiên bản riêng để chỉ xem nhật ký SSH và sử dụng procmail để lọc các lần thử không thành công. Bạn thậm chí có thể viết các tập lệnh để xem thông tin đăng nhập thành công từ các địa chỉ IP với nhiều lần thử không thành công.

Không có cách nào để ngăn mọi người thăm dò máy chủ SSH của bạn. Denyhosts, fail2ban và ví dụ iptables sẽ hoạt động đến một điểm, nhưng có thêm nguy cơ vô tình chặn người dùng hợp pháp. Phương pháp tốt nhất là hút nó lên và cố gắng tự động hóa quá trình phân tích log để giảm thời gian bạn phải suy nghĩ về nó.


0

Khi bạn nói rằng bạn đang gặp thất bại, hãy đăng nhập vào máy chủ mũ đỏ của bạn, loại tường lửa nào nằm phía sau và có bao nhiêu người cần phải vào đó. Tôi đề nghị rằng nếu bạn có thể muốn hạn chế các nỗ lực tại tường lửa trước khi chúng đến bất kỳ nơi nào gần máy chủ thực tế của bạn.

Nếu bạn có thể hạn chế phạm vi địa chỉ IP cần truy cập hợp pháp, bạn có thể thiết lập danh sách truy cập trên tường lửa. Nếu bạn có thể hạn chế lưu lượng truy cập tại tường lửa, tôi sẽ đề nghị bạn xem xét các hệ thống xâm nhập mạng, vì có vẻ như máy chủ của bạn đang bị nhắm mục tiêu bởi một cái gì đó.


0

Hầu hết các webhost sử dụng APF + BFD để chặn các lần đăng nhập SSH không thành công. Ngày nay, có CSF (tường lửa Configserver) bao gồm một công cụ có tên là LFD cũng làm điều tương tự, và hơn thế nữa, bao gồm các IP chặn từ một số quốc gia mà bạn không muốn truy cập máy chủ của mình (ví dụ: Hàn Quốc, Trung Quốc, v.v. dường như bắt nguồn từ).



0

Nếu bạn cần giải quyết vấn đề này trên nhiều máy chủ, bạn có thể muốn kiểm tra OSSEC: http://www.ossec.net/main/ossec-arch architecture

Điều này sẽ cho phép bạn định cấu hình nhiều tác nhân từ một vị trí tập trung để tự động phản ứng với các cuộc tấn công vũ phu (cùng với bất kỳ mẫu nào khác mà bạn có thể trích xuất từ ​​nhật ký).

Phần mềm rất hay :)


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.