Olası ssh saldırganlarının IP adresleri nasıl alınır?


18

Sadece cat /var/log/auth.logkayıt ve görüyorum, birçok | grep "Failed password for"kayıt var.

Ancak, geçerli / geçersiz kullanıcı için iki olası kayıt türü vardır. | cutOnlara teşebbüslerimi zorlaştırıyor .

Olası saldırganların IP adreslerini ve her IP adresi için deneme sayısını içeren bir liste (metin dosyası) oluşturmayı görmek istiyorum. Oluşturmanın kolay bir yolu var mı?

Ayrıca, sadece ilgili ssh: /var/log/auth.logOlası saldırganların listesini yaparken hangi kayıtları dikkate almalıyım?

Gizli numaralara sahip 'auth.log'uma örnek:

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

Sonuç:

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 anahtarları oluşturmanızı, bunları sunucunuza yüklemenizi ve sunucu sshd yapılandırma dosyasında şifreleri tamamen devre dışı bırakmanızı öneririm /etc/ssh/sshd_config... arama ayarları PasswordAuthentication nove PermitRootLogin without-password ... o zaman bu tür tüm şifre girişimleri auth.log'a girmeden önce engellenir ...
Scott Stensland

Yanıtlar:


20

Bunun gibi bir şey kullanabilirsiniz:

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

Dize için açılır ve ip adresini Failed password for( -o) ayıklar . uniqSıralanır ve gerçekleşme sayısını sayar.

Çıktı daha sonra şöyle görünür (örneğiniz girdi dosyası olarak):

  1 111.111.111.1
  3 111.11.111.111
  6 111.111.11.111

Çıktıdaki sonuncusu 6 kez denedi.


Bu en iyi cevap @ chaos - yararlı oneliners kutuma eklendi - teşekkürler!
Jake

Harika bir çözüm. Grep'in sadece filtre hatlarını değil, normal ifadeleri eşleştirebileceğini bilmiyordum. | sort -nZincire yeni ekledim .
kravemir

1
İyi cevap - birden fazla grev genellikle sed kullanmak için bir işarettir. sed -nr '/Failed/{s/.*([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*/\1/;p}'her iki açgının da yerini alır.
orion

1
@orion true, ancak ilk grep'in zgrep "Failed" /var/log/auth.log*sıkıştırılmış günlük arşivlerinde de arama yapamayacağını hayal edin , ne sedyapamazsınız.
kaos

1
IPv6 ne olacak?
Ortomala Lokni

6

Şişirilmiş bir çözüm olabilir, ancak Fail2Ban gibi bir şey yüklemeye bakmanızı öneririm

Bu tür bir günlük kaydı için yapılır + tekrarlayan suçluları engellemek için güvenlik duvarınıza (geçici) kurallar ekleyebilme bonusu ekler. Kendi ip'inizi beyaz listeye eklediğinizden emin olun, kendimi birkaç kez geçici olarak kilitlemeyi başardım


Güzel bir yorum, ama sorunun cevabı değil. Daha çok soru ihtiyacını kaldırabilecek öneri gibi, ama dosyalarımı izlemek için bir arka plan programına ihtiyacım yok. Nedenlerimi sadece komut dosyaları ile bu listeyi metin dosyası olarak yapmam gerekiyor? :)
kravemir

@Miro'ya katılıyorum, burada bahsetmemiş olsaydınız, bir yorumda eklerdim.
15'te SailorCire

@Miro, haklısın, sorunun kendisine bir cevap değil, sadece bu tür bir kayıt için uygun bir araç olarak akla geldi.
Jake

0

Bu benim için gerçekten işe yaradı. (IP'ler suçluyu korumak için değiştirildi)

$ 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

Sonuç password- çalışmıyor. Farklı giriş türlerini bile kapsamaz, awkbaskı sütunu cutçözüme değil , alternatiftir .
kravemir

Benim için de çalışıyor / o / real/var/
log/auth.log

Yorum yapıldığında - düzenlemeden önce işe yaramadı. Şimdi doğru çalışıyor. Ancak, uniq -cen iyi cevaptaki gibi özlüyor .
kravemir
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.