lastb mit IP vergleichen

Schlummi

New Member
Hallo,

ich habe ein kleines Script das mir die IP ausgibt

Code:
#!/bin/bash
WGET und nicht relevanter Kram
echo "IP: $PUBIP"

Das ganze würde ich nun gerne mit den Daten aus lastb -n 10 vergleichen.
Leider sind meine Script Kenntnisse begrenzt so das ich nun nicht weiter komme.

Dabei sollen die letzten 10 Werte aus lastb mit $PUBIP verglichen werden und die Anzahl der Loginversuche von dieser IP ausgeben werden.

Vieleicht hat dies ja schon jemand gemacht und kann mir dabei weiterhelfen.
 

storvi

New Member
Das klingt ja recht abenteuerlich.

Magst du sagen, was du im Endeffekt vorhast und wir können evtl. eine bereits bestehende Lösung empfehlen?

Ansonsten quick and dirty:
Code:
#!/bin/bash
PUBIP=aaa.bbb.ccc.ddd

for i in $(lastb -n 10 | awk '{ print $3 } ' | grep "\.")
 do
  if [ "$PUBIP" == "$i" ]
   then echo "yeah"
   else echo "no"
  fi
 done

Gruß
Markus
 

Schlummi

New Member
Was ich vor habe?

Aus dem letzten 10 Fehlgeschlagegenen Loginversuchen die Anzahl der Logins von "$PUBIP" (Count) via E-Mail zukommen lassen.

Das Versenden der Mail klappt soweit. Einzig das count fehlt noch.
Klar, ich könnte die Ausgabe von lastb -n 10 direkt via E-Mail schicken und selber zählen, aber wenn der User sich nur 3 mal Falsch eingelogt hat habe ich 7 weitere Adressen da stehen (lastb -n 10)

Mit PHP wäre das kein Problem, $PUBIP mit der Ausgabe von astb -n 10 vergleichen, Anzahl auslesen und in Variable speichern.

Ich hoffe ich habe das Verständlich rüber gebracht, bin leider kein Großer Texter.

Dein Script funktioniert zwar, gibt mir aber 10x "no" aus anstatt die Anzahl der Fehlerhaften Loginversuche von IP XX.XX.XX.XX
 

storvi

New Member
Hallo,

natürlich gibt das Script nur 10 x yeah oder no aus - es dient als Basis für weitere Entwicklungen...

Das was du vorhast, wird aber so nicht wirklich sinnvoll umzusetzen sein, da du ja wahrscheinlich:
- Pro IP mitloggen möchtest (also Jede IP einen eigenen Counter)
- Nach x Minuten soll ein Fehlversuch gelöscht werden, da sonst irgendwann jeder weitere Versuch gemeldet wird
- lastb zeigt nur logins an - nicht jedoch andere Dienste

Weiterhin musst du dir ja auch immer die Frage stellen, was du machst, wenn du eine Mail bekommst - selbst reagieren? Ist das nur für einen Server, oder mehrere?

Schau dir mal fail2ban an das wäre eine Lösung, die auf Basis der Erkennung weitere Maßnahmen durchführt - und das für beliebige Dienste, die Logfiles schreiben.

Gruß
Markus
 

Schlummi

New Member
Das was du vorhast, wird aber so nicht wirklich sinnvoll umzusetzen sein, da du ja wahrscheinlich:
- Pro IP mitloggen möchtest (also Jede IP einen eigenen Counter)
- Nach x Minuten soll ein Fehlversuch gelöscht werden, da sonst irgendwann jeder weitere Versuch gemeldet wird
- lastb zeigt nur logins an - nicht jedoch andere Dienste

Fail2Ban habe ich im Einsatz. Aufgrund meiner dicken finger hab ich das auf 3 Versuche eingestellt.

- Nein, mir reicht es die Anzahl von $PUBIP, wie oft die IP aus $PUBIP in den 10 Ergebnissen aus lastb -n 10 vorkommt
- Fail2Ban ist im Einsatz
- ist auch nur für Logins gedacht

Um das ganze besser verstehen zu können.
Am laufen habe ich https://www.thomas-krenn.com/de/wiki/Absicherung_eines_Debian_Servers#Benachrichtigung_bei_SSH_Login
So das ich bei einem SSH Login eine E-Mail bekommen.
In Fail2Ban habe ich die Anzahl der erlaubten Login Versuche auf 3 gestellt.
Wenn nun doch jemand mit weniger als 3 Versuchen Zugriff bekommt, soll in der E-Mail die IP stehen und die Anzahl der Versuche von dieser IP.

Die IP lasse ich mir schon via Mail mitteilen

#!/bin/bash

echo "Login auf $(hostname) am $(date +%Y-%m-%d) um $(date +%H:%M)"
echo "Benutzer: $USER"
PUBIP=`w3m -dump http://www.monip.org/ | awk -F': ' '/IP/ { print $2 }'`
echo "IP: $PUBIP"

Was fehlt ist nur noch die Anzahl wie oft die IP in der Ausgabe lastb -n 10 vorkommt
 
Last edited by a moderator:

storvi

New Member
Ich versteh aber immer noch nicht "Warum" du das ganze machen möchtest.

Welchen Mehrwert hast du aus der E-Mail?

Gruß
Markus
 

Schlummi

New Member
Sollte jemand unter 3 fehlversuche bleiben greift fail2ban nichT. Dann kann ich die ip manuell blocken,

Die anzahl ob 1 oder 2 versuche ist nur ein feature fur mich und hat ansonsten keinen nutzen.

Sorry fur die rechtschreibung. Handy und dicke finger
 
Last edited by a moderator:

Joe User

Zentrum der Macht
Code:
... lastb ... | awk ... | uniq -c ...
Oder direkt mit awk counten (Beispiele spuckt Google massenhaft aus)...
 

storvi

New Member
Code:
... lastb ... | awk ... | uniq -c ...
Oder direkt mit awk counten (Beispiele spuckt Google massenhaft aus)...

braucht man bei uniq -c nicht noch ein sort vorher? sonst zählt der nur die direkt hintereinander liegenden.

@Schlummi:
Geht es dir nur um die SSH-Login-Versuche?
Wenn ja, stell auf Public Key Authentisierung um und lass die "Angreifer" versuchen bis sie schwarz werden.

Was ist denn, wenn die "Angreifer" extrem langsam versuchen einen Login-Versuch zu starten und die letzten 10 Versuche nicht ausreichen?

Gruß
Markus
 

Schlummi

New Member
Geht es dir nur um die SSH-Login-Versuche?
Wenn ja, stell auf Public Key Authentisierung um und lass die "Angreifer" versuchen bis sie schwarz werden.

Was ist denn, wenn die "Angreifer" extrem langsam versuchen einen Login-Versuch zu starten und die letzten 10 Versuche nicht ausreichen?

Nu ist meine Idee kaputt, an Public Keys hab ich natürlich nicht gedacht. Danke für den Hinweis
 

DeaD_EyE

Blog Benutzer
Code:
root@kiste:~# python -c "import sys; from subprocess import PIPE, Popen; from collections import Counter; print Counter([p.split()[2] for p in Popen(['lastb', '-i', '-n10'], stdout=PIPE).communicate()[0].splitlines()[:-2]]).get(sys.argv[1], 0)" xxx.xxx.xxx.xxx

Wusste gar nicht, dass es auch lastb gibt. In perl geht es wahrscheinlich noch kürzer. Das erste Argument wird als IP übergeben. Die Ausgabe ist die Anzahl der Treffer. Wenn ich in Zeilen splitte, verwerfe ich die letzten beiden. Bestimmt kann man die Ausgabe von lastb noch so weit modifizieren, dass man die letzten beiden Zeilen nicht verwerfen muss.
 
Last edited by a moderator:

DeaD_EyE

Blog Benutzer
Ist ja viel einfacher xD

So ja:
Code:
lastb -i -n 10 | grep -c $ip

Vergisst man den Optionsschalter i, werden die Hostnamen ausgegeben.
 
Top