Anonim

Jest rok 2017, a korzystanie z VPN stało się oczywiste. Pomiędzy mnóstwem zewnętrznych problemów związanych z prywatnością a własnym dostawcą usług internetowych, który jest w stanie sprzedać historię przeglądania, naprawdę nie ma uzasadnienia, aby z niej nie korzystać.

Jasne, możesz zapłacić jednej z setek usług VPN, ale jeszcze raz polegasz na danych z kimś innym. Większość z nich jest świetna, w rzeczywistości, ale jeśli chcesz mieć pełną kontrolę, możesz zbudować własną sieć VPN na wirtualnym serwerze prywatnym (VPS) lub wynająć własny prywatny serwer, jeśli masz na to ochotę.

Wszystko, czego potrzebujesz, aby zbudować VPN, to oprogramowanie OpenVPN typu open source i Linux (lub BSD). Konfiguracja może być zaangażowana, ale nie jest niemożliwe, aby ktoś z nawet podstawowymi umiejętnościami w Linuksie rozpoczął dystrybucję taką jak Ubuntu.

Do tego przewodnika potrzebujesz VPS z systemem Ubuntu. Możesz go bardzo łatwo odebrać od kogoś takiego jak DigitalOcean lub Linode . Postępuj zgodnie z ich podstawowymi instrukcjami bezpieczeństwa, aby się skonfigurować. Upewnij się, że nie popełniasz podstawowych błędów, takich jak zezwalanie na dostęp do konta root przez SSH.

Pamiętaj też, że będziesz to robił przez całą konfigurację w wierszu poleceń przez SSH do twojego VPS. Nic nie wymaga szalonej wiedzy na temat Linuksa, ale bądź przygotowany na pisanie zamiast klikania.

Zdobywanie tego, czego potrzebujesz

Szybkie linki

  • Zdobywanie tego, czego potrzebujesz
  • Skonfiguruj zaporę ogniową
    • Znajdź interfejs
    • Podstawy Iptables
    • Skonfiguruj swoje zasady
      • Loopback
      • Świst
      • SSH
      • OpenVPN
      • DNS
      • HTTP / S
      • NTP
      • KADŹ
      • Wycięcie lasu
      • Odrzuć wszystko inne
      • NAT Maskarada
    • Przekazywanie ruchu IPv4
    • Zatrzymaj wszystkie połączenia IPv6
    • Importuj i zapisuj w Iptables

Ubuntu pakuje i dystrybuuje OpenVPN w swoich repozytoriach. Aby go zainstalować, wystarczy użyć apt. Będziesz także potrzebować narzędzia do generowania kluczy szyfrujących. Zainstaluj je oba.

$ sudo apt install openvpn easy-rsa

Skonfiguruj zaporę ogniową

Następnie musisz zająć się zaporą ogniową. Jest to ważny element zapewniający bezpieczeństwo sieci VPN i zapobiegający zarówno wyciekom danych, jak i niepożądanemu dostępowi.

Iptables to główna zapora ogniowa dla systemu Linux i jest to najlepsza opcja do kontrolowania dostępu do portów Ubuntu. Będziesz już go zainstalować, abyś mógł zacząć konfigurować reguły zapory.

Znajdź interfejs

Zanim zaczniesz pisać reguły w iptables, dowiedz się, z jakim interfejsem Twój serwer jest podłączony do Internetu. Uruchom ifconfig, aby wyświetlić interfejsy sieciowe. Ten, który ma adres inet: dopasowanie adresu IP, z którym jesteś połączony, jest właściwym interfejsem.

Podstawy Iptables

Zwykle nie jest dobrym pomysłem losowe kopiowanie i wklejanie rzeczy do terminala z Internetu. Jest to szczególnie prawdziwe, gdy masz do czynienia z tematami bezpieczeństwa. Poświęć więc trochę czasu na zapoznanie się z regułami iptables, zanim zaczniesz je wprowadzać.

Spójrz na ten przykład reguły iptables.

-A WEJŚCIE -i eth0 -p tcp -m stan - stan USTANOWIONO - sport 443 -j AKCEPTUJ

W porządku, więc -A oznacza, że ​​będziesz dodawać nową regułę. Zatem INPUT oznacza, że ​​będzie to dotyczyło danych wejściowych na serwerze. Istnieje również WYJŚCIE. Flaga -i informuje iptables, dla którego interfejsu jest przeznaczona ta reguła. Możesz określić, dla którego protokołu ma być stosowana reguła, używając opcji -p. Ta reguła obsługuje tcp. -m określa warunek, który musi spełniać połączenie. W takim przypadku musi być zgodny z określonym stanem. Oczywiście wtedy –state określa stan, w tym przypadku USTANOWIONE połączenie. Następna część mówi iptables, dla którego portu jest przeznaczona ta reguła. Tutaj jest port 443, port HTTPS. Ostatnia flaga to -j. Oznacza „skok” i mówi iptables, co zrobić z połączeniem. Gdyby to połączenie spełniało wszystkie wymagania reguły, iptables AKCEPTUJE je.

Skonfiguruj swoje zasady

Powinieneś więc mieć ogólny pomysł na to, jak działają reguły iptables. W dalszej części tej sekcji dowiesz się, jak ustawić zasady kawałek po kawałku.

Najlepszym sposobem na utworzenie zestawu reguł iptables jest utworzenie pliku zawierającego je wszystkie. Następnie możesz zaimportować wszystko do iptables jednocześnie. Ustalanie reguł jeden po drugim może być mylące, szczególnie jeśli zaczynasz nowy zestaw reguł od zera.

Utwórz plik w katalogu / tmp, aby zbudować swoje reguły.

$ vim / tmp / ipv4

Uruchom ten plik z * filtrem. Mówi to iptables, że poniżej będą zasady filtrowania pakietów.

Loopback

Pierwsza sekcja reguł blokuje interfejs pętli zwrotnej. Mówią iptables, że serwer powinien akceptować ruch od siebie w interfejsie sprzężenia zwrotnego. Powinien także odrzucać ruch pochodzący z niego samego, który nie pochodzi z pętli zwrotnej.

-A WEJŚCIE -i lo -j AKCEPTUJ -A WEJŚCIE! -i lo -s 127.0.0.0/8 -j ODRZUĆ -A WYJŚCIE -o lo -j AKCEPTUJ

Świst

Następnie zezwól na ping. Powinieneś być w stanie pingować swój serwer, aby upewnić się, że jest on online, na wypadek gdyby był nieosiągalny w inny sposób. W takim przypadku dozwolone są tylko żądania echa, a serwer pozwoli sobie na wysyłanie danych wyjściowych ICMP.

-A WEJŚCIE -p icmp -m stan - stan NOWOŚĆ --icmp-type 8 -j AKCEPTUJ

SSH

Potrzebujesz SSH. To jedyny sposób, aby uzyskać dostęp do serwera. Reguły SSH są specyficzne dla twojego interfejsu internetowego, więc upewnij się, że zastąpisz eth0 tym, którego interfejsu używa twój serwer.

Dobrym pomysłem może być również zmiana połączeń SSH poza port 22, ponieważ jest to domyślna opcja, którą potencjalni napastnicy próbowaliby. Jeśli to zrobisz, pamiętaj, aby zmienić to również w regułach iptables.

-A WEJŚCIE -i eth0 -p tcp -m stan - stan NOWY, USTANOWIONY - port 22 -j AKCEPTUJ -A WYJŚCIE -o eth0 -p tcp -m stan - stan USTANOWIONO - sport 22 -j AKCEPTUJ

OpenVPN

Ten następny element zezwala na ruch do i z serwera OpenVPN przez UDP.

-A WEJŚCIE -i eth0 -p udp -m stan - stan NOWY, USTANOWIONY - port 1194 -j AKCEPTUJ -A WYJŚCIE -o eth0 -p udp -m stan - stan USTANOWIONO - sport 1194 -j AKCEPTUJ

DNS

Teraz zezwól na połączenia DNS przez UDP i TCP. Chcesz, aby Twoja VPN obsługiwała DNS, a nie Twój ISP. Jest to jeden z powodów, dla których konfigurujesz VPN w pierwszej kolejności.

-A WEJŚCIE -i eth0 -p udp -m stan - stan USTANOWIONO - sport 53 -j AKCEPTUJ -A WYJŚCIE -o eth0 -p udp -m stan - stan NOWOŚĆ, USTANOWIONO - port 53 -j AKCEPTUJ -A WEJŚCIE -i eth0 -p tcp -m stan - stan USTANOWIONO - sport 53 -j AKCEPTUJ -A WYJŚCIE -o eth0 -p tcp -m stan - stan NOWOŚĆ, USTANOWIONO --port 53 -j AKCEPTUJ

HTTP / S

Aby Ubuntu mogło się aktualizować, musisz dodać zestaw reguł, aby umożliwić wychodzące połączenie HTTP i HTTPS. Pamiętaj, że te reguły zezwalają tylko serwerowi na inicjowanie połączeń HTTP, więc nie można go używać jako serwera WWW ani łączyć się z nim przez port 80 lub port 443

-A WEJŚCIE -i eth0 -p tcp -m stan - stan USTANOWIONO - sport 80 -j AKCEPTUJ -A WEJŚCIE -i eth0 -p tcp -m stan - stan USTANOWIONO --sport 443 -j AKCEPTUJ - WYJŚCIE - o eth0 -p tcp -m stan - stan NOWY, USTANOWIONY - port 80 -j AKCEPTUJ -A WYJŚCIE -o eth0 -p tcp -m stan - stan NOWY, USTANOWIONY - port 443 -j AKCEPTUJ

NTP

Aby zegar serwera działał poprawnie, będziesz potrzebować NTP. NTP umożliwia synchronizację twojego serwera z serwerami czasu na całym świecie. Nieprawidłowy zegar na serwerze może powodować problemy z połączeniem, więc uruchomienie NTP jest dobrym pomysłem. Ponownie powinieneś akceptować tylko połączenia wychodzące i już ustanowione.

-A WEJŚCIE -i eth0 -p udp -m stan - stan USTANOWIONO - sport 123 -j AKCEPTUJ -A WYJŚCIE -o eth0 -p udp -m stan - stan NOWOŚĆ, USTANOWIONO - port 123 -j AKCEPTUJ

KADŹ

Odblokuj interfejs TUN, którego OpenVPN używa do tunelowania ruchu.

-A WEJŚCIE -i tun0 -j AKCEPTUJ -A DO PRZODU -i tun0 -j AKCEPTUJ -A WYJŚCIE -o tun0 -j AKCEPTUJ

Musisz zezwolić TUN na przekazywanie ruchu do twojego zwykłego interfejsu dla VPN. Ten adres IP znajdziesz w konfiguracji OpenVPN. Jeśli zmienisz to w konfiguracji, zmień to również w swoich regułach.

-A DO PRZODU -i tun0 -o eth0 -s 10.8.0.0/24 -j AKCEPTUJ -A DO PRZODU -m stan - stan USTANOWIONO, POWIĄZANE -j AKCEPTUJ

Wycięcie lasu

Dobrym pomysłem jest przechowywanie dzienników wszystkiego, co zostanie odrzucone przez iptables. W takim przypadku oznacza to wszystko, co nie pasuje do żadnej z tych zasad. Dzienniki pozwalają zobaczyć, czy istnieje jakakolwiek złośliwa aktywność lub próby podjęcia niecnych działań wobec serwera.

-A WEJŚCIE -m limit –limit 3 / min -j LOG –prefiks dziennika „iptables_INPUT_denied:” –log-level 4
-A DO PRZODU -m limit –limit 3 / min -j LOG –prefiks dziennika „iptables_FORWARD_denied:” –log-level 4
-A WYJŚCIE -m limit –limit 3 / min -j LOG –prefiks dziennika „iptables_OUTPUT_denied:” –log-level 4

Odrzuć wszystko inne

Wreszcie musisz zablokować wszystko, co nie pasuje do twoich reguł. To naprawdę jest cel posiadania zapory ogniowej.

-A WEJŚCIE -j ODRZUCENIE -A DO PRZODU -j ODRZUCENIE -A WYJŚCIE -j ODRZUCENIE

Zamknij plik za pomocą polecenia COMMIT, aby poinformować iptables o zatwierdzeniu wszystkich reguł.

NAT Maskarada

Potrzebujesz połączeń z VPN, aby wyglądały, jakby pochodziły z samego serwera. Ten kawałek nie może zostać uwzględniony w zwykłym pliku iptables, ponieważ używa innej tabeli. W porządku, to tylko jedna linia.

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

Przekazywanie ruchu IPv4

Będziesz musiał włączyć przekazywanie ruchu IPv4, aby mógł on przechodzić między VPN a rzeczywistym interfejsem sieciowym twojego serwera. Otwórz /etc/sysctl.d/99-sysctl.conf w sudo.

Znajdź wiersz poniżej i odkomentuj go, usuwając #.

net.ipv4.ip_forward = 1

Zatrzymaj wszystkie połączenia IPv6

Przepraszamy, jeszcze nie skończyłeś z iptables. Musisz zablokować cały ruch IPv6. Ten serwer OpenVPN będzie obsługiwał tylko IPv4, co jest w porządku, ponieważ nie znajdziesz się w sytuacji, w której potrzebujesz IPv6. W rezultacie wszelkie połączenia IPv6 mogą potencjalnie ujawniać informacje, co jest przeciwieństwem tego, czego oczekujesz podczas korzystania z VPN.

Przed ustawieniem reguł dla iptables musisz wyłączyć IPv6 wszędzie indziej w systemie.

Dodaj następujące wiersze do /etc/sysctl.d/99-sysctl.conf. Jeśli zamknąłeś go z poprzedniej sekcji, otwórz go ponownie za pomocą 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

Aktywuj swoje zmiany.

$ sudo sysctl -p

Skomentuj wszystkie linie IPv6 w / etc / hosts. Będziesz też potrzebował sudo.

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

W końcu możesz napisać reguły IPpt6 iptables. Utwórz dla nich plik na / tmp / ipv6.

* filtr -A WEJŚCIE -j ODRZUCENIE -A DO PRZODU -j ODRZUCENIE -A WYJŚCIE -j ODRZUCENIE ZOBOWIĄZANIA

Zobacz, są proste. Odrzuć wszystko.

Importuj i zapisuj w Iptables

Musisz zaimportować te reguły, aby mogły cokolwiek zrobić. Czas więc to zrobić.

Zacznij od wyczyszczenia wszystkiego, co tam jest. Nie chcesz, żeby przeszkadzały Ci stare zasady.

$ sudo iptables -F && sudo iptables -X

Zaimportuj zarówno reguły IPv4, jak i IPv6.

$ sudo iptables-restore </ tmp / ipv4 $ sudo ip6tables-restore </ tmp / ipv6

Prawdopodobnie nigdy więcej tego nie zrobisz. Będziesz więc potrzebować nowego pakietu, aby trwale zapisać swoje reguły.

$ sudo apt install iptables-persistent

Podczas instalacji pakiet poprosi o zapisanie istniejących reguł. Odpowiedz „Tak”.

Jeśli później wprowadzisz zmiany, możesz także zaktualizować zapisane konfiguracje.

$ sudo usługa netfilter-trwałe zapisywanie

Minęło trochę czasu, ale zapora jest gotowa do działania. Na następnej stronie zajmiemy się tworzeniem niezbędnych kluczy szyfrowania.

Kliknij tutaj: Następna strona

Wszystko o VPN: jak skonfigurować własną VPN za pomocą OpenVPN (część 3)