
, CC BY-SA
Obecnie uruchomienie serwera na hostingu zajmuje tylko kilka minut i kilka kliknięć myszą. Jednak zaraz po uruchomieniu trafia do wrogiego środowiska, ponieważ jest otwarty na cały internet jak niewinna dziewczyna na rockowej dyskotece. Skanery szybko go wyczują, a tysiące automatycznych botów będą krążyć po sieci w poszukiwaniu podatności i niewłaściwych konfiguracji. Istnieje kilka rzeczy, które należy zrobić natychmiast po uruchomieniu, aby zapewnić podstawową ochronę.
Spis treści
Użytkownik bez uprawnień root
Na początek należy stworzyć użytkownika bez uprawnień root. Chodzi o to, że użytkownik root ma absolutne uprawnienia w systemie, a jeśli pozwolisz mu na zdalne administrację, to zrobisz połowę pracy za hakera, pozostawiając mu prawidłową nazwę użytkownika.
Dlatego należy utworzyć innego użytkownika, a dla root wyłączyć zdalne administrowanie przez SSH.
Nowego użytkownika tworzy się poleceniem useradd:
useradd [options] Następnie dodaje się dla niego hasło poleceniem passwd:
passwd Na koniec należy dodać tego użytkownika do grupy, która ma prawo wykonywać polecenia z podwyższonymi uprawnieniami sudo. W zależności od dystrybucji Linuksa, mogą to być różne grupy. Na przykład w CentOS i Red Hat użytkownika dodaje się do grupy wheel:
usermod -aG wheel W Ubuntu dodaje się go do grupy sudo:
usermod -aG sudo
Klucze zamiast haseł SSH
Brute force lub wyciek haseł to standardowy wektor ataku, więc lepiej wyłączyć uwierzytelnianie haseł w SSH (Secure Shell) i zamiast tego użyć autoryzacji za pomocą kluczy.
Istnieją różne programy do realizacji protokołu SSH, takie jak i , ale najbardziej popularnym jest OpenSSH. Instalacja klienta OpenSSH na Ubuntu:
sudo apt install openssh-clientInstalacja na serwerze:
sudo apt install openssh-serverUruchomienie demona SSH (sshd) na serwerze pod Ubuntu:
sudo systemctl start sshdAutomatyczne uruchamianie demona przy każdym rozruchu:
sudo systemctl enable sshd Należy zauważyć, że serwerowa część OpenSSH zawiera klienta. To znaczy, że przez openssh-server można łączyć się z innymi serwerami. Co więcej, z własnej maszyny klienckiej możesz uruchomić tunel SSH z serwera zdalnego na zewnętrzny host, a wtedy zewnętrzny host będzie traktował zdalny serwer jako źródło zapytań. To bardzo wygodna funkcja do maskowania swojego systemu. Więcej informacji znajdziesz w artykule .
Na maszynie klienckiej zazwyczaj nie ma sensu instalować pełnoprawnego serwera, aby nie dopuścić do możliwości zdalnego połączenia z komputerem (ze względów bezpieczeństwa).
A więc, dla nowego użytkownika najpierw należy wygenerować klucze SSH na komputerze, z którego będziesz się łączyć z serwerem:
ssh-keygen -t rsa Klucz publiczny znajduje się w pliku .pub i wygląda jak ciąg losowych znaków, który zaczyna się od ssh-rsa.
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ3GIJzTX7J6zsCrywcjAM/7Kq3O9ZIvDw2OFOSXAFVqilSFNkHlefm1iMtPeqsIBp2t9cbGUf55xNDULz/bD/4BCV43yZ5lh0cUYuXALg9NI29ui7PEGReXjSpNwUD6ceN/78YOK41KAcecq+SS0bJ4b4amKZIJG3JWm49NWvoo0hdM71sblF956IXY3cRLcTjPlQ84mChKL1X7+D645c7O4Z1N3KtL7l5nVKSG81ejkeZsGFzJFNqvr5DuHdDL5FAudW23me3BDmrM9ifUmt1a00mWci/1qUlaVFft085yvVq7KZbF2OP2NQACUkwfwh+iSTP username@hostname
Następnie, jako root, stwórz na serwerze katalog SSH w domowym katalogu 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_keysvim /home/user_name/.ssh/authorized_keysNa koniec, ustaw odpowiednie uprawnienia dla pliku:
chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keysi zmień właściciela na tego użytkownika:
chown -R username:username /home/username/.sshPo stronie klienta musisz wskazać lokalizację klucza prywatnego do uwierzytelniania:
ssh-add DIR_PATH/keylocationTeraz możesz zalogować się na serwer jako użytkownik przy użyciu tego klucza:
ssh [username]@hostnamePo autoryzacji możesz użyć polecenia scp do kopiowania plików, narzędzia do zdalnego montowania systemu plików lub katalogów.
Zaleca się zrobić kilka kopii zapasowych klucza prywatnego, ponieważ jeśli wyłączysz uwierzytelnianie hasłem i go stracisz, nie będziesz miał żadnej możliwości dostępu do swojego serwera.
Jak wspomniano powyżej, w SSH należy wyłączyć uwierzytelnianie dla roota (dlatego zakładaliśmy nowego użytkownika).
Na CentOS/Red Hat znajdujemy linię PermitRootLogin yes w pliku konfiguracyjnym /etc/ssh/sshd_config i zmieniamy ją:
PermitRootLogin no Na Ubuntu dodajemy linię PermitRootLogin no do pliku konfiguracyjnego 10-my-sshd-settings.conf:
sudo echo "PermitRootLogin no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.confPo upewnieniu się, że nowy użytkownik przechodzi uwierzytelnienie za pomocą swojego klucza, można wyłączyć uwierzytelnienie za pomocą hasła, aby wykluczyć ryzyko jego wycieku lub ataku brute force. Teraz, aby uzyskać dostęp do serwera, napastnik będzie musiał zdobyć prywatny klucz.
Na CentOS/Red Hat znajdujemy linię PasswordAuthentication yes w pliku konfiguracyjnym /etc/ssh/sshd_config i zmieniamy ją w następujący sposób:
PasswordAuthentication no Na Ubuntu dodajemy linię PasswordAuthentication no do pliku 10-my-sshd-settings.conf:
sudo echo "PasswordAuthentication no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.confInstrukcję dotyczącą podłączenia dwuskładnikowego uwierzytelnienia przez SSH zobacz: .
Zapora sieciowa
Zapora sieciowa gwarantuje, że na serwerze będzie tylko ten ruch, który bezpośrednio zezwoliłeś. Chroni to przed wykorzystaniem portów, które przypadkowo zostały włączone z innymi usługami, znacznie zmniejszając powierzchnię ataku.
Przed instalacją zapory należy upewnić się, że SSH jest na liście wyjątków i nie będzie blokowane. W przeciwnym razie, po uruchomieniu zapory, nie będziemy mogli połączyć się z serwerem.
Z dystrybucją Ubuntu dołączany jest Uncomplicated Firewall (), a z CentOS/Red Hat — .
Zezwolenie na SSH w zaporze na Ubuntu:
sudo ufw allow ssh Na CentOS/Red Hat używamy komendy firewall-cmd:
sudo firewall-cmd --zone=public --add-service=ssh --permanentPo tej procedurze można uruchomić zaporę.
Na CentOS/Red Hat uruchamiamy usługę systemd dla firewalld:
sudo systemctl start firewalld
sudo systemctl enable firewalldNa Ubuntu używamy takiej komendy:
sudo ufw enable
Fail2Ban
Serwis analityzuje logi na serwerze i zlicza liczbę prób dostępu z każdego adresu IP. W ustawieniach wskazane są zasady, ile prób dostępu jest dozwolonych w określonym przedziale czasu — po czym dany adres IP jest blokowany na zadany okres. Na przykład zezwalamy na 5 nieudanych prób uwierzytelnienia przez SSH w przedziale 2 godzin, po czym blokujemy dany adres IP na 12 godzin.
Instalacja Fail2Ban na CentOS i Red Hat:
sudo yum install fail2banInstalacja na Ubuntu i Debianie:
sudo apt install fail2banUruchomienie:
systemctl start fail2ban
systemctl enable fail2ban Program zawiera dwa pliki konfiguracyjne: /etc/fail2ban/fail2ban.conf i /etc/fail2ban/jail.conf. Ograniczenia dla bana są podane w drugim pliku.
Jail dla SSH jest włączony domyślnie z ustawieniami fabrycznymi (5 prób, interwał 10 minut, ban na 10 minut).
[DEFAULT] ignorecommand = bantime = 10m findtime = 10m maxretry = 5
Oprócz SSH, Fail2Ban może chronić również inne usługi na serwerze www nginx lub Apache.
Automatyczne aktualizacje bezpieczeństwa
Jak wiadomo, w każdym oprogramowaniu regularnie odkrywane są nowe luki bezpieczeństwa. Po publikacji informacji exploity są dodawane do popularnych pakietów exploity, które są powszechnie wykorzystywane przez hakerów i młodzież do skanowania wszystkich serwerów z rzędu. Dlatego bardzo ważne jest, aby instalować aktualizacje zabezpieczeń, gdy tylko się pojawią.
Na serwerze Ubuntu w domyślnej konfiguracji włączone są automatyczne aktualizacje zabezpieczeń, więc nie są wymagane dodatkowe działania.
Na CentOS/Red Hat należy zainstalować aplikację i włączyć timer:
sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timerSprawdzenie timera:
sudo systemctl status dnf-automatic.timer
Zmiana domyślnych portów
SSH został opracowany w 1995 roku w celu zastąpienia telnetu (port 23) i ftp (port 21), dlatego autor programu Tatu Iltonen , i zatwierdzono go w IANA.
Oczywiście, wszyscy przestępcy są świadomi, na którym porcie działa SSH — i skanują go wraz z innymi standardowymi portami, aby poznać wersję oprogramowania, sprawdzić standardowe hasła roota itd.
Zmiana standardowych portów — obfuskacja — kilkakrotnie zmniejsza ilość niechcianego ruchu, rozmiar logów i obciążenie serwera, a także zmniejsza powierzchnię ataku. Chociaż niektórzy (security through obscurity). Powodem tego jest to, że technika ta przeciwstawia się fundamentalnej Dlatego, na przykład, Narodowy Instytut Standardów i Technologii USA w wskazuje na konieczność otwartej architektury serwera: „Bezpieczeństwo systemu nie powinno opierać się na ukryciu realizacji jego komponentów” — mówi dokument.
Teoretycznie, zmiana domyślnych portów jest sprzeczna z praktyką otwartej architektury. Jednak w praktyce objętość złośliwego ruchu rzeczywiście maleje, więc jest to prosta i skuteczna miara.
Numer portu można skonfigurować, zmieniając dyrektywę Port 22 w pliku konfiguracyjnym. Można go również podać jako parametr -p do . Klient SSH i programy również obsługują parametr -p.
Parametr -p można użyć do podania numeru portu podczas łączenia się za pomocą polecenia ssh w systemie Linux. W i scp używa się parametru -P (nagłówek P). Polecenie z wiersza poleceń nadpisuje wszelkie wartości w plikach konfiguracyjnych.
Jeśli jest wiele serwerów, prawie wszystkie te działania związane z zabezpieczeniem serwera Linux można zautomatyzować w skrypcie. Jednak gdy serwer jest tylko jeden, lepiej ręcznie kontrolować proces.
Reklama
Zamów i pracuj natychmiast! dowolnej konfiguracji i z dowolnym systemem operacyjnym w ciągu minuty. Maksymalna konfiguracja pozwoli na pełne wykorzystanie - 128 rdzeni CPU, 512 GB RAM, 4000 GB NVMe. Epicko 🙂
Źródło: habr.com
