W dzisiejszych czasach postawienie serwera na hostingu to kwestia kilku minut i kilku kliknięć myszką. Ale od razu po uruchomieniu znajduje się we wrogim środowisku, bo jest otwarty na cały Internet jak niewinna dziewczyna w rockowej dyskotece. Skanery szybko go znajdą i wykryją tysiące automatycznie skryptowanych botów, które przeszukują sieć w poszukiwaniu luk w zabezpieczeniach i błędnych konfiguracji. Jest kilka rzeczy, które powinieneś zrobić zaraz po uruchomieniu, aby zapewnić podstawową ochronę.
Pierwszym krokiem jest utworzenie dla siebie użytkownika innego niż root. Rzecz w tym, że użytkownik root absolutne uprawnienia w systemie, a jeśli zezwolisz mu na zdalną administrację, to wykonasz połowę pracy za hakera, pozostawiając mu prawidłową nazwę użytkownika.
Dlatego musisz utworzyć innego użytkownika i wyłączyć zdalną administrację przez SSH dla roota.
Nowy użytkownik jest uruchamiany przez polecenie useradd:
useradd [options] <username>
Następnie dodaje się do niego hasło za pomocą polecenia passwd:
passwd <username>
Na koniec tego użytkownika należy dodać do grupy, która ma prawo do wykonywania poleceń z podwyższonym poziomem uprawnień sudo. W zależności od dystrybucji Linuksa mogą to być różne grupy. Na przykład w CentOS i Red Hat użytkownik jest dodawany do grupy wheel:
usermod -aG wheel <username>
W Ubuntu jest dodawany do grupy sudo:
usermod -aG sudo <username>
Klucze zamiast haseł SSH
Brutalna siła lub wycieki haseł to standardowe wektory ataków, dlatego najlepiej jest wyłączyć uwierzytelnianie hasłem w SSH (Secure Shell) i zamiast tego używać uwierzytelniania za pomocą klucza.
Istnieją różne programy do implementacji protokołu SSH, takie jak lsz и niedźwiedź, ale najpopularniejszym jest OpenSSH. Instalowanie klienta OpenSSH na Ubuntu:
sudo apt install openssh-client
Instalacja serwera:
sudo apt install openssh-server
Uruchamianie demona SSH (sshd) na serwerze Ubuntu:
sudo systemctl start sshd
Automatycznie uruchamiaj demona przy każdym uruchomieniu:
sudo systemctl enable sshd
Należy zauważyć, że część serwerowa OpenSSH obejmuje część kliencką. To znaczy przez openssh-server możesz łączyć się z innymi serwerami. Co więcej, z komputera klienta możesz uruchomić tunel SSH ze zdalnego serwera do hosta innej firmy, a następnie host innej firmy uzna zdalny serwer za źródło żądań. Bardzo przydatna funkcja do maskowania systemu. Zobacz artykuł, aby uzyskać szczegółowe informacje „Praktyczne wskazówki, przykłady i tunele SSH”.
Na komputerze klienckim zwykle nie ma sensu instalować pełnoprawnego serwera, aby uniemożliwić zdalne połączenie z komputerem (ze względów bezpieczeństwa).
Tak więc dla nowego użytkownika musisz najpierw wygenerować klucze SSH na komputerze, z którego będziesz mieć dostęp do serwera:
ssh-keygen -t rsa
Klucz publiczny jest przechowywany w pliku .pub i wygląda jak ciąg losowych znaków zaczynający się od ssh-rsa.
Następnie z poziomu roota utwórz katalog SSH na serwerze w katalogu domowym użytkownika i dodaj klucz publiczny SSH do pliku authorized_keys, używając edytora tekstu, takiego jak Vim:
Po stronie klienta musisz określić lokalizację tajnego klucza do uwierzytelnienia:
ssh-add DIR_PATH/keylocation
Teraz możesz zalogować się na serwer pod nazwą użytkownika za pomocą tego klucza:
ssh [username]@hostname
Po autoryzacji możesz użyć polecenia scp, aby skopiować pliki, narzędzie sshfs do zdalnego montowania systemu plików lub katalogów.
Wskazane jest wykonanie kilku kopii zapasowych klucza prywatnego, ponieważ jeśli wyłączysz uwierzytelnianie hasłem i je zgubisz, to w ogóle nie będziesz miał możliwości zalogowania się na własny serwer.
Jak wspomniano powyżej, w SSH musisz wyłączyć uwierzytelnianie dla roota (to jest powód, dla którego założyliśmy nowego użytkownika).
Na CentOS/Red Hat znajdujemy linię PermitRootLogin yes w pliku konfiguracyjnym /etc/ssh/sshd_config i zmień to:
PermitRootLogin no
W Ubuntu dodaj linię PermitRootLogin no do pliku konfiguracyjnego 10-my-sshd-settings.conf:
Po sprawdzeniu, czy nowy użytkownik uwierzytelnia się za pomocą swojego klucza, możesz wyłączyć uwierzytelnianie za pomocą hasła, aby wyeliminować ryzyko wycieku hasła lub brutalnej siły. Teraz, aby uzyskać dostęp do serwera, osoba atakująca będzie musiała uzyskać klucz prywatny.
Na CentOS/Red Hat znajdujemy linię PasswordAuthentication yes w pliku konfiguracyjnym /etc/ssh/sshd_config i zmień to tak:
PasswordAuthentication no
W Ubuntu dodaj linię PasswordAuthentication no do pliku 10-my-sshd-settings.conf:
Aby uzyskać instrukcje dotyczące włączania uwierzytelniania dwuskładnikowego przez SSH, zobacz tutaj.
zapora ogniowa
Zapora zapewnia, że tylko ruch na portach, na które bezpośrednio zezwolisz, trafi do serwera. Chroni to przed wykorzystaniem portów, które zostały przypadkowo włączone z innymi usługami, co znacznie zmniejsza powierzchnię ataku.
Przed zainstalowaniem zapory musisz upewnić się, że SSH znajduje się na liście wykluczeń i nie będzie blokowany. W przeciwnym razie po uruchomieniu zapory nie będziemy mogli połączyć się z serwerem.
Dystrybucja Ubuntu jest dostarczana z nieskomplikowaną zaporą ogniową (ufw) oraz z CentOS/Red Hat - firewalld.
Platforma Fail2Ban analizuje logi na serwerze i zlicza próby dostępu z każdego adresu IP. Ustawienia określają zasady, ile prób dostępu jest dozwolonych w określonym przedziale czasu - po czym ten adres IP jest blokowany na określony czas. Na przykład załóżmy, że w ciągu 5 godzin nastąpi 2 nieudanych prób uwierzytelnienia SSH, a następnie zablokuj podany adres IP na 12 godzin.
Program posiada dwa pliki konfiguracyjne: /etc/fail2ban/fail2ban.conf и /etc/fail2ban/jail.conf. Ograniczenia dotyczące banów są określone w drugim pliku.
Więzienie dla SSH jest domyślnie włączone z domyślnymi ustawieniami (5 prób, przerwa 10 minut, blokada na 10 minut).
Oprócz SSH, Fail2Ban może chronić inne usługi na serwerze WWW nginx lub Apache.
Automatyczne aktualizacje zabezpieczeń
Jak wiesz, we wszystkich programach stale znajdują się nowe luki. Po opublikowaniu informacji exploity są dodawane do popularnych pakietów exploitów, które są masowo wykorzystywane przez hakerów i nastolatków podczas skanowania wszystkich serwerów z rzędu. Dlatego bardzo ważne jest, aby instalować aktualizacje zabezpieczeń, gdy tylko się pojawią.
Na serwerze Ubuntu automatyczne aktualizacje zabezpieczeń są domyślnie włączone, więc nie są wymagane żadne dodatkowe działania.
Na CentOS/Red Hat musisz zainstalować aplikację dnf-automatyczny i włącz minutnik:
SSH został opracowany w 1995 roku, aby zastąpić telnet (port 23) i ftp (port 21), więc autor programu, Tatu Iltonen domyślnie wybrany port 22i został zatwierdzony przez IANA.
Oczywiście wszyscy atakujący są świadomi, na którym porcie działa SSH - i skanują go wraz z resztą standardowych portów, aby znaleźć wersję oprogramowania, sprawdzić standardowe hasła roota i tak dalej.
Zmiana standardowych portów – zaciemnianie – kilkukrotnie zmniejsza ilość ruchu śmieciowego, rozmiar logów i obciążenie serwera, a także zmniejsza powierzchnię ataku. Choć niektóre krytykować tę metodę „ochrony przez zaciemnienie” (bezpieczeństwo przez zaciemnienie). Powodem jest to, że ta technika jest przeciwna podstawom ochrona architektury. Dlatego na przykład amerykański Narodowy Instytut Standardów i Technologii w „Przewodnik po zabezpieczeniach serwera” wskazuje na potrzebę otwartej architektury serwerowej: „Bezpieczeństwo systemu nie powinno polegać na utajnieniu implementacji jego komponentów” – czytamy w dokumencie.
Teoretycznie zmiana domyślnych portów jest sprzeczna z praktyką otwartej architektury. Jednak w praktyce ilość szkodliwego ruchu jest faktycznie zmniejszana, więc jest to prosty i skuteczny środek.
Numer portu można skonfigurować, zmieniając dyrektywę Port 22 w pliku konfiguracyjnym / etc / ssh / sshd_config. Wskazuje na to również parametr -p <port> в sshd. Klient i programy SSH Sftp również wspierać opcję -p <port>.
Parametr -p <port> można użyć do określenia numeru portu podczas łączenia za pomocą polecenia ssh w Linuksie. W Sftp и scp używany jest parametr -P <port> (wielkie P). Instrukcja wiersza poleceń zastępuje wszelkie wartości w plikach konfiguracyjnych.
Jeśli istnieje wiele serwerów, prawie wszystkie te działania mające na celu ochronę serwera Linux można zautomatyzować w skrypcie. Ale jeśli jest tylko jeden serwer, lepiej ręcznie kontrolować proces.
O prawach reklamy
Zamów i zacznij od razu! Stworzenie VDS dowolnej konfiguracji iz dowolnym systemem operacyjnym w ciągu minuty. Maksymalna konfiguracja pozwoli Ci w pełni wykorzystać możliwości - 128 rdzeni procesora, 512 GB RAM, 4000 GB NVMe. Epickie 🙂