Każdy kto posiada odpalony deamon SSH oraz publiczny IP z pewnością zauważył w logach mnóstwo prób dostania się na ‘konta systemowe’. Owe próby to nic innego jak skany wykonywane przez boty w celu znalezienia/utworzenia maszyn zombie. Przykład:
Jan 4 22:17:38 [sshd] Invalid user staff from 213.35.194.206
Jan 4 22:17:44 [sshd] Invalid user sales from 213.35.194.206
Jan 4 22:17:51 [sshd] Invalid user recruit from 213.35.194.206
Jan 4 22:17:58 [sshd] Invalid user alias from 213.35.194.206
Jan 4 22:18:04 [sshd] Invalid user office from 213.35.194.206
Jan 4 22:18:08 [sshd] Invalid user samba from 213.35.194.206
Jan 4 22:18:17 [sshd] Invalid user tomcat from 213.35.194.206
Jan 4 22:18:25 [sshd] Invalid user webadmin from 213.35.194.206
No dobra, jak sobie z tym poradzić? Otóż istnieje malutki deamon, który wychwytuje takie ‘zapytania’ a następnie skutecznie odcina delikwenta od naszego SSHD czy nawet całej maszyny. Mowa oczywiście o tytułowym DenyHosts.
Sposób działa jest trywialny, DenyHosts analizuje logi SSHD i gdy zauważy “break-in attempt” to odcina dostęp do naszego systemu przy pomocy pliku /etc/hosts.deny. Niezbyt eleganckie ale za to dużo prostsze od zaawansowanych aplikacji typu Snort. Instalacja to dosłownie 3 minuty:
# emerge denyhosts
# vim /etc/denyhosts.conf
# rc-update add denyhosts default
# /etc/init.d/denyhosts start
Sam konfig jest bardzo czytelny i nikt nie powinien mieć problemów z ustawieniem tych paru zmiennych. Klik, klik, 3 minuty i voila:
Jan 4 22:18:38 [sshd] refused connect from 213-35-194-206-dsl.plus.estpak.ee (213.35.194.206)
Sam programik mimo małych gabarytów ma całkiem niezłe możliwości, zajrzyjcie na oficjalną strone projektu po więcej informacji.
Ja korzystam z knockd. Domyślnie SSH jest zablokowane, natomiast po otrzymaniu określonej sekwencji pakietów na określonych portach, otwierany jest port SSH dla danego IP. Wydaje mi się lepsze, bo po pierwsze, jest to dodatkowy poziom zabezpieczenia. Po drugie, jeśli ktoś zna IP z którego chcesz się dostać na maszynę z uruchomionym denyhosts, to stosunkowo prosto może Ci to uniemożliwić.
Ja sobie z takimi próbami wejścia poradziłem w inny sposób, nie korzystając z żadnych mniej lub bardziej zaawansowanych rozwiązań. Po prostu zmieniłem port na którym nasłuchuje sshd na bardzo wysoki i egzotyczny. Sposób dobry jak się używa SSH tylko do administracji jakąś maszyną a nie do udostępniania shella.
rozie: Co do Denyhosts to w FAQ napisali, że można zabezpieczyć numer IP przed zablokowaniem.
A jeśli ktoś nie chce dodatkowego demona, to można pobawić się regułkami iptables np.
iptables -A INPUT -p tcp –dport 22 -m recent –rcheck –seconds 60 –hitcount 4 –name SSH -j LOG –log-prefix “S
SH_Attack: ”
iptables -A INPUT -p tcp –dport 22 -m recent –update –seconds 60 –hitcount 4 –name SSH -j DROP
iptables -A INPUT -p tcp –dport 22 -m state –state NEW -m recent –set –name SSH -j ACCEPT
W ten sposób blokowane są adresy hostów, które przekroczą liczbę 4 prób połączeń w ciągu jednej sekundy.
Jeżeli piszecie o komputerach domowych lub małych serwerach ssh/ftp/www, to jest to przerost formy nad treścią. Zacząłem radzić sobie z tym w taki sposób:
12:02:01 root@pinkfloyd:~ cat /etc/hosts.deny
#
# hosts.deny
#
ALL : ALL
12:02:06 root@pinkfloyd:~ cat /etc/hosts.allow
#
# hosts.allow
#
ALL : 192.168.
ALL : 212.33.
ALL : .pl
ALL : .sk
ALL : elpos.net
Jeżeli chodzi o komputer domowy lub serwer z małą liczbą użytkowników, jest to rozwiązanie idealne. .sk zostawiłem sobie jako furtkę (mam na Słowacji 2 serwery), gdybym kiedyś musiał pracować na maszynie z innej puli adresow i chciał się podłączyć do domu.
Na serwerach używam regułek iptables. Po 3 nieudanych próbach zalogowania adres IP jest blokowany na 15 minut (ataki nie trwają z reguły dłuzej niż 5).
U mnie pracuje denyhost, autentykacja za pomoca kluczy i praca na IPv6.
Nie żebym się zbytnio czepiał ale przedstawiona tutaj metoda (użycie logów do wykrycia atakujących) nie jest do końca bezpieczna:
http://www.ossec.net/en/attacking-loganalysis.html
Oops! Wordpress nie akceptuje UTF-8 :|
Mam problem z Errno 17
[code]
wigwam DenyHosts-2.6 # /usr/bin/denyhosts -c /etc/denyhosts.conf
DenyHosts could not obtain lock (pid: 20395)
[Errno 17] File exists: ‘/var/run/denyhosts.pid’
[/code]
może ktoś pomóc??
Just delete /var/run/denyhosts.pid and then run denyhosts again.