Hlavní navigace

Stunnel

Michal Kára

Už při psaní článku o OpenSSL jsem chtěl popsat stunnel, bohužel se mi nikam nevešel. Opět jsem o tom uvažoval při psaní seriálu o tunelování, ale tam se mi stunnel nehodil. Rozhodl jsem se tedy napsat o něm samostatný článek.

I když by se mohlo zdát, že stunnel do seriálu o tunelování vyloženě patří, není tomu tak. Programy popisované v onom seriálu na jednom konci tunelu data přijmou, přenesou je na druhý konec a tam je zcela nezměněná dopraví k cíli.

Tunel vytvořený stunnelem má ale na jednom konci – buď na vstupu, nebo na výstupu – data zabalená v SSL. Pokud bychom jím chtěli realizovat tunel popsaný v seriálu, potřebovali bychom jednu instanci stunnelu, která data zabalí do SSL a pošle na druhý počítač, a druhou, která data z SSL opět vybalí a dopraví na místo určení. (Nebojte se, i na tento příklad dojde :-)

Stunnel je primárně určen pro přidání SSL šifrování k programům, které jej samy o sobě nepodporují. Pro jisté dva pány podotýkám, že sice většinou pracuje s OpenSSL knihovnou, ale obecně může fungovat i s jinými SSL knihovnami.

Módy stunnelu

Tak jako každý tunel, i stunnel má dva konce. Umístění jednoho se ovládá následovně:

  • Je-li zadáno -d bez parametrů nebo není-li zadáno vůbec, bude prvním koncem standardní vstup a výstup příkazu stunnel.
  • Je-li zadáno -d [host:]port, bude program poslouchat na zadaném portu. Je-li zadán i host, bude poslouchat na konkrétní IP. Příchozí spojení na tento port bude pak prvním koncem tunelu. Stunnel vytvoří tunel na druhý konec a bude poslouchat dál, takže v tomto módu může obsluhovat i více spojení najednou.

Druhý konec se určuje těmito volbami:

  • -r [host:]port – stunnel se spojí na zadaný počítač a port. Není-li počítač zadán, spojí se na localhost.
  • -l program [– programname [arg1 arg2 arg3…] ] spustí zadaný program a jeho standardní vstup/výstup budou druhým koncem. Program by měl být určen pro spouštění z inet démona (vstup a výstup nemají vlastnosti terminálu). Pokud programu chceme předat parametry, uvedeme dvě pomlčky, pak ještě jednou jméno programu a pak parametr(y). (To „druhé“ jméno programu je tam proto, že se programům předává jako nultý parametr jejich vlastní jméno. Shell používá jméno, kterým jsme program zavolali, stunnel nám ho umožňuje ovlivnit.)
  • -L program [– programname [arg1 arg2 arg3…] ] spustí zadaný program a jeho standardní vstup/výstup budou druhým koncem. Vstup a výstup mají vlastnosti terminálu (inetd v tomto případě zaalokuje pty).

Který konec bude šifrován, se určuje parametrem -c. Pokud je zadán, bude první konec nešifrovaný, pak se data zašifrují a dopraví se na druhý konec. Není-li zadán, bude první konec šifrovaný – bude na něm očekáváno SSL spojení. Data jím přenášená se dešifrují a nešifrovaná dopraví na druhý konec.

Spojení zamozřejmě funguje obousměrně (z druhého konce na první), data tekoucí tímto směrem procházejí přesně opačným procesem než data tekoucí z prvního konce na druhý.

Certifikát

Pro serverový mód (volba -d) je vyžadován certifikát a odpovídající klíč. Ten se čte buď z /etc/ssl/certs/stun­nel.pem, nebo se specifikuje pomocí volby -p soubor. Tento jediný soubor obsahuje jak certifikát, tak klíč k němu. Jak získat certifikát a klíč, jste se dozvěděli v seriálu o OpenSSL.

Klíč nesmí být chráněn passfrází. Soubor by měl vypadat takto:

-----BEGIN RSA PRIVATE KEY-----
(klíč)
-----END RSA PRIVATE KEY-----
(prázdný řádek)
-----BEGIN CERTIFICATE-----
(certifikát)
-----END CERTIFICATE-----
(prázdný řádek)

Několik příkladů

Chceme-li ověřit funkčnost HTTPS serveru, můžeme zadat například:

stunnel -c -r muj.ssl.server:https

a na jeho vstup zadat:

GET / HTTP/1.0
(prázdný řádek)

Dostaneme HTML stránku.

Funguje to úplně stejně jako:

openssl s_client -connect muj.ssl.server:https

Máme-li pop3 server spustitelný z inet démona, můžeme jej zpřístupnit i přes pop3s následujícím příkazem:

stunnel -d pop3s -l /usr/sbin/pop3d -- pop3d

(Tento příklad předpokládá, že máme certifikát v souboru /etc/ssl/certs/stun­nel.pem.) Stunnel se v tomto případě po spuštění odpojí od konzole a běží na pozadí.

Nechceme-li spouštět novou instanci pop3 démona pokaždé, když se někdo připojí, můžeme použít SSL démon v módu přesměrování:

stunnel -d pop3s -r pop3

Stunnel bude poslouchat na portu pop3s. Všechna SSL spojení na tento port budou pokračovat už nešifrovaně na pop3 port.

Nemá-li náš POP3 klient možnost SSL šifrování, můžeme spustit:

stunnel -c -d pop3 -r vzdaleny.pop3s.server:pop3s

Potom si můžeme maily ze vzdáleného pop3s serveru vyzvedávat připojením se na „pop3 server“ na lokálním počítači.

„Opravdový“ tunel

Nyní se dostaneme k tomu, jak pomocí openssl udělat „opravdový“ tunel, jaký byl popisován v seriálu o tunelování. Podívejte se na dva předchozí příklady. Pokud je zkombinujeme (stunnel spustíme na obou počítačích), dostaneme následující konfiguraci:


Na obou koncích tunelu jsou nyní ta samá data protokolu POP3.

Další možnosti

Příkaz stunnel má i další možnosti, z nichž bych vás na některé rád upozornil:

Stunnel standardně loguje svoje hlášky do systémového logu. Pokud tunel ladíme, může se nám hodit zadat parametr -f. Tím budou hlášky vypisovány na chybový výstup (stderr). Tento parametr má ještě jeden efekt: pokud bude program poslouchat na portu, nebude běžet na pozadí, ale zůstane na popředí a je ho možno shodit stiskem CTRL-C.

Jestliže chceme, aby stunnel běžel stále, je vhodné zajistit jeho spouštění a shazování skriptem v /etc/init.d. Stunnel vytváří soubor se svým process id standardně v adresáři /var/run, jméno souboru se odvozuje z parametrů stunnelu. K jeho shození můžeme využít buď tento soubor, nebo můžeme stunnel donutit vytvořit soubor jinde pomocí volby -P soubor/adresář.

Pokud budeme spouštět stunnel jako root, je vhodné jej z bezpečnostních důvodů spustit na jiného uživatele/skupinu. K tomu slouží volby -u uživatel a -g skupina. Výhodou je, že změna UID/GID proběhne až po vytvoření případného socketu, na kterém stunnel poslouchá, takže toto můžeme používat, i pokud má poslouchat na privilegovaném por­tu.

A nakonec po zadání stunnel -V vypíše stunnel svoji verzi a hlavně výchozí nastavení všech voleb.

To by bylo o stunnelu vše, další podrobnosti naleznete v manuálu. Těším se na shledání u dalšího zajímavého programu.

Našli jste v článku chybu?

14. 11. 2003 14:55

Master Up (neregistrovaný)

Všechno tohle funguje krásně, ale nevíte někdo jak funguje https přez proxy.

13. 8. 2003 17:13

neuron (neregistrovaný)

Je to dobry clanek, pomohl mi pouzit stunel na "doplneni" https pro jiz existujici web aplikaci (servlet). Kdyz ale dochazi k presmerovani http zadosti na jinou url, tak v te jine url je udany i protokol http, a je konec (u normalnich hyperlinku neni problem, tam je vetsinou relativni adresa).

Co s tim ? Samozrejme krome prepsani te aplikace..

Dalsim problemem jsou obrazky.. Jdou taky pres https a vetsina browseru je neuklada do cache a taha je porad dokolecka.. To dost zatezuje linky. Kd…



Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

120na80.cz: 5 nejčastějších mýtů o kondomech

5 nejčastějších mýtů o kondomech

Podnikatel.cz: Změny v cestovních náhradách 2017

Změny v cestovních náhradách 2017

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Vitalia.cz: Potvrzeno: Pobyt v lese je skvělý na imunitu

Potvrzeno: Pobyt v lese je skvělý na imunitu

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Vitalia.cz: Pamlsková vyhláška bude platit jen na základkách

Pamlsková vyhláška bude platit jen na základkách

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

DigiZone.cz: Rádio Šlágr má licenci pro digi vysílání

Rádio Šlágr má licenci pro digi vysílání

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

120na80.cz: Co všechno ovlivňuje ženskou plodnost?

Co všechno ovlivňuje ženskou plodnost?

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy