Bagaimana cara mengambil alamat IP dari kemungkinan penyerang ssh?

17

Saya baru saja cat /var/log/auth.loglogin dan melihat, bahwa ada banyak | grep "Failed password for"catatan.

Namun, ada dua jenis rekaman yang mungkin - untuk pengguna yang valid / tidak valid. Ini mempersulit upaya saya untuk | cutmereka.

Saya ingin melihat membuat daftar (file teks) dengan alamat IP dari kemungkinan penyerang dan jumlah upaya untuk setiap alamat IP. Apakah ada cara mudah untuk membuatnya?

Juga, hanya mengenai ssh: Apa semua catatan yang /var/log/auth.logharus saya pertimbangkan ketika membuat daftar kemungkinan penyerang?

Contoh 'auth.log' saya dengan nomor tersembunyi:

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

Hasil:

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
kravemir
sumber
Saya sarankan Anda membuat kunci ssh, menginstalnya di server Anda dan menonaktifkan kata sandi sepenuhnya di file konfigurasi sshd server Anda /etc/ssh/sshd_config... pengaturan pencarian PasswordAuthentication nodan PermitRootLogin without-password ... maka semua upaya kata sandi tersebut akan digagalkan sebelum memasuki auth.log ...
Scott Stensland

Jawaban:

19

Anda dapat menggunakan sesuatu seperti ini:

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

Ia menangkap string Failed password fordan mengekstrak ( -o) alamat ip. Ini diurutkan, dan uniqmenghitung jumlah kejadian.

Outputnya kemudian akan terlihat seperti ini (dengan contoh Anda sebagai file input):

  1 111.111.111.1
  3 111.11.111.111
  6 111.111.11.111

Yang terakhir dalam output telah mencoba 6 kali.

kekacauan
sumber
ini adalah jawaban terbaik @chaos - ditambahkan ke kotak oneliners saya yang berguna - terima kasih!
Jake
Solusi bagus Saya tidak tahu bahwa grep dapat mengekstrak kecocokan regex, bukan hanya menyaring garis. Saya baru saja menambahkan | sort -nke rantai.
kravemir
1
Jawaban yang bagus - multiple greps biasanya merupakan tanda untuk menggunakan sed. sed -nr '/Failed/{s/.*([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*/\1/;p}'menggantikan kedua greps.
orion
1
@orion benar tetapi bayangkan bahwa grep pertama juga dapat zgrep "Failed" /var/log/auth.log*mencari melalui arsip log terkompresi, apa yang sedtidak bisa.
chaos
1
Bagaimana dengan IPv6?
Ortomala Lokni
6

Ini mungkin solusi yang membengkak, tetapi saya sarankan Anda melihat menginstal sesuatu seperti Fail2Ban

Ini dibuat untuk jenis logging + ini menambahkan bonus karena dapat menambahkan aturan (sementara) di firewall Anda untuk memblokir pelanggar berulang. Pastikan untuk daftar putih ip Anda sendiri, saya berhasil mengunci diri sementara waktu pada beberapa kesempatan

Jake
sumber
Nah, komentar yang bagus, tetapi bukan jawaban untuk pertanyaan itu. Ini lebih seperti saran yang dapat menghapus kebutuhan pertanyaan, tetapi saya tidak perlu daemon untuk memonitor file saya. Saya punya alasan mengapa saya perlu menjadikan daftar itu sebagai file teks hanya dengan skrip. :)
kravemir
Saya setuju dengan @Miro, jika Anda tidak menyebutkannya di sini, saya akan menambahkannya dalam komentar.
SailorCire
@Miro, Anda benar, bukan jawaban untuk pertanyaan itu sendiri, itu hanya terlintas dalam pikiran sebagai alat yang nyaman untuk jenis logging ini.
Jake
0

Ini bekerja dengan sangat baik bagi saya. (IP telah diubah untuk melindungi yang bersalah)

$ 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
Nama palsu
sumber
0
grep "Failed password for" /var/log/auth.log |
    awk -F"from" {'print $2'} |
    awk {'print $1'} |
    sort -u
Liviu Popescu
sumber
Hasilnya password- tidak berfungsi. Bahkan tidak mencakup berbagai jenis entri, awkkolom cetak adalah alternatif untuk cut, bukan solusinya.
kravemir
Ini bekerja untuk saya baik dengan sampel di atas ou nyata /var/log/auth.log
Archemar
Yah, itu tidak berfungsi sebelum edit - ketika komentar telah dibuat. Sekarang berfungsi dengan benar. Namun, itu meleset uniq -cseperti dalam jawaban terbaik.
kravemir