Linux in action bog

Linux in action bog Hej Khabro beboere! I bogen beskriver David Clinton 12 virkelige projekter, herunder automatisering af dit backup- og gendannelsessystem, opsætning af en personlig filsky i Dropbox-stil og oprettelse af din egen MediaWiki-server. Du vil udforske virtualisering, disaster recovery, sikkerhed, backup, DevOps og systemfejlfinding gennem interessante casestudier. Hvert kapitel afsluttes med en gennemgang af bedste praksis, en ordliste over nye termer og øvelser.

Uddrag "10.1. Oprettelse af en OpenVPN-tunnel"

Jeg har allerede talt meget om kryptering i denne bog. SSH og SCP kan beskytte data, der overføres via fjernforbindelser (kapitel 3), filkryptering kan beskytte data, mens de er gemt på serveren (kapitel 8), og TLS/SSL-certifikater kan beskytte data, der overføres mellem websteder og klientbrowsere (kapitel 9). . Men nogle gange skal dine data beskyttes på tværs af en bredere vifte af forbindelser. For eksempel arbejder nogle af dine teammedlemmer måske på farten, mens de opretter forbindelse til Wi-Fi via offentlige hotspots. Du skal bestemt ikke antage, at alle sådanne adgangspunkter er sikre, men dine medarbejdere har brug for en måde at oprette forbindelse til virksomhedens ressourcer på – og det er her, en VPN kan hjælpe.

En korrekt designet VPN-tunnel giver en direkte forbindelse mellem fjernklienter og serveren på en måde, der skjuler data, når de rejser over et usikkert netværk. Og hvad så? Du har allerede set mange værktøjer, der kan gøre dette med kryptering. Den virkelige værdi af en VPN er, at du ved at åbne en tunnel kan forbinde fjernnetværk, som om de alle var lokale. På en måde bruger du en bypass.

Ved at bruge dette udvidede netværk kan administratorer udføre deres arbejde på deres servere hvor som helst. Men endnu vigtigere er det, at en virksomhed med ressourcer spredt over flere lokationer kan gøre dem alle synlige og tilgængelige for alle de grupper, der har brug for dem, uanset hvor de er (Figur 10.1).

Selve tunnelen garanterer ikke sikkerhed. Men en af ​​krypteringsstandarderne kan indgå i netværksstrukturen, hvilket øger sikkerhedsniveauet markant. Tunneler oprettet ved hjælp af open source OpenVPN-pakken bruger den samme TLS/SSL-kryptering, som du allerede har læst om. OpenVPN er ikke den eneste tilgængelige mulighed for tunneling, men det er en af ​​de bedst kendte. Den anses for at være lidt hurtigere og mere sikker end den alternative Layer 2-tunnelprotokol, der bruger IPsec-kryptering.

Ønsker du, at alle på dit team skal kommunikere sikkert med hinanden, mens de er på farten eller arbejder i forskellige bygninger? For at gøre dette skal du oprette en OpenVPN-server for at tillade applikationsdeling og adgang til serverens lokale netværksmiljø. For at dette skal fungere, skal du blot køre to virtuelle maskiner eller to containere: en til at fungere som server/vært og en til at fungere som klient. At bygge en VPN er ikke en simpel proces, så det er nok værd at bruge et par minutter på at få det store billede i tankerne.

Linux in action bog

10.1.1. OpenVPN-serverkonfiguration

Inden du starter, vil jeg give dig nogle nyttige råd. Hvis du vil gøre det selv (og jeg anbefaler stærkt, at du gør det), vil du sandsynligvis finde dig selv i at arbejde med flere terminalvinduer åbne på dit skrivebord, som hver er forbundet til en anden maskine. Der er en risiko for, at du på et tidspunkt indtaster den forkerte kommando i vinduet. For at undgå dette kan du bruge hostname-kommandoen til at ændre maskinnavnet, der vises på kommandolinjen, til noget, der tydeligt fortæller dig, hvor du er. Når du har gjort dette, skal du logge ud af serveren og logge ind igen for at de nye indstillinger træder i kraft. Sådan ser det ud:

Linux in action bog
Ved at følge denne tilgang og give passende navne til hver af de maskiner, du arbejder med, kan du nemt holde styr på, hvor du er.

Efter at have brugt værtsnavnet, kan du støde på irriterende meddelelser, der ikke er i stand til at løse Host OpenVPN-Server, når du udfører efterfølgende kommandoer. Opdatering af /etc/hosts-filen med det relevante nye værtsnavn burde løse problemet.

Forbereder din server til OpenVPN

For at installere OpenVPN på din server har du brug for to pakker: openvpn og easy-rsa (for at styre processen for generering af krypteringsnøgler). CentOS-brugere bør først installere epel-release-lageret, hvis det er nødvendigt, som du gjorde i kapitel 2. For at kunne teste adgangen til serverapplikationen kan du også installere Apache-webserveren (apache2 på Ubuntu og httpd på CentOS).

Mens du opsætter din server, anbefaler jeg at aktivere en firewall, der blokerer alle porte undtagen 22 (SSH) og 1194 (OpenVPNs standardport). Dette eksempel illustrerer, hvordan ufw ville fungere på Ubuntu, men jeg er sikker på, at du stadig husker CentOS firewalld-programmet fra kapitel 9:

# ufw enable
# ufw allow 22
# ufw allow 1194

For at aktivere intern routing mellem netværksgrænseflader på serveren skal du fjerne en linje (net.ipv4.ip_forward = 1) i filen /etc/sysctl.conf. Dette vil tillade fjernklienter at blive omdirigeret efter behov, når de er tilsluttet. For at få den nye indstilling til at virke, kør sysctl -p:

# nano /etc/sysctl.conf
# sysctl -p

Dit servermiljø er nu fuldt konfigureret, men der er stadig en ting mere, du skal gøre, før du er klar: du skal fuldføre følgende trin (vi vil dække dem i detaljer næste gang).

  1. Opret et sæt af offentlig nøgleinfrastruktur (PKI) krypteringsnøgler på serveren ved hjælp af de scripts, der følger med easy-rsa-pakken. I det væsentlige fungerer OpenVPN-serveren også som sin egen certifikatmyndighed (CA).
  2. Forbered passende nøgler til klienten
  3. Konfigurer server.conf-filen for serveren
  4. Konfigurer din OpenVPN-klient
  5. Tjek din VPN

Generering af krypteringsnøgler

For at gøre tingene enkle kan du konfigurere din nøgleinfrastruktur på den samme maskine, hvor OpenVPN-serveren kører. Men bedste praksis for sikkerhed foreslår typisk brug af en separat CA-server til produktionsinstallationer. Processen med at generere og distribuere krypteringsnøgleressourcer til brug i OpenVPN er illustreret i fig. 10.2.

Linux in action bog
Da du installerede OpenVPN, blev mappen /etc/openvpn/ automatisk oprettet, men der er intet i den endnu. Openvpn- og easy-rsa-pakkerne kommer med eksempler på skabelonfiler, som du kan bruge som grundlag for din konfiguration. For at starte certificeringsprocessen skal du kopiere easy-rsa skabelonmappen fra /usr/share/ til /etc/openvpn og skifte til easy-rsa/-mappen:

# cp -r /usr/share/easy-rsa/ /etc/openvpn
$ cd /etc/openvpn/easy-rsa

Easy-rsa biblioteket vil nu indeholde en del scripts. I tabel 10.1 viser de værktøjer, du vil bruge til at oprette nøgler.

Linux in action bog

Ovenstående operationer kræver root-privilegier, så du skal blive root via sudo su.

Den første fil, du vil arbejde med, hedder vars og indeholder de miljøvariabler, som easy-rsa bruger, når der genereres nøgler. Du skal redigere filen for at bruge dine egne værdier i stedet for de standardværdier, der allerede er der. Sådan vil min fil se ud (liste 10.1).

Notering 10.1. Hovedfragmenter af filen /etc/openvpn/easy-rsa/vars

export KEY_COUNTRY="CA"
export KEY_PROVINCE="ON"
export KEY_CITY="Toronto"
export KEY_ORG="Bootstrap IT"
export KEY_EMAIL="[email protected]"
export KEY_OU="IT"

Kørsel af vars-filen vil dens værdier videregives til shell-miljøet, hvor de vil blive inkluderet i indholdet af dine nye nøgler. Hvorfor virker sudo-kommandoen ikke i sig selv? For i det første trin redigerer vi scriptet med navnet vars og anvender det derefter. Anvender og betyder, at vars-filen videregiver sine værdier til shell-miljøet, hvor de vil blive inkluderet i indholdet af dine nye nøgler.

Sørg for at køre filen igen med en ny shell for at fuldføre den ufærdige proces. Når dette er gjort, vil scriptet bede dig om at køre et andet script, clean-all, for at fjerne alt indhold i mappen /etc/openvpn/easy-rsa/keys/:

Linux in action bog
Det næste trin er naturligvis at køre clean-all scriptet, efterfulgt af build-ca, som bruger pkitool scriptet til at oprette rodcertifikatet. Du vil blive bedt om at bekræfte identitetsindstillingerne fra vars:

# ./clean-all
# ./build-ca
Generating a 2048 bit RSA private key

Dernæst kommer build-key-server scriptet. Da det bruger det samme pkitool-script sammen med et nyt rodcertifikat, vil du se de samme spørgsmål for at bekræfte oprettelsen af ​​nøgleparret. Nøglerne vil blive navngivet baseret på de argumenter, du sender, som, medmindre du kører flere VPN'er på denne maskine, normalt vil være server, som i eksemplet:

# ./build-key-server server
[...]
Certificate is to be certified until Aug 15 23:52:34 2027 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

OpenVPN bruger parametre genereret af Diffie-Hellman-algoritmen (ved hjælp af build-dh) til at forhandle godkendelse for nye forbindelser. Filen, der oprettes her, behøver ikke at være hemmelig, men skal genereres ved hjælp af build-dh-scriptet til de RSA-nøgler, der i øjeblikket er aktive. Hvis du opretter nye RSA-nøgler i fremtiden, skal du også opdatere Diffie-Hellman-filen:

# ./build-dh

Dine serversidenøgler vil nu ende i mappen /etc/openvpn/easy-rsa/keys/, men OpenVPN ved ikke dette. Som standard vil OpenVPN lede efter nøgler i /etc/openvpn/, så kopier dem:

# cp /etc/openvpn/easy-rsa/keys/server* /etc/openvpn
# cp /etc/openvpn/easy-rsa/keys/dh2048.pem /etc/openvpn
# cp /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn

Forberedelse af klientkrypteringsnøgler

Som du allerede har set, bruger TLS-kryptering par af matchende nøgler: en installeret på serveren og en installeret på fjernklienten. Det betyder, at du skal bruge klientnøgler. Vores gamle ven pkitool er præcis, hvad du har brug for til dette. I dette eksempel, når vi kører programmet i mappen /etc/openvpn/easy-rsa/, sender vi det et klientargument til at generere filer kaldet client.crt og client.key:

# ./pkitool client

De to klientfiler, sammen med den originale ca.crt-fil, der stadig er i keys/-mappen, skulle nu være sikkert overført til din klient. På grund af deres ejerskab og adgangsrettigheder er det måske ikke så let. Den enkleste fremgangsmåde er manuelt at kopiere indholdet af kildefilen (og intet andet end det indhold) til en terminal, der kører på din pc's skrivebord (vælg teksten, højreklik på den og vælg Kopier i menuen). Indsæt derefter dette i en ny fil med det samme navn, som du opretter i en anden terminal, der er forbundet til din klient.

Men alle kan klippe og klistre. Tænk i stedet som en administrator, fordi du ikke altid har adgang til GUI'en, hvor klip/indsæt-operationer er mulige. Kopier filerne til din brugers hjemmemappe (så den eksterne scp-handling kan få adgang til dem), og brug derefter chown til at ændre ejerskabet af filerne fra root til en almindelig ikke-root-bruger, så fjern-scp-handlingen kan udføres. Sørg for, at alle dine filer i øjeblikket er installeret og tilgængelige. Du vil flytte dem til klienten lidt senere:

# cp /etc/openvpn/easy-rsa/keys/client.key /home/ubuntu/
# cp /etc/openvpn/easy-rsa/keys/ca.crt /home/ubuntu/
# cp /etc/openvpn/easy-rsa/keys/client.crt /home/ubuntu/
# chown ubuntu:ubuntu /home/ubuntu/client.key
# chown ubuntu:ubuntu /home/ubuntu/client.crt
# chown ubuntu:ubuntu /home/ubuntu/ca.crt

Med et komplet sæt krypteringsnøgler klar til brug, skal du fortælle serveren, hvordan du vil oprette VPN. Dette gøres ved at bruge filen server.conf.

Reduktion af antallet af tastetryk

Er der for meget at skrive? Udvidelse med parenteser hjælper med at reducere disse seks kommandoer til to. Jeg er sikker på, at du kan studere disse to eksempler og forstå, hvad der foregår. Endnu vigtigere er det, at du vil være i stand til at forstå, hvordan du anvender disse principper på operationer, der involverer tiere eller endda hundredvis af elementer:

# cp /etc/openvpn/easy-rsa/keys/{ca.crt,client.{key,crt}} /home/ubuntu/
# chown ubuntu:ubuntu /home/ubuntu/{ca.crt,client.{key,crt}}

Opsætning af server.conf-filen

Hvordan kan du vide, hvordan server.conf-filen skal se ud? Husk easy-rsa mappeskabelonen, du kopierede fra /usr/share/? Da du installerede OpenVPN, stod du tilbage med en komprimeret konfigurationsskabelonfil, som du kan kopiere til /etc/openvpn/. Jeg vil bygge på det faktum, at skabelonen er arkiveret og introducere dig til et nyttigt værktøj: zcat.

Du kender allerede til at udskrive tekstindholdet i en fil til skærmen ved hjælp af kat-kommandoen, men hvad nu hvis filen er komprimeret ved hjælp af gzip? Du kan altid pakke filen ud, og så vil cat med glæde udskrive den, men det er et eller to trin mere end nødvendigt. I stedet, som du måske har gættet, kan du udstede zcat-kommandoen for at indlæse den udpakkede tekst i hukommelsen i ét trin. I det følgende eksempel, i stedet for at udskrive tekst til skærmen, vil du omdirigere den til en ny fil kaldet server.conf:

# zcat 
  /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz 
  > /etc/openvpn/server.conf
$ cd /etc/openvpn

Lad os lægge den omfattende og hjælpsomme dokumentation, der følger med filen, til side og se, hvordan den kan se ud, når du er færdig med at redigere. Bemærk, at semikolon (;) fortæller OpenVPN ikke at læse eller udføre den næste linje (Listing 10.2).

Linux in action bog
Lad os gennemgå nogle af disse indstillinger.

  • Som standard kører OpenVPN på port 1194. Du kan ændre dette, for eksempel for yderligere at skjule dine aktiviteter eller undgå konflikter med andre aktive tunneler. Da 1194 kræver minimal koordinering med kunder, er det bedst at gøre det på denne måde.
  • OpenVPN bruger enten Transmission Control Protocol (TCP) eller User Datagram Protocol (UDP) til at overføre data. TCP kan være lidt langsommere, men det er mere pålideligt og mere tilbøjeligt til at blive forstået af programmer, der kører i begge ender af tunnelen.
  • Du kan angive dev tun, når du vil skabe en enklere, mere effektiv IP-tunnel, der bærer dataindhold og intet andet. Hvis du på den anden side skal forbinde flere netværksgrænseflader (og de netværk, de repræsenterer), og oprette en Ethernet-bro, bliver du nødt til at vælge dev tap. Hvis du ikke forstår, hvad det hele betyder, så brug tun-argumentet.
  • De næste fire linjer giver OpenVPN navnene på de tre godkendelsesfiler på serveren og dh2048-optionsfilen, du oprettede tidligere.
  • Serverlinjen indstiller rækkevidden og undernetmasken, der vil blive brugt til at tildele IP-adresser til klienter ved login.
  • Den valgfri push-parameter "rute 10.0.3.0 255.255.255.0" tillader fjernklienter at få adgang til private undernet bag serveren. For at få dette til at fungere kræver det også, at netværket opsættes på selve serveren, så det private undernet kender til OpenVPN-undernettet (10.8.0.0).
  • Port-share localhost 80-linjen giver dig mulighed for at omdirigere klienttrafik, der kommer på port 1194, til en lokal webserver, der lytter på port 80. (Dette vil være nyttigt, hvis du skal bruge webserveren til at teste din VPN.) Dette virker kun. derefter når tcp-protokollen er valgt.
  • Brugeren ingen- og gruppe-nogroup-linjer skal aktiveres ved at fjerne semikolonerne (;). At tvinge fjernklienter til at køre som ingen og ingen gruppe sikrer, at sessioner på serveren er uprivilegerede.
  • log angiver, at aktuelle logposter vil overskrive gamle poster hver gang OpenVPN startes, mens log-append tilføjer nye poster til den eksisterende logfil. Selve openvpn.log-filen skrives til mappen /etc/openvpn/.

Derudover tilføjes en klient-til-klient-værdi også ofte til konfigurationsfilen, så flere klienter kan se hinanden ud over OpenVPN-serveren. Hvis du er tilfreds med din konfiguration, kan du starte OpenVPN-serveren:

# systemctl start openvpn

På grund af den skiftende karakter af forholdet mellem OpenVPN og systemd, kan følgende syntaks nogle gange være påkrævet for at starte en tjeneste: systemctl start openvpn@server.

Kørsel af ip-adr for at vise din servers netværksgrænseflader skulle nu udsende et link til en ny grænseflade kaldet tun0. OpenVPN vil oprette det for at betjene indgående kunder:

$ ip addr
[...]
4: tun0: mtu 1500 qdisc [...]
      link/none
      inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
          valid_lft forever preferred_lft forever

Du skal muligvis genstarte serveren, før alt begynder at fungere fuldt ud. Næste stop er klientcomputeren.

10.1.2. Konfiguration af OpenVPN-klienten

Traditionelt bygges tunneller med mindst to udgange (ellers ville vi kalde dem huler). Et korrekt konfigureret OpenVPN på serveren dirigerer trafik ind og ud af tunnelen på den ene side. Men du skal også bruge noget software, der kører på klientsiden, det vil sige i den anden ende af tunnelen.

I dette afsnit vil jeg fokusere på manuelt at konfigurere en type Linux-computer til at fungere som en OpenVPN-klient. Men det er ikke den eneste måde, hvorpå denne mulighed er tilgængelig. OpenVPN understøtter klientapplikationer, der kan installeres og bruges på stationære og bærbare computere, der kører Windows eller macOS, samt Android og iOS smartphones og tablets. Se openvpn.net for detaljer.

OpenVPN-pakken skal installeres på klientmaskinen, som den blev installeret på serveren, selvom der ikke er behov for easy-rsa her, da de nøgler, du bruger, allerede eksisterer. Du skal kopiere client.conf skabelonfilen til mappen /etc/openvpn/, som du lige har oprettet. Denne gang vil filen ikke blive zippet, så den almindelige cp-kommando vil klare opgaven fint:

# apt install openvpn
# cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf 
  /etc/openvpn/

De fleste af indstillingerne i din client.conf-fil vil være ret selvforklarende: de skal matche værdierne på serveren. Som du kan se fra følgende eksempelfil, er den unikke parameter remote 192.168.1.23 1194, som fortæller klienten serverens IP-adresse. Igen, sørg for, at dette er din serveradresse. Du bør også tvinge klientcomputeren til at bekræfte ægtheden af ​​servercertifikatet for at forhindre et muligt man-in-the-middle-angreb. En måde at gøre dette på er at tilføje linjen remote-cert-tls server (liste 10.3).

Linux in action bog
Du kan nu gå til mappen /etc/openvpn/ og udtrække certificeringsnøglerne fra serveren. Erstat serverens IP-adresse eller domænenavn i eksemplet med dine værdier:

Linux in action bog
Der vil sandsynligvis ikke ske noget spændende, før du kører OpenVPN på klienten. Da du skal sende et par argumenter, gør du det fra kommandolinjen. --tls-client-argumentet fortæller OpenVPN, at du vil fungere som en klient og oprette forbindelse via TLS-kryptering, og --config peger på din konfigurationsfil:

# openvpn --tls-client --config /etc/openvpn/client.conf

Læs kommandoudgangen omhyggeligt for at sikre, at du er tilsluttet korrekt. Hvis noget går galt første gang, kan det skyldes uoverensstemmelser i indstillingerne mellem serveren og klientens konfigurationsfiler eller et problem med netværksforbindelse/firewall. Her er nogle tip til fejlfinding.

  • Læs omhyggeligt outputtet af OpenVPN-operationen på klienten. Den indeholder ofte værdifulde råd om, hvad der præcist ikke kan lade sig gøre, og hvorfor.
  • Tjek fejlmeddelelserne i filerne openvpn.log og openvpn-status.log i mappen /etc/openvpn/ på serveren.
  • Tjek systemlogfilerne på serveren og klienten for OpenVPN-relaterede og tidsindstillede meddelelser. (journalctl -ce vil vise de seneste poster.)
  • Sørg for, at du har en aktiv netværksforbindelse mellem serveren og klienten (mere om dette i kapitel 14).

Om forfatteren

David Clinton - systemadministrator, underviser og skribent. Han har administreret, skrevet om og skabt undervisningsmateriale til mange vigtige tekniske discipliner, herunder Linux-systemer, cloud computing (især AWS) og containerteknologier såsom Docker. Han skrev bogen Learn Amazon Web Services in a Month of Lunches (Manning, 2017). Mange af hans videotræningskurser kan findes på Pluralsight.com, og links til hans andre bøger (om Linux-administration og servervirtualisering) er tilgængelige på bootstrap-it.com.

» Flere detaljer om bogen kan findes på forlagets hjemmeside
» indholdsfortegnelse
» Uddrag

For Khabrozhiteley 25% rabat ved brug af kupon - Linux
Ved betaling af papirversionen af ​​bogen fremsendes en elektronisk bog på e-mail.

Kilde: www.habr.com

Tilføj en kommentar