Anonim

Det är 2017, och att använda ett VPN har blivit en icke-brainer. Mellan massorna av externa sekretessproblem och din egen internetleverantör att kunna sälja din surfhistorik finns det egentligen inget som motiverar att du inte använder en.

Visst, du kan betala en av de hundratals VPN-tjänster som finns där ute, men än en gång litar du på någon annan med dina data. De flesta är i själva verket fantastiska, men om du vill ha fullständig kontroll kan du bygga din egen VPN på en V irtual P rivate S erver (VPS) eller hyra din egen privata server, om du känner för att vara riktigt hardcore med det.

Allt du behöver för att bygga ett VPN är openVPN-programvaran och Linux (eller BSD) med öppen källkod. Konfigurationen kan vara involverad, men det är inte omöjligt att någon med ens grundläggande Linux-färdigheter drar ut på en distribution som Ubuntu.

För den här guiden kommer du att behöva en VPS som kör Ubuntu. Du kan hämta en mycket lätt från någon som DigitalOcean eller Linode . Följ deras grundläggande säkerhetsguider för att få konfigurerat. Se till att du inte gör grundläggande misstag som att tillåta root-åtkomst via SSH.

Tänk också på att det här du kommer att göra hela installationen i kommandoraden över SSH till din VPS. Det finns inget som kräver ett galet belopp på Linux-kunskap, men var beredd att skriva istället för att klicka.

Få vad du behöver

snabblänkar

  • Få vad du behöver
  • Ställ in brandväggen
    • Hitta gränssnittet
    • Grunderna för Iptables
    • Ställ in dina regler
      • Loopback
      • Ping
      • SSH
      • OpenVPN
      • DNS
      • HTTP / S
      • NTP
      • TUN
      • Skogsavverkning
      • Avvisa allt annat
      • NAT Masquerading
    • Framåt IPv4-trafik
    • Stoppa alla IPv6-anslutningar
    • Importera och spara till Iptables

Ubuntu paketerar och distribuerar OpenVPN i sina förvar. Du behöver bara använda apt för att installera det. Du behöver också verktyget för att generera krypteringsnycklar. Installera dem båda.

$ sudo apt installera openvpn easy-rsa

Ställ in brandväggen

Därefter måste du ta hand om brandväggen. Det är en viktig del för att hålla din VPN säker och förhindra både dataläckage och oönskad åtkomst.

Iptables är den viktigaste brandväggen för Linux, och det är ditt bästa alternativ för att kontrollera åtkomst till Ubuntu portar. Du har redan installerat det så att du kan börja ställa in dina brandväggsregler.

Hitta gränssnittet

Innan du börjar skriva regler i iptables ska du ta reda på vilket gränssnitt din server är ansluten till Internet med. Kör ifconfig för att visa dina nätverksgränssnitt. Den som har en inet addr: matchning av IP-adressen som du är ansluten till är rätt gränssnitt.

Grunderna för Iptables

Det är vanligtvis inte bra att slumpmässigt kopiera och klistra in saker i terminalen från Internet. Detta gäller särskilt när du har att göra med säkerhetsämnen. Så ta lite tid här för att lära dig lite om regler för iptables innan du börjar ange dem.

Ta en titt på detta exempel på en iptables-regel.

-En INPUT -i eth0 -p tcp -m state – stat ESTABLISERAD –port 443 -j ACCEPT

Okej, så -A betyder att du kommer att lägga till en ny regel. Då betyder INPUT att det kommer att gälla inmatning till din server. Det finns också en UTGÅNG. Flaggan -i berättar iptables vilket gränssnitt denna regel är för. Du kan ange vilket protokoll regeln är för med -p. Denna regel hanterar tcp. -m anger ett villkor som en anslutning måste uppfylla. I det här fallet måste det matcha det angivna tillståndet. Naturligtvis anger sedan –stat ett tillstånd, i detta fall en ETABLERAD anslutning. Nästa del beskriver iptables vilken port denna regel är avsedd för. Det är port 443, HTTPS-porten, här. Den sista flaggan är -j. Det står för "hoppa", och det säger iptables vad man ska göra med anslutningen. Om denna anslutning uppfyllde alla krav i regeln, skulle iptables acceptera den.

Ställ in dina regler

Så du bör ha en allmän uppfattning om hur iptables-regler fungerar nu. Resten av det här avsnittet kommer att berätta hur du ställer in dina regler bit för bit.

Det bästa sättet att skapa en uppsättning iptables-regler är att skapa en fil som innehåller alla. Sedan kan du importera allt till iptables på en gång. Att ställa regler en och en kan bli förvirrande, särskilt om du startar en ny uppsättning regler från början.

Skapa en fil i katalogen / tmp för att bygga dina regler.

$ vim / tmp / ipv4

Starta filen med * filter. Detta säger iptables att det som följer kommer att vara regler för paketfiltrering.

Loopback

Det första avsnittet av regler låser upp loopback-gränssnittet. De berättar för iptables att servern ska ta emot trafik från sig själv i loopback-gränssnittet. Det bör också avvisa trafik som kommer från sig själv som inte kommer från loopback.

-En INPUT -i lo -j ACCEPT-EN INPUT! -i lo -s 127.0.0.0/8 -j REJECT -A OUTPUT -o lo -j ACCEPT

Ping

Låt sedan ping. Du borde kunna pinga din server för att se till att den är online om den annars inte kan nås. I det här fallet är det bara ekofrågor som tillåts och servern tillåter sig att skicka ICMP-utgång.

-En INPUT -p icmp -m-tillstånd - stat NY - micmp-typ 8 -j ACCEPT -A INPUT -p icmp -m-tillstånd - stat ESTABLISERAD, RELATERAD -J ACCEPT -A UTGÅNG -p icmp -j ACCEPT

SSH

Du behöver SSH. Det är det enda sättet du kan nå din server. SSH-reglerna är specifika för ditt internetgränssnitt, så se till att du ersätter eth0 för vilket gränssnitt din server faktiskt använder.

Det kan också vara en bra idé att ändra dina SSH-anslutningar från port 22, eftersom det är det standard som potentiella angripare skulle försöka. Om du gör det, se till att du ändrar det i dina iptables-regler också.

-En INPUT -i eth0 -p tcp -m state - stat NY, INSTABLISERAD - port 22 -j ACCEPT -A OUTPUT -o eth0 -p tcp -m state - stat ESTABLISERAD - sport 22 -j ACCEPT

OpenVPN

Den här nästa delen tillåter trafik till och från OpenVPN-servern via UDP.

-En INPUT -i eth0 -p udp -m state - stat NY, ETABLERAD - port 1194 -j ACCEPT -A OUTPUT -o eth0 -p udp -m state - stat ESTABLISERAD - sport 1194 -j ACCEPT

DNS

Tillåt nu DNS-anslutningar via UDP och TCP. Du vill att ditt VPN ska hantera DNS, inte din ISP. Det är en del av anledningen till att du skapar ett VPN i första hand.

-En INPUT -i eth0 -p udp -m state - stat ESTABLISERAD - sport 53 -j ACCEPT -A OUTPUT -o eth0 -p udp -m state - stat NY, ETABLERAD - port 53 -j ACCEPT -A INPUT -i eth0 -p tcp -m state - stat ESTABLISERAD - sport 53 -j ACCEPT -A OUTPUT -o eth0 -p tcp -m state - stat NEW, ESTABLISHED --port 53 -j ACCEPT

HTTP / S

För att Ubuntu ska kunna uppdatera sig själv måste du lägga till en uppsättning regler för att tillåta utgående anslutning av HTTP och HTTPS. Observera att dessa regler endast tillåter servern att starta HTTP-anslutningar, så du kan inte använda den som en webbserver eller ansluta till den via port 80 eller port 443

-En INPUT -i eth0 -p tcp -m-stat - stat ESTABLISERAD - sport 80 -j ACCEPT -A INPUT -i eth0 -p tcp -m-stat - stat ESTABLISERAD - sport 443 -j ACCEPT -A OUTPUT - o eth0 -p tcp -m state - stat NYA, INSTABLISERAD - port 80 -j ACCEPT -A OUTPUT -o eth0 -p tcp -m state - stat NEW, ESTABLISHED --port 443 -j ACCEPT

NTP

För att få din serverklocka att fungera ordentligt behöver du NTP. NTP tillåter din server att synkronisera med tidsservrar runt om i världen. Att ha en felaktig klocka på servern kan orsaka anslutningsproblem, så att köra NTP är en bra idé. Återigen bör du bara acceptera utgående och redan etablerade anslutningar.

-En INPUT -i eth0 -p udp -m state - stat ESTABLISERAD - sport 123 -j ACCEPT -A OUTPUT -o eth0 -p udp -m state - stat NY, ETABLERAD - port 123 -j ACCEPT

TUN

Avblockera TUN-gränssnittet som OpenVPN använder för att tunnelna trafik.

-En INPUT -i tun0 -j ACCEPT -A FRAMTID -i tun0 -j ACCEPT -A OUTPUT -o tun0 -j ACCEPT

Du måste tillåta TUN att vidarebefordra trafik till ditt vanliga gränssnitt för VPN. Du hittar den IP-adressen i OpenVPN-konfigurationen. Om du ändrar det i konfigurationen kan du också ändra det i dina regler.

-A FRAMTID -i tun0 -o eth0 -s 10.8.0.0/24 -j ACCEPT -A FRAMTID -m tillstånd - stat ETABLERAD, RELATERAD -J ACCEPT

Skogsavverkning

Det är en bra idé att föra loggar över allt som blir avvisat av iptables. I det här fallet betyder det allt som inte passar in i någon av dessa regler. Loggar låter dig se om det finns någon skadlig aktivitet eller några försök att göra något besvärligt mot din server.

-En INPUT -m gräns - begränsa 3 / min -j LOGG –logg-prefix “iptables_INPUT_denied:” –log-nivå 4
-En FRAMTID -m gräns –gräns 3 / min -j LOGG –logg-prefix “iptables_FORWARD_denied:” –log-nivå 4
-En UTGÅNG -m gräns - begränsa 3 / min -j LOGG –logg-prefix “iptables_OUTPUT_denied:” –log-nivå 4

Avvisa allt annat

Slutligen måste du blockera allt som inte passar in i dina regler. Det är verkligen syftet med att ha en brandvägg i första hand.

-En INGÅNG -j REJEKT-EN FRAMTID -J AVSÄTTA -En UTGÅNG -j AVSÄTTNING

Stäng filen med COMMIT för att berätta för iptables att begå alla reglerna.

NAT Masquerading

Du behöver anslutningarna från VPN för att se ut som om de kommer från själva servern. Det här stycket kan inte inkluderas i den vanliga iptables-filen eftersom den använder en annan tabell. Men det är okej, det är bara en rad.

$ sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Framåt IPv4-trafik

Du kommer att behöva aktivera vidarebefordran av IPv4-trafik, så att den kan gå mellan VPN och din servers faktiska nätverksgränssnitt. Öppna /etc/sysctl.d/99-sysctl.conf med sudo.

Hitta raden nedan och ta bort den genom att ta bort #.

net.ipv4.ip_forward = 1

Stoppa alla IPv6-anslutningar

Tyvärr är du inte klar med iptables än. Du måste blockera all IPv6-trafik. Denna OpenVPN-server stöder bara IPv4, vilket är bra, eftersom du inte kommer att stöta på en situation där du behöver IPv6. Som ett resultat kan alla IPv6-anslutningar potentiellt läcka information, vilket är motsatsen till vad du vill när du använder ett VPN.

Innan du ställer in reglerna för iptables måste du inaktivera IPv6 någon annanstans på systemet.

Lägg till följande rader till /etc/sysctl.d/99-sysctl.conf. Om du stängde det från föregående avsnitt öppnar du det igen med sudo.

net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 net.ipv6.conf.eth0.disable_ipv6 = 1

Aktivera dina ändringar.

$ sudo sysctl -p

Kommentera alla IPv6-rader i / etc / hosts. Du kommer att behöva sudo här också.

# :: 1 ip6-localhost ip6-loopback # fe00 :: 0 ip6-localnet # ff00 :: 0 ip6-mcastprefix # ff02 :: 1 ip6-allnodes # ff02 :: 2 ip6-allrouters

Till sist kan du skriva IPv6-iptablesreglerna. Skapa en fil för dem på / tmp / ipv6.

* filter -E INPUT -j REJECT -A FORWARD -j REJECT -A OUTPUT -j REJECT COMMIT

De är enkla. Avvisa allt.

Importera och spara till Iptables

Du måste importera dessa regler för att de ska kunna göra någonting. Så nu är det dags att göra det.

Börja med att rensa bort allt annat som finns där. Du vill inte att några gamla regler kommer i vägen.

$ sudo iptables -F && sudo iptables -X

Importera både dina IPv4- och IPv6-regler.

$ sudo iptables-återställa </ tmp / ipv4 $ sudo ip6tables-återställa </ tmp / ipv6

Du vill antagligen aldrig göra det igen. Så du kommer att behöva ett nytt paket för att spara dina regler permanent.

$ sudo apt installera iptables-persistent

Under installationen kommer paketet att be dig att spara dina befintliga regler. Svara "Ja."

Om du gör ändringar senare kan du också uppdatera dina sparade konfigurationer.

$ sudo service netfilter-persistent spara

Det tog ett tag, men din brandvägg är klar att gå. På nästa sida kommer vi att ta itu med att skapa nödvändiga krypteringsnycklar.

Klicka här: Nästa sida

Allt om vpns: hur du konfigurerar din egen vpn med openvpn (del 3)