Làm thế nào để lấy địa chỉ IP của những kẻ tấn công ssh có thể?


17

Tôi vừa cat /var/log/auth.logđăng nhập và thấy rằng có nhiều | grep "Failed password for"hồ sơ.

Tuy nhiên, có hai loại bản ghi có thể - cho người dùng hợp lệ / không hợp lệ. Nó làm phức tạp nỗ lực của tôi cho | cuthọ.

Tôi muốn xem tạo một danh sách (tệp văn bản) với địa chỉ IP của những kẻ tấn công có thể và số lần thử cho mỗi địa chỉ IP. Có cách nào dễ dàng để tạo ra nó?

Ngoài ra, chỉ liên quan ssh: Tất cả những hồ sơ /var/log/auth.logtôi nên xem xét khi lập danh sách những kẻ tấn công có thể?

Ví dụ về 'auth.log' của tôi với các số ẩn:

cat /var/log/auth.log | grep "Failed password for" | sed 's/[0-9]/1/g' | sort -u | tail

Kết quả:

Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user ucpss from 111.11.111.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user vijay from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user webalizer from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user xapolicymgr from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user yarn from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user zookeeper from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user zt from 111.11.111.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for mysql from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for root from 111.11.111.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for root from 111.111.111.1 port 11111 ssh1

Tôi khuyên bạn nên tạo khóa ssh, cài đặt chúng trên máy chủ của mình và vô hiệu hóa hoàn toàn mật khẩu trong tệp cấu hình sshd máy chủ của bạn /etc/ssh/sshd_config... cài đặt tra cứu PasswordAuthentication noPermitRootLogin without-password ... sau đó tất cả các lần thử mật khẩu như vậy sẽ bị cản trở trước khi vào auth.log ...
Scott Stensland

Câu trả lời:


19

Bạn có thể sử dụng một cái gì đó như thế này:

grep "Failed password for" /var/log/auth.log | grep -Po "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" \
| sort | uniq -c

Nó greps cho chuỗi Failed password forvà trích xuất ( -o) địa chỉ IP. Nó được sắp xếp, và uniqđếm số lần xuất hiện.

Đầu ra sau đó sẽ trông như thế này (với ví dụ của bạn là tệp đầu vào):

  1 111.111.111.1
  3 111.11.111.111
  6 111.111.11.111

Cái cuối cùng trong đầu ra đã thử 6 lần.


đây là câu trả lời hay nhất @chaos - được thêm vào hộp oneliners hữu ích của tôi - cảm ơn!
Jake

Giải pháp tuyệt vời. Tôi không biết rằng grep có thể trích xuất các kết hợp regex, không chỉ các dòng bộ lọc. Tôi vừa mới thêm vào | sort -nchuỗi.
kravemir 18/03/2015

1
Câu trả lời tốt - nhiều greps thường là một dấu hiệu để sử dụng sed. sed -nr '/Failed/{s/.*([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*/\1/;p}'thay thế cả hai greps.
orion

1
@orion đúng nhưng hãy tưởng tượng rằng grep đầu tiên cũng có thể là zgrep "Failed" /var/log/auth.log*tìm kiếm máng lưu trữ nhật ký nén, những gì sedkhông thể.
hỗn loạn

1
Còn IPv6 thì sao?
Ortomala Lokni

6

Nó có thể là một giải pháp cồng kềnh nhưng tôi khuyên bạn nên xem việc cài đặt một cái gì đó như Fail2Ban

Nó được tạo ra cho loại ghi nhật ký này + thêm phần thưởng cho việc có thể thêm các quy tắc (tạm thời) trong tường lửa của bạn để chặn những người vi phạm lặp lại. Hãy chắc chắn để liệt kê danh sách ip của riêng bạn, tôi đã tạm thời tự khóa mình trong một vài lần


Vâng, bình luận tốt đẹp, nhưng không phải là một câu trả lời cho câu hỏi. Nó giống như gợi ý hơn có thể loại bỏ nhu cầu của câu hỏi, nhưng tôi không cần trình nền để theo dõi các tệp của mình. Tôi đã có lý do tại sao tôi cần phải tạo danh sách đó dưới dạng tệp văn bản chỉ bằng các tập lệnh. :)
kravemir 18/03/2015

Tôi đồng ý với @Miro, nếu bạn không đề cập đến nó ở đây tôi đã thêm nó vào một bình luận.
Thủy thủ 18/03/2015

@Miro, bạn nói đúng, không phải là một câu trả lời cho chính câu hỏi, nó chỉ xuất hiện như một công cụ thuận tiện cho loại đăng nhập này.
Jake

0

Điều này làm việc thực sự tốt cho tôi. (IP đã được thay đổi để bảo vệ người có tội)

$ awk '/Failed/ {x[$(NF-3)]++} END {for (i in x){printf "%3d %s\n", x[i], i}}' /var/log/auth.log | sort -nr
 65 10.0.0.1
 14 10.0.0.2
  4 10.0.0.3
  1 10.0.0.4

0
grep "Failed password for" /var/log/auth.log |
    awk -F"from" {'print $2'} |
    awk {'print $1'} |
    sort -u

Kết quả là password- không hoạt động. Nó thậm chí không bao gồm các loại mục nhập khác nhau, awkcột in thay thế cho cut, không phải là giải pháp.
kravemir

Nó hoạt động với tôi hoặc với mẫu ở trên ou real /var/log/auth.log
Archemar 18/03/2015

Chà, nó không hoạt động trước khi chỉnh sửa - khi bình luận đã được đưa ra. Bây giờ nó hoạt động chính xác. Tuy nhiên, nó bỏ lỡ uniq -cnhư trong câu trả lời tốt nhất.
kravemir 18/03/2015
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.