Boka «Linux i praksis»

Boka «Linux i praksis» Hei, Habr-brukere! I boken beskriver David Clinton 12 virkelige prosjekter, inkludert automatisering av backup- og gjenopprettingssystemer, oppsett av personlig lagringssky i stil med Dropbox og oppretting av en egen MediaWiki-server. Gjennom interessante eksempler vil du lÊre om virtualisering, katastrofegjenoppretting, sikkerhetsimplementering, backup, DevOps-implementering og feilsÞking av systemet. Hvert kapittel avsluttes med en oversikt over praktiske anbefalinger, et ordliste med nye termer og Þvelser.

Utdrag «10.1. Oppretting av OpenVPN-tunnel»

I denne boken har jeg allerede nevnt en del om kryptering. SSH og SCP kan beskytte data som overfĂžres over eksterne tilkoblinger (kapittel 3), kryptering av filer kan beskytte data lagret pĂ„ serveren (kapittel 8), og TLS/SSL-sertifikater kan beskytte data under overfĂžrsel mellom nettsteder og klientlesere (kapittel 9). Men noen ganger krever dataene dine beskyttelse i et bredere spekter av forbindelser. For eksempel mĂ„ noen medlemmer av teamet kanskje jobbe pĂ„ farten, og koble seg til nettverket via Wi-Fi gjennom offentlige hotspots. Det er definitivt ikke en god idĂ© Ă„ anta at alle slike hotspots er sikre, men folkene dine trenger virkelig en mĂ„te Ă„ koble seg til selskapets ressurser — og i sĂ„ fall kan en VPN hjelpe.

En godt designet VPN-tunnel gir en direkte tilkobling mellom fjernklienter og serveren pÄ en mÄte som skjuler dataene nÄr de overfÞres over et usikkert nettverk. Og sÄ? Du har sikkert sett mange verktÞy som kan gjÞre dette med kryptering. Den virkelige verdien av en VPN er at nÄr en tunnel Äpnes, kan man koble til fjerne nettverk som om de alle var sammen lokale. PÄ en mÄte bruker du en omgÄelse.

Ved Ä bruke et slikt utvidet nettverk kan administratorer utfÞre arbeidet sitt pÄ serverne sine fra hvor som helst. Men enda viktigere, et selskap med ressurser fordelt pÄ flere filialer kan gjÞre dem alle synlige og tilgjengelige for alle grupper som trenger dem, uansett hvor de befinner seg (se fig. 10.1).

Selv om en tunnel i seg selv ikke garanterer sikkerhet, kan en standard krypteringsmetode integreres i nettverksstrukturen, noe som betydelig Þker sikkerhetsnivÄet. Tunneler laget med OpenVPNs Äpen kildekode-pakke bruker den samme TLS/SSL-krypteringen som du allerede har lest om. OpenVPN er ikke den eneste tilgjengelige lÞsningen for tunneling, men det er en av de mest kjente. Man regner med at det er litt raskere og tryggere enn den alternative lag 2 tunnelprotokollen som bruker IPsec-kryptering.

Vil du at alle i teamet ditt skal kommunisere sikkert med hverandre mens de er pÄ farten eller jobber i forskjellige bygninger? For dette mÄ du sette opp en OpenVPN-server for Ä tillate deling av applikasjoner og tilgang til den lokale nettverksmiljÞet til serveren. For at dette skal fungere, er det tilstrekkelig Ä starte to virtuelle maskiner eller to containere: en for Ä fungere som server/vert, og den andre som klient. Opprettelsen av en VPN er en komplisert prosess, sÄ det kan vÊre lurt Ä ta et par minutter for Ä fÄ et helhetlig bilde.

Boka «Linux i praksis»

10.1.1. Konfigurering av OpenVPN-server

FÞr du begynner, vil jeg gi deg et nyttig tips. Hvis du planlegger Ä gjÞre alt selv (og jeg anbefaler pÄ det sterkeste at du gjÞr det), vil du sannsynligvis ende opp med flere terminalvinduer Äpne pÄ skrivebordet, hver koblet til sin egen maskin. Det er en risiko for at du en gang skriver en kommando feil i et vindu. For Ä unngÄ dette kan du bruke kommandoen hostname for Ä endre navnet pÄ maskinen som vises i kommandolinjen til noe som klart vil si deg hvor du befinner deg. NÄr du har gjort dette, mÄ du logge av serveren og logge inn igjen for at de nye innstillingene skal tre i kraft. Slik ser det ut:

Boka «Linux i praksis»
Ved Ă„ fĂžlge denne tilnĂŠrmingen og gi passende navn til hver av maskinene du arbeider med, vil du enkelt kunne holde oversikt over hvor du befinner deg.

Etter Ä ha brukt hostname, kan du stÞte pÄ irriterende meldinger som Unable to Resolve Host OpenVPN-Server nÄr du kjÞrer pÄfÞlgende kommandoer. Oppdatering av filen /etc/hosts med det aktuelle nye vertsnavnet bÞr lÞse problemet.

Forberede serveren din for OpenVPN

For OpenVPN installation on your server, two packages are required: openvpn and easy-rsa (to manage the key generation process). CentOS users should first install the epel-release repository if necessary, as you did in Chapter 2. To check access to the server application, you may also install the Apache web server (apache2 for Ubuntu and httpd for CentOS).

While configuring the server, I recommend activating the firewall to block all ports except for 22 (SSH) and 1194 (the default OpenVPN port). This example illustrates how ufw works in Ubuntu, but I am sure you still remember the firewalld program from Chapter 9:

# ufw enable
# ufw allow 22
# ufw allow 1194

To enable internal routing between network interfaces on the server, you need to uncomment one line (net.ipv4.ip_forward = 1) in the /etc/sysctl.conf file. This will allow remote clients to be routed as needed after they connect. To apply the new setting, run sysctl -p:

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

Now the server environment is fully configured, but there is still something to do before you are ready: you will need to follow these steps (we will discuss them in detail later).

  1. Create a set of encryption keys for the public key infrastructure (PKI) on the server using the scripts provided with the easy-rsa package. Essentially, the OpenVPN server also acts as its own certificate authority (CA).
  2. Prepare the corresponding keys for the client
  3. Configure the server's server.conf file
  4. Set up your OpenVPN client
  5. Check your VPN

Key Generation

To simplify matters, you can set up your key infrastructure on the same machine where the OpenVPN server is running. However, security recommendations typically suggest using a separate CA server for deployments in a production environment. The process of generating and distributing encryption key resources for use in OpenVPN is illustrated in Figure 10.2.

Boka «Linux i praksis»
When you installed OpenVPN, a directory /etc/openvpn/ was created automatically, but it is currently empty. The openvpn and easy-rsa packages come with example template files that you can use as a basis for your configuration. To start the certification process, copy the easy-rsa template directory from /usr/share/ to /etc/openvpn and navigate to the easy-rsa/ directory:

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

Katalogen easy-rsa vil nÄ inneholde en del skript. I tabell 10.1 er verktÞyene som du vil bruke for Ä opprette nÞkler opplistet.

Boka «Linux i praksis»

De listede operasjonene krever root-rettigheter, sÄ du mÄ bli root ved hjelp av sudo su.

Den fÞrste filen du skal jobbe med, heter vars og inneholder miljÞvariabler som easy-rsa bruker under nÞkkelgenereringen. Du mÄ redigere filen for Ä bruke dine egne verdier i stedet for standardverdiene som allerede finnes. Slik vil min fil se ut (listing 10.1).

Listing 10.1. Viktige deler av 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="info@bootstrap-it.com"
export KEY_OU="IT"

Å kjĂžre filen vars vil overfĂžre verdiene til skjellmiljĂžet, derfra vil de bli inkludert i innholdet av de nye nĂžklene dine. Hvorfor fungerer ikke sudo-kommandoen alene? Fordi vi pĂ„ det fĂžrste trinnet redigerer skriptet som heter vars, og deretter anvender det. Anvendelse betyr at filen vars overfĂžrer sine verdier til skjellmiljĂžet, derfra vil de bli inkludert i innholdet av de nye nĂžklene dine.

SÞrg for Ä kjÞre filen pÄ nytt ved Ä bruke en ny skjelle for Ä fullfÞre den ufullstendige prosessen. NÄr dette er gjort, vil skriptet be deg om Ä kjÞre et annet skript, clean-all, for Ä fjerne alt innhold i katalogen /etc/openvpn/easy-rsa/keys/:

Boka «Linux i praksis»
Naturligvis vil neste steg vĂŠre Ă„ kjĂžre skriptet clean-all, etterfulgt av build-ca, som bruker skriptet pkitool for Ă„ opprette rotsertifikatet. Du vil bli bedt om Ă„ bekrefte identifikasjonsinnstillingene som er gitt av vars:

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

Deretter kommer skriptet build-key-server. Siden det bruker det samme skriptet pkitool sammen med det nye rotsertifikatet, vil du se de samme spÞrsmÄlene for Ä bekrefte opprettelsen av nÞkkelparet. NÞkler vil fÄ navn basert pÄ argumentene du sender, som vanligvis vil vÊre server, som i eksempelet, med mindre du kjÞrer flere VPN-er pÄ denne datamaskinen:

# ./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 bruker parametere generert ved hjelp av Diffie-Hellman-algoritmen (ved bruk av build-dh) for Ä avtale autentisering for nye tilkoblinger. Filen som er opprettet her trenger ikke Ä vÊre hemmelig, men den mÄ genereres ved hjelp av scriptet build-dh for de aktive RSA-nÞklene. Hvis du oppretter nye RSA-nÞkler i fremtiden, mÄ du ogsÄ oppdatere filen basert pÄ Diffie-Hellman-algoritmen:

# ./build-dh

NÞklene dine pÄ serveren vil nÄ havne i katalogen /etc/openvpn/easy-rsa/keys/, men OpenVPN vet ikke om dette. Som standard vil OpenVPN lete etter nÞkler 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 av klientkrypteringsnĂžkler

Som du allerede har sett, brukes par av tilsvarende nÞkler i TLS-kryptering: én er plassert pÄ serveren, og den andre er pÄ den eksterne klienten. Dette betyr at du trenger klientnÞkler. VÄr gamle venn pkitool er akkurat det som trengs for dette. I dette eksemplet, ved Ä kjÞre programmet i katalogen /etc/openvpn/easy-rsa/, sender vi den argumentet client for Ä generere filer kalt client.crt og client.key:

# ./pkitool client

De to klientfilene sammen med den originale filen ca.crt, som fortsatt ligger i katalogen keys/, mÄ nÄ trygt overfÞres til klienten din. PÄ grunn av eierskapet og tillatelsene kan dette vise seg Ä vÊre en utfordring. Den enkleste tilnÊrmingen er Ä manuelt kopiere innholdet i den originale filen (og ingenting annet enn dette innholdet) til terminalen som kjÞrer pÄ skrivebordet til PC-en din (merk teksten, hÞyreklikk pÄ den og velg Kopier i menyen). Deretter limer du dette inn i en ny fil med samme navn som du lager i den andre terminalen som er koblet til klienten din.

Men noen kan jo bare kopiere og lime inn. Tenk heller som en administrator, for du vil ikke alltid ha tilgang til et GUI der kutt og lim operasjonen er mulig. Kopier filene inn i hjemmeomrĂ„det til brukeren din (slik at den eksterne操䜜 scp kan fĂ„ tilgang til dem), og deretter, ved hjelp av chown, endre eier av filene fra root til en vanlig bruker uten root-rettigheter, slik at du kan utfĂžre den eksterne操䜜 scp. SĂžrg for at alle filene dine er pĂ„ plass og tilgjengelige for Ăžyeblikket. Du vil flytte dem til klienten litt 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 fullt sett av krypteringsnÞkler klare til bruk, mÄ du informere serveren om hvordan du Þnsker Ä opprette en VPN. Dette gjÞres via filen server.conf.

Reduserer antall tastetrykk

Er det for mye du mÄ skrive? Utvidelsen med parenteser vil redusere disse seks kommandoene til to. Jeg er sikker pÄ at du vil klare Ä lÊre disse to eksemplene og forstÄ hva som skjer. Hva som er enda viktigere, du vil kunne forstÄ hvordan Ä bruke disse prinsippene i operasjoner som involverer dusinvis eller til og med hundrevis av elementer:

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

Konfigurering av filen server.conf

Hvordan kan du vite hvordan filen server.conf skal se ut? Husk malmappen easy-rsa som du kopierte fra /usr/share/? Ved installasjon av OpenVPN ble det igjen en komprimert mal konfigurasjonsfil, som du kan kopiere til /etc/openvpn/. Jeg vil ta utgangspunkt i at malen er arkivert, og jeg vil introdusere deg for et nyttig verktĂžy: zcat.

Du vet allerede om Ä vise tekstinnholdet i en fil pÄ skjermen ved hjelp av kommandoen cat, men hva om filen er komprimert med gzip? Du kan alltid pakke ut filen, og sÄ vil cat vise den med glede, men det er ett eller to trinn mer enn nÞdvendig. I stedet, som du kanskje har gjettet, kan du bruke kommandoen zcat for Ä laste den utpakkede teksten inn i minnet i ett steg. I neste eksempel vil du i stedet for Ä skrive teksten pÄ skjermen, omdirigere den til en ny fil ved navn server.conf:

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

La oss se bort fra den omfattende og nyttige dokumentasjonen som fÞlger med filen, og se hvordan den kan se ut nÄr du er ferdig med redigering. Legg merke til at semikolon (;) indikerer at OpenVPN ikke skal lese eller utfÞre neste linje (oppfÞring 10.2).

Boka «Linux i praksis»
La oss gÄ gjennom noen av disse innstillingene.

  • Som standard kjĂžrer OpenVPN gjennom port 1194. Du kan endre dette, for eksempel for Ă„ skjule aktivitetene dine enda mer eller unngĂ„ konflikter med andre aktive tunneler. Siden 1194 krever minimal koordinering med klientene, er det best Ă„ gjĂžre det pĂ„ denne mĂ„ten.
  • OpenVPN bruker enten Transmission Control Protocol (TCP) eller User Datagram Protocol (UDP) for datatransport. TCP kan vĂŠre litt tregere, men det er mer pĂ„litelig og er mer sannsynlig Ă„ bli forstĂ„tt av applikasjoner som kjĂžrer i begge ender av tunnelen.
  • Du kan spesifisere dev tun nĂ„r du Ăžnsker Ă„ opprette en enklere og mer effektiv IP-tunnel som kun overfĂžrer data. Hvis du derimot mĂ„ koble til flere nettverksgrensesnitt (og nettverkene de representerer) ved Ă„ opprette en Ethernet-bro, mĂ„ du velge dev tap. Hvis du ikke forstĂ„r hva dette betyr, bruk argumentet tun.
  • De fĂžlgende fire linjene overfĂžrer OpenVPN navnene pĂ„ tre autentiseringsfiler pĂ„ serveren og filen med dh2048-parametere som du opprettet tidligere.
  • Linjen server setter rekkevidden og subnettmasken som skal brukes for Ă„ tildele IP-adresser til klienter ved innlogging.
  • Den valgfrie parameteren push "route 10.0.3.0 255.255.255.0" gir fjerntliggende klienter tilgang til private subnett bak serveren. For at dette skal fungere, er det ogsĂ„ nĂždvendig Ă„ konfigurere nettverket pĂ„ selve serveren slik at det private subnettet er kjent for OpenVPN-subnettet (10.8.0.0).
  • Linjen port-share localhost 80 lar deg videresende klienttrafikk som kommer inn gjennom port 1194 til en lokal webserver som lytter pĂ„ port 80. (Dette vil vĂŠre nyttig dersom du planlegger Ă„ bruke webserveren for Ă„ teste VPN-en din.) Dette fungerer kun nĂ„r tcp-protokollen er valgt.
  • Linjene user nobody og group nogroup mĂ„ vĂŠre aktive – for dette mĂ„ semikolonene (;) fjernes. Å tvinge fjerntliggende klienter til Ă„ kjĂžre under nobody og nogroup sikrer at Ăžktene pĂ„ serveren er upprivilegerte.
  • log angir at nĂ„vĂŠrende loggoppfĂžringer vil overskrive gamle oppfĂžringer ved hver oppstart av OpenVPN, mens log-append legger til nye oppfĂžringer i den eksisterende loggfilen. Selve filen openvpn.log skrives til katalogen /etc/openvpn/.

I tillegg legges ofte verdien client-to-client til konfigurasjonsfilen for at flere klienter skal kunne se hverandre i tillegg til OpenVPN-serveren. NÄr du er fornÞyd med konfigurasjonen din, kan du starte OpenVPN-serveren:

# systemctl start openvpn

PĂ„ grunn av den skiftende naturen i forholdet mellom OpenVPN og systemd, kan det kreves en slik syntaks for Ă„ starte tjenesten: systemctl start openvpn@server.

KjÞring av ip addr for Ä vise listen over nettverksgrensesnitt pÄ serveren din skal nÄ gi en referanse til det nye grensesnittet med navnet tun0. OpenVPN vil opprette det for Ä hÄndtere innkommende klienter:

$ 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 mÄ kanskje starte serveren pÄ nytt fÞr alt fungerer som det skal. Neste stopp er klientmaskinen.

10.1.2. Konfigurering av OpenVPN-klienten

Tradisjonelt bygges tunneler med minst to utganger (ellers ville vi kalt dem huler). En riktig konfigurert OpenVPN-server dirigerer trafikk inn i tunnelen og ut av den fra den ene siden. Men du trenger ogsÄ programvare som kjÞrer pÄ klientsiden, det vil si i den andre enden av tunnelen.

I dette avsnittet skal jeg fokusere pÄ manuell konfigurasjon av en Linux-maskin av en eller annen type som OpenVPN-klient. Men dette er ikke den eneste mÄten Ä oppnÄ dette pÄ. OpenVPN stÞtter klientapplikasjoner som kan installeres og brukes pÄ skrivebordsdatamaskiner og bÊrbare datamaskiner som kjÞrer Windows eller macOS, samt pÄ smarttelefoner og nettbrett som kjÞrer Android og iOS. Se detaljer pÄ openvpn.net.

OpenVPN-pakken mÄ installeres pÄ klientmaskinen, akkurat som den ble installert pÄ serveren, selv om det ikke er nÞdvendig med easy-rsa her, ettersom nÞklene du bruker allerede eksisterer. Du mÄ kopiere malfilen client.conf til katalogen /etc/openvpn/, som nettopp har blitt opprettet. Denne gangen vil filen ikke bli arkivert, sÄ den normale cp-kommandoen vil gjÞre jobben bra:

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

De fleste innstillingene i din client.conf-fil vil vÊre ganske forstÄelige: de skal samsvare med verdiene pÄ serveren. Som du kan se av det fÞlgende eksemplet pÄ en fil, er den unike parameteren remote 192.168.1.23 1194, som angir klientens IP-adresse til serveren. SÞrg igjen for at dette er adressen til din server. Du mÄ ogsÄ sÞrge for at klientmaskinen verifiserer sertifikatet fra serveren for Ä forhindre en potensiell 'man-in-the-middle'-angrep. En mÄte Ä gjÞre dette pÄ er Ä legge til linjen remote-cert-tls server (listing 10.3).

Boka «Linux i praksis»
NÄ kan du gÄ til katalogen /etc/openvpn/ og trekke ut sertifikasjonsnÞklene fra serveren. Erstatt serverens IP-adresse eller domenenavn i eksemplet med dine verdier:

Boka «Linux i praksis»
Det vil mest sannsynlig ikke skje noe spennende fĂžr du starter OpenVPN pĂ„ klienten. Siden du mĂ„ spesifisere et par argumenter, gjĂžr du dette fra kommandolinjen. Argumentet —tls-client informerer OpenVPN om at du vil fungere som klient og koble til via TLS-kryptering, mens —config peker pĂ„ konfigurasjonsfilen din:

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

Les nÞye gjennom utdataene fra kommandoen for Ä forsikre deg om at du er korrekt tilkoblet. Hvis noe gÄr galt fÞrste gang, kan det skyldes en mismatch mellom server- og klientkonfigurasjonsfilene eller et nettverks-/brannmurproblem. Her er noen tips for feilsÞking.

  • Les nĂžye gjennom utdataene fra OpenVPN-operasjonen pĂ„ klienten. Den inneholder ofte verdifulle ledetrĂ„der om hva som ikke kan utfĂžres og hvorfor.
  • Sjekk feilmeldinger i filene openvpn.log og openvpn-status.log i katalogen /etc/openvpn/ pĂ„ serveren.
  • Sjekk tidssynkroniserte meldinger relatert til OpenVPN i systemloggene pĂ„ serveren og klienten. (journalctl -ce vil vise de nyeste postene.)
  • Forsikre deg om at du har en aktiv nettverksforbindelse mellom serveren og klienten (les mer i kapittel 14).

Om forfatteren

David Clinton — systemadministrator, lĂŠrer og forfatter. Han har administrert, skrevet om og laget lĂŠremateriell for mange viktige tekniske disipliner, inkludert Linux-systemer, sky computing (spesielt AWS) og containerteknologier som Docker. Han har skrevet boken Learn Amazon Web Services in a Month of Lunches (Manning, 2017). Mange av hans lĂŠringsvideoer finnes pĂ„ Pluralsight.com, og lenker til andre bĂžker hans (om Linux-administrasjon og servervirtualisering) er tilgjengelige pĂ„ bootstrap-it.com.

» Du kan lese mer om boken pÄ forlagets nettsted
» Innholdsfortegnelse
» Utdrag

For Habr-brukere er det 25% rabatt med kupongen — Linux
NÄr den trykte versjonen av boken er betalt, vil e-boken bli sendt til e-posten din.

Kilde: habr.com

KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster