Skocz do zawartości

Raspberry Pi Zero jako bezpieczny Jump Host do RDP


Pomocna odpowiedź

Napisano

Założenie i cel projektu

Celem projektu jest zbudowanie małego, energooszczędnego hosta przesiadkowego (jump host), który umożliwia zdalny dostęp RDP do komputerów Windows wewnątrz sieci firmowej, bez wystawiania tej sieci na Internet. Zamiast przekierowywać port 3389 na routerze (co zwykle kończy się skanami i próbami siłowymi), Raspberry Pi pracuje w sieci lokalnej i realizuje rolę bezpiecznego pośrednika: przyjmuje połączenie od administratora, a następnie zestawia sesję RDP do wybranego hosta Windows.

Największą zaletą jest to, że Raspberry Pi nie musi mieć publicznego IP ani otwartych portów przychodzących. Dostęp administracyjny realizuję przez Azure Arc (SSH over Arc), które pozwala łączyć się po SSH do serwerów Arc-enabled bez publicznego IP i bez dodatkowo otwieranych portów.

20260105_175330.jpg20260105_175310.jpg

Dlaczego Ethernet, a nie Wi-Fi?

W scenariuszu jump hosta niezawodność jest ważniejsza niż wygoda. Tego typu urządzenia często używa się do pomocy innym użytkownikom lub do usuwania awarii – a więc dokładnie wtedy, kiedy „niestabilne Wi-Fi” potrafi najbardziej przeszkadzać. Z tego powodu najlepiej podłączyć Raspberry Pi do sieci wewnętrznej przewodowo (Ethernet).

Jednocześnie Wi-Fi ma tu ciekawą rolę awaryjno-architektoniczną: jeśli sieć LAN (ta z hostami Windows - chociaz nie tylko wszak SSH tez mamy) nie ma dostępu do Internetu z powodów bezpieczeństwa, Raspberry Pi może nadal mieć łączność „na zewnątrz” (do Azure) właśnie po Wi-Fi. W praktyce daje to dodatkową zaletę projektu: można utrzymać „odciętą” sieć serwerową, a mimo to zachować możliwość zdalnej administracji przez Arc.

Jak działa proxy RDP (xrdp + NeutrinoRDP)

Warstwę „skoku” RDP realizuje xrdp uruchomione na Raspberry Pi w trybie proxy z wykorzystaniem NeutrinoRDP. NeutrinoRDP jest częścią ekosystemu neutrinolabs i stanowi fork FreeRDP 1.0.1, dzięki czemu dostarcza implementację klienta RDP używaną w scenariuszu proxy.

Kluczowy, praktyczny szczegół: NeutrinoRDP proxy nie zawsze działa „z pudełka” po instalacji xrdp z paczek systemowych. W wielu dystrybucjach pakiety nie zawierają gotowych bibliotek/modułów proxy, więc aby uzyskać działający moduł (np. libxrdpneutrinordp.so), trzeba skompilować NeutrinoRDP ze źródeł, a następnie przebudować xrdp z włączonym wsparciem NeutrinoRDP (np. ./configure --enable-neutrinordp).

Azure Arc – dostęp bez publicznego IP

Raspberry Pi działa jako serwer „na brzegu” (edge) i jest dołączone do Azure Arc-enabled servers. Dzięki temu mogę łączyć się do Pi po SSH „przez Azure” (SSH over Arc), nawet jeśli Raspberry Pi stoi za NAT-em i nie ma przekierowanych portów. Microsoft opisuje ten tryb jako SSH do Arc-enabled serwerów bez pokazania ich bezpośrednio do Internetu.

Diagram systemu

rpi-zero-jump-host-azure-arc.drawio.thumb.png.5791de32408c6d4d996e4517c65274e9.png

Sprzęt

Do tego jeszcze wg. uznania:

Step By Step

Po zainstalowaniu systemu operacyjnego w wersji 64 bitowej (dla oszczędności pamięci bez graficznego interface), wykonujemy po kolei:
 

sudo apt-get update


sudo apt-get -y install mc build-essential git cmake libssl-dev libx11-dev libxext-dev libxinerama-dev libxcursor-dev libxdamage-dev libxv-dev libxkbfile-dev libasound2-dev libcups2-dev libxml2 libxml2-dev libxrandr-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libavutil-dev libavcodec-dev libavformat-dev libswscale-dev


git clone https://github.com/neutrinolabs/NeutrinoRDP.git

cd NeutrinoRDP
cmake -DCMAKE_BUILD_TYPE=Release -DWITH_SSE2=OFF .
make

if error than: sed -i '/#include <freerdp\/rail.h>/a #include <stdlib.h>' /home/mf/NeutrinoRDP/libfreerdp-utils/rail.c

make clean
make

sudo make install




sudo apt-get install -y gcc make libssl-dev libpam0g-dev libx11-dev libxfixes-dev libxrandr-dev mc autoconf automake libtool libxkbfile-dev


cd ~
git clone https://github.com/neutrinolabs/xrdp.git
cd xrdp


./bootstrap
./configure --enable-neutrinordp
make


if error: sed -i 's/self->client_info.jpeg_prop\[0\] < 0 ||//' libxrdp/xrdp_caps.c
make clean
make


sudo make install

sudo systemctl enable xrdp

sudo systemctl restart xrdp.service

 

W tym momencie mamy zainstalowany XRDP z Neutrino RDP (jako ostatnia opcja) i możemy się połączyć z Raspberry PI po RDP wybrać opcje Neutrino-Any i przeskoczyć na inny serwer po RDP podając jego IP login/hasło.

Neutrino-Any.thumb.png.df8db14da6f6886aeecbfacf0a4e1127.png

Połączenie z Microsoft Azure ARC

Należy pamiętać, ze system Raspberry PI nie jest wspierany przez Microsoft Azure ARC, ale działa - wszak to Debian, który jest wspierany i wystarczy tylko podmienić plik /etc/os-release na:

PRETTY_NAME="Ubuntu 24.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.1 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo

Następnie juz normalnie łączymy Raspbery PI do Azure instalując agenta jak opisano tutaj: https://learn.microsoft.com/pl-pl/azure/azure-arc/servers/quick-onboard-linux

Po instalacji Azure ARC można przywrócić oryginalny plik.

Warto wspomnieć, iż użycie Azure ARC w zakresie zdalnego połączenia do Rasbery Pi jest zupełnie bezpłatne.

20260105_175410.jpg20260105_175425.jpg

Video

Wszystko powyższe można obejrzeć na Video 

  • Lubię! 1

Podoba Ci się ten projekt? Zostaw pozytywny komentarz i daj znać autorowi, że zbudował coś fajnego!

Masz uwagi? Napisz kulturalnie co warto zmienić. Doceń pracę autora nad konstrukcją oraz opisem.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...