Tutorial over dit magnifieke protocol dat zijn avonturen begon in 1997 en een breed scala aan tools biedt die opvallen door hun veiligheid. Omdat het erg uitgebreid is, zal ik het in verschillende items verdelen om het belangrijkste te behandelen, zowel op client- als op serverniveau.
Wat is het Secure Shell-protocol?Secure Shell of SSH is een netwerkprotocol waarmee gegevens over een beveiligd kanaal tussen twee computers kunnen worden uitgewisseld. SSH maakt gebruik van encryptietechnieken die ervoor zorgen dat de informatie die via het communicatiemedium reist onleesbaar wordt en geen derde persoon de gebruikersnaam en het wachtwoord van de verbinding of wat er tijdens de hele sessie wordt geschreven, kan achterhalen. SSH gebruikt cryptografie met openbare sleutels om de externe computer te authenticeren en deze zo nodig de gebruiker te laten authenticeren.
SSH wordt meestal gebruikt om een sessie op een externe machine te starten, waar u opdrachten kunt uitvoeren, maar het maakt ook tunneling, willekeurig doorsturen van TCP-poorten en X11-verbindingen mogelijk; Bestandsoverdrachten kunnen ook worden uitgevoerd met behulp van bijbehorende SFTP- of SCP-protocollen.
We kunnen zien dat zijn grote aantrekkingskracht zijn karakteristiek is, meer dan genoeg om het oude TELNET-protocol te vervangen, dat informatieversleuteling mist, waardoor gegevens, inclusief toegangsreferenties, in gevaar worden gebracht.
De SSH-server, biedt standaard TCP-poort 22. Een SSH-client wordt over het algemeen gebruikt om verbindingen tot stand te brengen met een sshd-server die externe verbindingen accepteert. Beide worden vaak aangetroffen op de meeste moderne besturingssystemen, waaronder Mac, Linux, Solaris en OpenVMS.
Windows-ondersteuning voor de Server-versie zal naar verwachting dit jaar officieel worden uitgebracht, terwijl het op klantniveau een breed scala aan opties biedt die PuTTY boven de andere uitlichten.
Leer Putty te gebruiken
OpenSSHOpenSSH (Open Secure Shell) is een reeks toepassingen die versleutelde communicatie via een netwerk mogelijk maken, met behulp van het SSH-protocol. Het is gemaakt als een gratis en open alternatief voor het SSH-protocol, het wordt het meest gebruikt onder Linux en het zal degene zijn die we in alle items zullen gebruiken.
1. Installeer Secure Shell SSH
In bijna alle distributies is de clientversie vooraf geïnstalleerd, terwijl de serverversie beschikbaar is via repository, de installatie ervan zou heel eenvoudig moeten zijn.
Debian, Ubuntu, Linux Mint en derivaten
sudo apt-get install openssh-server
Centos, Rhel, Fedora
sudo yum install openssh-server
Arch-Linux
pacman -Syu opentssh
We controleren of het werkt met:
krul localhost: 22Als het correct wordt uitgevoerd, zou het moeten terugkeren:
[kleur = # 696969] [/Kleur]
Verbinding maken met de server
Met behulp van de client kunnen we verbinding maken met de server die op afstand kan zijn, zelfs als we beide versies hebben om intern verbinding te maken met localhost.
De meest eenvoudige manier om verbinding te maken is:
ssh gebruiker @ hostadresIn het geval van een interne verbinding zou het zijn:
ssh-gebruiker @ localhostWe hebben een breed scala aan opties bij het aansluiten, ik zal een aantal zeer handige uitleggen, je kunt al je opties opsommen met:
man sshHier laten we ze zien:
Man SSH-opties
-CVraag datacompressie aan om bandbreedte of data te besparen in het geval van een mobiel netwerk.
-lGeef de gebruiker op met wie we verbinding zullen maken.
-ENMaak een logbestand aan waarin de standaardfout wordt afgeweken.
-FWe selecteren een ander configuratiebestand dat nuttig is voor servers met ongebruikelijke opties.
-GVereist voor poorttunneling.
-IWe kiezen de map die we zullen gebruiken voor een alternatieve privésleutel.
-KInschakelen bij gebruik van GSSAPI-inloggegevens.
-NDoor het op deze manier in combinatie met X11 te gebruiken, wordt al het door de toepassing gegenereerde logboek omgeleid naar / dev / null.
-ofVereist om meer geavanceerde opties zoals ServerAliveInterval 30 te gebruiken.
-PSelecteer een andere poort dan 22 om verbinding te maken met de host.
-vHet toont alle stappen die nodig zijn om de verbinding tot stand te brengen.U kunt nog meer informatie krijgen met -vv -vvv.
-XNoodzakelijk als we X11 Forwarding willen gebruiken.
-YSchakelt veilige X11 Forwarding in.
We zullen verbinding maken met de test.solvetic.com-server met de jcarrillo-gebruiker met behulp van een andere privésleutel in onze / home / jcarrillo / keys-aws-map met behulp van poort 8022 van onze instantie op AWS.
Voorbeeld → ssh -C -i “~ / keys-aws /” -p 8022 -l jcarrillo test.solvetic.comZoals we kunnen zien, is het een uitgebreide maar zeer complete tool die meer vermeldingen verdient om de noodzakelijke functies voor elke Sysadmin van gemiddeld of professioneel niveau te kunnen dekken.
Nu gaan we verder met de configuratie op client-serverniveau, het genereren van openbare en privésleutels, het gebruik van port forwarding in echte situaties, omleiding van de X Server via X11 Forwarding, het gebruik van onder andere scp, sftp, ssh-agent .
2. SSH-server beveiligen
We gaan verder met OpenSSH focussen op onze SSH-server beveiligen, om alle soorten aanvallen te voorkomen die onze server in gevaar kunnen brengen. Al deze configuraties worden gedaan in het sshd_config-bestand in / etc / ssh / dat we in mijn geval met elke teksteditor kunnen wijzigen vim:
sudo vim / etc / ssh / sshd_configNu zien we hoe we het kunnen wijzigen.
Wijzig sshd_config
Binnenin zullen we een typisch configuratiebestand zien op basis van: "Waarde optie" Als een van de opties niet standaard wordt gevonden, moeten we de regel volledig plaatsen, in andere gevallen zal het alleen zijn om van 0 naar 1 te veranderen van Nee naar Ja of om een regel weg te halen.
Wijzig poort 22
Is essentieel verander de standaardpoort in een willekeurige veel scripts zijn geconfigureerd om deze poort aan te vallen, het wordt aanbevolen om deze te wijzigen in de bereik van 1000 tot 23000 ervoor te zorgen dat de poort niet door een andere service wordt gebruikt.
We moeten ook geen poorten gebruiken zoals 2222, 8022 of 1022, ze zijn net zo gewoon als 22 en veel scripts zijn geconfigureerd om ze aan te vallen.
poort 2345
Als we hebben SELINUX ingeschakeld moeten we een extra commando gebruiken om toegang van buitenaf tot de nieuwe poort toe te staan.
Semanage-poort -a -t ssh_port_t -p tcp 2345 #Wijzig poort 22 voor beveiliging
Gebruik standaardprotocol 2
We moeten ervoor zorgen dat al onze verbindingen worden gemaakt onder Protocol 2, aangezien 1 veel kwetsbaarheden heeft.
Protocol 2
Tijd om inloggegevens in te voeren
Zoeksectie "Authenticatie". Uw eerste twee opties zijn ook belangrijk. De eerste is het aantal seconden dat de externe gebruiker nodig heeft om in te loggen op uw machine. Stel die waarde in op een paar seconden, het duurt niet lang om in te loggen als we het account en wachtwoord kennen.
Op deze manier vermijden we bepaalde scripts die profiteren van die tijd. De typische waarde in termen van beveiliging is 30, hoewel het nog minder kan zijn.
InloggenGraceTime 30
Root-toegang uitschakelen
Deze Het is de belangrijkste optie om slachtoffer te worden van een aanval, ze hebben 3 dingen nodig:
- Gebruiker
- haven
- Wachtwoord
Als we root uitschakelen, hebben ze er al een omdat root een veelvoorkomende gebruiker is op alle systemen. Daarnaast kan deze gebruiker schade aanrichten door: alle rechten ingeschakeld.
PermitRootLogin nr
Gecontroleerde toegang inschakelen
We kunnen bepalen welke gebruiker kan inloggen via SSH en zelfs een clausule plaatsen om alleen verbinding te maken vanaf een bepaald IP-adres. Dit is vergelijkbaar met wat AWS biedt om ons te verbinden met uw instanties.
AllowUsers [email protected]
Het is belangrijk om alleen toegang te verlenen aan gebruikers die externe toegang nodig hebben en deze indien mogelijk te beperken tot een bekend IP-adres.
Configureer het aantal mislukte pogingen
Als we het wachtwoord verkeerd hebben ingevoerd, geeft de server ons verschillende pogingen om het opnieuw in te voeren, dit moet worden beperkt of je kunt het slachtoffer worden van een brute force-script, we kunnen het 2 of 3 keer plaatsen.
MaxAuthTries 2
Aantal gelijktijdig toegestane verbindingen
Dit kan variëren, afhankelijk van hoe u de server gebruikt, maar het ideaal is om deze te laten beheren, voeg gewoon het totale aantal gebruikers toe dat door SSH is toegestaan.
MaxStartups X
Nadat we alle wijzigingen in ons bestand hebben aangebracht, moeten we: herstart onze sshd-service, Dit kan per servicemanager verschillen.
SysteemD
systemctl herstart sshd
Upstart / Sysinit
service herstart sshd
Al deze veranderingen voegen een extra beveiligingsniveau maar we moeten in gedachten houden:
- Gebruik alfanumerieke wachtwoorden.
- Gebruik maken van Authenticatie door openbare / privésleutels wanneer het mogelijk is.
- Complementeer beveiliging met SELINUX en firewalls.
- Beheer de toegang waartoe gebruikers op afstand moeten inloggen.
Authenticeer openbare/privé-sleutels van SSH
Momenteel gebruik SSH-sleutels Het is een onmisbare vereiste, deze authenticatie wordt veel gebruikt door beheerders om taken tussen verschillende servers te automatiseren en wordt zelfs gebruikt door ontwikkelaars om toegang te krijgen tot SCM zoals GIT, GITHUB en GITLAB.
Het biedt grote veiligheid en de mogelijkheid om maak geautomatiseerde taken script-gebaseerd als a Rug of Wijzigingen repliceren naar meerdere knooppunten tegelijk.
Bij gebruik van een sleutel SSH (publiek en privé), kunnen ze eenvoudig verbinding maken met één server, of meerdere servers, zonder dat ze elke keer een wachtwoord hoeven in te voeren. Het is mogelijk om uw sleutels te configureren zonder een wachtwoordzin, maar dat zou roekeloos zijn, als iemand uw sleutel zou krijgen, zouden ze deze kunnen gebruiken. We zullen het hebben over het genereren van sleutels, het distribueren ervan en het gebruik van ssh-agent om meer beveiliging te verkrijgen.
Sleutels genereren zonder wachtwoordzin
Zorg er allereerst voor dat OpenSSH is geïnstalleerd, dit is niet nodig, de server alleen de client.
We beginnen met het genereren van een sleutel van het type DSA met een beveiliging van 1024 bits, meer dan genoeg, hoewel u verder kunt gaan en een sleutel van het type RSA met een limiet van 4096 kunt genereren.
ssh-keygen -b 1024 -t dsaHet zal ons vragen naar de locatie waar het de standaardsleutels zal opslaan ~ / .ssh
Voer het bestand in waarin u de sleutel wilt opslaan (/home/test/.ssh/id_dsa)Dan zal het om een zin vragen, want nu zullen we er geen gebruiken en we laten het leeg en het zal ons vertellen dat de sleutel is gemaakt en ons weerspiegelt.
De afbeelding zal altijd anders zijn, deze wordt willekeurig gegenereerd, en als we naar de .ssh-map gaan, moeten we 2 bestanden hebben
id_dsa -----> Private Key (deel het met niemand, het is net als je TDC).
id_dsa.pub ----> Het is degene die we delen om verbinding te maken.
Openbare sleutel delen
Als we de openbare sleutel in SCM of Chef, Puppet, Jenkins willen delen, visualiseren we het bestand met de openbare sleutel, kopiëren en plakken waar het overeenkomt.
Meer id_dsa.pub SSH-ds AAAAB3NzaC1kc3MAAACBAN6SEI4Qqzb23pJYRXIAtPmGJHln5hFdthFq43ef + ifR29v2IknXCFwefKK8jorSDiUEY / 1F / yp0xao mjhFQu1jNXOgF0PAZTfivRVFn6Q9FRsyXU9s fx + + + L22sV7GkCHPxAAAAFQCyF1Gdh3 xQiW3mf3y4IX654O82SLGl7Vhh5UsvG8r8d8pV6R Cap4xr / J44xDDn 0gFArHmFwAxfQAAAIEAmVYjPYAdQ9DCNWP + + + 03anWgyoZqSPPs23djyVQ756U4VitM0GiIQQ89HCdvTFFpSagnfdVpWh4 Hxo4Y5skKihnPMtB bFNbP / 2SmGdPz1AOmb7tvRrTkj5VLtXeDeB3ulowUKarwiBVVvAvxtxmozoZHOADWqrEPizxIAAACAU2DF1ZGTiJMP OhVB7mlsVhhkq53OxKKJbZqsl9hkOiSxaLUfQBNu6Ae441ekIObqolWNCBIvCO3uQYOozyzNGBhqHE7FVq 1oXguj + + + 2GAQ UGNkee96D2by S7daieIKNmFer2hO / SBxzepMrWAiIUnUsP5irmYspkjGlQxP + hxb = proef @ solveticAls je het wilt delen om toegang te krijgen tot een server, raad ik altijd aan om ssh-copy-id te gebruiken die is opgenomen in OpenSSH en heel gemakkelijk te gebruiken is:
ssh-copy-id user @ remote-server-ip -i specificeert de locatie van de te gebruiken sleutel.Er zijn andere manieren zoals:
ssh-gebruiker @ remote-server-ip \ 'cat >> .ssh / Authorized_keys2' <.ssh / id_dsa.pub
scp ~ / .ssh / id_dsa.pub gebruiker @ remote-server-ipVanaf nu zijn de sleutels verbonden en hoeft u alleen nog maar de host in te voeren.
ssh -l gebruiker remote-server-ipDeze keer wordt er niet om een wachtwoord gevraagd en kunnen we scripts gebruiken zonder interactie.
Genereer wachtwoordzin en associeer met ssh-agent
De SSH-sleutelbeveiliging Het is gebaseerd op onze privésleutel die werkt als een toegangskaart, maar als iemand onze sleutel steelt, hebben ze toegang tot alle plaatsen waar we toegang hebben. Maar bij het genereren van een wachtwoordzin kunnen we een extra niveau hebben, niet alleen is de sleutel nodig, maar we hoeven onze zin ook niet in te voeren.
Deze keer zullen we een rsa-sleutel maken met meer veiligheid door een zin te configureren.
ssh-keygen -b 4096 -t rsa -C "Sleutel met wachtwoordzin" # -C Voeg een opmerking toe.Omdat het een zin is, kunnen we spaties, punten en speciale tekens gebruiken
voorbeeld ---> Dit is mijn nieuwe sleutel met Fr @ S3.We delen de nieuwe sleutel:
scp ~ / .ssh / id_rsa.pub gebruiker @ remote-server-ipDeze keer hebben we de sleutel en de wachtwoordzin nodig, maar het is vervelend om het meerdere keren in te voeren, maar we kunnen het aanvullen met ssh-agent, we moeten het starten.
ssh-agentWe voegen onze sleutel toe
ssh-add Voer wachtwoordzin in voor /home/user/.ssh/id_rsa: # We voeren de frase in die we hebben geconfigureerd.Nu kunnen we verbinding maken met elke server die onze sleutel gebruikt zonder onze wachtwoordzin.
Ik raad deze methode aan als u zich buiten het intranet, de client en de server op verschillende punten op internet bevindt en we geen geautomatiseerde taken gebruiken, maar eerder verbinding maken met de server voor beheer op afstand. Het is het beste om een wachtwoord op te geven of erg lang wachtwoordzin (15 of meer tekens, hoofdletters, kleine letters, cijfers en symbolen) naar de openbare sleutel.
Op deze manier het zal praktisch onmogelijk zijn om te worden gehackt op deze manier, omdat de hacker niet alleen het wachtwoord moet weten, maar ook een geldig openbaar certificaat op de server moet hebben zodat hij kan worden geverifieerd. (Uiteraard ervan uitgaande dat de server nooit is gecompromitteerd en volledig up-to-date en met de best mogelijke beveiliging is).
Vond je deze Tutorial leuk en heb je eraan geholpen?Je kunt de auteur belonen door op deze knop te drukken om hem een positief punt te geven