Strona główna DevOps Jak zabezpieczyć serwer VPS (Linux)?

Jak zabezpieczyć serwer VPS (Linux)?

przez Mateusz Michalski

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.

Nieudane próby logowania przez osoby niepożądane

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
Plik konfiguracyjny sshd_config
Ustawienie portu SSH 96 w pliku konfiguracyjnym 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
Dodany port 96 do SELinux
Dodany port 96 do SELinux

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
Sprawdzenie czy serwer nasłuchuje na wybranym porcie
Sprawdzenie czy serwer nasłuchuje na wybranym porcie

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

Przykład próby połączenia po porcie 22
Przykład próby połączenia po 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
Zmiana hasła poleceniem passwd
Zmiana hasła poleceniem 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
Dodanie nowego użytkownika i nadanie hasła
Dodanie nowego użytkownika i nadanie hasła

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
Przypisanie użytkownika do grupy wheel
Przypisanie użytkownika do grupy wheel

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. 😉

Testowanie sudo
Testowanie sudo

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
Zablokowanie logowania dla użytkownika root
Zablokowanie logowania dla użytkownika root

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. 🙂

Umożliwienie logowania dla konkretnych użytkowników
Umożliwienie logowania dla konkretnych użytkowników

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.

Blokada pustych haseł
Blokada pustych haseł

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! 🙂

5 1 vote
Oceny
guest
3 komentarzy
Inline Feedbacks
View all comments

Strona wykorzystuje cookies i przetwarza dane zgodnie z zasadami opublikowanymi w Polityce Prywatności. Jeżeli nie wyrażasz zgody na przetwarzanie danych, zmień ustawienia swojej przeglądarki. Wybierając "OK", zgadzasz się na warunki przetwarzania. OK Więcej