Zastanawiasz się jak zabezpieczyć swój serwer VPS, który korzysta z systemu Linux? Pokażę Ci 5 szybkich kroków, które z pewnością podniosą bezpieczeństwo Twojego serwera!
Poprzednio pisałem o hostingach współdzielonych i serwerach VPS (TUTAJ). W rezultacie przeanalizowałem i scharakteryzowałem usługi, co mam nadzieję pozwoliło Ci zrozumieć, która opcja bardziej pasuje do Twoich potrzeb. Osobiście jestem ogromnym zwolennikiem VPS-ów, ponieważ wykorzystuje je do konfiguracji własnych aplikacji i projektów, przez co kilka z nich miałem już okazję zabezpieczać. Zobacz jak to robię!
Po co zabezpieczać?
Możesz się zastanawiać po co dodatkowo zabezpieczać serwer, przecież dostęp jest chroniony hasłem, to nie wystarczy? Niestety nie… Podczas gdy myślisz, że Twój serwer jest bezpieczny, w sieci działa wiele komputerów przeczesujących zakamarki Internetu w poszukiwaniu słabo zabezpieczonych maszyn.
Wystarczy kilka minut działania serwera, a plik z informacjami o nieudanych próbach logowania zaczyna puchnąć od logów, choć nikomu nie podawałem adresu IP! Z pewnością można szacować, że co kilkanaście sekund ktoś próbuje się włamać i jest to tylko kwestia czasu, aż komuś uda się dostać do maszyny.
Jak to sprawdzić?
Informację zbliżoną do powyższego zrzutu, uzyskasz następującym poleceniem (dla systemu CentOS):
grep "Failed password" /var/log/secure
Wyszukuje ono słów „Failed password” w pliku secure. Pamiętaj, że nazwa pliku z logiem może różnić się w zależności od dystrybucji Linux, dlatego jeśli nie posiadasz pliku o tej nazwie, poszukaj auth.log.
Ilość prób logowania per IP
Załóżmy, że chcesz sprawdzić ile prób logowania zostało wykonanych z jednego adresu IP. Zrobisz to poniższym poleceniem.
grep "Failed password" /var/log/secure | awk '{print $11}' | uniq -c | sort -nr
Jak zabezpieczać?
1. Zmiana portu SSH
Chociaż jest to bardzo prosta i szybka zmiana jakiej można dokonać, to jest bardzo skuteczna! Domyślnym portem jaki obsługuje połączenie SSH jest 22, przez co wiele osób i automatów „na ślepo” próbuje wykonywać połączeń. Zmiana konfiguracji może znacznie ograniczyć ilość „przypadkowych” prób logowania i w związku z tym znacznie podnieść bezpieczeństwo serwera.
1.1. Ustawienie nowego portu SSH
Zmodyfikuj plik sshd_config, dopisując do niego linię z wybranym portem, np.: Port 96.
vi /etc/ssh/sshd_config
1.2. Dodanie portu do SELinux
W moim przypadku dodaję port 96. Pamiętaj, że jeżeli pominiesz ten krok i zrestartujesz usługę sshd, po wylogowaniu z serwera nie będziesz mógł się do niego dostać ponownie, co z pewnością będzie dużym problemem. Serwer nie będzie umiał zestawić połączenia, ponieważ nowy port będzie zablokowany, a 22 został wyłączony z obsługi SSH.
semanage port -a -t ssh_port_t -p tcp 96
1.3. Sprawdzenie czy serwer nasłuchuje na nowym porcie
Po dodaniu portu do SELinux (Security-Enhanced Linux), możesz spokojnie zrestartować usługę sshd i sprawdzić czy serwer nasłuchuje na nowym porcie.
systemctl restart sshd
netstat -tunl | grep 96
Po całej operacji możesz wylogować się z serwera i spróbować zalogować ponownie na standardowy port 22. W efekcie powinieneś uzyskać informację o odrzuconym połączeniu, a taki komunikat zobaczy każdy, kto będzie próbował dostać się do Twojego VPS’a z tym portem.
1.4. Przykład odrzucenia połączenia na porcie 22
Polecenie do logowania ssh, od tego momentu powinno zawierać informację o porcie na jaki się łączysz – tak jak zaprezentowałem w poniższym poleceniu.
ssh <USER>@<HOST> -p 96
2. Zmiana hasła
Nie wszystkie firmy dające dostęp do serwera VPS ustawiają silne hasła do konta roota lub użytkownika sudo, dlatego dobrą praktyką jest ustawienie własnego, silnego hasła, które trzymane jest, np. w menadżerze haseł. Jak to zrobić?
2.1. Polecenie passwd
passwd
Jak widać na powyższym zrzucie ekranu, proces jest szybki, łatwy i bezbolesny. Osobiście polecam cykliczną zmianę hasła, ponieważ jest to dodatkowy poziom ochrony. 🙂
3. Przypisanie użytkownika do sudo
Spotkałeś się już z określeniem sudo? Jest to akronim od Super User Do, czyli programu, który umożliwia wykonywanie poleceń i działań z uprawnieniami innego użytkownika – najczęściej jest to root. Użytkownik root powinien być bardzo dobrze zabezpieczony i jak najrzadziej wykorzystywany, ponieważ w nieodpowiednich rękach może doprowadzić do serwerowej katastrofy.
3.1. Dodanie użytkownika i nadanie hasła
Jeżeli uprawnienia mają być dodane dla nowego użytkownika, to warto go najpierw utworzyć i nadać mu silne hasło! Zrobisz to następującymi poleceniami (w X podaj nazwę użytkownika).
adduser X
passwd X
3.2. Przypisanie użytkownika do grupy wheel
Wszyscy użytkownicy przypisani do grupy wheel posiadają uprawnienia sudo. Parametry -aG oznaczają przypisanie użytkownika X do podanej grupy.
usermod -aG wheel X
3.3. Testowanie użytkownika i uprawnień
Najlepszym testem jest zalogowanie się na nowego użytkownika i przetestowanie jego „mocy”. Zrobisz to poleceniem poniżej.
su - X
Jak sprawdzić czy użytkownik ma uprawnienia roota? Przede wszystkim zajrzeć do jego katalogu! Na poniższym zrzucie ekranu zauważ, że bez komendy sudo, użytkownik nie posiadał dostępu do zawartości folderu, a dodanie jej otworzyło przed nim nowe możliwości. 😉
4. Zablokowanie logowania root’a
Tak jak już wspomniałem wcześniej, konto roota bez wątpienia powinno być dobrze chronione, a najlepiej zablokowane przed logowaniem bezpośrednio z SSH. Jak to zrobić?
4.1. Edycja pliku sshd_config -> PermitRootLogin
Otwórz plik /etc/ssh/sshd_config w programie do edycji, np. vi lub nano i znajdź tam parametr PermitRootLogin. Jeśli jest aktualnie ustawiony na wartość yes, zamień ją na no – tak jak poniżej.
vi /etc/ssh/sshd_config
4.2. Edycja pliku sshd_config -> AllowUsers
UWAGA! Ze względu na fakt, że zablokowałeś dostęp SSH dla użytkownika root, należy określić, którzy użytkownicy będą mogli się zalogować. Służy do tego parametr AllowUsers. Zobacz. 🙂
4.3. Restart usługi SSH
Na koniec zapisz plik i zrestartuj usługę poniższym poleceniem.
sudo service sshd restart
Od tego momentu na serwer zalogują się tylko osoby, które uwzględniłeś w kroku 4.2, a root nie będzie miał opcji logowania.
5. Zablokowanie pustych haseł
Kolejnym bardzo szybkim zabezpieczeniem jest zablokowanie możliwości wpisywania pustych haseł. Gdzie tego szukać? Oczywiście w pliku sshd_config. 🙂
5.1. Edycja pliku sshd_config -> PermitEmptyPasswords
Jedyne co musisz zrobić to otworzyć plik sshd_config w trybie edycji, ustawić wartość pola PermitEmptyPasswords na no i usunąć znak #. Zobacz jak to wygląda u mnie.
Podsumowanie
Podsumowując, w moim przypadku niepożądany ruch zmniejszyłem o 100%, przez 24h nie było nawet jednej nieudanej próby. Zastosowanie powyższych kroków nie powinno zająć więcej niż 30 min, a zmiany wprowadza się bardzo szybko i raczej bezproblemowo.
Choć pokazałem Ci 5 sposobów, które znacznie podwyższają poziom bezpieczeństwa serwera, to nie koniec. Dlatego za jakiś czas przygotuję kolejne kroki, które warto wziąć pod uwagę zabezpieczając serwer. 🙂
Daj lajka i czytaj dalej 😉
Jeżeli chcesz być na bieżąco z artykułami i jesteś ciekawy co będzie dalej, daj lajka na naszym profilu FB, a przede wszystkim zapisz się do newslettera! Spodobał Ci się artykuł? Może zaciekawią Cię inne wpisy na naszym blogu.
Dzięki za Twój czas, widzimy się niebawem! 🙂