VPN na komputerach ARM Moxa

06.09.2021 How to / Komputery przemysłowe, Komunikacja przemysłowa
VPN na komputerach ARM Moxa
Wizerunek autora
Producent: MOXA
  • Zakłady przemysłowe
  • Inteligentne miasta
  • IIoT

Jak skonfigurować tunel VPN w komputerach przemysłowych Moxa przy użyciu OpenVPN?

Wstęp

Standardy systemów IIoT wymagają przemyślanej struktury często dopasowanej do konkretnego środowiska produkcyjnego. Coraz częściej używaną architekturą w przemyśle jest Edge Computing – oznacza ona przeniesienie części obliczeń na urządzenia znajdujące się na krawędzi sieci przemysłowej. Oprócz skrócenia czasu przetwarzania, zwiększenia bezpieczeństwa czy mniejszego zużycia energii, urządzenia typu Edge mogą jednocześnie służyć jako brama dostępowa do sieci produkcyjnej.

Kompaktowe komputery przemysłowe Moxa z rodziny UC zostały stworzone z myślą o pracy w systemach IIoT. Znajdziemy wśród nich modele wyposażone w moduły komórkowe LTE lub Wi-Fi. Ponadto, są oparte o system Moxa Industrial Linux (bazującym na Debian 9), z 10-letnim wsparciem producenta w zakresie aktualizacji nakładek bezpieczeństwa. Metody komunikacji, wszechstronne możliwości oraz kompaktowa, przemysłowa konstrukcja sprawiają, że urządzenia sprawdzą się w zastosowaniach, takich jak:

  • agregacja i filtrowanie danych
  • konwersja protokołów
  • brama dostępowa VPN
  • obliczenia na krawędzi sieci - Edge Computing
  • komunikacja z chmurą obliczeniową

Urządzenia przemysłowe często wykorzystują transmisję komórkową do nawiązania połączenia z chmurą czy innymi urządzeniami w sieci. Bramy dostępowe w systemie (ang. Gateway) posiadają publiczne adresy IP, dlatego istotną kwestią staje się bezpieczeństwo transmisji. Jednym z kroków, służących zabezpieczeniu przesyłanych danych jest szyfrowanie.
W dzisiejszym wpisie przedstawię proces instalacji oprogramowania OpenVPN na komputerach Moxa z rodziny UC.

Architektura:

arch

Celem jest nawiązanie połączenia pomiędzy system przemysłowym z poziomu smartphone'a. Użyjemy komputera Moxa UC-3121-T-EU-LX przyjmującego rolę bramy dostępowej do systemu przemysłowego. Jako metoda autoryzacji klienta posłuży nam popularny certyfikat X.509.

Dostęp do konfiguracji

Komputer Moxa z serii UC-3100, dzięki modułowi komórkowemu LTE, daje możliwość bezprzewodowej komunikacji. Do nawiązania połączenia VPN potrzebna będzie karta SIM, ze stałym publicznym adresem IP. Taka karta jest do zdobycia u większości operatorów sieci komórkowych.

W pierwszym kroku należy włożyć kartę SIM do pierwszego slotu (możliwa jest obsługa 2 kart SIM) oraz uruchomić urządzenie.
Natępnie musimy uzyskać dostęp do konsoli urządzenia. Dwie najpopularniejsze metody nawiązania połączenia to:

  • Wykorzystanie wejścia konsolowego – koniecznie jest użycie kabla konsolowego, dołączonego w zestawie. Niestety zakończony jest wtyczką DB-9, której nie obsługuje większość dzisiejszych komputerów… Rozwiązaniem problemu jest użycie urządzenia pozwalającego na podłączenie portu szeregowego RS-232 przez magistralę USB, np. UPort 1110 od Moxa
  • Wykorzystanie SSH i interfejsu Ethernet LAN1 – adres 192.168.3.127 (interfejs Ethernet w komputerze, przez który się łączymy, musi być w takiej samej podsieci)

Do szczegółowej instrukcji w jaki sposób możemy uzyskać dostęp do konsoli urządzenia odsyłam do dokumentacji.

Od strony oprogramowania, do nawiązania połączenia wykorzystamy popularny program PuTTY.

Przy podłączeniu przez interfejs szeregowy, wpisujemy odpowiedni adres COM (do sprawdzenia w Menedżer Urządzeń systemu Windows) oraz ustawiamy prędkość transmisji transmisji na 115200 bps.
Gdy wykorzystujemy interfejsu Ethernet wystarczy wpisać adres IP portu LAN1.

putty1 putty21

Logując się (domyślny Login: moxa, Password: moxa) otrzymujemy dostęp do konsoli systemu Linux.

Przygotowania do instalacji

Po dostaniu się do konsoli UC-3100 należy przygotować urządzenie do instalacji pakietu OpenVPN.

Na początku przełączmy się w tryb „super użytkownika” wpisując polecenie

sudo -i

i potwierdzamy hasłem (domyślne: moxa).

Uwaga! Przechodząc w tryb super użytkownika (ang. super user) dostajemy szersze uprawnienia w systemie operacyjnym, które są zdefiniowane w pliku /etc/sudoers. Aby dowiedzieć się więcej o możliwościach i zagrożeniach korzystania z systemu w trybie sudo odsyłam do dokumentacji

Do ściągnięcia potrzebnych pakietów potrzeby nam będzie dostęp do Internetu. Jeśli istnieje możliwość nawiązania połączenia z siecią przez interfejs Ethernet i chcemy go wykorzystać, należy wcześniej dostosować plik konfiguracyjny /etc/network/interfaces. Możliwe jest również skorzystanie z sieci komórkowej, którą skonfigurujemy w dalszej części wpisu.

Wersje firmware urządzenia możemy sprawdzić wpisując polecenie:

dpkg -l | grep base-system

system_ver

Uwaga! Jeśli dostępna jest nowsza wersja oprogramowania, należy ją zaktualizować. Aktualizację zawierają miedzy inny nowe pakiety zabezpieczeń systemu. O sposobach aktualizacji systemu przeczytasz w instrukcji użytkownika.

Przed przejściem do instalację pakietu OpenVPN warto zaktualizować listę dostępnych pakietów w zasobach repozytoriów oraz zaktualizować zainstalowane pakiety:

apt update
apt upgrade

Uwaga! Bez aktualizacji zainstalowanych pakietów, niektóre z poleceń używanych w dalszej części wpisu mogą być niedostępne!

W komputerach Moxa z serii UC, wyposażonych w moduł LTE, dostępna jest specjalna biblioteka cell_mgmt, służąca do zarządzania interfejsem komórkowym.

Aby uruchomić moduł, na początku należy ustawić odpowiedni adres APN (do sprawdzenia u operatora):

cell_mgmt set_apn <adres apn>
cell_mgmt start
cell_mgmt status

cell_status

Polecenie cell_mgmt status potwierdza, że nawiązaliśmy połączenie się z siecią komórkową. Dostaniemy również informację o nazwie interfejsu komórkowego, publicznym adresie IP, podsieci, adresie bramy oraz adresach DNS.

Sprawdźmy czy połączenie sieciowe jest pomyślnie skonfigurowane:

ping <adres_strony_www>

ping

Uwaga! Należy upewnić się czy polecenie ping wysyła pakiety z odpowiedniego interfejsu. Jeśli polecenie cell_mgmt status informuje, że połączenie zostało nawiązane a polecenie ping nie zwraca odpowiedzi, należy wpisać polecenie ping -I eth2 <adres_www> - wskazujemy nim, że pakiety mają zostać wysłane przez interfejs eth2 (w naszym przypadku jest to interfejs transmisji komórkowej). Do szczegółowej konfiguracji odsyłam do dokumentacji polecenia ping.

Następnym krokiem jest konfiguracja reguł zapory sieciowej. W naszym wypadku odblokowujemy trzy porty:

  • 22 (SSH)
  • 80 (http)
  • 443 (https)

Polecenia:

ufw allow 22
ufw allow 80
ufw allow 443
ufw enable
ufw status

ufw

Instalacja serwera OpenVPN

Przyszedł czas na instalację pakietu OpenVPN. Do tego procesu użyjemy przygotowanego skryptu openvpn-install.sh, który zawiera pakiet OpenVPN serwer oraz EasyRSA (potrzebny do wygenerowania certyfikatu X.509).
W pierwszej kolejności pobieramy skrypt instalacyjny:

wget https://git.io/vpn -O openvpn-install.sh

Aby wyświetlić treść skryptu możemy użyć polecenia:

cat openvpn-install.sh

Następnie uruchamiamy go (w powłoce bash):

bash openvpn-install.sh

Aktywowany skrypt przeprowadzi nas przez cały proces instalacji serwera OpenVPN. Po wypełnieniu kilku paramentów, zostanie wygenerowany certyfikat X.509 oraz pozostałe pliki konfiguracyjne.

Poniżej opis 5 parametrów, o które jesteśmy pytani podczas instalacji:

  1. Which IPv4 address should be used? – należy wskazać, na którym adresie IP (w domyślę, na którym interfejsie sieciowym), ma zostać wystawiony serwer VPN.
  2. Which protocol should OpenVPN use? – do wyboru mamy protokół UDP lub TCP.
  3. What port should OpenVPN listen to? – domyślnie jest to port 1194. Numer portu można zmienić, ale wtedy należy pamiętać również o zmianie numeru portu w plikach konfiguracyjnych serwera i klienta.
  4. Select a DNS server for the clients – możemy wybrać serwer DNS, na którym ma pracować serwer. W naszym przypadku użyliśmy DNS domyślnych ustawień dla urządzenia.
  5. Enter a name for the first client – parametr nazywany również CommonName. Co ważne CommonName musi być unikalny zarówno dla klientów VPN jak i serwera.

vpn_config

Skrypt pobiera wymagane paczki, w tym oprogramowanie EasyRSA, które służy do wygenerowanie certyfikatu X.509. Cały proces odbywa się automatycznie, więc pozostaje nam cierpliwie czekać.

Po zakończeniu procesu, powinniśmy znaleźć pod ścieżką /etc/openvpn/server wygenerowane pliki:

  • klucz prywatny oraz certyfikat CA
  • klucz prywatny oraz certyfikat server
  • klucz prywatny oraz certyfikat client
  • plik konfiguracyjny serwera
  • plik konfiguracyjny klienta
  • klucz D-H (klucz Diffie-Hellman)
  • plik PKI (Public Key Infrastructure)

pliki_vpn

Warto również krótko omówić plik server.conf zawierający konfigurację serwera OpenVPN. Pozwoli to lepiej zrozumieć parametry i działanie VPN.

local X.X.X.X                                              # server IP address
port 1194                                                  # port on which server works
proto tcp                                                  # protocol (UCP, TCP and P2P possible)
dev tun                                                    # routing mode (TAP also possible)
ca ca.crt                                                  # link to CA certification file 
cert server.crt                                           # link to server certification file
key server.key                                             # link to server private key file
dh dh.pem                                                  # link to D-H file (Diffie-Hellman key)
auth SHA512                                               # hash function
tls-crypt tc.key                                           # pre-shared key used to encrypt all messages furing TLS handshake
topology subnet                                            # VPN subnet
server 10.8.0.0 255.255.255.0                              # VPN subnet
push "redirect-gateway def1 bypass-dhcp"                   # features allows Interent connection for VPN client
ifconfig-pool-persist ipp.txt                            # set ip addresses for client
push "dhcp-option DNS 212.2.X.X "                          # set DNS address      
push "dhcp-option DNS 212.2.X.X "                          # set DNS address
keepalive 10 120                                           # send ping message every 10 seconds with timeout=120s
cipher AES-256-CBC                                         # encryption by AES-256-CBC
user nobody                                                # user definiton - not used in this case
group nogroup                                              # group definition - not used in this case
persist-key                                                # during restart remain encryption keys
persist-tun                                                # during restart remain virtual interface
verb 3                                                     # details level for logs
crl-verify crl.pem                                         # crl file (Certificate Revocation List) provides a location for web clients
                                                          # such as browsers to check whether or not a site's SSL/TLS certificate is trustworthy.

 

W folderze “/root” znajdziemy plik konfiguracyjny klienta OpenVPN, który musimy przenieść na urządzenie pracujące w roli klienta:

client                                                      # client mode
dev tun                                                     # routing mode - the same as in the server.conf
proto tcp                                                   # TCP protocol - the same as in the server.conf
remote X.X.X.X 1194                                         # set server IP address
resolv-retry infinite                                       # try to reconnect indefinitely when problems occur
nobind                                                      # not open port for client side
persist-key                                             # during restart remain encryption keys
persist-tun                                                 # during restart remain virtual interface
remote-cert-tls server                                      # additional certificate verification
auth SHA512                                                 # The auth directive controls the HMAC algorithm used for the control channel
cipher AES-256-CBC                                          # encryption by AES-256-CBC
ignore-unknown-option block-outside-dns
block-outside-dns
verb 3
<ca>                                                       # CA certification (ca.crt file)
-----BEGIN CERTIFICATE-----
MIIDKzCCAh........1vjxga0CqYmkQ=
-----END CERTIFICATE-----
</ca>
<cert>                                                    # Server certification (server.crt file)                                                                                  
-----BEGIN CERTIFICATE-----
MIIDRDCCA........Jkyp5E+1h
-----END CERTIFICATE-----
</cert>
<key>                                                      # Private key (server.key file)
-----BEGIN PRIVATE KEY-----
MIIEvQIB..........pD78zciUs=
-----END PRIVATE KEY-----
</key>
<tls-crypt>                                                # Pre-shared key (tc.key file)                                                            
-----BEGIN OpenVPN Static key V1-----
5381e6054.........5b431adee7
-----END OpenVPN Static key V1-----
</tls-crypt>

W pliku konfiguracyjnym mamy zawarte klucze prywatne oraz certyfikaty, które są konieczne do autoryzacji klienta przez serwer OpenVPN.
Po wygenerowaniu wszystkich potrzebnych plików możemy przejść do uruchomienia procesu serwera OpenVPN.

systemctl start openvpn-server@server.service
systemctl status openvpn-server@server.service

openvpn_status

Po pomyślnym uruchomieniu serwera OpenVPN przechodzimy do konfiguracji klienta OpenVPN.  

Instalacja klienta OpenVPN

W dzisiejszym wpisie próbujemy nawiązać połączenie pomiędzy systemem przemysłowym a smartphone'em. Przed procesem konfiguracji należy się upewnić, że telefon ma połączenie z Internetem (najlepiej wykorzystać transmisję komórkową).

Pierwszym krokiem do utworzenia połączenia jest instalacja darmowej aplikacji OpenVPN. Aplikacja jest do ściągnięcia ze Sklep Play lub alternatywnych źródeł. Przed instalacją oprogramowania zawsze warto zapoznać się uprawnieniami, o które prosi aplikacja.

Następnie musimy przesłać plik konfiguracyjny klienta (wygenerowany podczas konfiguracji serwera OpenVPN na UC-3100) na telefon. Dla przypomnienia, konfigurację klienta znajdziemy pod ścieżką /root.

Uruchamiamy aplikacje OpenVPN i wczytujemy przeniesiony plik konfiguracyjny. Nie pozostaje nam nic innego jak próba nawiązania połączenia:

vpn_client_connection

Voila! Nawiązaliśmy szyfrowane połączenie z serwerem OpenVPN. Teraz możemy sprawdzić czy urządzenia z systemu przemysłowego (sieci LAN serwera) są osiągalne z poziomu klienta. W tym celu możemy zainstalować na telefonie aplikację Termux i wysłać pakiet ICMP na adres serwera (192.168.3.127) oraz adres switcha zarządzalnego (192.168.3.1).

termux

web_console

Tak jak oczekiwaliśmy, urządzenia z sieci przemysłowej są widoczne z poziomu klienta. Transmisja pomiędzy urządzeniami odbywa się przez szyfrowany tunel VPN, dzięki temu nasze dane są zabezpieczone.

Podsumowanie

Cały proces konfiguracji tunelu VPN pomiędzy komputerem przemysłowym z serii UC-3100 Moxa a telefonem komórkowym za nami. Taka konfiguracja zapewnia bezpieczeństwo transmisji i ochronę sieci przed niepowołanym dostępem.
Dołączając do tego możliwość obliczeniowe, 5-letnią gwarancję producenta, wieloletnie wsparcie systemu operacyjnego oraz obsługę protokołów przemysłowych, komputery Moxa z rodziny UC oferują szerokie możliwości zamknięte w kompaktowej obudowie.
Jeśli chciałbyś dowiedzieć się więcej o możliwościach kompaktowych komputerów ARM-RISC od Moxa zapraszam do pozostałych wpisów oraz kontaktu pod adresem moxa@elmark.com.pl.

Skontaktuj się ze specjalistą Elmark

Masz pytania? Potrzebujesz porady? Zadzwoń lub napisz do nas!