Zainstalowaliśmy serwer, usługi i mamy świadomość, że jest gro osób wykorzystujących skrypty do masowego skanowania portów oraz łączenia się z usługami za pomocą nawet domyślnych haseł lub najpopularniejszych.
Skofigurowaliśmy więc Fail2Ban (nawet maile przychodzą z powiadomieniem) i bajera, można iść na piwko i wypoczywać. Po czym dostajemy wiadomość od znajomego:
– jakie było hasło do FTP? (w tym samym czasie maila z Fail2Ban z informacją o zablokowanym IP)
– już nie ważne, znalazłem i działa
ja w tym czasie: WTF, jak to działa? Hmm, trzeba przetestować.
Testy wyszły pozytywnie: mail o blokadzie przychodzi, blokada działa a PF nie blokuje… wyszło więc kolejny raz, że testy po zakończeniu konfiguracji powinny być dużo dokładniejsze!
Więc jak skonfigurować taki zestaw wraz z podstawową usługą jaką jest SSH?
Zaczyniemy od instalacji fail2ban:
pkg install py36-fail2ban
następnie wstępna konfiguracja dla pf
pass out quick all
tcp_services = "{ ssh, http, https }"
anchor f2b {
anchor sshd
}
block in all
block in quick from
pass in quick inet proto icmp all
pass in quick inet6 proto icmp6 all
pass in proto tcp from any to any port $tcp_services
pass out quick
Ten skrypt działa dla blokowania uwierzytelnienia SSH. Jednak strony powinny działać poprawnie przez http i https. Uwierzytelnienie na serwerze www jest też możliwe do włączenia.
Tworzymy plik z konfiguracją fail2ban, przykładowo:
ee /usr/local/etc/fail2ban/jail.d/jails.local
Jedynym ograniczeniem jest ścieżka oraz rozszerzenie .local, nazwa pliku może być dowolna.
W pliku dodajemy wartości, moje są mega restrykcyjne!
[DEFAULT]
bantime = 720h
findtime = 60m
banaction = pf
mta = sendmail
destemail = adres@mail
action = %(action_mw)s
maxretry = 2
[sshd]
enabled = true
maxretry = 2
Jak zrobić wysyłanie maili? Tutaj jest prosty tutorial: http://grzegorz.machocki.pl/2018/11/smtp-postfix-i-powiadomienia-dla-administratora-na-maila-w-freebsd/ po zablokowaniu portów przez pf – sendmail domyślnie już nie będzie działał.
Włączamy usługi w „/etc/rc.conf” dodając wpisy
fail2ban_enable="YES"
pf_enable="YES"
PF – radziłbym początkowo odpuścić lub dodać '#’ przed pf_…, jeśli coś się wysypie – wystarczy zresetować serwer i działa!
Po włączeniu lub restarcie pf – zawsze, ale to zawsze mnie wywala z ssh.
Włączamy fail2ban:
service fail2ban onestart lub service fail2ban start (jeśli dodaliśmy wpis do rc.conf)
Sprawdźmy czy naszego IP nie ma na liście zablokowanych!
fail2ban-client status | sed -n 's/,//g;s/.*Jail list://p’ | xargs -n1 fail2ban-client status
Jeśli jest to usunąć go można za pomocą polecenia:
fail2ban-client set <jail> unbanip <ip>
<jail> zastępujmemy – nazwą, przykładowo „sshd”
<ip> – wiadomo ip który chcemy wypuścić.
Teraz dopiero albo restartujemy PF (jeśli działa) lub startujemy (jeśli nie) i naprawdę zalecam aby nie było go w auto-starcie!
service pf onestart
lub service pf start
lub service pf restart
W zależności od naszego systemu.
No dobra, teraz powinno wszystko działać. Warto by sprawdzić. Macie może telefon? Lub inne urządzenie z kartą SIM? Bo przecież jak zablokujecie dostęp to nie na urządzenie ale na IP zewnętrzne! Jeśli do testów chcecie jechać na IP swoim – ok. Ale zapewnijcie sobie dostęp z innego adresu (chociażby innego serwera przez SSH).
Jeśli wszystko działa, można włączyć obie usługi w autostarcie i cieszyć się blokowaniem intruzów.
Jeśli łączenie przez SSH trwa długo. sprawdź plik /etc/resolv.conf i dodaj przykładowo DNS z google (8.8.8.8, 8.8.4.4).