การแยกไฟล์บันทึกสำหรับ IP ที่ใช้บ่อย


12

ดังนั้นฉันจึงแฮกมันด้วยกันในขณะที่กำลังโจมตี DDOS เพื่อดึงIPS ที่ซุกซนออกจากบันทึกของฉัน ใครมีการปรับปรุงหรือคำแนะนำอื่น ๆ เพื่อให้ดีขึ้นหรือไม่

นี่คือแนวคิดทั่วไป:

  1. ดึง ip ออกจากไฟล์บันทึกเท่านั้น
  2. จัดเรียงพวกเขา
  3. uniq และนับพวกเขา
  4. จัดเรียงพวกเขาอีกครั้ง

และสตริง:
cut --delim " " -f7 /var/log/apache_access | sort | uniq -c | sort -rn > sorted-ips.txt


ไม่แน่ใจว่าสิ่งนี้จะได้รับการถามที่ดีขึ้นในเว็บมาสเตอร์หรือไม่ ... แต่เนื่องจากทั้งหมดใช้ unix utils และบรรทัดคำสั่ง ... ฉันคิดว่าที่นี่จะเหมาะสมกว่า
เกบ

ดูเหมือนดีที่นี่ มันใช้ระบบปฏิบัติการยูนิกซ์และไม่เฉพาะเจาะจงกับเนื้อหาบนเว็บ (ซึ่งอาจนำไปใช้กับสิ่งต่าง ๆ ใน Apache หรือไฟร์วอลล์บันทึก IP)
Stefan Lasiewski

คำตอบ:


7

ฉันเคยใช้สิ่งนี้:

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

ด้วยtailฉันสามารถกำหนดขีด จำกัด ว่าฉันจะต้องย้อนกลับไปอีกนานแค่ไหนดี - ถ้าคุณไม่ใช้ล็อกการหมุน (ไม่ว่าจะด้วยเหตุผลใดก็ตาม) ประการที่สองฉันใช้งานawk- เนื่องจากบันทึกส่วนใหญ่เป็นตัวคั่นพื้นที่ฉัน ฉันทิ้งตนเองด้วยความสามารถในการดึงข้อมูลเพิ่มเติมออกมา (อาจเป็น URL ที่พวกเขากำลังกดปุ่มสถานะเบราว์เซอร์ ฯลฯ ) โดยการเพิ่ม$ตัวแปรที่เหมาะสม ในที่สุดข้อบกพร่องในการuniqทำงานเฉพาะในคู่ที่สัมผัส - IE:

A
A
A
A
B
A
A

จะผลิต:

4 A
1 B
2 A

ไม่ใช่เอาต์พุตที่ต้องการ ดังนั้นเราจึงจัดเรียงคอลัมน์แรก (ในกรณีนี้คือ ips แต่เราสามารถจัดเรียงคอลัมน์อื่น ๆ ) จากนั้นuniqพวกเขาในที่สุดเรียงลำดับการนับจากน้อยไปมากเพื่อให้ฉันเห็นผู้กระทำผิดสูงสุด


ใช่ฉันตระหนักถึงปัญหาด้วย uniq เช่นกันดังนั้นการเรียงลำดับแรกของฉันที่จะใส่ IPS ทั้งหมดเพื่อที่จะทำซ้ำจะอยู่ติดกัน ปลายหางนั้นดีเช่นกันเนื่องจากการแยกวิเคราะห์บันทึกทั้งหมดที่ประมาณ 4GB อาจใช้เวลาสักครู่ สิ่งที่ดีขอบคุณ
เกบ

-k1ซ้ำซ้อน (1) มีเพียงหนึ่งคีย์เท่านั้น (2) sortเริ่มใช้คำแรกเป็นคีย์อยู่ดี
Lekensteyn

7

ดูเหมือนว่าคุณกำลังอยู่ระหว่างการคิดค้นล้อที่ล้มเหลว 2 บาน

ให้ดูไม่ผ่าน มันอาจจะทำสิ่งที่คุณต้องการอยู่แล้วและถ้าไม่มันง่ายต่อการปรับแต่ง


1
นั่นเป็นโครงการที่น่าสนใจมากที่ฉันไม่รู้ ในเวลาเดียวกันฉันไม่ต้องการติดตั้งอะไรบนเซิร์ฟเวอร์บันทึกที่ไม่จำเป็นและมันก็ง่ายพอที่จะทำสิ่งที่ฉันทำอยู่แล้ว ฉันแค่มองหาคำแนะนำในการปรับปรุง ขอบคุณ!
เกบ

มันดูเท่ห์จริงๆและ GPL ก็เช่นกัน
Eli Frey

7

Marco Ceppi ถูกต้องเกี่ยวกับawkการเป็นเครื่องมือที่ดีกว่าสำหรับเรื่องนี้ แต่ awk ยังเป็นเครื่องมือที่ดีกว่าsortและuniqเนื่องจากตรรกะนั้นสามารถย้ายเข้ามาawkได้ มันไม่ได้ทำให้ความแตกต่างมากถ้าคุณเพียงแค่ tailing 1000 สาย awkแต่ถ้าคุณต้องการที่จะดูที่แฟ้มบันทึกกิ๊กมากหลายก็สามารถเป็นคำสั่งของขนาดได้เร็วขึ้นที่จะย้ายที่ใน

cat /var/log/apache_access | awk '{freq[$1]++} END {for (x in freq) {print freq[x], x}}' | sort -nจะทำสิ่งที่คุณต้องการ แต่จะเร็วกว่าสำหรับไฟล์ขนาดใหญ่ มันสร้างอาร์เรย์ของ IP ใน awk โดยใช้ที่อยู่ IP เป็นคีย์และจำนวนครั้งที่ IP เกิดขึ้นเป็นค่า

ความเร็วเพิ่มขึ้นเนื่องจาก awk ทำการส่งผ่านข้อมูลและทำงานส่วนใหญ่ยกเว้นการเรียงลำดับผลลัพธ์สุดท้าย ใช้วิธีอื่นถ้าคุณมี 1,000,000 บรรทัดในบันทึกการโอนย้าย awk อ่าน 1,000,000 บรรทัดที่กระจายออก 1,000,000 IP จากนั้นเรียงลำดับให้ครอบคลุมทั้ง 1,000,000 IP ทั้งหมดและส่ง 1,000,000 IP ที่เรียงตอนนี้ไปยัง uniq ซึ่งลดขนาดให้เล็กลงมาก จำนวนข้อมูลก่อนที่จะให้การเรียงลำดับ แทนที่จะไปป์ / ทำหลายรอบบน 1,000,000 IP, awk ทำเกือบทุกอย่างในครั้งเดียว

ใช้บันทึก apache 5,513,132 line (1.1 gigs) บนแล็ปท็อปของฉันนี่เป็นการเปรียบเทียบความเร็ว:

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

เด็ดมาก ฉันกำลังเพิ่มสิ่งนี้ลงในกระเป๋าถือของฉัน
เกบ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.