Ochrona serwerów Linux. Co zrobić najpierw

Ochrona serwerów Linux. Co zrobić najpierw
Habib M'henni/Wikimedia Commons, CC BY-SA

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

Zawartość

Użytkownik inny niż root

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.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ3GIJzTX7J6zsCrywcjAM/7Kq3O9ZIvDw2OFOSXAFVqilSFNkHlefm1iMtPeqsIBp2t9cbGUf55xNDULz/bD/4BCV43yZ5lh0cUYuXALg9NI29ui7PEGReXjSpNwUD6ceN/78YOK41KAcecq+SS0bJ4b4amKZIJG3JWm49NWvoo0hdM71sblF956IXY3cRLcTjPlQ84mChKL1X7+D645c7O4Z1N3KtL7l5nVKSG81ejkeZsGFzJFNqvr5DuHdDL5FAudW23me3BDmrM9ifUmt1a00mWci/1qUlaVFft085yvVq7KZbF2OP2NQACUkwfwh+iSTP username@hostname

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:

mkdir -p /home/user_name/.ssh && touch /home/user_name/.ssh/authorized_keys

vim /home/user_name/.ssh/authorized_keys

Na koniec ustaw odpowiednie uprawnienia do pliku:

chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keys

i zmień własność na tego użytkownika:

chown -R username:username /home/username/.ssh

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:

sudo echo "PermitRootLogin no" >> /etc/ssh/sshd_config.d/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:

sudo echo "PasswordAuthentication no" >> /etc/ssh/sshd_config.d/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.

Zezwalanie na SSH w zaporze na Ubuntu:

sudo ufw allow ssh

W CentOS/Red Hat użyj polecenia firewall-cmd:

sudo firewall-cmd --zone=public --add-service=ssh --permanent

Po tej procedurze możesz uruchomić zaporę.

W CentOS/Red Hat uruchom usługę systemd dla zapory ogniowej:

sudo systemctl start firewalld
sudo systemctl enable firewalld

W Ubuntu używamy następującego polecenia:

sudo ufw enable

Fail2Ban

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.

Instalowanie Fail2Ban na CentOS i Red Hat:

sudo yum install fail2ban

Instalacja na Ubuntu i Debianie:

sudo apt install fail2ban

Uruchomić:

systemctl start fail2ban
systemctl enable fail2ban

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

[DOMYŚLNE] ignorecommand=bantime=10m findtime=10m maxretry=5

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:

sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timer

Kontrola timera:

sudo systemctl status dnf-automatic.timer

Zmiana domyślnych portów

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 🙂

Ochrona serwerów Linux. Co zrobić najpierw

Źródło: www.habr.com