• This forum has a zero tolerance policy regarding spam. If you register here to publish advertising, your user account will be deleted without further questions.

fail2ban - sinnvoll oder nicht?

franc

Member
Hallo

endlich hab ich es hingekriegt, mein fail2ban auf meinem Ubuntu 12.04 root Server richtig einzustellen, es hatte mich immer genervt im Logwatch Protokoll massenhaft Einträge zu lesen von abgelehnten Loginversuchen (ich lasse nur public key auth., die probieren es aber mit Keyboard/password auth.).
Bei 3 Fehlversuchen wird 10 Minuten gesperrt. Auch die Meldung, wenn versucht wird über Passworteingabe einzudringen, hab ich gemäß der Anleitung von benblogt in die /etc/fail2ban/filter.d/sshd.conf aufgenommen:

Code:
            ^%(__prefix_line)sReceived disconnect from <HOST>: .* Bye Bye \[preauth\]\s*$
            ^%(__prefix_line)sReceived disconnect from <HOST>: .* Goodbye \[preauth\]\s*$
            ^%(__prefix_line)sReceived disconnect from <HOST>: .* No supported authentication methods available \[preauth\]*\s*$

Allerdings lese ich jetzt (im Benachrichtigungsmail von fail2ban) z.B. Folgendes:

Code:
The IP 210.167.20.26 has just been banned by Fail2Ban after
2 attempts against ssh.


Here is more information about 210.167.20.26:

[ JPNIC database provides information regarding IP address and ASN. Its use   ]
[ is restricted to network administration purposes. For further information,  ]
[ use 'whois -h whois.nic.ad.jp help'. To only display English output,        ]
[ add '/e' at the end of command, e.g. 'whois -h whois.nic.ad.jp xxx/e'.      ]

Network Information:            
a. [Network Number]             210.167.20.0/23
b. [Network Name]               ENETS
g. [Organization]               eNet Solutions Co.,Ltd
m. [Administrative Contact]     SK11338JP
n. [Technical Contact]          SK11338JP
p. [Nameserver]                 ns5.enets.jp
p. [Nameserver]                 ns1.htcn.ne.jp
[Assigned Date]                 2013/06/25
[Return Date]                   
[Last Update]                   2013/10/30 10:17:04(JST)
                                
Less Specific Info.
----------
Hokuriku Telecommunication Network Co.Ltd.
                     [Allocation]                              210.167.16.0/20

More Specific Info.
----------
No match!!


Lines containing IP:210.167.20.26 in /var/log/auth.log

Jan  5 23:32:51 example sshd[25536]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  6 01:04:54 example sshd[26510]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  6 02:37:16 example sshd[27309]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  6 04:09:28 example sshd[28199]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  6 05:41:52 example sshd[29327]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  6 07:14:04 example sshd[30837]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  6 08:46:22 example sshd[31678]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  6 10:18:29 example sshd[32681]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  6 11:50:41 example sshd[1127]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  6 13:22:46 example sshd[2319]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  6 14:54:55 example sshd[3318]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  6 16:27:12 example sshd[4975]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  6 17:59:13 example sshd[6317]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  6 19:31:31 example sshd[7245]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  6 21:03:40 example sshd[8117]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  6 22:35:48 example sshd[9264]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  7 00:08:14 example sshd[10297]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  7 01:40:18 example sshd[11150]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  7 03:12:21 example sshd[12007]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  7 04:44:20 example sshd[13367]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  7 06:16:17 example sshd[14232]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  7 07:48:13 example sshd[15739]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  7 09:20:12 example sshd[16701]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  7 10:52:04 example sshd[17831]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  7 12:23:57 example sshd[19507]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  7 13:56:06 example sshd[20896]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  7 15:28:14 example sshd[22333]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  7 17:00:23 example sshd[24264]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  7 18:32:33 example sshd[25436]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  7 20:04:17 example sshd[26514]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  7 21:36:10 example sshd[27874]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  7 23:08:13 example sshd[29162]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  8 00:40:23 example sshd[30247]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  8 02:12:38 example sshd[31278]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  8 03:44:31 example sshd[310]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  8 05:16:38 example sshd[1539]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  8 06:48:44 example sshd[2719]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  8 08:20:46 example sshd[4842]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  8 09:52:55 example sshd[6066]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  8 11:25:01 example sshd[7647]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  8 12:57:10 example sshd[9165]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  8 14:29:19 example sshd[11032]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  8 16:01:15 example sshd[12773]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  8 17:33:25 example sshd[14066]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  8 19:05:40 example sshd[15264]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  8 20:37:41 example sshd[16403]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  8 22:09:43 example sshd[17655]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  8 23:41:44 example sshd[19997]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  9 01:13:50 example sshd[21167]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  9 02:46:06 example sshd[22173]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  9 04:18:25 example sshd[23298]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  9 05:50:29 example sshd[24304]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  9 18:48:12 example sshd[3041]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  9 20:20:20 example sshd[4071]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  9 21:52:32 example sshd[5047]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan  9 23:24:51 example sshd[6141]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan 10 00:57:01 example sshd[8709]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan 10 02:29:08 example sshd[12628]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan 10 04:01:12 example sshd[13552]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan 10 05:33:24 example sshd[14528]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]
Jan 10 07:05:51 example sshd[15999]: Received disconnect from 210.167.20.26: 11: Bye Bye [preauth]

Kann es sein, dass die Autoschwachmaten, die da versuchen einzudringen, einfach automatisch warten bis es wieder geht und dann weiter machen? Dass die also ihre Skripte runter rattern, das dauert dann halt wg. den jeweils 10 Minuten Sperren einfach nur viel länger?
Dann ist damit ja gar nichts gewonnen!

Oder kann man das noch anders handeln?
Kann ich mit fail2ban evtl. progressiv sperren, also nach 3 falschen Versuchen 10 Minuten, nach weiteren 3 Fehlversuchen 1 h usw?

Danke für evtl. Klärungen

franc
 
Darum ist die SSH banzeit bei mir mind. 1440 ^^

Die meisten bruteforce Bots benutzen eine gestaffelte cool-down/retry periode um wiederholte bans zu umgehen. Sie behalten sich also nach wivielen versuchen und für wie lange gebannt wird und wissen so spät. ab dem 3. versuch die "lücke".

Das ganze wirst du auch nie los es seidenn du schicks fehlgeschlagene versuche permanent ins nirvana.
 
Last edited by a moderator:
Gut, dann mach ich da jetzt auch 1440 :)
Außerdem hab ich grad denyhosts installiert!

EDIT 2015-01-11: weiß jemand vielleicht, ob man bei denyhosts auch den VNC Zugang weißlisten kann von einer IP? Oder ob das überhaupt geblockt würde? Ich hab Angst mich auszusperren, was zwar unwahrscheinlich ist, aber dass ich dann über den Kontrollzugang (per VNC) von Host Europe auf jeden Fall noch drauf komme.

Außerdem könnte folgendes Szenario stattfinden: eine dynamische IP, die im gleichen Pool ist wie meine, wird von einem Bott genutzt um meinen Server anzugreifen. Sie wird aber schnell von denyhosts dort geblockt für eine Woche. Ich bekomme jetzt zufällig die selbe IP zugewiesen und komme nicht mehr rein, weiß aber nicht warum. Sehr unwahrscheinlich zwar.
Kann aber dann ja immer noch den Router neu starten und eine andere IP kriegen, also keine wirkliche Bedrohung.

EDIT2 2015-01-12: fällt mir gerade auf, dass 1440 ja nicht einen Tag, sondern nur 24 Minuten ist, das wird ja in Sekunden eingestellt. Also habe ich bantime jetzt auf 86400 gestellt, also einen Tag. findtime auch.
 
Last edited by a moderator:
Das hab ich schon immer gemacht. 2222 statt 22 vielleicht sollte ich mal ein anderen nehmen? So ruhig ist das nämlich nicht.
 
Ich hab mal ein bisschen mit Portknocking gespielt. Das ist zwar kein großer Gewinn, schützt einen aber vor viel Spam im Log. Wenn man unter Windows arbeitet, sollte man sich unbedingt diesen Client holen oder gleich nach einem SSH-Client suchen, der Port-Knocking unterstützt.
 
endlich hab ich es hingekriegt, mein fail2ban auf meinem Ubuntu 12.04 root Server richtig einzustellen, es hatte mich immer genervt im Logwatch Protokoll massenhaft Einträge zu lesen von abgelehnten Loginversuchen (ich lasse nur public key auth., die probieren es aber mit Keyboard/password auth.).

Warum so umständlich? Es bringt dir ja nichts mehr an Sicherheit. Konfiguriere einfach logwatch so, dass er die entsprechenden Zeilen nicht mehr anzeigt und du hast ebenfalls Ruhe.
Da ich für einige User noch nicht auf Username/Password verzichten kann, setze ich fail2ban noch ein. Und da kann ich mittlerweile beobachten, dass nur ganz selten mal nach der Sperrung durch fail2ban von der IP erneut Versuche kommen. Die kommen dann nämlich von einer anderen IP aus der Range.
 
Last edited by a moderator:
Ich habe in meiner jail.conf folgende Werte für ssh eingestellt, das reicht dann auch erst einmal.

bantime = 604800 ; 1 week
findtime = 86400 ; 1 day
Laut deinem Log-Auszug liegen ca 90min zwischen jedem Eintrag

P.S.
Jetzt habe ich auch noch eine Frage dazu, gibt es fail2ban mittlerweile auch für IPv6?
 
Last edited by a moderator:
Port verlegen ohne portscan detector bring nichts.
http://cipherdyne.org/psad/ ist wohl das gängigste tool.

Hm, da muss ich persönlich widersprechen.
Die meisten Zombies suchen nur den Standardport ab und ein paar beliebte Abwandlungen.
"Richtige" Portscans kosten vergleichsweise viel Zeit und senken die Effizienz enorm.
Man hat also zumindest deutlich weniger Spam im Log.

Ich persönlich verlege meinen SSH Port immer in den Bereich 30000+ und setze auf keys, statt auf Passwörter. Fail2ban habe ich allerdings trotzdem noch installiert, einfach um die Logs übersichtlicher zu halten, wg. der anderen Dienste, die gerne abgeklopft werden.
SSH Loginversuche kann ich eigentlich an einer Hand abzählen.
 
Last edited by a moderator:
...verlege meinen SSH Port immer in den Bereich 30000+ ...
Also ist 2222 durchaus noch ein gängiger Ausweichsport?
Ist ja schon sehr naheliegend, wenn man die Zombies schon darauf programmiert, Ausweichsport mit abzutasten, den 2222 mit zu testen.
Etwa noch: 222 (aber zu niedrig), 2200, 2211, 2233 etc.
Ist aber bekannt was tatsächlich noch so getestet von den Bots?

Ich hatte die Erfahrung gemacht, dass nach Umstellung von 22 auf 2222 die Einbruchsversuche ganz erheblich viel weniger wurden. Aber das ist schon eine Weile her.
 
Statt fail2ban zu verwenden, kann man auch einfach die erlaubten SYNs auf 22 TCP per Source limitieren. Ist zwar eine simplere Lösung, aber ist im Normalfall völlig außreichend, solange man nicht gerade 4-stellige Rootpasswörter verwendet (am besten natürlich sowieso nur Keys). Das generiert dann keine Logs, muss nicht ständig Logs lesen, kann kaum falsch konfiguriert werden, verbraucht sogut wie keinen RAM, usw. Hier habe ich eine Anleitung für eine etwas aufwändigere Lösung gefunden, die aber recht interessant aussieht: http://www.thatsgeeky.com/2011/02/escalating-consequences-with-iptables/ Unten die Regeln, die ich normalweise verwende. Bei wichtigeren Servern eben gar kein SSH oder zumindest kein SSH über eine öffentliche IP, sondern auf ein VPN limitieren o.Ä.

Code:
### SSH protection ###
/sbin/iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -m recent --set
/sbin/iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 3 -j DROP
 
Es sollte auch jedem klar sein, das jeder Ban im Arbeitsspeicher bleibt, solange bis der wieder entfernt wird. (glaube ich zumindest)
 
Eine Woche Bantime ist aber heftig. Gerade in Zeiten, in denen man davon ausgehen muss, dass eine IPv4 nicht gleich einem User ist.

Das schlimme ist, ich habe IPv4 und IPv6 zu hause, Ipv6 wird bei meinem Mint bevorzugt. Mir fällt aber noch etwas ein. Ich hatte mal ein Script was die Iptaple white gelistet für dyndns? das hatte ich alle 5 min als
cron laufen

Mit anderen Worten alles blacklisten auser Deine:eek:
 
Back
Top