Jak zapewnić opóźnienie logowania w ssh

11

Chciałem zapewnić opóźnienie logowania podczas logowania przez ssh. Próbowałem zrobić to samo, ale nie mogłem znaleźć pożądanego rezultatu.

Próbowałem kroki podane przez podany link.

http://hostingfu.com/article/ssh-dictionary-attack-prevention-with-iptables

iptables -N SSH_CHECK
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSH_CHECK
iptables -A SSH_CHECK -m recent --set --name SSH
iptables -A SSH_CHECK -m recent --update --seconds 60 --hitcount 4 --name SSH -j DROP

Nie mam zainstalowanego modułu pam na moim komputerze, więc nie mogę dokonywać żadnych modyfikacji związanych z plikami pam

Czy jakieś ciało pozwala mi zasugerować inny sposób na zrobienie tego samego?

Mam nagie jądro Linux działające na platformie osadzonej.

Baran
źródło
Dlaczego chcesz wprowadzić opóźnienie? Jaki jest twój ostateczny cel?
CVn
Chciałem zapobiec możliwości brutalnego ataku.
Ram
3
Samo wprowadzenie opóźnienia w nowych połączeniach nie zapobiegnie atakowi brutalnej siły. Musisz spojrzeć na narzędzia zaprojektowane w celu rozwiązania rzeczywistego problemu. Sugerowałbym zacząć od spojrzenia na fail2ban, który jest specjalnie zaprojektowany do reagowania na powtarzające się wpisy dziennika poprzez wykonywanie podanych poleceń, i często jest używany specjalnie w celu zapobiegania próbom uzyskania nieautoryzowanego dostępu przez brutalną siłę.
CVn
W porządku Michael, ale muszę to zrobić z istniejącą infrastrukturą, którą mam przy sobie. Jak mogę wprowadzić opóźnienie za każdym razem, gdy łączę się przez ssh.
Ram
2
Koleś, fail2banużywa dokładnej infrastruktury, którą już masz - ssh logi i reguły iptables.
Shadur

Odpowiedzi:

11

Metoda nr 1 - wyłącz logowanie loginów

Jeśli nie musisz zezwalać na logowanie się za pomocą hasła, po prostu ich wyłączenie da pożądany efekt. Po prostu dodaj tę linię do /etc/ssh/sshd_config:

PasswordAuthentication     no

Dodatkowo możesz ograniczyć użycie hasła do niektórych użytkowników korzystających z Matchoperatora w sshd_config:

Match User root,foo,bar
    PasswordAuthentication no
Match User user1,user2
    PasswordAuthentication yes

Metoda nr 2 - iptables

Możesz także użyć iptablesdo śledzenia nieudanych prób logowania i upuścić je po określonym progu. Jest to podobne do twojego przykładu z hostingfu, ale jest łatwiejsze do zrozumienia.

$ sudo iptables -I INPUT -p tcp --dport <YOUR PORT HERE> -i eth0 -m state --state NEW -m recent --set
$ sudo iptables -I INPUT -p tcp --dport <YOUR PORT HERE> -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

UWAGA: Pierwszy wiersz zasadniczo tworzy regułę, która dotyczy tylko pakietów używanych do nowych prób połączenia na porcie ssh. Druga linia mówi, że jeśli w ciągu 60 sekund dojdzie do więcej niż 4 prób z adresu IP, wówczas wszelki ruch z tego adresu IP powinien zostać zablokowany. To rozwiązanie nie ma znaczenia, czy próby na różnych kontach użytkowników.

Metoda nr 3 - użyj PAM

Zdaję sobie sprawę, że powiedziałeś, że nie masz dostępu do PAM, ale jeśli tak, możesz opóźnić nieudane próby logowania. Jeśli zamierzasz po prostu opóźnić awarie logowania ssh, możesz użyć modułu PAM pam_faildelay. Ten moduł PAM jest na ogół dołączony do domyślnego miksu.

W moim systemie Fedora 19 jest to część domyślnej instalacji.

Przykład

Poszukaj plików powiązanych z pam_faildelay.

$ locate pam|grep -i delay
/usr/lib/security/pam_faildelay.so
/usr/lib64/security/pam_faildelay.so
/usr/share/doc/pam-1.1.6/html/sag-pam_faildelay.html
/usr/share/doc/pam-1.1.6/txts/README.pam_faildelay
/usr/share/man/man8/pam_faildelay.8.gz

Sprawdź, jakie RPM zapewniają:

$ rpm -qf /usr/share/man/man8/pam_faildelay.8.gz
pam-1.1.6-12.fc19.x86_64
pam-1.1.6-12.fc19.i686

Stosowanie

Aby stworzyć opóźnienie awarii, po prostu dodaj taką linię do sshdpliku konfiguracyjnego pam. Znowu na Fedora / CentOS / systemów RHEL ten plik znajduje się tutaj: /etc/pam.d/sshd.

Aby utworzyć 10-sekundowe opóźnienie:

       auth  optional  pam_faildelay.so  delay=10000000

60 sekundowe opóźnienie:

       auth  optional  pam_faildelay.so  delay=60000000

Przykład

Z opóźnieniem 20 sekund przy użyciu powyższej metody zmieniłem sshdplik konfiguracyjny PAM w następujący sposób:

#%PAM-1.0
auth       required     pam_sepermit.so
auth       substack     password-auth
auth       include      postlogin
auth       optional     pam_faildelay.so  delay=20000000
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    optional     pam_keyinit.so force revoke
session    include      password-auth
session    include      postlogin

Teraz kiedy się zaloguję:

$ date
Tue Dec 17 09:16:30 EST 2013

$ ssh blah@localhost
blah@localhost's password: 
Permission denied, please try again.
blah@localhost's password: 

...Control + C....

$ date
Tue Dec 17 09:16:50 EST 2013

Bibliografia

slm
źródło
Dzięki @slm, ale znowu nie mogę zainstalować modułu pam, a moje uwierzytelnianie sshd nie pochodzi od pam. Czy chcesz zasugerować coś innego
Ram
@AmitSinghTomar - przepraszam, że poszerzyłem swoją odpowiedź. Próbowałem stworzyć kanoniczną odpowiedź na twoje pytanie, która obejmowałaby wszystkie metody, nie tylko twoje.
slm
Jeszcze raz dziękuję @slm za odpowiedź na szczegóły, jestem zainteresowany skorzystaniem z drugiej zaproponowanej przez ciebie metody. Spróbuję i dam znać wynik, Również opóźni mnie przy pierwszej próbie zalogowania przez ssh?
Ram
@AmitSinghTomar - nie, opóźnienie powinno nastąpić dopiero po 4 próbach. Kiedy --hitcount 4zostanie przekroczony, reguła będzie czarną dziurą w naruszającym adres IP przez 60 sekund.
slm
Jeden punkt, który chciałem od ciebie wiedzieć, aby Twoja trzecia metoda działała (PAM), czy wymaga uwierzytelnienia ssh przez pam?
Ram
3

Wyłącz hasła. Bez haseł, bez brutalnej siły.

Do logowania możesz używać kluczy ssh - które powinny być znacznie bezpieczniejsze i trudniejsze do zhakowania.

Nils
źródło
0

W czystej instalacji Ubuntu 16.04 z openssh-serverjuż opóźnieniem jest próba błędnego hasła dłuższa niż zero znaków. Opóźnienie wydaje się dłuższe niż 1 sekunda .

W przypadku próby wprowadzenia niepoprawnego hasła z zerowymi znakami nie ma opóźnienia, więc osoba atakująca natychmiast stwierdzi, że hasło nie jest pustym ciągiem, jeśli rzeczywiście nie jest pustym ciągiem. Ponieważ pusty ciąg znaków prawdopodobnie nie jest dozwolony jako hasło, wiedzą już o tym, więc nie będą próbować pustego ciągu.

H2ONaCl
źródło