Samba tunnel beállítása smbm-hez (Windows XP, 7, 8, 10)
Ebben a leírásban SSH-tunnelezett kapcsolatot állítunk be Windows (desktop vagy notebook) munkaállomásról egy (távoli) Samba szerverre, amelyet elsősorban fájlkiszolgálóként szeretnénk használni.
Tartalomjegyzék
Szerver oldali teendők
A szerver oldalon létre kell hozni a (Samba/Windows mapped) Linux felhasználót és be kell sorolni a jogosultságainak megfelelő (Samba/Windows-mapped) Linux csoportokba. Ennek módja a használt backendtől és adminisztrációs felülettől (pl. tdbsam/Samba Manager, LDAP/phpLDAPadmin, egyéb Samba GUI, stb.) függ.
Ezen kívül szükségünk lesz egy SSH-tunnelezésre alkalmas, passphrase-zel védett RSA-2 kulcspárra, melynek privát kulcsa legyen PuTTY .ppk formátumú, publikus kulcsát pedig a létrehozott (Samba/Windows mapped) Linux felhasználó ~/.ssh/authorized_keys2 könyvtárában kell elhelyeznünk, célszerűen az alábbi korlátozásokkal:
command="/bin/false",no-pty,no-X11-forwarding,no-agent-forwarding,no-port-forwarding,permitopen="localhost:139",permitopen="127.0.0.1:139",permitopen="localhost:445",permitopen="127.0.0.1:445" ssh-rsa ...
Megjegyzés: a Samba Manager a kulcspárt felhasználó létrehozatalakor automatikusan elkészíti.
Ha a felhasználó korábban már létrejött, van kulcspárja és a csoportokba sorolás is megtörtént, szerver oldali tennivaló nincsen.
smbm használata esetén
Az alábbiak csak arra az esetre vonatkoznak, ha a szerveren a Samba Manager (smbm) toolkit telepítve van.
Feltételezzük, hogy a házirend szerinti Samba/Windows felhasználónév vezeteknev.keresztnev alakú.
A Samba Managert futtató fájlszerveren root-ként adjuk ki ezeket a parancsokat:
smbm -au vezeteknev.keresztnev password # password opcionális
- Létrehozza a felhasználót vezeteknev.keresztnev Samba/Windows felhasználónévvel és ha nem adunk meg jelszót, generált jelszóval; valamint a háttérben smbNNNNN Linux felhasználónévvel (jelszavas belépés lehetősége nélkül).
- Létrehozza a felhasználó home könyvtárát, elhelyez benne egy generált, tunnelezésre használható kulcspárt, amelynek jelszava (passphrase) a Samba/Windows jelszóval megegyezik.
A csoportokba soroláshoz:
smbm -lg # Listázza a létező Samba/Windows csoportokat smbm -aug vezeteknev.keresztnev "Windows csoportnév" # Beteszi a felhasználót a csoportba smbm -lug vezeteknev.keresztnev # Listázza a felhasználó csoporttagságait
Ha ezzel készen vagyunk, kiléphetünk a szervergépből.
Kliens oldali teendők
Szükségünk lesz:
- a felhasználó tunnelezésre alkalmas privát kulcsára és annak passphrase-ére;
- a felhasználó Samba/Windows felhasználónevére (vezeteknev.keresztnev) és jelszavára;
- a felhasználó gépén adminisztrátori jogkörre a szükséges segédprogramok telepítéséhez.
Teendők adminisztrátorként
A továbbiakhoz adminisztrátorként (rendszergazda jogkörű felhasználóként) lépjünk be a beállítandó munkaállomásra.
PuTTY telepítése
Kötelező telepítés, ha a felhasználó nem használ titkosított fájlrendszert (pl. BitLockert, TrueCryptet, VeraCryptet), mert ilyenkor a privát kulcs jelszavát nem jegyeztethetjük meg, így kelleni fog a PuTTYGen (passphrase változtatásra), esetleg a Pageant. Ha van titkosított fájlrendszer, akkor telepítése opcionális, de érdemes telepíteni, mert hibakeresésre is jól használható.
Töltsük le a PuTTY utolsó stabil verzióját Windows Installer formában és telepítsük. A célmappa legyen C:\Program Files\Security\PuTTY, a Start menü mappa Eszközök\PuTTY (Windows 10 esetén maradjon PuTTY), desktop ikonok nem kellenek.
MyEnTunnel telepítése
Kötelező telepítés, ezt használjuk a tunnel felépítésére és fenntartására.
Töltsük le a MyEnTunnel legfrissebb, stabil (nem Unicode) változatát, és telepítsük.
Windows XP A service nem kell, célmappa legyen C:\Program Files\Security\MyEnTunnel, a Start menü mappa MyEnTunnel. Sajnos a telepítő a Start menü mappát az aktuális felhasználó profiljába teszi, ezt innen mozgassuk át a közös Start menü Eszközök mappájába és javítsuk meg a jogokat. Sajnos Windows XP alatt a MyEnTunnel az egyes kapcsolatok profilállományait a program mappájába teszi, ezért adjunk a C:\Program Files\Security\MyEnTunnel mappára a Felhasználók csoportnak írásjogot (TODO!). |
Windows Vista, 7, 8, 10 A service nem kell, célmappa legyen C:\Program Files\Security\MyEnTunnel, a Start menü mappa Eszközök\MyEnTunnel (Windows 10 esetén maradjon MyEnTunnel). Ha a telepítő a Start menü mappát az aktuális felhasználó profiljában is létrehozná (üresen), ezt töröljük le. Windows Vista, 7, 8, 10 és bekapcsolt UAC esetén a Virtualstore szolgáltatás kezeli a profilállományokat, így a programkönyvtárra nem kell (nem szabad) írásjogot adni. |
A telepítés tartalmaz egy plink.exe binárist is, ezt opcionálisan a PuTTY telepítéssel érkező frissebb változatra cserélhetjük. Sajnos a MyEnTunnel 3.4.2.1 (non-UTF8) a plink 0.63 verzióját jelenleg nem támogatja, így itt az innen letöltött 0.62 verziót érdemes használni.
Ezen kívül töltsük le a myentunnel-samba.bat scriptet is, és (a jogokra ügyelve!) helyezzük el a MyEnTunnel programkönyvtárában. Windows 10 esetén szükségünk lehet a Samba_tunnel_setup.xml időzített feladatra is.
Loopback interface elkészítése
Mivel a Windows munkaállomások minden használatban lévő hálózati interface-én fut(hat) a helyi Server (Fájl- és nyomtató megosztás) szolgáltatás, amely a tunnelben is használatos Samba portokat és protokollokat használja, egy új hálózati kapcsolatot, nevezetesen egy virtuális (hardverhez nem tartozó) hálózati interface-t ("hálókártyát") definiálunk, amelyen nem fut a Windows fájl- és nyomtatómegosztás szolgáltatása. Ez lesz az SSH tunnel végpontja a munkaállomáson.
Az interface-nek statikus IP-t adunk nem route-olható tartományból (192.168.255.254/24) gateway nélkül, magas metrikával; csak a TCP/IP-t engedélyezzük rajta. Ha több távoli Samba szerverhez is szeretnénk csatlakozni, akkor ugyanezen interface-en minden távoli szerverkapcsolathoz egy-egy külön dummy IP címet veszünk fel (célszerűen .254, .253, stb.).
Windows XP
Gyorsteszt: parancssorban ping 192.168.255.254 működik. |
Windows Vista, 7, 8, 10
Gyorsteszt: parancssorban ping 192.168.255.254 működik. |
Válasszunk egy profilnevet, amelyik a továbbiakban az erre a dummy interface-re tunnelezett kapcsolatot azonosítja. Ez lesz:
- az ide tunnelezett távoli szerver (virtuális) hostneve;
- a kapcsolatot indító és fenntartó MyEnTunnel profil neve.
Jegyezzük be ezt a nevet (jelen példában legyen geofile) a munkaállomás hosts file-jába, pl. az alábbi módon:
Windows XP Start menü, Futtatás, notepad C:\Windows\system32\drivers\etc\hosts [...] # Dummy interface for Samba tunneling 192.168.255.254 geofile Gyorsteszt: parancssorban ping geofile működik. |
Windows Vista, 7, 8, 10 Start menü, cmd, Futtatás rendszergazdaként (admin konzol) notepad drivers\etc\hosts [...] # Dummy interface for Samba tunneling 192.168.255.254 geofile Gyorsteszt: parancssorban ping geofile működik. |
Windows Vista, 7, 8, 10 SMB forgalom eltérítése
A beállítás csak Windows Vista és újabbak esetén szükséges - Windows XP esetén a TCP/139-es porti forgalom tunnelezése elegendő és minden trükk nélkül működik.
Windows Vista, 7, 8 és 10 esetén a TCP/139-es forgalmat hiába tunneleznénk, mert a fájlkiszolgáló szolgáltatást először a TCP/445-ös porton keresi a kliens (ez a viselkedés nem is módosítható). Sajnos a beépített és alapértelmezetten a rendszerindításkor automatikusan elinduló smb (újabban srv) driver minden interface TCP/445-ös portjára rátelepszik, vagyis semmilyen helyi TCP/445-ös portot nem tudunk tunnel végpontjaként felhasználni. Az egyetlen működőképes megoldásnak a dummy interface 445-ös portjára menő forgalomnak kernel szinten, ugyanezen interface másik portjára történő eltérítése látszik (portproxy). Így a helyi szolgáltatás elfoglalja ugyan a dummy interface TCP/445-ös portját, de az erre címzett csomagok az eltérítés miatt valójában a másik portra kerülnek, illetve az itt végződő tunnelen keresztül eljuthatnak a távoli gépre (a trükk innen származik).
Parancssorban (admin konzol) adjuk ki a következő parancsot, amellyel a dummy interface TCP/445-ös forgalmának a TCP/44445-ös portra (de használható bármely más szabad port is) átirányítását kérjük:
netsh interface portproxy add v4tov4 listenaddress=192.168.255.254 listenport=445 connectaddress=192.168.255.254 connectport=44445
Ha több távoli Samba szervert kívánunk használni, és emiatt a dummy interface-nek több IP címe van, a beállítást mindegyikre el kell végezni.
A portproxy beállítás perzisztens (újraindítás után is megmarad), de még az smb/srv driver elindítása előtt kell megvalósulnia.
- Windows 10 alatt gondoskodni kell arról, hogy az iphlpsvc (IP-segítő) szolgáltatás, amely a portproxy beállítást ténylegesen érvényesíti, korábban induljon és sikeresen elfoglalja a kívánt portot, mint azt SMB fájlrendszer meghajtót elindító lanmanserver (Kiszolgáló) szolgáltatás tenné. Jelenleg (version 1511) úgy tűnik, hogy a Windows belső, időzítési vagy függőségi(?) problémái miatt a sikeres foglalás véletlenszerűen meghiúsul, így a kívánt eredményhez a lanmanserver tiltása, a rendszerindítás után az iphlpsvc újraindítása(!), majd a lanmanserver indítása szükséges. Ezt valósítja meg az innen letölthető Samba_tunnel_setup.xml időzített feladat, amelyet a Feladatütemezőben (rendszergazda jogosultságokkal) importáljunk, és ezután egyszer, manuálisan futtassunk le.
- Windows 8.x alatt elegendőnek tűnik a a Számítógép, Kezelés, Szolgáltatások listájában a Kiszolgáló (lanmanserver) service indítását (Tulajdonságok, Indítás típusa) Automatikus (késleltetett)-re állítani.
- Windows 7 alatt a késleltetés opcionális (tapasztalat szerint enélkül is működik).
- Windows Vista alatt a késleltetés nem látszik elegendőnek, így ehelyett az itt olvasható leírás alapján a lanmanserver indítását manuálisra kell állítani, és elindításáról (a Windows 10-hez hasonlóan) ütemezett feladattal kell gondoskodni.
Ezután újra kell indítanunk a munkaállomást.
Újraindítás után parancssorból ellenőrizzük az átirányítást (ehhez már nem szükséges rendszergazdai jogosultság):
netstat -ano | find ":445" <TODO!> netstat -tan -p TCP | find "192.168.255" TCP 192.168.255.254:445 0.0.0.0:0 FIGYEL InHost netsh interface portproxy show v4tov4 Figyelés ipv4: Csatlakozás ipv4: Cím Port Cím Port --------------- ---------- --------------- ---------- 192.168.255.254 445 192.168.255.254 44445
azaz a dummy interface TCP/445-ös portján nem a helyi smb szolgáltatásnak (is) dolgozó PID 4 rendszerfolyamat figyel, hanem a portproxy-t megvalósító szolgáltatás, így az itt megjelenő forgalom valójában a TCP/44445-ös porton keresztül zajlik, ahonnan tovább tunnelezhető.
Teendők korlátozott felhasználóként
Kérjük meg a felhasználót, hogy lépjen be a beállítandó munkaállomásra a saját nevében és ha használ VeraCryptet, csatolja fel a titkosított meghajtót.
A privát kulcs elhelyezése
Ha a felhasználó használ VeraCryptet, privát kulcsát mozgassuk át a titkosított meghajtóra, pl. a T:\Keys könyvtárba. Opcionálisan elhelyezhetünk itt egy szövegfájlt, amelyben a kulcshoz tartozó passphrase és a Samba/Windows felhasználónév illetve jelszó is szerepel.
Ha nincs titkosított meghajtó, a kulcsot a felhasználó profilkönyvtárának gyökerébe helyezzük át.
A privát kulcs megszerzése smbm használata esetén
Az alábbiak csak arra az esetre vonatkoznak, ha a szerveren a Samba Manager (smbm) toolkit telepítve van, és a kulcsokat az smbm hozta létre és még nem töltöttük le a felhasználó privát kulcsát.
Samba Manager használata esetén a felhasználó privát kulcsa annak home könyvtárában jön létre, és a tunnel beállításához azt meg kell szerezzük. Ennek érdekében először egy másik, jelszavas belépésre jogosult(!) Linux felhasználó (pl. admin) nevében építünk ki tunnelt, de a Samba-hoz a beállítandó felhasználó nevében csatlakozunk, így látjuk a home könyvtárát és le tudjuk tölteni a kulcsot.
Parancssorból indítsuk el a myentunnel.exe-t a választott profilnévvel (példánkban geofile):
"%PROGRAMFILES%\Security\MyEnTunnel\myentunnel.exe" geofile "C:\Program Files (x86)\Security\MyEnTunnel\myentunnel.exe" geofile
A megjelenő beállítóablak Settings fülén az SSH server mezőben adjuk meg a távoli szervert (pl. fileserver.geocom.hu), Username legyen a jelszavas belépésre jogosult másik Linux felhasználó (példánkban admin) a Verbose Logging legyen bekapcsolva, más beállításokat egyelőre ne kattintsunk be. A Tunnels fülön a Local mezőbe írjuk be az alábbiakat:
Windows XP : 192.168.255.254:139:127.0.0.1:139 Windows Vista (+) : 192.168.255.254:44445:127.0.0.1:445
Mentsünk (Save), lépjünk át a Status fülre és Connect. Adjuk meg a szerver admin (Linux) felhasználójának jelszavát, fogadjuk el a host key-t. Sikeres kapcsolódás esetén a Status ablakban stabil kapcsolatra és sikeres port továbbításra utaló üzenet jelenik meg. Sikertelenség esetén nézzük át az üzeneteket, esetleg lépjünk ki a MyEnTunnelből és a PuTTY elindításával próbáljuk megkeresni a hibát. Csak akkor menjünk tovább, ha ez a kapcsolat rendben felépül.
Ha a kapcsolat rendben van, hagyjuk nyitva a MyEnTunnel ablakát és az Intézőben nyissuk meg a \\192.168.255.254 megosztást. Adjuk meg a felhasználó Samba/Windows felhasználónevét a Samba-n használatos domain névvel együtt (pl. GEOCOM\vezeteknev.keresztnev) és jelszavát - ezeket az adatokat jegyeztessük is meg. Lépjünk be a home könyvtárába és töltsük le az ott lévő (privát) kulcsok közül a .ppk kiterjesztésűt. Csukjuk be az Intézőt és a MyEnTunnel ablakának Disconnect nyomógombjával bontsuk le a kapcsolatot és lépjünk is ki a MyEnTunnelből.
A tunnel beállítása
Ha már használtuk a tunnelt (pl. smbm esetén a privát kulcs letöltésére), akkor az első lépést elhagyhatjuk.
- Parancssorból indítsuk el a myentunnel.exe-t a választott profilnévvel (példánkban geofile):
"%PROGRAMFILES%\Security\MyEnTunnel\myentunnel.exe" geofile "C:\Program Files (x86)\Security\MyEnTunnel\myentunnel.exe" geofile
A megjelenő beállítóablakban semmit ne állítsunk be, csak mentsünk (Save) és lépjünk ki (Exit). Ezzel létrehoztuk a profil beállító állományát.
- Sajnos a MyEnTunnel felületén a privát kulcs helyének megadására nincs lehetőség (minden mást be tudunk állítani), ezért szerkesszük meg az imént létrehozott beállító állományt (nevében szerepel a profilnév):
Windows XP: notepad "%PROGRAMFILES%\Security\MyEnTunnel\geofile-myentunnel.ini" (64 bit) notepad "C:\Program Files (x86)\Security\MyEnTunnel\geofile-myentunnel.ini" Windows Vista (+): notepad "%USERPROFILE%\AppData\Local\Virtualstore\Program Files\Security\MyEnTunnel\geofile-myentunnel.ini" (64 bit) notepad "%USERPROFILE%\AppData\Local\Virtualstore\Program Files (x86)\Security\MyEnTunnel\geofile-myentunnel.ini"
és a végére írjuk be az elérési utat. A .ppk kiterjesztésű privát kulcsfile helye a titkosított meghajtón van, illetve, ha nincs ilyen, a felhasználó helyi home könyvtárában; az alábbi példában egy smbm által létrehozott nevű kulcsfájlt használunk:
[...] FullPathKeyfile=T:\Keys\smbNNNNN_AT_fileserver.geocom.hu.ppk [...] FullPathKeyfile="C:\Documents and Settings\user\smbNNNNN_AT_fileserver.geocom.hu.ppk" [...] FullPathKeyfile="C:\Users\user\smbNNNNN_AT_fileserver.geocom.hu.ppk"
- Parancssorból indítsuk el ismét myentunnel.exe-t a választott profilnévvel (példánkban geofile):
"%PROGRAMFILES%\Security\MyEnTunnel\myentunnel.exe" geofile "C:\Program Files (x86)\Security\MyEnTunnel\myentunnel.exe" geofile
és a tálcaikonra jobbklikkelve (Show) hozzuk vissza a beállító ablakot. A Settings fülön az SSH server mezőben adjuk meg a távoli szervert (pl. fileserver.geocom.hu), Username legyen a felhasználó Linux felhasználóneve (smbm használata esetén smbNNNNN alakú), kattintsuk be a Connect on Startup, Reconnect on Failure, Use Private Key és Verbose logging checkboxokat; ha a privát kulcs védett tárolóban van, akkor töltsük ki a Passphrase mezőt is (alapértelmezésben azonos a felhasználó Samba/Windows jelszavával).
A Tunnels fülön a Local mezőbe írjuk be az alábbiakat:
Windows XP: 192.168.255.254:139:127.0.0.1:139 Windows Vista (+): 192.168.255.254:44445:127.0.0.1:445
Mentsünk (Save), váltsunk a Status fülre és Connect. Ha nem jegyeztettük meg a kulcshoz tartozó passphrase-t, akkor a feljövő ablakban meg kell adnunk azt.
- Sikeres kapcsolat esetén hagyjuk nyitva a MyEnTunnel ablakát és az Intézőben nyissuk meg a \\192.168.255.254 megosztást. Adjuk meg a felhasználó Samba/Windows felhasználónevét a Samba-n használatos domain névvel együtt (pl. GEOCOM\vezeteknev.keresztnev) és jelszavát - ezeket az adatokat jegyeztessük is meg.
- Sikeres Samba kapcsolat esetén csukjuk be az Intézőt, a MyEnTunnel Settings fülén vegyük ki a Verbose Logging pipát, kapcsoljuk be az Enable Slow Polling-ot, majd Save, Disconnect és Exit. Ettől kezdve a fenti parancssorral a tunnel bármikor elindítható.
Megjegyzés: ha a felhasználó nem használ titkosított meghajtót, de a gépe saját használatú, helyhez kötött asztali munkaállomás, akkor meggondolhatjuk a passphrase megjegyeztetését a MyEnTunnellel. Ha a gépe hordozható vagy közös használatú, akkor NE jegyeztessük azt meg, viszont a telepített puttygen program segítségével megváltoztathatjuk a jelszót számára megjegyezhetőre.
Tunnel indító script
A myentunnel_samba.bat scripttel a már beállított és letesztelt MyEnTunnel profil indítható és a tunnel felépülését követően network drive csatolások végezhetőek el.
Készítsünk egy parancsikont a felhasználó asztalán, amelynek célja legyen ez a script a myentunnel.exe ikonjával és indítási paraméterekként a csatolandó network drive-ok listájával (drive:megosztás\pathname alakban). Pl. az alábbi hívás:
"C:\Program Files\Security\MyEnTunnel\myentunnel_samba.bat" /v geofile g:active h:homes i:archive "C:\Program Files (x86)\Security\MyEnTunnel\myentunnel_samba.bat" /v geofile g:active h:homes i:archive
a tunnel indítása után H: meghajtóként a felhasználó távoli home könyvtárát, G: meghajtóként a fájlszerver aktív, I: meghajtóként az archív megosztását csatolja fel (a fenti csak példa, ügyeljünk arra, hogy létező megosztásokat adjunk meg!).
Ahhoz, hogy a felcsatolás automatikus legyen, érdemes ezeket a meghajtókat az Intézőből egyszer manuálisan csatolni, és a Samba/Windows felhasználói adatokat a géppel megjegyeztetni. Így a script csak a tunnelhez használt és nem titkosított meghajtón tárolt privát kulcs passphrase-át kérdezheti meg (munkamenetenként egyszer).
Tippek a myentunnel.samba.bat használatához:
- Ha a felhasználó több távoli Samba szerverre is csatlakozik, minden szerverhez javasolt egy-egy parancsikont készíteni;
- Érdemes lehet a parancsikon minden példányához a myentunnel.exe ikonját társítani (zöld lakat);
- A parancsikon elindításakor megjelenő terminálablak a sikeres csatlakozás után bezáródik, hibaüzenet esetén azonban billentyűleütésig a képernyőn marad, hogy a hibaüzenet olvasható legyen;
- Ha a tray ikon zöld, a kapcsolat fennáll; ha sárga vagy piros, a kapcsolat megszakadt (noha a MyEnTunnel igyekszik automatikusan újracsatlakozni). Ilyenkor a parancsikon (azaz a script) ismételt elindítása megkísérli a kapcsolat megjavítását (a script többszöri elindítása nem okoz kárt.)
Irodalom
- a PuTTY webhelye
- a MyEnTunnel webhelye
- Tunneling over SSH (dummy loopback és TCP/139)
- A Microsoft visszacsatoló adapter telepítése Windows XP rendszerben (MS support)
- Tweaking SMB driver (TCP/445 használata Windows Vista/7 esetén)
- SMB traffic not captured in TDI filter driver (TCP/445 nem fogható el Windows Vista/7 alatt)
- Connect to Windows Samba Shares via SSH Tunneling from Mac OS X
- Mapping network drive via SSH on Linux, Windows and Mac
- Advanced Windows Batch Scripting