Phân tích tệp nhật ký cho IP thường xuyên


12

Vì vậy, tôi đã hack nó cùng nhau trong khi trải qua một cuộc tấn công DDOS để kéo ips nghịch ngợm ra khỏi nhật ký của tôi. Bất cứ ai có bất kỳ cải tiến hoặc đề xuất khác để làm cho nó tốt hơn?

Đây là ý tưởng chung:

  1. chỉ kéo ip ra khỏi tệp nhật ký
  2. sắp xếp chúng
  3. uniq và đếm chúng
  4. sắp xếp lại chúng

Và chuỗi o'pipes:
cut --delim " " -f7 /var/log/apache_access | sort | uniq -c | sort -rn > sorted-ips.txt


Không chắc chắn nếu điều này sẽ được hỏi tốt hơn trong quản trị trang web ... nhưng vì tất cả đều sử dụng các tiện ích unix và dòng lệnh ... Tôi cho rằng ở đây sẽ phù hợp hơn.
gabe.

Có vẻ tốt ở đây. Nó dựa trên unix và không dành riêng cho nội dung web (Điều này có thể áp dụng cho nhiều thứ khác nhau trong các bản ghi IP của tường lửa hoặc tường lửa)
Stefan Lasiewski

Câu trả lời:


7

Tôi đã luôn sử dụng cái này:

tail -1000 /var/log/apache_access | awk '{print $1}' | sort -nk1 | uniq -c | sort -nk1

Với việc tailtôi có thể đặt giới hạn cho việc tôi thực sự muốn đi bao xa - thật tốt nếu bạn không sử dụng xoay vòng nhật ký (vì bất kỳ lý do gì), thứ hai tôi đang sử dụng awk- vì hầu hết các nhật ký đều được phân cách bằng không gian đã để lại cho bản thân tôi khả năng rút thêm thông tin (có thể là URL nào họ đang nhấn, trạng thái, trình duyệt, v.v.) bằng cách thêm $biến thích hợp . Cuối cùng, một lỗ hổng trong uniqnó chỉ hoạt động trong các cặp chạm - IE:

A
A
A
A
B
A
A

Sẽ sản xuất:

4 A
1 B
2 A

Không phải đầu ra mong muốn. Vì vậy, chúng tôi sắp xếp cột đầu tiên (trong trường hợp này là ips, nhưng chúng tôi có thể sắp xếp các cột khác) sau đó uniqchúng, cuối cùng sắp xếp số tăng dần để tôi có thể thấy những người phạm tội cao nhất.


Vâng, tôi cũng nhận ra vấn đề với uniq, do đó, loại đầu tiên của tôi là đặt tất cả IPS theo thứ tự để các bản sao sẽ nằm cạnh nhau. Đầu đuôi cũng đẹp, vì việc phân tích toàn bộ nhật ký ở khoảng 4GB có thể mất một chút thời gian. Tốt thứ, cảm ơn.
gabe.

-k1là dư thừa, (1) chỉ có một khóa (2) sortbắt đầu sử dụng từ đầu tiên làm khóa.
Lekensteyn

7

Có vẻ như bạn đang ở giữa phát minh lại bánh xe fail2ban .

Hãy xem fail2ban. Nó có thể làm những gì bạn muốn, và nếu không, thật dễ dàng để tùy chỉnh.


1
Đó là một dự án khá thú vị mà tôi không biết, cảm ơn. Đồng thời, tôi không muốn cài đặt bất cứ thứ gì trên máy chủ nhật ký mà không cần, và nó đủ dễ để làm những gì tôi đã làm. Tôi chỉ tìm kiếm đề xuất về cải tiến. Cảm ơn!
gabe.

Điều này trông thực sự mát mẻ, và GPL cũng vậy.
Eli Frey

7

Marco Ceppi đã đúng awkkhi trở thành một công cụ tốt hơn cho việc này nhưng awk cũng là một công cụ tốt hơn sortuniqvì logic đó có thể được chuyển sang awk. Sẽ không có nhiều sự khác biệt nếu bạn chỉ theo dõi 1000 dòng nhưng nếu bạn muốn xem một tệp nhật ký nhiều gig, nó có thể là các đơn đặt hàng có cường độ nhanh hơn để chuyển nó vào awk.

cat /var/log/apache_access | awk '{freq[$1]++} END {for (x in freq) {print freq[x], x}}' | sort -nsẽ làm những gì bạn cần nhưng nhanh hơn nhiều cho các tệp lớn. Nó tạo ra một mảng IP trong awk, sử dụng địa chỉ IP làm khóa và số lần IP xuất hiện làm giá trị.

Việc tăng tốc xuất hiện bởi vì awk thực hiện chuyển dữ liệu và thực hiện hầu hết công việc, ngoại trừ việc sắp xếp đầu ra cuối cùng. Sử dụng phương pháp khác, nếu bạn có 1.000.000 dòng trong nhật ký chuyển, awk sẽ đọc 1.000.000 dòng đó phun ra 1.000.000 IP, sau đó sắp xếp trên toàn bộ 1.000.000 IP, gửi 1.000.000 IP được sắp xếp tới uniq để giảm xuống còn nhỏ hơn nhiều số lượng dữ liệu trước khi đưa ra để sắp xếp. Thay vì đi vòng quanh / thực hiện nhiều lượt trên 1.000.000 IP, awk thực hiện hầu hết mọi thứ trong một lượt.

Sử dụng nhật ký apache dòng 5,513,132 (1,1 hợp đồng biểu diễn) trên máy tính xách tay của tôi, đây là so sánh tốc độ:

  • 2m 45s cat ./apache_access | awk '{print $1}' | sort -nk1 | uniq -c | sort -nk1
  • 0m 40 cat ./apache_access | awk '{freq[$1]++} END {for (x in freq) {print freq[x], x}}' | sort -n

Rất tuyệt. Tôi đang thêm cái này vào túi của tôi.
gabe.
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.