วิธีการดึงที่อยู่ IP ของผู้โจมตีที่เป็นไปได้ ssh?


17

ฉันเพิ่งcat /var/log/auth.logเข้าสู่ระบบและดูว่ามีหลาย| grep "Failed password for"ระเบียน

อย่างไรก็ตามมีสองประเภทบันทึกที่เป็นไปได้ - สำหรับผู้ใช้ที่ถูกต้อง / ไม่ถูกต้อง มันทำให้ความพยายามของฉันยากขึ้นสำหรับ| cutพวกเขา

ฉันต้องการจะดูสร้างรายการ (ไฟล์ข้อความ) พร้อมที่อยู่ IP ของผู้โจมตีที่เป็นไปได้และจำนวนครั้งสำหรับแต่ละที่อยู่ IP มีวิธีง่าย ๆ ในการสร้างหรือไม่

นอกจากนี้เกี่ยวกับssh: /var/log/auth.logฉันควรพิจารณาบันทึกทั้งหมดของรายการใดบ้างเมื่อทำรายการผู้โจมตีที่เป็นไปได้

ตัวอย่างของ 'auth.log' ของฉันด้วยตัวเลขที่ซ่อนอยู่:

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

ผลลัพธ์:

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

ฉันขอแนะนำให้คุณสร้างคีย์ ssh ติดตั้งบนเซิร์ฟเวอร์ของคุณและปิดการใช้รหัสผ่านทั้งหมดในเซิร์ฟเวอร์ sshd config ไฟล์ของคุณ/etc/ssh/sshd_config... การตั้งค่าการค้นหาPasswordAuthentication noและPermitRootLogin without-password ... จากนั้นความพยายามรหัสผ่านทั้งหมดจะถูกขัดขวางก่อนที่จะเข้าสู่ auth.log ...
Scott Stensland

คำตอบ:


19

คุณสามารถใช้สิ่งนี้:

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

มัน greps สำหรับสตริงFailed password forและแยก ( -o) ที่อยู่ IP มันถูกเรียงลำดับและuniqนับจำนวนการปรากฏ

เอาต์พุตจะมีลักษณะดังนี้ (ด้วยตัวอย่างของคุณเป็นไฟล์อินพุต):

  1 111.111.111.1
  3 111.11.111.111
  6 111.111.11.111

อันสุดท้ายในผลลัพธ์ได้ลอง 6 ครั้ง


นี่คือคำตอบที่ดีที่สุด @chaos - เพิ่มลงในกล่องผู้มีชื่อเสียงของฉัน - ขอบคุณ!
Jake

ทางออกที่ดี ฉันไม่ทราบว่า grep สามารถแยกการจับคู่ regex ไม่ใช่แค่ตัวกรองบรรทัด ฉันเพิ่งเพิ่มลง| sort -nในห่วงโซ่
kravemir

1
คำตอบที่ดี - greps หลายตัวมักเป็นสัญญาณให้ใช้ sed sed -nr '/Failed/{s/.*([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*/\1/;p}'แทนที่ greps ทั้งสอง
orion

1
@orion จริง แต่ลองนึกภาพว่า grep ตัวแรกยังสามารถzgrep "Failed" /var/log/auth.log*ค้นหาไฟล์บันทึกที่ถูกบีบอัดได้ซึ่งsedก็ไม่สามารถทำได้
ความโกลาหล

1
แล้ว IPv6 ล่ะ?
Ortomala Lokni

6

อาจเป็นวิธีแก้ปัญหาป่อง แต่ฉันขอแนะนำให้คุณดูการติดตั้งบางอย่างเช่นFail2Ban

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


คำอธิบายที่ดี แต่ไม่ใช่คำตอบสำหรับคำถาม มันเหมือนคำแนะนำที่สามารถลบความต้องการของคำถามออกไป แต่ฉันไม่ต้องการภูตเพื่อตรวจสอบไฟล์ของฉัน ฉันมีเหตุผลของฉันทำไมฉันต้องทำให้รายการนั้นเป็นไฟล์ข้อความโดยสคริปต์ :)
kravemir

ฉันเห็นด้วยกับ @Miro คุณไม่ได้พูดถึงที่นี่ฉันได้เพิ่มไว้ในความคิดเห็น
SailorCire

@Miro คุณพูดถูกไม่ใช่คำตอบสำหรับคำถามตัวเองมันแค่คิดว่าเป็นเครื่องมือที่สะดวกสำหรับการบันทึกแบบนี้
Jake

0

สิ่งนี้ได้ผลดีจริง ๆ สำหรับฉัน (IP มีการเปลี่ยนแปลงเพื่อปกป้องความผิด)

$ 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

ผลที่ได้คือpassword- ไม่ทำงาน มันไม่ได้ครอบคลุมประเภทรายการที่แตกต่างกันawkคอลัมน์พิมพ์เป็นทางเลือกแทนcutไม่ใช่โซลูชัน
kravemir

มันใช้งานได้สำหรับฉันด้วยตัวอย่างด้านบน ou จริง /var/log/auth.log
Archemar

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