Czy zamierzasz zezwolić na obsługę SSH na świecie? A może tylko członkom zespołu w określonych miejscach? Moja odpowiedź zależy trochę od powagi twojego wyzwania.
W obu przypadkach należy upewnić się, że serwer SSH nie zezwala na logowanie się do haseł dla użytkownika root.
- W / etc / ssh / sshd_config upewnij się, że nigdy nie zezwalasz na logowanie roota, chyba że za pomocą klucza SSH.
W moich systemach mam to ustawienie
PermitRootLogin without-password
ale zauważam, że mają nowsze Ubuntu
PermitRootLogin prohibit-password
Jeśli czytasz „man sshd_config”, myślę, że oznacza to, że to nowsze hasło „zabrania hasła” oznacza to samo i jest z pewnością bardziej oczywiste w znaczeniu. To NIE jest domyślne w niektórych systemach Linux, ale prawdopodobnie tak powinno być.
Teraz o twoim problemie. Czy serwer systemowy ma tylko niektórych użytkowników w określonych miejscach? Zrób to!
edytuj /etc/hosts.deny i wstaw
WSZYSTKO WSZYSTKO
Następnie edytuj /etc/hosts.allow i wypisz numery IP lub zakresy, które chcą zezwolić na korzystanie z SSH. Notacja jest nieco myląca, ponieważ jeśli chcesz zezwolić wszystkim systemom o numerach IP, takich jak 111.222.65.101 do 111.222.65.255, umieść taki wpis w pliku hosts.allow
ALL: 127.0.0.1
sshd: 111.222.65.
sshdfwd-X11: 111.222.65.
To brutalne, potężne rozwiązanie. Jeśli twoich użytkowników można wyliczyć według zakresu adresów IP, zrób to!
To rozwiązanie istniało przed utworzeniem tablic IP, jest (myślę) o wiele łatwiejsze w administrowaniu, ale nie jest tak dobre jak rozwiązanie tablic IP, ponieważ procedury tablic IP wykryją wrogów wcześniej niż programy sterowane przez hosts.allow i hosty .zaprzeczać. Ale to pewny ogień, prosty sposób na rozwiązanie wielu problemów, nie tylko z SSH.
Zwróć uwagę na problem, który sam stworzyłeś. Jeśli chcesz otworzyć serwer FTP, serwer WWW lub coś takiego, musisz zezwolić na wpisy na hostach.
Możesz osiągnąć ten sam podstawowy cel, bawiąc się iptables i firewallem. W pewnym sensie jest to preferowane rozwiązanie, ponieważ blokujesz wrogów na zewnętrznej granicy. Ubuntu ma „ufw” (nieskomplikowana zapora ogniowa), a „man ufw” ma wiele przykładów. Wolę mieć fajny GUI do przebrnięcia przez to, nie muszę tego robić cały czas. Może inni powiedzą nam, czy już istnieje.
- Inne posty sugerują używanie klucza publicznego SSH tylko dla użytkowników. To z pewnością pomoże, kosztem złożoności i frustracji dla użytkowników. W naszym laboratorium jest 15 komputerów. Użytkownicy chodzą między komputerami. Wymaganie uwierzytelnienia za pomocą klucza SSH spowodowałoby duży problem, ponieważ ludzie przechodzą z jednego komputera na drugi.
Kolejne źródło frustracji nastąpi, gdy niektórzy użytkownicy gromadzą różne klucze ssh dla różnych serwerów. Ponieważ mam klucze SSH dla około 12 różnych projektów, teraz ssh kończy się niepowodzeniem, ponieważ mam zbyt wiele kluczy publicznych (Wymaganie albo „ssh -o PubkeyAuthentication = false” lub utworzenie wpisu w pliku .ssh / config. Jest to PITA)
- Jeśli musisz pozostawić serwer otwarty dla SSH z dużego, szerokiego świata, zdecydowanie powinieneś użyć procedury odrzucania, aby zablokować lokalizacje, które często próbują się zalogować. Są na to 2 fajne programy, z których korzystamy, to denyhosts i fail2ban . Te programy mają ustawienia, które pozwalają banować przestępców na czas, który ci się podoba.
W naszych systemach Linux Centos zauważyłem, że porzucili pakiet denyhosts i oferują tylko fail2ban. Podobało mi się denyhosts, ponieważ utworzył listę kłopotliwych zakresów użytkowników / ip, a następnie w hosts.deny ta lista została odnotowana. Zamiast tego zainstalowaliśmy fail2ban i jest OK. Rozumiem, że wolisz blokować tych złych użytkowników na zewnętrznej krawędzi serwera, więc blokery oparte na tablicach ip, takie jak fail2ban, są w rzeczywistości lepsze. Denyhosts działa na poziomie drugorzędnym, po tym jak wrogowie miną iptables, są następnie odrzucani przez demona sshd.
W obu tych programach wyciąganie użytkowników z więzienia jest trochę uciążliwe, jeśli zapomną hasła i spróbują się zalogować kilka razy. Trudno jest odzyskać dostęp do konta, gdy popełniają błędy logowania. Można by się domyślić, że istnieje interfejs GUI typu „wskaż i kliknij”, w którym można po prostu wskazywać i wpuszczać ludzi z powrotem, ale nie jest tak. Muszę to robić tylko co kilka miesięcy i od czasu do czasu zapomnieć, więc napisałem dla siebie instrukcje na swojej stronie http://pj.freefaculty.org/blog/?p=301