Bảo vệ máy chủ SSH chống lại bruteforcing


14

Tôi có một máy chủ SVN nhỏ, dell optiplex cũ đang chạy debian. Tôi không có nhu cầu cao như vậy trên máy chủ của mình, vì đó chỉ là một máy chủ SVN nhỏ ... nhưng tôi muốn nó được bảo mật.

Tôi vừa đổi mới máy chủ của mình sang một optiplex mới hơn và tốt hơn, và bắt đầu tìm kiếm một chút vào máy chủ cũ. Tôi đã gỡ nó xuống sau khi gặp vấn đề. Khi tôi kiểm tra nhật ký, nó đầy những nỗ lực vũ phu và bằng cách nào đó, ai đó đã thành công để vào máy của tôi. Người này đã tạo ra một số khối lượng bổ sung gọi là "knarkgosse" với hai thư mục "root" và "exchange1" hoặc một cái gì đó. Không thực sự biết tại sao và những gì họ làm, nhưng chắc chắn muốn ngăn điều này xảy ra lần nữa. Mặc dù vậy, tôi thấy điều này hơi lạ vì tôi đã thay đổi mật khẩu của mình vài tháng hoặc lâu hơn và mật khẩu luôn là các chữ cái và số ngẫu nhiên được đặt cùng nhau ... không dễ để bắt bẻ.

Tôi biết tôi có thể ngăn chặn root đăng nhập và sử dụng sudoers ... và thay đổi cổng SSH, nhưng tôi có thể làm gì hơn nữa?

Vì vậy, tôi có một vài câu hỏi:

  1. Làm cách nào tôi có thể ngăn đăng nhập trong 5 phút sau X lần thử không chính xác. Hoặc chậm cố gắng sau mỗi lần thử không chính xác?

  2. Có một số loại danh sách đen trung tâm mà một máy chủ có thể kết nối? Một danh sách đen theo dõi các địa chỉ IP "không an toàn" và không bao giờ nên được cấp quyền truy cập?

  3. Tôi có thể làm gì hơn nữa để áp dụng an toàn cho máy chủ của mình?

Như tôi đã nói trước đây, tôi đang chạy Debian 5 với Apache (vấn đề người dùng dữ liệu www?), Svn, mysql, php, phpmyadmin, hudson. Đó là trên một mạng gia đình với cổng chuyển tiếp trên 80, 443, 8080, 8180, 23 và 22.


Câu trả lời:


17

Fail2banPort Knocking sẽ giải quyết hầu hết các nhu cầu của bạn.

Thay đổi cổng SSH của bạn và chỉ cho phép xác thực dựa trên Khóa cũng được khuyến nghị.

Có thể lập luận rằng bạn có thể đạt đến điểm giảm lợi nhuận khi thêm các biện pháp bảo mật bổ sung, nhưng sau đó, một lần nữa, bạn phải quyết định khi nào bạn "đủ an toàn".

Đó cũng là một ý tưởng tốt để không cho phép đăng nhập root.


2
Tôi sử dụng denyhosts, nhưng nó khá giống với fail2ban afaik.
pfyon

Fail2Ban nghe có vẻ quen thuộc ... Tôi sẽ xem xét điều đó.
Paul Peelen

1
+1 Fail2Ban, 5 lần thất bại = khối IP 5 phút. Trừ khi bạn có một mật khẩu dễ dàng đến nực cười, nó sẽ không bao giờ bị bẻ khóa với 1 mật khẩu mỗi phút.
Chris S

@Chris S Yea, đó là một trong những sở thích của tôi. Script Kiddies thường không biết cách xử lý thời gian chờ ...
gWaldo

1
@gWaldo, xu hướng xác nhận đi một chặng đường dài trong việc viết lại những điều bạn đọc để nói những gì bạn đã nghĩ là đúng.
Chris S

7

Không có thay thế cho mật khẩu an toàn VÀ xác thực khóa. Điều đó đang được nói, Fail2Ban là một công cụ tuyệt vời để cấm IP của người dùng cố gắng xác thực quá nhiều lần. Nó cũng có sẵn như là một gói dựng sẵn cho hầu hết các bản phát hành. Được cảnh báo, bạn có thể vô tình bị cấm, vì vậy hãy chắc chắn rằng bạn cũng có một IP được liệt kê trắng khôi phục hoặc truy cập bảng điều khiển dễ dàng ...

Fail2Ban có một số ví dụ hay về cách định cấu hình mọi thứ bạn yêu cầu ... tuy nhiên, không có kho lưu trữ địa chỉ xấu phổ biến. Tôi không nghĩ rằng có một kho lưu trữ như vậy ở bất kỳ đâu do dễ dàng có được một IP khác (dhcp refresh / bot-net Tấn công / vv ...). Tôi cũng sẽ vô hiệu hóa đăng nhập qua ssh bằng tên người dùng loại 'quản trị viên' phổ biến (root / admin / admin / sysop / etc ..) vì đây là những tên thường được sử dụng nhất.


Câu trả lời chính xác. Tôi hoàn toàn đồng ý với bạn văn bản in đậm ... do đó, chữ cái được kết hợp với mật khẩu số. Xác thực khóa là một chút quá nhiều cho máy chủ này ... nhưng đó là một ý tưởng tốt. Bây giờ tôi đã cài đặt Fail2ban, có vẻ như tôi không cần phải cấu hình lại nó và vì máy chủ svn nhỏ này ở nhà nên tôi có thể truy cập dễ dàng (xem xét rằng nó nằm ở phía sau tủ quần áo của tôi = S) Thnx lời khuyên của bạn!
Paul Peelen

1
Spamhaus công bố danh sách các mạng spammer đã biết. Nó không bao gồm các botnet, nó chỉ là những kẻ gửi thư rác "chuyên nghiệp": spamhaus.org/drop
Chris S

5

Tôi đã dừng các cuộc tấn công vũ phu với:

  • fail2ban
  • sshd.config:
    • Mật khẩu Không xác thực
    • PermitRootLogin Không
  • Hạn chế tốc độ kết nối SSH với iptables ( http: //www.debian-ad dùng.org / article / 186 )

4

Có một số gợi ý tốt được cung cấp ở đây. Tôi trân trọng đề nghị ba điều nên làm điều này tương đối an toàn:

  1. Chạy sshd trên một cổng cao ngẫu nhiên. Các bot thường chỉ đi sau cổng 22 và các biến thể trên cổng 22 như 2222.
  2. Vô hiệu hóa xác thực dựa trên mật khẩu trong cấu hình sshd:

UsePAM không

  1. Chỉ xác thực với trang web này thông qua các cặp khóa SSH được chia sẻ trước. Man trên ssh-keygen để bắt đầu với xác thực dựa trên PKI.

Hi vọng điêu nay co ich.


2
Đối với một giải pháp căng thẳng rất thấp, tôi chắc chắn thứ hai chạy ssh trên một cổng không chuẩn. Từ những gì tôi đã thấy, điều này sẽ giảm các nỗ lực tại các kết nối vũ phu đến máy chủ ssh của bạn theo một độ lớn. Trong khoảng thời gian một tuần, một trong những máy chủ của tôi (chạy ssh trên một cổng tiêu chuẩn) đã có 134 lần thử kết nối không hợp lệ. Cùng khoảng thời gian đó, một cá thể ảo trên cùng một máy chủ (chạy ssh trên một cổng không chuẩn) có 0.
DF

1

Tôi luôn là một fan hâm mộ lớn của CSF / LFD , có thể chặn địa chỉ IP của những người đang cố gắng tàn bạo, portscan và một số tùy chọn khác. Về cơ bản, nó là một trình bao bọc khổng lồ cho các bảng IP, nhưng tệp cấu hình không khó đọc và tài liệu không tệ.


Bạn có biết nếu có một cách nào đó người ta có thể được cảnh báo (ví dụ: qua email) bất cứ khi nào quét cổng được định dạng sẵn trên máy chủ không?
Paul Peelen

1

Bạn cũng có thể nhìn vào sshguard. Tôi đã không sử dụng nó nhưng tôi đã nghe thấy những điều tốt.

Nguồn:
http://isc.sans.edu/diary.html?storyid=9370

http://www.sshguard.net/

http://www.sshguard.net/docs/faqs/

"Sshguard giám sát các máy chủ khỏi hoạt động ghi nhật ký của họ. Khi nhật ký truyền tải rằng ai đó đang làm điều xấu, sshguard phản ứng bằng cách chặn anh ta / cô ta một chút. vững chắc hơn và vững chắc hơn. "


Điều này nghe có vẻ gọn gàng ... Tôi sẽ xem xét nó. thnx
Paul Peelen

1

Tôi có một máy chủ SSH được kết nối với internet trên cổng mặc định và chưa bao giờ gặp sự cố ..

  • tcp_wrappers (ví dụ: hosts.allow hosts.deny) cho SSH .. Tôi không nghĩ rằng có một SSH ngoài đó không có hỗ trợ được biên dịch trong đó
  • iptables này kết hợp với tcp_wrappers đã loại bỏ khoảng 99% các lần quét cổng ngẫu nhiên / lần thử bruteforce của tôi .. vấn đề duy nhất là bạn cần biết bạn sẽ kết nối từ đâu để cho phép các phạm vi IP / IP đó ... Tôi chỉ đơn giản là làm tra cứu các nhà cung cấp phổ biến quanh khu vực của tôi để xem phạm vi IP của họ và cho phép những người đó .. hầu hết các lần quét dường như đến từ vùng đất xa xôi :)
  • PermitRootLogin không có mật khẩu (nghĩa là chỉ các cặp khóa RSA / DSA được mã hóa bằng cụm từ mật khẩu) hoạt động tuyệt vời cho các tác vụ tự động .. khi tôi đăng nhập để tương tác, rõ ràng tôi sử dụng tài khoản của mình (thông thường) được cấu hình với quyền truy cập sudo
  • sudoers
  • cập nhật liên tục .. Tôi cập nhật hộp này thường xuyên với tất cả các cập nhật bảo mật / quan trọng
  • thay đổi mật khẩu / mật khẩu
  • chạy chkrootkit cứ thỉnh thoảng để xem tôi có gặp vấn đề gì không .. (có một số hoạt động ngoài kia thực hiện chức năng này)

hy vọng nó giúp!


1

Có một cách tốt hơn để làm điều này, sử dụng fail2ban có nghĩa là bạn phải thêm một ứng dụng và nó hoạt động ở lớp ứng dụng.

Nếu bạn sử dụng iptables thì hiệu quả hơn vì nó hoạt động ở lớp mạng và bạn không phải cài đặt thêm ứng dụng.

Sử dụng mô-đun iptables gần đây http://www.snowman.net/projects/ipt_recent/

iptables -N SSHSCAN
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSHSCAN
iptables -A SSHSCAN -m recent --set --name SSH
iptables -A SSHSCAN -m recent --update --seconds 300 --hitcount 3 --name SSH -j LOG --log-level info --log-prefix "SSH SCAN blocked: "
iptables -A SSHSCAN -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP
iptables -A SSHSCAN -j ACCEPT

0

Một tùy chọn (được sử dụng cùng với các biện pháp bảo mật khác) là sshd lắng nghe trên một cổng khác ngoài 22. Tôi chưa từng thử, nhưng nghe nói nó làm giảm số lần tấn công vũ phu thuần túy của bot.

Tôi phải nhấn mạnh rằng đây không phải là bảo mật thực sự, chỉ làm giảm số vụ tấn công vũ phu tự động. Tôi đoán quá nhiều công việc để kiểm tra mọi cổng.


Tôi cũng đã làm điều đó, chuyển sang cổng 23. Chủ yếu là vì tôi có một máy chủ khác ở cổng 22 (mà bây giờ tôi đã gỡ xuống).
Paul Peelen

2
23 là một cổng dành riêng telnetmặc dù. Thường thì nên sử dụng các cổng không dành riêng, chẳng hạn như> 60k. iana.org/assignments/port-numbers cung cấp cho bạn một danh sách các số cổng dành riêng.
ℝaphink

Cảm ơn vì tiền hỗ trợ. Tôi không sử dụng nguyên lý trên máy này (chưa) nhưng sẽ thay đổi cổng. Tôi có một phạm vi cổng từ 52000 - 59000 tôi sử dụng trên các máy chủ chuyên nghiệp của mình, nghĩ đến việc sử dụng tương tự cho cái này.
Paul Peelen

1
@Paul: I don't use te[l]net on this machine- giữ nguyên như vậy. Mặc dù bạn muốn có một máy khách telnet xung quanh vì nhiều lý do, không có lý do gì để chạy máy chủ telnet khi bạn có sẵn ssh. Mật khẩu văn bản trên dây là xấu .
mlp

0

Một cái gì đó không được đề cập ở đây và thực sự nên hạn chế truy cập thông qua tường lửa. Điều này không phù hợp với mọi tình huống, nhưng nếu bạn đang kết nối với máy chủ từ một vị trí nhất quán với IP tĩnh, bạn có thể chặn hoàn toàn SSH ngoại trừ IP đó. Điều này sẽ đảm bảo rằng những kẻ xâm nhập không thể xâm nhập. Như tôi đã đề cập, điều này không phải lúc nào cũng phù hợp với mọi tình huống, đặc biệt nếu IP của bạn là động và thay đổi thường xuyên.


Nói chung tôi đồng ý với giải pháp của bạn. Tôi tin rằng đây là tiêu chuẩn tại công ty tôi làm việc ... nhưng tôi không nghĩ đây là thứ gì đó cho tôi. Vấn đề là tôi chủ yếu sử dụng macbook pro của mình từ nhà (mạng cục bộ), từ cơ quan (IP tĩnh) hoặc khi đang di chuyển (sử dụng modem 3G / iPhone). Cuối cùng, đây là một vấn đề nếu tôi không có VPN, điều đó quá mức cần thiết. Cảm ơn câu trả lời của bạn.
Paul Peelen

0

Denyhosts, http://denyhosts.sourceforge.net/ , là một dự án tốt mà tôi đã có may mắn với. Nếu bạn thiết lập denyhosts để đồng bộ hóa, nó sẽ tải xuống các IP mới để thêm vào danh sách cấm đã phải đánh bại các hệ thống khác bằng cách sử dụng denyhost. Nó cũng hết hạn các IP đã không cố gắng vũ trang trong một thời gian.

Sử dụng xác thực khóa công khai và vô hiệu hóa ghi nhật ký mật khẩu có lẽ là điều tốt nhất bạn có thể làm. Đánh bại bất kỳ cuộc tấn công vũ phu.


0

Điều gì đã có hiệu quả đối với tôi:

  1. Như những người khác đã nói, không có đăng nhập root, PasswordAuthentication được đặt thành không (chỉ đăng nhập w / key) trong sshd_config

  2. Chỉ một hoặc hai người dùng được phép đăng nhập qua ssh và họ đã có những cái tên khó hiểu không có trong danh sách tên người dùng công cụ vũ phu thông thường (nghĩa là không phải "admin" hoặc "apache" hoặc "web" hoặc "web" hoặc "web" johnny ")

  3. Các quy tắc tường lửa hạn chế (về cơ bản, mọi thứ đều bị chặn nhưng cổng dịch vụ và ssh của tôi). Tôi thậm chí còn hạn chế ping, để tránh các bản quét thô hơn (gây ra nhiều phiền toái cho đối tác của tôi).

  4. Trên máy chủ web của tôi, tôi hạn chế quyền truy cập vào một vài địa chỉ IP cụ thể - nhưng có vẻ như đây không phải là một tùy chọn cho bạn. Chắc chắn không thể tự làm điều đó trên tất cả các máy chủ của chúng tôi. Bạn cũng có thể muốn xem xét "gõ cổng".

  5. Và yêu thích của tôi: mô-đun phản ứng tích cực của OSSEC để chặn một số điều kiện vũ lực và cảnh báo về các lỗi khác. Nó phát hiện x đăng nhập không hợp lệ trong khoảng thời gian y và sau đó chặn (thông qua lệnh thả tường lửa iptables) trong một khoảng thời gian nhất định. Tôi đang chặn khoảng 12 giờ để giải trí. :)

Một điều tôi làm ở đây để đảm bảo rằng tôi không chặn quá nhiều điều sai, đó là trong /etc/ossec.conf, tôi đặt phản hồi hoạt động ở mức cao (không tồn tại trong cấu hình mặc định) và sau đó đi qua sshd_rules.xml và đặt các quy tắc tôi muốn chặn ở mức đó và sửa đổi các ngưỡng cho khối so với cảnh báo khi cần.

Nếu bạn đang chạy Apache, bạn cũng có thể chặn những thứ vi phạm quy tắc apache. Tôi không chặn những điều này chỉ vì vấn đề NAT, tôi muốn nghĩ về việc chặn toàn bộ trường đại học hoặc một cái gì đó. :) Ngoài ra, bạn có thể viết các quy tắc tùy chỉnh để chặn các điều kiện nhất định trong tệp nhật ký, điều này có thể thực sự hữu ích.

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.