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 Match
operatora 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ć iptables
do ś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 sshd
pliku 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 sshd
plik 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