Jak uruchomić i skonfigurować Firewall as a Service oraz VPN as a Service na NSIS Cloud
Ten przewodnik przedstawia przykładowy proces konfiguracji VPN as a Service. Nie należy go traktować jako jedynego możliwego sposobu wdrożenia tego rozwiązania.
Informacja
Rozwiązanie opisane w tym artykule jest odpowiednie wyłącznie dla scenariuszy o niskim natężeniu ruchu sieciowego, przy osiągalnej przepustowości około 200 Mb/s. To wystarcza do zarządzania serwerami przez wiersz poleceń CLI, ale nie jest odpowiednie dla zastosowań o dużym ruchu (rzędu Gb/s).
Co omówimy w tym artykule
Wymagania wstępne
Nr 1 Konto
Musisz posiadać konto hostingowe na NSIS Cloud z dostępem do interfejsu Horizon: https://horizon.cloudferro.com/.
Nr 2 Utwórz i uzyskaj dostęp do VM w chmurze
Poniższe artykuły wyjaśniają, jak utworzyć nową maszynę wirtualną z Linuxem w Horizon oraz jak uzyskać do niej dostęp przez SSH:
Jak utworzyć nową maszynę wirtualną Linux w OpenStack Dashboard Horizon na NSIS Cloud
Aby uzyskać dostęp przez SSH, zobacz: Jak dodać lub usunąć Floating IP maszyny wirtualnej w NSIS
Jeśli podczas instalacji nie dodano pary kluczy, zobacz: Jak dodać klucz SSH z konsoli internetowej Horizon na NSIS
Nr 3 Graficzny interfejs użytkownika dla VM
Kliknij tutaj, aby zobaczyć instrukcję instalacji GUI na VM z Ubuntu 20.04: Jak korzystać z interfejsu graficznego w maszynie wirtualnej z systemem Linux na NSIS Cloud i uzyskać do niego dostęp z komputera z systemem Linux.
W zależności od lokalnego systemu operacyjnego instalacja X2GO może różnić się poziomem trudności. Jeśli nie używasz Linuxa opartego na Debian/Ubuntu, rozważ utworzenie lokalnej VM z Ubuntu 22.04 i łączenie się z Test_Ubuntu właśnie z niej.
Utworzenie infrastruktury FWAAS
Aby uruchomić VPN as a Service, najpierw musisz skonfigurować i uruchomić Firewall as a Service (FWAAS).
Tworzenie sieci o nazwie Gateway
Zaloguj się do panelu OpenStack i przejdź do Network → Networks, a następnie kliknij Create Network.
Ustaw Network Name na Gateway i przejdź do zakładki Subnet.
Ustaw Subnet Name na Gateway_subnet. Zastosuj następujące wartości:
Network address: 10.100.100.0/24
Gateway IP: 10.100.100.1
Kliknij Next, aby przejść do ekranu Subnet Details. Tam upewnij się, że Enable DHCP jest zaznaczone, pozostaw pozostałe pola puste i kliknij Create.
Sieć Gateway została utworzona.
Tworzenie sieci o nazwie Internal
Powtórz wcześniejsze kroki, używając innych danych:
Network Name: Internal
Subnet Name: Internal_subnet
Network Address: 10.200.200.0/24
Internal IP: 10.200.200.1
Efektem ma być sytuacja, w której obie sieci są widoczne w menu Network → Networks:
Informacja
W zależności od stanu innych sieci w systemie nie zawsze da się uzyskać identyczne wartości jak w tym artykule. Na przykład zamiast 10.200.200.1 możesz otrzymać 10.200.200.2 lub inną wartość. Zanotuj ją i odpowiednio podmieniaj w dalszej części artykułu.
Utworzenie routera
Kliknij przycisk Create Router.
Nadaj nazwę routerowi (np. Router_Fwaas), wybierz sieć external w polu External Network i kliknij Create Router.
Kliknij nazwę nowo utworzonego routera.
Przejdź do zakładki Interfaces i kliknij Add Interface.
Z listy Subnet wybierz Gateway_subnet i kliknij Submit.
Aby zobaczyć układ sieci, przejdź do Network → Network Topology.
Informacja
Powyższy obraz przedstawia bardzo uproszczoną topologię sieci. W praktyce (zwłaszcza przy klastrach Kubernetes itp.) ten diagram może być znacznie bardziej złożony.
Utworzyliśmy dwie sieci oraz router z portami. Dzięki temu możemy utworzyć maszynę wirtualną, na której będzie działać oprogramowanie OPNsense.
Tworzenie i konfiguracja VM z OPNsense
Wymaganie wstępne Nr 2 pokazuje, jak utworzyć nową maszynę wirtualną w OpenStack. W tym artykule użyjemy bardzo podobnej procedury. Jedyną nietypową opcją będzie użycie skryptu, który dopasuje adres IP OPNsense do adresu IP VM.
Przejdź do Compute → Instances i kliknij Launch Instance.
Wprowadź nazwę, np. Firewall_VM, i przejdź do zakładki Source.
Wybierz obraz opnsense i przenieś go na stronę alokowaną. Następnie przejdź do zakładki Flavor.
Użyj odpowiednich flavorów dla OPNsense
Wymagania minimalne:
CPU: 1 Core
RAM: 2 GB
Disk: 8 GB SSD
Sugerowany flavor: eo1.xmedium
Konfiguracja optymalna:
CPU: 2 Core
RAM: 4 GB
Disk: 16 GB SSD
Sugerowany flavor: eo1.medium
Dodaj sieci
Przejdź do zakładki Networks.
Dodaj utworzone sieci w następującej kolejności:
Internal
Gateway
Usuń grupy bezpieczeństwa
Przejdź do Security Groups i usuń wszystkie podłączone grupy bezpieczeństwa, klikając strzałkę po prawej stronie każdego wiersza.
Informacja
Usuwamy wszystkie grupy bezpieczeństwa z VM, ponieważ filtrowanie ruchu będzie w całości realizowane przez serwer OPNsense. Upewnij się też, że Port Security jest wyłączone na wszystkich portach podłączonych do VM firewalla — w przeciwnym razie ruch może być blokowany przez domyślne filtry OpenStack.
Para kluczy
Zdefiniuj lub wybierz istniejącą parę kluczy SSH, aby móc później uzyskać dostęp do VM. Zobacz Wymaganie wstępne Nr 2.
Informacja
Pracujemy na obrazie OPNsense, więc typowe zasady dotyczące SSH dla linuxowych VM nie mają tu zastosowania. Jeśli chcesz korzystać z SSH na serwerze OPNsense, musisz najpierw zmienić odpowiednie ustawienia w GUI OPNsense.
Dostosuj VM za pomocą skryptu
Otwórz zakładkę Configuration.
Wklej poniższy skrypt w pole Customization Script:
# This script replaces the default OPNsense IP with the VM's IP
runcmd:
- |
address=$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4)
first=$(echo "$address" | cut -d'.' -f1)
second=$(echo "$address" | cut -d'.' -f2)
third=$(echo "$address" | cut -d'.' -f3)
sed -i "s|<ipaddr>192\\.168\\.[0-9]\\+\\.[0-9]\\+</ipaddr>|<ipaddr>$first.$second.$third.1</ipaddr>|" /conf/config.xml
sed -i "/<disablefilter>enabled<\\/disablefilter>/d" /conf/config.xml
reboot
Uruchom VM
Kliknij Launch Instance i poczekaj, aż VM zostanie uruchomiona.
Jeśli wszystko jest poprawnie skonfigurowane, powinieneś zobaczyć co najmniej dwa adresy IP dla Firewall_VM, np. tak:
Jeśli któregoś z portów brakuje, dodaj go opcją Attach interface z menu akcji po prawej stronie.
Informacja
Podczas pracy z artykułem używaj adresów IP widocznych w Compute → Instances dla Twoich interfejsów, a nie tych ze zrzutów ekranu.
Wyłącz Port Security na portach
Po utworzeniu VM kliknij jej nazwę w zakładce Instances.
Przejdź do zakładki Interfaces i dla każdego portu kliknij Edit Port.
Wyłącz Port Security i kliknij Update.
Przypisz Floating IP
Przejdź do Network → Floating IPs i kliknij Allocate IP to Project.
Kliknij Allocate IP bez wypełniania dodatkowych pól.
Kliknij Associate przy nowym Floating IP i przypisz go do portu Firewall_VM podłączonego do sieci Gateway (10.100.100.130 w naszym przykładzie).
Użycie interfejsu sieci Gateway umożliwi serwerowi OPNsense dostęp do Internetu.
Konfiguracja OPNsense w panelu Horizon
Mówiąc bardziej technicznie: adres LAN instancji Firewall_VM to interfejs vtnet0, a jego wartość powinna odpowiadać adresowi Gateway IP sieci Internal, czyli 10.200.200.1. Możesz to sprawdzić, klikając Compute → Instances → Firewall_VM → Console.
Aby się zalogować, użyj:
User: root
Password: opnsense
Powinieneś zobaczyć ekran podobny do tego:
Adres LAN vtnet0 powinien być identyczny z tym, który widzisz w Horizon (Network → Networks → Internal → Subnets → Gateway IP), czyli 10.200.200.1. Jeśli adres LAN jest inny, skonfigurujesz go w kolejnych krokach.
Dodanie lub konfiguracja istniejących interfejsów
Na dole ekranu znajduje się pole Enter an option — wpisz 1 i naciśnij Enter.
Opcja 1 uruchamia komendę Assign interfaces (zaznaczoną na czerwono). Ustawimy interfejsy vtnet0 i vtnet1 na serwerze OpenVPN.
Po naciśnięciu Enter pojawi się pytanie:
W takim interfejsie naciśnięcie Enter wybiera domyślną odpowiedź (oznaczoną wielką literą). Tutaj jest to N, więc Enter oznacza, że nie konfigurujesz LAGGs. Ponieważ LAGGs (Link Aggregation Group Interface) nie jest tu potrzebne, pomijasz ten krok.
Następnie pojawi się pytanie o VLANs — ponownie naciśnij Enter, aby pominąć. Ekran zmieni się na:
WAN (Wide Area Network) odpowiada interfejsowi vtnet1 — wpisz vtnet1.
Dla pytania Enter the LAN interface name or «a» for auto-detection NOTE… wpisz vtnet0.
Kolejne pytanie dotyczy Optional interface 1 — pozostaw puste i naciśnij Enter. Te kroki pokazuje poniższy obraz:
Zobaczysz komunikat The interfaces will be assigned as follows: WAN -> vtnet1 LAN -> vtnet0 — to poprawne. Następnie wpisz y przy pytaniu Do you want to proceed? i naciśnij Enter, aby zapisać zmiany.
Ręczne ustawienie adresu vtnet0
Wracasz do menu głównego. Teraz ustawimy adres IP dla vtnet0 ręcznie. Wpisz 2 przy Enter an option: (opcja Set interface IP address).
Wpisz 1, aby skonfigurować LAN. Zobaczysz pytanie:
Configure IPv4 address LAN interface via DHCP
Naciśnij Enter, aby wybrać N, a następnie pojawi się kolejne pytanie:
Wpisz swój adres wewnętrzny, w tym przykładzie 10.200.200.1.
Ostrzeżenie
Zamiast 10.200.200.1 wpisz rzeczywistą wartość z Compute → Instances dla interfejsu w sieci Internal.
Następnie pojawi się pytanie o liczbę bitów:
Wpisz 24 (CIDR: 255.255.255.0/24).
W efekcie skonfigurujesz LAN jako statyczny adres IP i WAN jako DHCP4.
Pojawi się jeszcze seria pytań — naciskaj Enter, aby zaakceptować wartości domyślne. Na końcu zobaczysz ekran z poprawnymi wartościami dla interfejsów LAN i WAN:
Jeśli popełnisz błąd na którymkolwiek etapie, powtórz procedurę od początku, zaczynając od opcji 1 w menu głównym.
Konfiguracja w konsoli webowej Horizon jest zakończona.
Sprawdzenie logu konsoli
Upewnij się, że zmiany są widoczne w logach konsoli. Będąc w konsoli webowej, kliknij strzałkę wstecz w przeglądarce, aby wrócić do podmenu instancji Firewall_VM:
Kliknij Log (jak pokazuje czerwona strzałka). W logu powinny być widoczne adresy LAN i WAN.
Adres WAN może być jeszcze pusty (na tym etapie).
Odśwież VM
Wykonaj Soft Reboot Instance, aby odświeżyć dane w logu:
Sprawdź log ponownie i zweryfikuj, że oba adresy są teraz uzupełnione poprawnie:
Instancja, na której będzie działał OpenVPN (Firewall_VM), jest przygotowana. Następny krok to konfiguracja parametrów serwera OpenVPN.
Użycie innej VM w tej samej chmurze do dostępu do Firewall_VM
Firewall_VM działa na FreeBSD i jest zoptymalizowana pod szybkie zestawianie połączeń. Nie posiada własnego, specjalnego środowiska graficznego. Jeśli chcesz skonfigurować VPN przez GUI, zastosuj następujące podejście:
Utwórz drugą instancję w OpenStack (lub użyj już istniejącej). W tym artykule nazwiemy ją Test_Ubuntu. Jeśli tworzysz ją od zera, użyj obrazu Ubuntu 20.04 lub 22.04.
Dodaj dostęp do sieci Internal (10.200.200.0/24), aby obie instancje mogły się ze sobą komunikować. Efekt końcowy: łączysz się do Test_Ubuntu, a następnie uzyskujesz dostęp do GUI Firewall_VM.
Musisz mieć dostęp SSH do tej VM (zobacz Wymaganie wstępne Nr 2).
Użycie lokalnego komputera Linux/Windows do dostępu do GUI OPNsense
Możesz kontynuować, jeśli Test_Ubuntu ma:
Wewnętrzny adres IP (w tym artykule: 10.200.200.136) oraz
Przypisany Floating IP.
W lokalnym terminalu połącz się z Test_Ubuntu przez SSH, wykonując:
ssh -L 8443:10.200.200.136:443 eouser@here_type_floating_IP_of_a_Test_Ubuntu
Jeśli chcesz użyć prywatnej części klucza, użyj:
ssh -i your_key.pem -L 8443:10.200.200.136:443 eouser@<floatingIP>
Zamień <floatingIP> na Floating IP Twojej instancji Test_Ubuntu.
Po połączeniu powinieneś zobaczyć prompt użytkownika eouser (np. eouser@Test_Ubuntu:~$):
Otwórz lokalną przeglądarkę i wpisz:
Informacja
Przy pierwszym uruchomieniu zobaczysz ostrzeżenie o niezabezpieczonej stronie. To normalne, ponieważ serwer OPNsense nie ma jeszcze certyfikatu. W Firefox kliknij Advanced…, a następnie Accept the Risk and Continue. Inne przeglądarki mają analogiczne opcje.
Dane logowania:
Username: root
Password: opnsense
Zobaczysz kreator wstępnej konfiguracji serwera OpenVPN:
Kliknij Next.
Ustaw DNS Servers na 10.0.8.1 i kliknij Next:
Time Server Information pozostaw domyślne (kliknij Next):
Kolejny ekran dotyczy konfiguracji interfejsu WAN:
Kliknij Next, aby użyć wartości domyślnych. Następnie skonfigurujesz interfejs LAN:
Wpisz wartość vtnet0, zaczynając od 10.200.200.1 — u Ciebie adres będzie podobny, ale może być inny, więc zachowaj ostrożność.
Kliknij Next, aby przejść do ustawienia hasła roota:
Jeśli chcesz zachować istniejące hasło, wpisz je w polu potwierdzenia. Jeśli planujesz używać tego serwera produkcyjnie, ustaw nowe, silne hasło.
Kliknij Next, a następnie Reload na kolejnym ekranie, aby zastosować zmiany.
Przeładowanie może potrwać kilka minut. Po zakończeniu kreator przekieruje Cię do dashboardu.
To końcowy ekran kreatora:
Konfiguracja usługi VPN
Po skonfigurowaniu serwera możesz przejść do ustawień usługi VPN.
Utwórz certyfikat autoryzacji
Kliknij System → Trust → Authorities, aby zobaczyć listę istniejących autoryzacji:
Możesz użyć istniejącego certyfikatu lub kliknąć przycisk plusa po prawej stronie, aby dodać nowy. Wprowadź dane:
W polu Description wpisz czytelną nazwę certyfikatu, np. z losowym kodem (np. DS jako prefiks — mogą to być Twoje inicjały).
Dla Digest Algorithm wybierz SHA512.
W polu Common Name wpisz tę samą wartość co w Description.
Pozostałe pola (kraj, miasto, organizacja) nie są obowiązkowe.
Kliknij Save, aby zapisać dane.
Dodaj certyfikat serwera
Przejdź do System → Trust → Certificates i kliknij Add (jeśli trzeba, przewiń w prawo, aby go zobaczyć).
Kliknij Add new CA, aby utworzyć nowy certyfikat. Ustaw wartości:
Wpisz internal-ca jako Common Name. Pozostałe pola (kraj, miasto) nie są obowiązkowe.
Kliknij Save.
Utwórz użytkownika i dodaj certyfikat użytkownika
Przejdź do System → Access → Users i upewnij się, że istnieje użytkownik root. Możesz też utworzyć nowego użytkownika (w przykładzie wcześniej utworzono użytkownika „test”).
Nowy użytkownik powinien mieć uprawnienia:
Kliknij ikonę Search certificates by username po prawej stronie, aby edytować użytkownika i dodać certyfikat. Kliknij Add.
Wprowadź dane jak na obrazku poniżej:
Pozostałe pola nie są obowiązkowe. Kliknij Save.
Powinieneś zobaczyć dwa nowe certyfikaty na liście:
Utwórz klucz statyczny
Aby utworzyć klucz statyczny, przejdź do VPN → OpenVPN → Instances → Static Keys:
Wybierz Add (ikona plusa), aby rozpocząć tworzenie nowego klucza statycznego.
Wpisz nazwę w polu Description, a w Mode wybierz crypt (Encrypt and authenticate…). Aby wypełnić pole Static Key, kliknij ikonę ustawień (pomarańczowa ramka na obrazie).
Klucz Static Key zostanie wygenerowany i uzupełniony automatycznie.
Kliknij Save.
Utwórz instancję OpenVPN
Mając wszystkie elementy gotowe, utwórz nową instancję OpenVPN na serwerze OPNsense.
Przejdź do zakładki Instances w VPN → OpenVPN → Instances.
Kliknij pomarańczowy przycisk plusa po prawej stronie.
W polu TLS static key wybierz utworzony wcześniej klucz statyczny (jeśli jest dostępny).
Na kolejnym ekranie kliknij Save, a następnie Apply. Bez zastosowania zmian system nie zaakceptuje konfiguracji serwera.
Przypisz interfejs do serwera OpenVPN
Następnie przypisz interfejs do serwera OpenVPN.
Przejdź do Interfaces → Assignments.
Dodaj regułę umożliwiającą połączenie z serwerem OpenVPN
Pierwsza reguła firewalla pozwala klientom łączyć się z serwerem OpenVPN.
Przejdź do Firewall → Rules → WAN i dodaj regułę zezwalającą na ruch na porcie wybranym podczas tworzenia instancji OpenVPN.
Po dodaniu reguł będzie to wyglądać tak:
Kliknij Add, aby utworzyć nowe reguły zgodnie z wartościami pokazanymi na obrazach.
Pierwsza reguła:
Druga reguła:
Kliknij Save. Reguły zostaną zastosowane po kliknięciu Apply changes.
Dodaj regułę zezwalającą na dostęp do adresów IP
Druga reguła zapewnia, że klienci mają dostęp do docelowych adresów IP.
Przejdź do Firewall → Rules → OPT1 (interfejs, który właśnie utworzyłeś). Dla uproszczenia dodamy regułę zezwalającą na cały ruch.
Kliknij Add New, aby utworzyć nową regułę.
Kliknij Apply changes.
Dodaj reguły do interfejsu LAN
Kolejny krok to dodanie reguł do interfejsu LAN. Efekt końcowy będzie wyglądał tak:
Kliknij ikonę plusa i dodaj 4 reguły:
Eksport klienta
Aby wyeksportować profil klienta do zdalnego dostępu, wykonaj poniższe kroki:
Remote Access Server: wybierz serwer utworzony w kroku 5.
Export Type: wybierz File Only.
Hostname: wpisz FQDN (DDNS) lub statyczny publiczny adres IP serwera. Użyj tutaj Floating IP instancji Firewall_VM.
Port: użyj portu wybranego w kroku 5.
Kliknij ikonę chmury, aby pobrać profil klienta (np. dla DS_User1).
Plik zostanie pobrany.
Konfiguracja klienta OpenVPN
Aby połączyć się z serwerem VPN, potrzebujesz klienta VPN. Możesz użyć OpenVPN lub Viscosity. Poniżej znajdują się instrukcje konfiguracji klienta OpenVPN na różnych platformach.
Windows
Pobierz i zainstaluj najnowszą wersję OpenVPN: OpenVPN Community Downloads.
Zapisz pliki konfiguracyjne w C:/Program Files/OpenVPN/config i spróbuj połączyć się przy użyciu przygotowanych danych.
Linux (Ubuntu)
Otwórz terminal w katalogu, w którym znajdują się pliki konfiguracyjne.
Uruchom polecenia:
sudo apt update
sudo nmcli connection import type openvpn file nameofyourovpnconffile.ovpn
Powinieneś zobaczyć komunikat w stylu: Connection 'nameofyourovpnconffile' successfully added.
Aby się połączyć, użyj panelu konfiguracji sieci w Ubuntu (w prawym górnym rogu) i wprowadź odpowiednie dane uwierzytelniające.
Wprowadź dane i połącz się:
Jeśli nie chcesz używać panelu konfiguracji, uruchom:
sudo openvpn --config nameofyourovpnconffile.ovpn
Zostaniesz poproszony o podanie Auth Username i Auth Password. Użyj danych użytkownika utworzonego w kroku Utwórz użytkownika i dodaj certyfikat użytkownika. Jeśli nie tworzono nowego użytkownika, użyj wartości domyślnych:
Auth Username: root
Auth Password: opnsense
Prawidłowo zestawione połączenie powinno wyglądać tak:
Aby przetestować połączenie VPN, otwórz lokalną przeglądarkę i wpisz wewnętrzny adres IP 10.200.200.1. Powinieneś uzyskać dostęp jak na poniższym obrazie:
Następnie przejdź do panelu OpenStack i spróbuj wykonać ping do VM z dołączoną siecią Internal (możesz utworzyć nową VM).
W tym przykładzie:
Test ping z lokalnego komputera przy włączonym VPN: