Tutorial o tym wspaniałym protokole, który rozpoczął swoją przygodę w 1997 roku, oferując szeroką gamę narzędzi wyróżniających się bezpieczeństwem, będąc bardzo obszernym podzielę go na kilka wpisów starając się omówić najważniejszą rzecz zarówno na poziomie klienta jak i serwera.
Co to jest protokół Secure Shell?Secure Shell lub SSH to protokół sieciowy, który umożliwia wymianę danych przez bezpieczny kanał między dwoma komputerami. SSH wykorzystuje techniki szyfrowania, które sprawiają, że informacje przesyłane przez medium komunikacyjne stają się nieczytelne i żadna osoba trzecia nie może odkryć nazwy użytkownika i hasła połączenia ani tego, co zostało zapisane podczas całej sesji. SSH używa kryptografii klucza publicznego do uwierzytelniania komputera zdalnego i w razie potrzeby umożliwia uwierzytelnianie użytkownika.
SSH jest zwykle używany do uruchamiania sesji na zdalnej maszynie, na której można wykonywać polecenia, ale umożliwia także tunelowanie, dowolne przekazywanie portów TCP i połączeń X11; Transfery plików mogą być również wykonywane przy użyciu powiązanych protokołów SFTP lub SCP.
Widzimy, że jego wielką atrakcją jest jego charakterystyka w zupełności wystarczająca do zastąpienia starego protokołu TELNET, w którym brakuje szyfrowania informacji, kompromitowania danych, w tym danych dostępowych.
ten Serwer SSH, domyślnie oferuje port TCP 22. Klient SSH jest zwykle używany do nawiązywania połączeń z serwerem sshd, który akceptuje połączenia zdalne. Oba są powszechnie spotykane w większości nowoczesnych systemów operacyjnych, w tym Mac, Linux, Solaris i OpenVMS.
Oczekuje się, że obsługa systemu Windows dla wersji Server zostanie oficjalnie wydana w tym roku, podczas gdy na poziomie klienta oferuje szeroką gamę opcji wyróżniających PuTTY na tle innych.
Naucz się używać Putty
OpenSSHOpenSSH (Open Secure Shell) to zestaw aplikacji, które umożliwiają szyfrowaną komunikację w sieci przy użyciu protokołu SSH. Został stworzony jako darmowa i otwarta alternatywa dla protokołu SSH, jest najczęściej używany pod Linuksem i będzie tym, którego będziemy używać we wszystkich wpisach.
1. Zainstaluj bezpieczną powłokę SSH
W prawie wszystkich dystrybucjach jego wersja kliencka jest preinstalowana, podczas gdy wersja serwerowa jest dostępna przez repozytorium, jej instalacja powinna być bardzo prosta.
Debian, Ubuntu, Linux Mint i pochodne
sudo apt-get install openssh-server
Centos, Rhel, Fedora
sudo mniam zainstaluj openssh-server
Arch-Linux
pacman -Syu openssh
Weryfikujemy, czy działa z:
curl lokalny gospodarz: 22W przypadku poprawnego działania powinien zwrócić:
[kolor = # 696969] [/Kolor]
Łączenie z serwerem
Korzystając z klienta możemy połączyć się z serwerem, który może być zdalny, nawet jeśli mamy obie wersje do łączenia się wewnętrznie za pomocą localhost.
Najbardziej podstawowym sposobem połączenia byłoby:
użytkownik ssh @ adres hostaW przypadku połączenia wewnętrznego byłoby to:
użytkownik ssh @ localhostMamy szeroką gamę opcji podczas łączenia, wyjaśnię kilka bardzo przydatnych, możesz wymienić wszystkie opcje za pomocą:
człowiek sziTutaj je pokazujemy:
Opcje Man SSH
-CŻądaj kompresji danych, oszczędzając przepustowość lub dane w przypadku połączenia z siecią komórkową.
-IOkreśl użytkownika, z którym będziemy się łączyć.
-ORAZUtwórz plik dziennika, w którym błąd standardowy będzie odchylony.
-FWybieramy inny plik konfiguracyjny przydatny dla serwerów z nietypowymi opcjami.
-gWymagane do tunelowania portów.
-iWybieramy folder, którego użyjemy jako alternatywny klucz prywatny.
-KWłącz, gdy używasz danych logowania GSSAPI.
-nUżywając go w połączeniu z X11 w ten sposób cały dziennik generowany przez aplikację jest przekierowywany do /dev/null.
-lubWymagane do korzystania z bardziej zaawansowanych opcji, takich jak ServerAliveInterval 30.
-PWybierz port inny niż 22, aby połączyć się z hostem.
-vPokazuje wszystkie kroki niezbędne do nawiązania połączenia.Możesz uzyskać jeszcze więcej informacji za pomocą -vv -vvv.
-XNiezbędne, jeśli chcemy korzystać z X11 Forwarding.
-YUmożliwia bezpieczne przekazywanie X11.
Łączymy się z serwerem test.solvetic.com z użytkownikiem jcarrillo przy użyciu innego klucza prywatnego znajdującego się w naszym folderze /home/jcarrillo/keys-aws przy użyciu portu 8022 naszej instancji na AWS.
Przykład → ssh -C -i „~ / piły-klucze /” -p 8022 -l jcarrillo test.solvetic.comJak widzimy, jest to obszerne, ale bardzo kompletne narzędzie, które zasługuje na więcej wpisów, aby móc objąć niezbędne funkcje dla każdego Sysadmina na poziomie średniozaawansowanym lub profesjonalnym.
Teraz przechodzimy do jego konfiguracji na poziomie klient-serwer, generowania kluczy publicznych i prywatnych, wykorzystania przekierowania portów w rzeczywistych sytuacjach, przekierowania X Serwera poprzez X11 Forwarding, wykorzystania m.in. scp, sftp, ssh-agent .
2. Zabezpiecz serwer SSH
Kontynuujemy z OpenSSH skupiając się na zabezpieczenie naszego serwera SSH, aby uniknąć wszelkiego rodzaju ataków, które mogłyby zagrozić naszemu serwerowi. Wszystkie te konfiguracje będą dokonywane w pliku sshd_config znajdującym się w /etc/ssh/, który w moim przypadku możemy modyfikować dowolnym edytorem tekstu krzepkość:
sudo vim / etc / ssh / sshd_configTeraz widzimy, jak to zmodyfikować.
Zmodyfikuj sshd_config
Wewnątrz zobaczymy typowy plik konfiguracyjny oparty na "Opcja wartości" Jeśli któraś z opcji nie zostanie domyślnie znaleziona, musimy umieścić linię całkowicie, w innych przypadkach będzie to tylko zmiana z 0 na 1 z Nie na Tak lub odkomentowanie linii.
Zmodyfikuj port 22
Jest niezbędna zmień domyślny port na losowy wiele skryptów jest skonfigurowanych do atakowania tego portu, zaleca się jego zmianę w zakres od 1000 do 23000 zapewnienie, że port nie jest używany przez inną usługę.
Nie powinniśmy też używać portów takich jak 2222, 8022 lub 1022, są one tak samo powszechne jak 22 i wiele skryptów jest skonfigurowanych do ich atakowania.
port 2345
Jeśli mamy SELINUX włączone musimy użyć dodatkowego polecenia, aby zezwolić na dostęp z zewnątrz do nowego portu.
Semanage port -a -t ssh_port_t -p tcp 2345 #Zmiana portu 22 dla bezpieczeństwa
Użyj domyślnego protokołu 2
Musimy upewnić się, że wszystkie nasze połączenia są realizowane zgodnie z protokołem 2, ponieważ 1 ma wiele luk.
Protokół 2
Czas wprowadzić dane uwierzytelniające
Sekcja wyszukiwania "Uwierzytelnianie". Twoje dwie pierwsze opcje są również ważne. Pierwsza to liczba sekund, przez którą zdalny użytkownik będzie musiał zalogować się do twojego komputera. Ustaw tę wartość na kilka sekund, logowanie nie trwa długo, jeśli znamy konto i hasło.
W ten sposób unikamy pewnych skryptów, które wykorzystują ten czas. Typowa wartość pod względem bezpieczeństwa to 30, choć może być jeszcze mniej.
ZalogujGraceTime 30
Wyłącz dostęp do roota
Ten to najważniejsza opcja bycia ofiarą ataku, potrzebują 3 rzeczy:
- Użytkownik
- Port
- Hasło
Jeśli wyłączymy roota, mają już jednego, ponieważ root jest wspólnym użytkownikiem na wszystkich systemach. Oprócz tego ten użytkownik może siać spustoszenie, mając wszystkie uprawnienia włączone.
PermitRootZaloguj się nie
Włącz dostęp kontrolowany
Możemy kontrolować, który użytkownik może logować się przez SSH, a nawet umieścić klauzulę, aby połączyć się tylko z określonego IP. Jest to podobne do tego, co oferuje AWS, aby połączyć nas z Twoimi instancjami.
AllowUsers [email protected]
Ważne jest, aby zezwolić na dostęp tylko użytkownikom, którzy potrzebują zdalnego dostępu i, jeśli to możliwe, ograniczyć ich do znanego adresu IP.
Skonfiguruj liczbę nieudanych prób
Jeśli wprowadzimy błędne hasło, serwer daje nam kilka prób ponownego wpisania, musi to być ograniczone lub możesz być ofiarą skryptu brute force, możemy umieścić go 2 lub 3 razy.
Maksymalna liczba prób 2
Liczba połączeń dozwolonych jednocześnie
Może się to różnić w zależności od sposobu korzystania z serwera, ale najlepiej jest kontrolować go, po prostu dodaj całkowitą liczbę użytkowników dozwolonych przez SSH.
MaxStartupy X
Po dokonaniu wszystkich zmian w naszym pliku musimy uruchom ponownie naszą usługę sshd, Może się różnić w zależności od menedżera serwisu.
System D
systemctl restart sshd
Rozruch / Sysinit
usługa restartu sshd
Wszystkie te zmiany dodają dodatkowy poziom bezpieczeństwa ale musimy pamiętać:
- Używaj haseł alfanumerycznych.
- Posługiwać się Uwierzytelnianie za pomocą kluczy publicznych/prywatnych kiedy to możliwe.
- Uzupełnij zabezpieczenia o SELINUX i zapory.
- Kontroluj dostęp, do którego użytkownicy muszą logować się zdalnie.
Uwierzytelnij klucze publiczne / prywatne SSH
Obecnie używam Klucze SSH Jest to niezbędne wymaganie, to uwierzytelnianie jest szeroko stosowane przez administratorów do automatyzacji zadań między różnymi serwerami, a nawet jest używane przez programistów do uzyskiwania dostępu do SCM, takich jak między innymi GIT, GITHUB, GITLAB.
Oferuje duże bezpieczeństwo i możliwość tworzenie zadań automatycznych oparty na skrypcie jako a Z powrotem lub Replikuj zmiany do wielu węzłów jednocześnie.
Podczas korzystania z klucza SSH (publiczny i prywatny), mogą łatwo łączyć się z jednym serwerem lub wieloma serwerami, bez konieczności każdorazowego wprowadzania hasła. Możliwe jest skonfigurowanie kluczy bez hasła, jednak byłoby to lekkomyślne, gdyby ktoś zdobył Twój klucz, mógłby go użyć. Porozmawiamy o tym, jak generować klucze, dystrybuować je i używać ssh-agent, aby uzyskać większe bezpieczeństwo.
Generowanie kluczy bez hasła
Przede wszystkim upewnij się, że masz zainstalowany OpenSSH, nie jest to konieczne, serwer tylko klient.
Zaczynamy od wygenerowania klucza typu DSA z zabezpieczeniem 1024 bitów, co jest więcej niż wystarczające, chociaż możesz pójść dalej i wygenerować klucz typu RSA z limitem 4096.
ssh-keygen -b 1024 -t dsaPoprosi nas o lokalizację, w której zapisze domyślne klucze ~ / .ssh
Wpisz plik, w którym chcesz zapisać klucz (/home/test/.ssh/id_dsa)Następnie poprosi o frazę na razie nie użyjemy żadnego i zostawimy to puste, a powie nam, że klucz został stworzony i odzwierciedla nas.
Obraz zawsze będzie inny, jest generowany losowo, to jeśli przejdziemy do folderu .ssh musimy mieć 2 pliki
id_dsa -----> Klucz prywatny (nie udostępniaj go nikomu, jest jak TDC).
id_dsa.pub ----> Jest to ten, który udostępniamy, aby się połączyć.
Udostępnij klucz publiczny
W przypadku, gdy chcemy udostępnić klucz publiczny w SCM lub Chef, Puppet, Jenkins, wizualizujemy plik klucza publicznego, kopiujemy go i wklejamy tam, gdzie odpowiada.
bardziej id_dsa.pub ssh DSS AAAAB3NzaC1kc3MAAACBAN6SEI4Qqzb23pJYRXIAtPmGJHln5hFdthFq43ef + ifR29v2IknXCFwefKK8jorSDiUEY / 1F / yp0xao mjhFQu1jNXOgF0PAZTfivRVFn6Q9FRsyXU9s fx + + + L22sV7GkCHPxAAAAFQCyF1Gdh3 xQiW3mf3y4IX654O82SLGl7Vhh5UsvG8r8d8pV6R Cap4xr / J44xDDn 0gFArHmFwAxfQAAAIEAmVYjPYAdQ9DCNWP + + + 03anWgyoZqSPPs23djyVQ756U4VitM0GiIQQ89HCdvTFFpSagnfdVpWh4 Hxo4Y5skKihnPMtB bFNbP / 2SmGdPz1AOmb7tvRrTkj5VLtXeDeB3ulowUKarwiBVVvAvxtxmozoZHOADWqrEPizxIAAACAU2DF1ZGTiJMP OhVB7mlsVhhkq53OxKKJbZqsl9hkOiSxaLUfQBNu6Ae441ekIObqolWNCBIvCO3uQYOozyzNGBhqHE7FVq 1oXguj + + + 2GAQ UGNkee96D2by S7daieIKNmFer2hO / SBxzepMrWAiIUnUsP5irmYspkjGlQxP + WxS = test @ solveticJeśli chcesz udostępnić go, aby uzyskać dostęp do serwera, zawsze polecam użycie ssh-copy-id jest zawarte w OpenSSH i jest bardzo łatwe w użyciu:
ssh-copy-id user @ remote-server-ip -i określa lokalizację klucza do użycia.Istnieją inne sposoby, takie jak:
ssh user @ remote-server-ip \ 'cat >> .ssh /author_keys2' <.ssh / id_dsa.pub
scp ~ / .ssh / id_dsa.pub użytkownik @ zdalny-ip-serweraOd teraz klawisze są połączone i wystarczy wpisać hosta.
ssh -l user remote-server-ipTym razem nie poprosi o żadne hasło i możemy używać skryptów bez interakcji.
Wygeneruj hasło i powiąż z ssh-agent
ten Bezpieczeństwo klucza SSH Opiera się na naszym kluczu prywatnym, który działa jak karta dostępu, ale jeśli ktoś ukradnie nasz klucz, będzie mógł uzyskać dostęp do wszystkich miejsc, do których mamy dostęp. Ale podczas generowania hasła możemy mieć dodatkowy poziom, nie tylko jest potrzebny klucz, ale nie musimy wprowadzać naszej frazy.
Tym razem stworzymy klucz rsa z większym bezpieczeństwem, konfigurując frazę.
ssh-keygen -b 4096 -t rsa -C "Klucz z hasłem" # -C Dodaj komentarz.Jako frazę możemy używać spacji, kropek i znaków specjalnych
przykład ---> To jest mój nowy klucz z Fr@S3.Udostępniamy nowy klucz:
scp ~ / .ssh / id_rsa.pub użytkownik @ zdalny-ip-serweraTym razem potrzebujemy klucza i hasła, ale kilkakrotne wprowadzanie go jest żmudne, ale możemy uzupełnić go ssh-agentem, musimy go uruchomić.
ssh-agentDodajemy nasz klucz
ssh-add Podaj hasło dla /home/user/.ssh/id_rsa: # Wpisujemy skonfigurowaną frazę.Teraz możemy połączyć się z dowolnym serwerem, który używa naszego klucza bez konieczności wpisywania naszego hasło.
Polecam tę metodę, jeśli jesteś poza intranetem, klientem i serwerem w różnych punktach w Internecie, a nie będziemy korzystać z zadań automatycznych, ale raczej łączymy się z serwerem w celach zdalnej administracji, najlepiej podać hasło lub bardzo długie hasło (15 lub więcej znaków, wielkie i małe litery, cyfry i symbole) do klucza publicznego.
Tą drogą praktycznie nie da się go zhakować za pomocą tej metody, ponieważ haker nie tylko będzie musiał znać hasło, ale będzie musiał mieć na serwerze ważny certyfikat publiczny, aby mógł zostać uwierzytelniony. (Oczywiście przy założeniu, że serwer nigdy nie został skompromitowany i jest w pełni aktualny i ma najlepsze możliwe zabezpieczenia).
Podobał Ci się i pomógł ten samouczek?Możesz nagrodzić autora, naciskając ten przycisk, aby dać mu pozytywny punkt