1556 lines
42 KiB
Plaintext
1556 lines
42 KiB
Plaintext
=head1 NAZWA
|
|
|
|
=encoding utf8
|
|
|
|
stunnel - uniwersalny tunel protokołu TLS
|
|
|
|
|
|
=head1 SKŁADNIA
|
|
|
|
=over 4
|
|
|
|
=item B<Unix:>
|
|
|
|
B<stunnel> [S<PLIK>] | S<-fd N> | S<-help> | S<-version> | S<-sockets> | S<-options>
|
|
|
|
=item B<WIN32:>
|
|
|
|
B<stunnel> [ [ S<-install> | S<-uninstall> | S<-start> | S<-stop> |
|
|
S<-reload> | S<-reopen> | S<-exit> ] [S<-quiet>] [S<PLIK>] ] |
|
|
S<-help> | S<-version> | S<-sockets> | S<-options>
|
|
|
|
=back
|
|
|
|
|
|
=head1 OPIS
|
|
|
|
Program B<stunnel> został zaprojektowany do opakowywania w protokół I<TLS>
|
|
połączeń pomiędzy zdalnymi klientami a lokalnymi lub zdalnymi serwerami.
|
|
Przez serwer lokalny rozumiana jest aplikacja przeznaczona do uruchamiania
|
|
przy pomocy I<inetd>.
|
|
Stunnel pozwala na proste zestawienie komunikacji serwerów nie posiadających
|
|
funkcjonalności I<TLS> poprzez bezpieczne kanały I<TLS>.
|
|
|
|
B<stunnel> pozwala dodać funkcjonalność I<TLS> do powszechnie stosowanych
|
|
demonów I<inetd>, np. I<pop3> lub I<imap>, do samodzielnych demonów,
|
|
np. I<nntp>, I<smtp> lub I<http>, a nawet tunelować ppp poprzez gniazda sieciowe
|
|
bez zmian w kodzie źródłowym.
|
|
|
|
|
|
=head1 OPCJE
|
|
|
|
=over 4
|
|
|
|
=item B<PLIK>
|
|
|
|
użyj podanego pliku konfiguracyjnego
|
|
|
|
=item B<-fd N> (tylko Unix)
|
|
|
|
wczytaj konfigurację z podanego deskryptora pliku
|
|
|
|
=item B<-help>
|
|
|
|
drukuj listę wspieranych opcji
|
|
|
|
=item B<-version>
|
|
|
|
drukuj wersję programu i domyślne wartości parametrów
|
|
|
|
=item B<-sockets>
|
|
|
|
drukuj domyślne opcje gniazd
|
|
|
|
=item B<-options>
|
|
|
|
drukuj wspierane opcje TLS
|
|
|
|
=item B<-install> (tylko Windows NT lub nowszy)
|
|
|
|
instaluj serwis NT
|
|
|
|
=item B<-uninstall> (tylko Windows NT lub nowszy)
|
|
|
|
odinstaluj serwis NT
|
|
|
|
=item B<-start> (tylko Windows NT lub nowszy)
|
|
|
|
uruchom serwis NT
|
|
|
|
=item B<-stop> (tylko Windows NT lub nowszy)
|
|
|
|
zatrzymaj serwis NT
|
|
|
|
=item B<-reload> (tylko Windows NT lub nowszy)
|
|
|
|
przeładuj plik konfiguracyjny uruchomionego serwisu NT
|
|
|
|
=item B<-reopen> (tylko Windows NT lub nowszy)
|
|
|
|
otwórz ponownie log uruchomionego serwisu NT
|
|
|
|
=item B<-exit> (tylko Win32)
|
|
|
|
zatrzymaj uruchomiony program
|
|
|
|
=item B<-quiet> (tylko Win32)
|
|
|
|
nie wyświetlaj okienek z komunikatami
|
|
|
|
=back
|
|
|
|
|
|
=head1 PLIK KONFIGURACYJNY
|
|
|
|
Linia w pliku konfiguracyjnym może być:
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
pusta (ignorowana)
|
|
|
|
=item *
|
|
|
|
komentarzem rozpoczynającym się znakiem ';' (ignorowana)
|
|
|
|
=item *
|
|
|
|
parą 'nazwa_opcji = wartość_opcji'
|
|
|
|
=item *
|
|
|
|
tekstem '[nazwa_usługi]' wskazującym początek definicji usługi
|
|
|
|
=back
|
|
|
|
Parametr adres może być:
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
numerem portu
|
|
|
|
=item *
|
|
|
|
oddzieloną średnikiem parą adresu (IPv4, IPv6, lub nazwą domenową) i numeru portu
|
|
|
|
=item *
|
|
|
|
ścieżką do gniazda Unix (tylko Unix)
|
|
|
|
=back
|
|
|
|
=head2 OPCJE GLOBALNE
|
|
|
|
=over 4
|
|
|
|
=item B<chroot> = KATALOG (tylko Unix)
|
|
|
|
katalog roboczego korzenia systemu plików
|
|
|
|
Opcja określa katalog, w którym uwięziony zostanie proces programu
|
|
B<stunnel> tuż po jego inicjalizacji, a przed rozpoczęciem odbierania
|
|
połączeń. Ścieżki podane w opcjach I<CApath>, I<CRLpath>, I<pid>
|
|
oraz I<exec> muszą być umieszczone wewnątrz katalogu podanego w opcji
|
|
I<chroot> i określone względem tego katalogu.
|
|
|
|
Niektóre funkcje systemu operacyjnego mogą wymagać dodatkowych plików umieszczonych w katalogu podanego w parametrze chroot:
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
opóźnione rozwinięcie adresów DNS typowo wymaga /etc/nsswitch.conf i /etc/resolv.conf
|
|
|
|
=item *
|
|
|
|
lokalizacja strefy czasowej w logach wymaga pliku /etc/timezone
|
|
|
|
=item *
|
|
|
|
niektóre inne pliki mogą potrzebować plików urządzeń, np. /dev/zero lub /dev/null
|
|
|
|
=back
|
|
|
|
=item B<compression> = deflate | zlib
|
|
|
|
wybór algorytmu kompresji przesyłanych danych
|
|
|
|
domyślnie: bez kompresji
|
|
|
|
Algorytm deflate jest standardową metodą kompresji zgodnie z RFC 1951.
|
|
|
|
=item B<debug> = [PODSYSTEM].POZIOM
|
|
|
|
szczegółowość logowania
|
|
|
|
Poziom logowania można określić przy pomocy jednej z nazw lub liczb:
|
|
emerg (0), alert (1), crit (2), err (3), warning (4), notice (5),
|
|
info (6) lub debug (7).
|
|
Zapisywane są komunikaty o poziomie niższym (numerycznie) lub równym podanemu.
|
|
Do uzyskania najwyższego poziomu szczegółowości można użyć opcji
|
|
I<debug = debug> lub I<debug = 7>. Domyślnym poziomem jest notice (5).
|
|
|
|
O ile nie wyspecyfikowano podsystemu użyty będzie domyślny: daemon.
|
|
Podsystemy nie są wspierane przez platformę Win32.
|
|
|
|
Wielkość liter jest ignorowana zarówno dla poziomu jak podsystemu.
|
|
|
|
=item B<EGD> = ŚCIEŻKA_DO_EGD (tylko Unix)
|
|
|
|
ścieżka do gniazda programu Entropy Gathering Daemon
|
|
|
|
Opcja pozwala określić ścieżkę do gniazda programu Entropy Gathering Daemon
|
|
używanego do zainicjalizowania generatora ciągów pseudolosowych biblioteki
|
|
B<OpenSSL>.
|
|
|
|
=item B<engine> = auto | IDENTYFIKATOR_URZĄDZENIA
|
|
|
|
wybór sprzętowego urządzenia kryptograficznego
|
|
|
|
domyślnie: bez wykorzystania urządzeń kryptograficznych
|
|
|
|
Sekcja PRZYKŁADY zawiera przykładowe konfiguracje wykorzystujące
|
|
urządzenia kryptograficzne.
|
|
|
|
=item B<engineCtrl> = KOMENDA[:PARAMETR]
|
|
|
|
konfiguracja urządzenia kryptograficznego
|
|
|
|
=item B<engineDefault> = LISTA_ZADAŃ
|
|
|
|
lista zadań OpenSSL oddelegowanych do bieżącego urządzenia
|
|
|
|
Parametrem jest lista oddzielonych przecinkami zadań OpenSSL, które mają
|
|
zostać oddelegowane do bieżącego urządzenia kryptograficznego.
|
|
|
|
W zależności od konkretnego urządzenia dostępne mogą być następujące zadania:
|
|
ALL, RSA, DSA, ECDH, ECDSA, DH, RAND, CIPHERS, DIGESTS, PKEY, PKEY_CRYPTO,
|
|
PKEY_ASN1.
|
|
|
|
=item B<fips> = yes | no
|
|
|
|
tryb FIPS 140-2
|
|
|
|
Opcja pozwala wyłączyć wejście w tryb FIPS, jeśli B<stunnel> został
|
|
skompilowany ze wsparciem dla FIPS 140-2.
|
|
|
|
domyślnie: no (od wersji 5.00)
|
|
|
|
=item B<foreground> = yes | quiet | no (tylko Unix)
|
|
|
|
tryb pierwszoplanowy
|
|
|
|
Użycie tej opcji powoduje, że B<stunnel> nie przechodzi w tło.
|
|
|
|
Parametr I<yes> powoduje dodatkowo, że komunikaty diagnostyczne logowane są na
|
|
standardowy strumień błędów (stderr) oprócz wyjść zdefiniowanych przy pomocy
|
|
opcji I<syslog> i I<output>.
|
|
|
|
=item B<iconActive> = PLIK_Z_IKONKĄ (tylko GUI)
|
|
|
|
ikonka wyświetlana przy obecności aktywnych połączeń do usługi
|
|
|
|
W systemie Windows ikonka to plik .ico zawierający obrazek 16x16 pikseli.
|
|
|
|
=item B<iconError> = PLIK_Z_IKONKĄ (tylko GUI)
|
|
|
|
ikonka wyświetlana, jeżeli nie został załadowany poprawny plik konfiguracyjny
|
|
|
|
W systemie Windows ikonka to plik .ico zawierający obrazek 16x16 pikseli.
|
|
|
|
=item B<iconIdle> = PLIK_Z_IKONKĄ (tylko GUI)
|
|
|
|
ikonka wyświetlana przy braku aktywnych połączeń do usługi
|
|
|
|
W systemie Windows ikonka to plik .ico zawierający obrazek 16x16 pikseli.
|
|
|
|
=item B<log> = append | overwrite
|
|
|
|
obsługa logów
|
|
|
|
Ta opcja pozwala określić, czy nowe logi w pliku (określonym w opcji I<output>) będą dodawane czy nadpisywane.
|
|
|
|
domyślnie: append
|
|
|
|
=item B<output> = PLIK
|
|
|
|
plik, do którego dopisane zostaną logi
|
|
|
|
Użycie tej opcji powoduje dopisanie logów do podanego pliku.
|
|
|
|
Do kierowania komunikatów na standardowe wyjście (na przykład po to, żeby
|
|
zalogować je programem splogger z pakietu daemontools) można podać jako
|
|
parametr urządzenie /dev/stdout.
|
|
|
|
=item B<pid> = PLIK (tylko Unix)
|
|
|
|
położenie pliku z numerem procesu
|
|
|
|
Jeżeli argument jest pusty, plik nie zostanie stworzony.
|
|
|
|
Jeżeli zdefiniowano katalog I<chroot>, to ścieżka do I<pid> jest określona
|
|
względem tego katalogu.
|
|
|
|
=item B<RNDbytes> = LICZBA_BAJTÓW
|
|
|
|
liczba bajtów do zainicjowania generatora pseudolosowego
|
|
|
|
=item B<RNDfile> = PLIK
|
|
|
|
ścieżka do pliku zawierającego losowe dane
|
|
|
|
Biblioteka B<OpenSSL> użyje danych z tego pliku do zainicjowania
|
|
generatora pseudolosowego.
|
|
|
|
=item B<RNDoverwrite> = yes | no
|
|
|
|
nadpisz plik nowymi wartościami pseudolosowymi
|
|
|
|
domyślnie: yes (nadpisz)
|
|
|
|
=item B<service> = SERWIS (tylko Unix)
|
|
|
|
nazwa usługi
|
|
|
|
Podana nazwa usługi będzie używana jako nazwa usługi dla inicjalizacji sysloga,
|
|
oraz dla biblioteki TCP Wrapper w trybie I<inetd>. Chociaż technicznie można
|
|
użyć tej opcji w trybie w sekcji usług, to jest ona użyteczna jedynie w opcjach
|
|
globalnych.
|
|
|
|
domyślnie: stunnel
|
|
|
|
=item B<socket> = a|l|r:OPCJA=WARTOŚĆ[:WARTOŚĆ]
|
|
|
|
ustaw opcję na akceptującym/lokalnym/zdalnym gnieździe
|
|
|
|
Dla opcji linger wartości mają postać l_onof:l_linger.
|
|
Dla opcji time wartości mają postać tv_sec:tv_usec.
|
|
|
|
Przykłady:
|
|
|
|
socket = l:SO_LINGER=1:60
|
|
ustaw jednominutowe przeterminowanie
|
|
przy zamykaniu lokalnego gniazda
|
|
socket = r:SO_OOBINLINE=yes
|
|
umieść dane pozapasmowe (out-of-band)
|
|
bezpośrednio w strumieniu danych
|
|
wejściowych dla zdalnych gniazd
|
|
socket = a:SO_REUSEADDR=no
|
|
zablokuj ponowne używanie portu
|
|
(domyślnie włączone)
|
|
socket = a:SO_BINDTODEVICE=lo
|
|
przyjmuj połączenia wyłącznie na
|
|
interfejsie zwrotnym (ang. loopback)
|
|
|
|
=item B<syslog> = yes | no (tylko Unix)
|
|
|
|
włącz logowanie poprzez mechanizm syslog
|
|
|
|
domyślnie: yes (włącz)
|
|
|
|
=item B<taskbar> = yes | no (tylko WIN32)
|
|
|
|
włącz ikonkę w prawym dolnym rogu ekranu
|
|
|
|
domyślnie: yes (włącz)
|
|
|
|
=back
|
|
|
|
|
|
=head2 OPCJE USŁUG
|
|
|
|
Każda sekcja konfiguracji usługi zaczyna się jej nazwą ujętą w nawias
|
|
kwadratowy. Nazwa usługi używana jest do kontroli dostępu przez
|
|
bibliotekę libwrap (TCP wrappers) oraz pozwala rozróżnić poszczególne
|
|
usługi w logach.
|
|
|
|
Jeżeli B<stunnel> ma zostać użyty w trybie I<inetd>, gdzie za odebranie
|
|
połączenia odpowiada osobny program (zwykle I<inetd>, I<xinetd>
|
|
lub I<tcpserver>), należy przeczytać sekcję I<TRYB INETD> poniżej.
|
|
|
|
=over 4
|
|
|
|
=item B<accept> = [HOST:]PORT
|
|
|
|
nasłuchuje na połączenia na podanym adresie i porcie
|
|
|
|
Jeżeli nie został podany adres, B<stunnel> domyślnie nasłuchuje
|
|
na wszystkich adresach IPv4 lokalnych interfejsów.
|
|
|
|
Aby nasłuchiwać na wszystkich adresach IPv6 należy użyć:
|
|
|
|
accept = :::port
|
|
|
|
=item B<CApath> = KATALOG_CA
|
|
|
|
katalog Centrum Certyfikacji
|
|
|
|
Opcja określa katalog, w którym B<stunnel> będzie szukał certyfikatów, jeżeli
|
|
użyta została opcja I<verifyChain> lub I<verifyPeer>. Pliki z certyfikatami
|
|
muszą posiadać specjalne nazwy XXXXXXXX.0, gdzie XXXXXXXX jest skrótem
|
|
kryptograficznym reprezentacji DER nazwy podmiotu certyfikatu.
|
|
|
|
Funkcja skrótu została zmieniona w B<OpenSSL 1.0.0>.
|
|
Należy wykonać c_rehash przy zmianie B<OpenSSL 0.x.x> na B<1.x.x>.
|
|
|
|
Jeżeli zdefiniowano katalog I<chroot>, to ścieżka do I<CApath> jest określona
|
|
względem tego katalogu.
|
|
|
|
=item B<CAfile> = PLIK_CA
|
|
|
|
plik Centrum Certyfikacji
|
|
|
|
Opcja pozwala określić położenie pliku zawierającego certyfikaty używane
|
|
przez opcję I<verifyChain> lub I<verifyPeer>.
|
|
|
|
=item B<cert> = PLIK_CERT
|
|
|
|
plik z łańcuchem certyfikatów
|
|
|
|
Opcja określa położenie pliku zawierającego certyfikaty używane przez
|
|
program B<stunnel> do uwierzytelnienia się przed drugą stroną połączenia.
|
|
Plik powinien zawierać kompletny łańcuch certyfikatów począwszy od certyfikatu
|
|
klienta/serwera, a skończywszy na samopodpisanym certyfikacie głównego CA.
|
|
Obsługiwane są pliki w formacie PEM lub P12.
|
|
|
|
Certyfikat jest konieczny, aby używać programu w trybie serwera.
|
|
W trybie klienta certyfikat jest opcjonalny.
|
|
|
|
Jeżeli używane jest sprzętowe urządzenie kryptograficzne, to opcja B<cert>
|
|
pozwala wybrać identyfikator używanego certyfikatu.
|
|
|
|
=item B<checkEmail> = EMAIL
|
|
|
|
adres email przedstawionego certyfikatu
|
|
|
|
Pojedyncza sekcja może zawierać wiele wystąpień opcji B<checkEmail>.
|
|
Certyfikaty są akceptowane, jeżeli sekcja nie zawiera opcji B<checkEmail>,
|
|
albo adres email przedstawionego certyfikatu pasuje do jednego z adresów
|
|
email określonych przy pomocy B<checkEmail>.
|
|
|
|
Opcja ta wymaga biblioteki OpenSSL w wersji 1.0.2 lub nowszej.
|
|
|
|
=item B<checkHost> = NAZWA_SERWERA
|
|
|
|
nazwa serwera przedstawionego certyfikatu
|
|
|
|
Pojedyncza sekcja może zawierać wiele wystąpień opcji B<checkHost>.
|
|
Certyfikaty są akceptowane, jeżeli sekcja nie zawiera opcji B<checkHost>, albo
|
|
nazwa serwera przedstawionego certyfikatu pasuje do jednego nazw określonych
|
|
przy pomocy B<checkHost>.
|
|
|
|
Opcja ta wymaga biblioteki OpenSSL w wersji 1.0.2 lub nowszej.
|
|
|
|
=item B<checkIP> = IP
|
|
|
|
adres IP przedstawionego certyfikatu
|
|
|
|
Pojedyncza sekcja może zawierać wiele wystąpień opcji B<checkIP>. Certyfikaty
|
|
są akceptowane, jeżeli sekcja nie zawiera opcji B<checkIP>, albo adres IP
|
|
przedstawionego certyfikatu pasuje do jednego z adresów IP określonych przy
|
|
pomocy B<checkIP>.
|
|
|
|
Opcja ta wymaga biblioteki OpenSSL w wersji 1.0.2 lub nowszej.
|
|
|
|
=item B<ciphers> = LISTA_SZYFRÓW
|
|
|
|
lista dozwolonych szyfrów TLS
|
|
|
|
Parametrem tej opcji jest lista szyfrów, które będą użyte przy
|
|
otwieraniu nowych połączeń TLS, np.: DES-CBC3-SHA:IDEA-CBC-MD5
|
|
|
|
=item B<client> = yes | no
|
|
|
|
tryb kliencki (zdalna usługa używa TLS)
|
|
|
|
domyślnie: no (tryb serwerowy)
|
|
|
|
=item B<config> = KOMENDA[:PARAMETR]
|
|
|
|
komenda konfiguracyjna B<OpenSSL>
|
|
|
|
Komenda konfiguracyjna B<OpenSSL> zostaje wykonana z podanym parametrem.
|
|
Pozwala to na wydawanie komend konfiguracyjnych B<OpenSSL> z pliku
|
|
konfiguracyjnego stunnela. Dostępne komendy opisane są w manualu
|
|
I<SSL_CONF_cmd(3ssl)>.
|
|
|
|
Możliwe jest wyspecyfikowanie wielu opcji B<OpenSSL> przez wielokrotne użycie
|
|
komendy B<config>.
|
|
|
|
Opcja ta wymaga biblioteki OpenSSL w wersji 1.0.2 lub nowszej.
|
|
|
|
=item B<connect> = [HOST:]PORT
|
|
|
|
połącz się ze zdalnym serwerem na podany port
|
|
|
|
Jeżeli nie został podany adres, B<stunnel> domyślnie łączy się
|
|
z lokalnym serwerem.
|
|
|
|
Komenda może być użyta wielokrotnie w pojedynczej sekcji
|
|
celem zapewnienia wysokiej niezawodności lub rozłożenia
|
|
ruchu pomiędzy wiele serwerów.
|
|
|
|
=item B<CRLpath> = KATALOG_CRL
|
|
|
|
katalog List Odwołanych Certyfikatów (CRL)
|
|
|
|
Opcja określa katalog, w którym B<stunnel> będzie szukał list CRL używanych
|
|
przez opcje I<verifyChain> i I<verifyPeer>. Pliki z listami CRL muszą posiadać
|
|
specjalne nazwy XXXXXXXX.r0, gdzie XXXXXXXX jest skrótem listy CRL.
|
|
|
|
Funkcja skrótu została zmieniona B<OpenSSL 1.0.0>.
|
|
Należy wykonać c_rehash przy zmianie B<OpenSSL 0.x.x> na B<1.x.x>.
|
|
|
|
Jeżeli zdefiniowano katalog I<chroot>, to ścieżka do I<CRLpath> jest określona
|
|
względem tego katalogu.
|
|
|
|
=item B<CRLfile> = PLIK_CRL
|
|
|
|
plik List Odwołanych Certyfikatów (CRL)
|
|
|
|
Opcja pozwala określić położenie pliku zawierającego listy CRL używane
|
|
przez opcje I<verifyChain> i I<verifyPeer>.
|
|
|
|
=item B<curve> = NID
|
|
|
|
krzywa dla ECDH
|
|
|
|
Listę dostępnych krzywych można uzyskać poleceniem:
|
|
|
|
openssl ecparam -list_curves
|
|
|
|
domyślnie: prime256v1
|
|
|
|
=item B<logId> = TYP
|
|
|
|
typ identyfikatora połączenia klienta
|
|
|
|
Identyfikator ten pozwala rozróżnić wpisy w logu wygenerowane dla
|
|
poszczególnych połączeń.
|
|
|
|
Aktualnie wspierane typy:
|
|
|
|
=over 4
|
|
|
|
=item I<sequential>
|
|
|
|
Kolejny numer połączenia jest unikalny jedynie w obrębie pojedynczej instancji
|
|
programu B<stunnel>, ale bardzo krótki. Jest on szczególnie użyteczny przy
|
|
ręcznej analizie logów.
|
|
|
|
=item I<unique>
|
|
|
|
Ten rodzaj identyfikatora jest globalnie unikalny, ale znacznie dłuższy, niż
|
|
kolejny numer połączenia. Jest on szczególnie użyteczny przy zautomatyzowanej
|
|
analizie logów.
|
|
|
|
=item I<thread>
|
|
|
|
Identyfikator wątku systemu operacyjnego nie jest ani unikalny (nawet w obrębie
|
|
pojedynczej instancji programu B<stunnel>), ani krótki. Jest on szczególnie
|
|
użyteczny przy diagnozowaniu problemów z oprogramowaniem lub konfiguracją.
|
|
|
|
=item I<process>
|
|
|
|
Identyfikator procesu (PID) może być użyteczny w trybie inetd.
|
|
|
|
=back
|
|
|
|
domyślnie: sequential
|
|
|
|
=item B<debug> = POZIOM
|
|
|
|
szczegółowość logowania
|
|
|
|
Poziom logowania można określić przy pomocy jednej z nazw lub liczb:
|
|
emerg (0), alert (1), crit (2), err (3), warning (4), notice (5),
|
|
info (6) lub debug (7).
|
|
Zapisywane są komunikaty o poziomie niższym (numerycznie) lub równym podanemu.
|
|
Do uzyskania najwyższego poziomu szczegółowości można użyć opcji
|
|
I<debug = debug> lub I<debug = 7>. Domyślnym poziomem jest notice (5).
|
|
|
|
=item B<delay> = yes | no
|
|
|
|
opóźnij rozwinięcie adresu DNS podanego w opcji I<connect>
|
|
|
|
Opcja jest przydatna przy dynamicznym DNS, albo gdy usługa DNS nie jest
|
|
dostępna przy starcie programu B<stunnel> (klient VPN, połączenie wdzwaniane).
|
|
|
|
Opóźnione rozwijanie adresu DNS jest włączane automatycznie, jeżeli nie
|
|
powiedzie się rozwinięcie któregokolwiek z adresów I<connect> dla danej
|
|
usługi.
|
|
|
|
Opóźnione rozwijanie adresu automatycznie aktywuje I<failover = prio>.
|
|
|
|
default: no
|
|
|
|
=item B<engineId> = NUMER_URZĄDZENIA
|
|
|
|
wybierz urządzenie dla usługi
|
|
|
|
=item B<engineNum> = NUMER_URZĄDZENIA
|
|
|
|
wybierz urządzenie dla usługi
|
|
|
|
Urządzenia są numerowane od 1 w górę.
|
|
|
|
=item B<exec> = ŚCIEŻKA_DO_PROGRAMU
|
|
|
|
wykonaj lokalny program przystosowany do pracy z superdemonem inetd
|
|
|
|
Jeżeli zdefiniowano katalog I<chroot>, to ścieżka do I<exec> jest określona
|
|
względem tego katalogu.
|
|
|
|
Na platformach Unix ustawiane są następujące zmienne środowiskowe:
|
|
REMOTE_HOST, REMOTE_PORT, SSL_CLIENT_DN, SSL_CLIENT_I_DN.
|
|
|
|
=item B<execArgs> = $0 $1 $2 ...
|
|
|
|
argumenty do opcji I<exec> włącznie z nazwą programu ($0)
|
|
|
|
Cytowanie nie jest wspierane w obecnej wersji programu.
|
|
Argumenty są rozdzielone dowolną liczbą białych znaków.
|
|
|
|
=item B<failover> = rr | prio
|
|
|
|
Strategia wybierania serwerów wyspecyfikowanych parametrami "connect".
|
|
|
|
=over 4
|
|
|
|
=item I<rr>
|
|
|
|
round robin - sprawiedliwe rozłożenie obciążenia
|
|
|
|
=item I<prio>
|
|
|
|
priority - użyj kolejności opcji w pliku konfiguracyjnym
|
|
|
|
=back
|
|
|
|
domyślnie: rr
|
|
|
|
=item B<ident> = NAZWA_UŻYTKOWNIKA
|
|
|
|
weryfikuj nazwę zdalnego użytkownika korzystając z protokołu IDENT (RFC 1413)
|
|
|
|
=item B<include> = KATALOG
|
|
|
|
wczytaj fragmenty plików konfiguracyjnych z podanego katalogu
|
|
|
|
Pliki są wczytywane w rosnącej kolejności alfabetycznej ich nazw.
|
|
|
|
=item B<key> = PLIK_KLUCZA
|
|
|
|
klucz prywatny do certyfikatu podanego w opcji I<cert>
|
|
|
|
Klucz prywatny jest potrzebny do uwierzytelnienia właściciela certyfikatu.
|
|
Ponieważ powinien on być zachowany w tajemnicy, prawa do jego odczytu
|
|
powinien mieć wyłącznie właściciel pliku. W systemie Unix można to osiągnąć
|
|
komendą:
|
|
|
|
chmod 600 keyfile
|
|
|
|
Jeżeli używane jest sprzętowe urządzenie kryptograficzne, to opcja B<key>
|
|
pozwala wybrać identyfikator używanego klucza prywatnego.
|
|
|
|
domyślnie: wartość opcji I<cert>
|
|
|
|
=item B<libwrap> = yes | no
|
|
|
|
włącz lub wyłącz korzystanie z /etc/hosts.allow i /etc/hosts.deny.
|
|
|
|
domyślnie: no (od wersji 5.00)
|
|
|
|
=item B<local> = HOST
|
|
|
|
IP źródła do nawiązywania zdalnych połączeń
|
|
|
|
Domyślnie używane jest IP najbardziej zewnętrznego interfejsu w stronę
|
|
serwera, do którego nawiązywane jest połączenie.
|
|
|
|
=item B<OCSP> = URL
|
|
|
|
responder OCSP do weryfikacji certyfikatów
|
|
|
|
=item B<OCSPaia> = yes | no
|
|
|
|
weryfikuj certyfikaty przy użyciu respondertów AIA
|
|
|
|
Opcja I<OCSPaia> pozwala na weryfikowanie certyfikatów przy pomocy listy URLi
|
|
responderów OCSP przesłanych w rozszerzeniach AIA (Authority Information Access).
|
|
|
|
=item B<OCSPflag> = FLAGA_OCSP
|
|
|
|
flaga respondera OCSP
|
|
|
|
Aktualnie wspierane flagi: NOCERTS, NOINTERN, NOSIGS, NOCHAIN, NOVERIFY,
|
|
NOEXPLICIT, NOCASIGN, NODELEGATED, NOCHECKS, TRUSTOTHER, RESPID_KEY, NOTIME
|
|
|
|
Aby wyspecyfikować kilka flag należy użyć I<OCSPflag> wielokrotnie.
|
|
|
|
=item B<OCSPnonce> = yes | no
|
|
|
|
wysyłaj i weryfikuj OCSP nonce
|
|
|
|
Opcja B<OCSPnonce> zabezpiecza protokół OCSP przed atakami powtórzeniowymi.
|
|
Ze względu na złożoność obliczeniową rozszerzenie nonce jest zwykle wspierane
|
|
jedynie przez wewnętrzne (np. korporacyjne), a nie przez publiczne respondery
|
|
OCSP.
|
|
|
|
=item B<options> = OPCJE_SSL
|
|
|
|
opcje biblioteki B<OpenSSL>
|
|
|
|
Parametrem jest nazwa opcji zgodnie z opisem w I<SSL_CTX_set_options(3ssl)>,
|
|
ale bez przedrostka I<SSL_OP_>.
|
|
I<stunnel -options> wyświetla opcje dozwolone w aktualnej kombinacji
|
|
programu I<stunnel> i biblioteki I<OpenSSL>.
|
|
|
|
Aby wyspecyfikować kilka opcji należy użyć I<options> wielokrotnie.
|
|
Nazwa opcji może być poprzedzona myślnikiem ("-") celem wyłączenia opcji.
|
|
|
|
Na przykład, dla zachowania kompatybilności z błędami implementacji TLS
|
|
w programie Eudora, można użyć opcji:
|
|
|
|
options = DONT_INSERT_EMPTY_FRAGMENTS
|
|
|
|
domyślnie:
|
|
|
|
options = NO_SSLv2
|
|
options = NO_SSLv3
|
|
|
|
=item B<protocol> = PROTOKÓŁ
|
|
|
|
negocjuj TLS podanym protokołem aplikacyjnym
|
|
|
|
Opcja ta włącza wstępną negocjację szyfrowania TLS dla wybranego protokołu
|
|
aplikacyjnego.
|
|
Opcji I<protocol> nie należy używać z szyfrowaniem TLS na osobnym porcie.
|
|
|
|
Aktualnie wspierane protokoły:
|
|
|
|
=over 4
|
|
|
|
=item I<cifs>
|
|
|
|
Nieudokumentowane rozszerzenie protokołu CIFS wspierane przez serwer Samba.
|
|
Wsparcie dla tego rozrzeczenia zostało zarzucone w wersji 3.0.0 serwera Samba.
|
|
|
|
=item I<connect>
|
|
|
|
Negocjacja RFC 2817 - I<Upgrading to TLS Within HTTP/1.1>, rozdział 5.2 - I<Requesting a Tunnel with CONNECT>
|
|
|
|
Ten protokół jest wspierany wyłącznie w trybie klienckim.
|
|
|
|
=item I<imap>
|
|
|
|
Negocjacja RFC 2595 - I<Using TLS with IMAP, POP3 and ACAP>
|
|
|
|
=item I<nntp>
|
|
|
|
Negocjacja RFC 4642 - I<Using Transport Layer Security (TLS) with Network News Transfer Protocol (NNTP)>
|
|
|
|
Ten protokół jest wspierany wyłącznie w trybie klienckim.
|
|
|
|
=item I<pgsql>
|
|
|
|
Negocjacja http://www.postgresql.org/docs/8.3/static/protocol-flow.html#AEN73982
|
|
|
|
=item I<pop3>
|
|
|
|
Negocjacja RFC 2449 - I<POP3 Extension Mechanism>
|
|
|
|
=item I<proxy>
|
|
|
|
Przekazywanie adresu IP haproxy http://haproxy.1wt.eu/download/1.5/doc/proxy-protocol.txt
|
|
|
|
=item I<smtp>
|
|
|
|
Negocjacja RFC 2487 - I<SMTP Service Extension for Secure SMTP over TLS>
|
|
|
|
=item I<socks>
|
|
|
|
Wspierany jest protokół SOCKS w wersjach 4, 4a i 5.
|
|
Protokół SOCKS enkapsulowany jest w protokole TLS, więc adres serwera
|
|
docelowego nie jest widoczny dla napastnika przechwytującego ruch sieciowy.
|
|
|
|
F<http://www.openssh.com/txt/socks4.protocol>
|
|
|
|
F<http://www.openssh.com/txt/socks4a.protocol>
|
|
|
|
Nie jest wspierana komenda BIND protokołu SOCKS.
|
|
Przesłana wartość parametru USERID jest ignorowana.
|
|
|
|
Sekcja PRZYKŁADY zawiera przykładowe pliki konfiguracyjne VPNa zbudowanego
|
|
w oparciu o szyfrowany protokół SOCKS.
|
|
|
|
=back
|
|
|
|
=item B<protocolAuthentication> = UWIERZYTELNIENIE
|
|
|
|
rodzaj uwierzytelnienia do negocjacji protokołu
|
|
|
|
Opcja ta jest wpierana wyłącznie w klienckich protokołach 'connect' i 'smtp'.
|
|
|
|
W protokole 'connect' wspierane jest uwierzytelnienie 'basic' oraz 'ntlm'.
|
|
Domyślnym rodzajem uwierzytelnienia protokołu 'connect' jest 'basic'.
|
|
|
|
W protokole 'smtp' wspierane jest uwierzytelnienie 'plain' oraz 'login'.
|
|
Domyślnym rodzajem uwierzytelnienia protokołu 'smtp' jest 'plain'.
|
|
|
|
=item B<protocolDomain> = DOMENA
|
|
|
|
domena do negocjacji protokołu
|
|
|
|
W obecnej wersji wybrana domena ma zastosowanie wyłącznie w protokole 'connect'.
|
|
|
|
=item B<protocolHost> = HOST:PORT
|
|
|
|
adres docelowy do negocjacji protokołu
|
|
|
|
I<protocolHost> określa docelowy serwer TLS, do którego połączyć ma się proxy.
|
|
Nie jest to adres serwera proxy, do którego połączenie zestawia B<stunnel>.
|
|
Adres serwera proxy powinien być określony przy pomocy opcji 'connect'.
|
|
|
|
W obecnej wersji adres docelowy protokołu ma zastosowanie wyłącznie w protokole
|
|
'connect'.
|
|
|
|
=item B<protocolPassword> = HASŁO
|
|
|
|
hasło do negocjacji protokołu
|
|
|
|
Opcja ta jest wspierana wyłącznie w klienckich protokołach 'connect' i 'smtp'.
|
|
|
|
=item B<protocolUsername> = UŻYTKOWNIK
|
|
|
|
nazwa użytkownika do negocjacji protokołu
|
|
|
|
Opcja ta jest wspierana wyłącznie w klienckich protokołach 'connect' i 'smtp'.
|
|
|
|
=item B<PSKidentity> = TOŻSAMOŚĆ
|
|
|
|
tożsamość klienta PSK
|
|
|
|
I<PSKidentity> może zostać użyte w sekcjach klienckich do wybrania
|
|
tożsamości użytej do uwierzytelnienia PSK.
|
|
Opcja jest ignorowana w sekcjach serwerowych.
|
|
|
|
domyślnie: pierwsza tożsamość zdefiniowana w pliku I<PSKsecrets>
|
|
|
|
=item B<PSKsecrets> = PLIK
|
|
|
|
plik z tożsamościami i kluczami PSK
|
|
|
|
Każda linia pliku jest w następującym formacie:
|
|
|
|
TOŻSAMOŚĆ:KLUCZ
|
|
|
|
Klucz musi być mieć przynajmniej 20 znaków.
|
|
Należy ograniczyć dostęp do czytania lub pisania do tego pliku.
|
|
|
|
=item B<pty> = yes | no (tylko Unix)
|
|
|
|
alokuj pseudoterminal dla programu uruchamianego w opcji 'exec'
|
|
|
|
=item B<redirect> = [HOST:]PORT
|
|
|
|
przekieruj klienta, któremu nie udało się poprawnie uwierzytelnić przy pomocy certyfikatu
|
|
|
|
Opcja działa wyłącznie w trybie serwera.
|
|
Część negocjacji protokołów jest niekompatybilna z opcją I<redirect>.
|
|
|
|
=item B<renegotiation> = yes | no
|
|
|
|
pozwalaj na renegocjację TLS
|
|
|
|
Zastosowania renegocjacji TLS zawierają niektóre scenariusze uwierzytelniania oraz renegocjację kluczy dla długotrwałych połączeń.
|
|
|
|
Z drugiej strony własność na może ułatwić trywialny atak DoS poprzez
|
|
wygenerowanie obciążenia procesora:
|
|
|
|
http://vincent.bernat.im/en/blog/2011-ssl-dos-mitigation.html
|
|
|
|
Warto zauważyć, że zablokowanie renegocjacji TLS nie zebezpiecza w pełni
|
|
przed opisanym problemem.
|
|
|
|
domyślnie: yes (o ile wspierane przez B<OpenSSL>)
|
|
|
|
=item B<reset> = yes | no
|
|
|
|
sygnalizuj wystąpienie błędu przy pomocy flagi TCP RST
|
|
|
|
Opcja nie jest wspierana na niektórych platformach.
|
|
|
|
domyślnie: yes
|
|
|
|
=item B<retry> = yes | no
|
|
|
|
połącz ponownie sekcję connect+exec po rozłączeniu
|
|
|
|
domyślnie: no
|
|
|
|
=item B<requireCert> = yes | no
|
|
|
|
wymagaj certyfikatu klienta dla I<verifyChain> lub I<verifyPeer>
|
|
|
|
Przy opcji I<requireCert> ustawionej na I<no>, B<stunnel> akceptuje
|
|
połączenia klientów, które nie wysłały certyfikatu.
|
|
|
|
Zarówno I<verifyChain = yes> jak i I<verifyPeer = yes>
|
|
automatycznie ustawiają I<requireCert> na I<yes>.
|
|
|
|
domyślnie: no
|
|
|
|
=item B<setgid> = IDENTYFIKATOR_GRUPY (tylko Unix)
|
|
|
|
identyfikator grupy Unix
|
|
|
|
Jako opcja globalna: grupa, z której prawami pracował będzie B<stunnel>.
|
|
|
|
Jako opcja usługi: grupa gniazda Unix utworzonego przy pomocy opcji "accept".
|
|
|
|
=item B<setuid> = IDENTYFIKATOR_UŻYTKOWNIKA (tylko Unix)
|
|
|
|
identyfikator użytkownika Unix
|
|
|
|
Jako opcja globalna: użytkownik, z którego prawami pracował będzie B<stunnel>.
|
|
|
|
Jako opcja usługi: właściciel gniazda Unix utworzonego przy pomocy opcji "accept".
|
|
|
|
=item B<sessionCacheSize> = LICZBA_POZYCJI_CACHE
|
|
|
|
rozmiar pamięci podręcznej sesji TLS
|
|
|
|
Parametr określa maksymalną liczbę pozycji wewnętrznej pamięci podręcznej
|
|
sesji.
|
|
|
|
Wartość 0 oznacza brak ograniczenia rozmiaru. Nie jest to zalecane dla
|
|
systemów produkcyjnych z uwagi na ryzyko ataku DoS przez wyczerpanie pamięci
|
|
RAM.
|
|
|
|
=item B<sessionCacheTimeout> = LICZBA_SEKUND
|
|
|
|
przeterminowanie pamięci podręcznej sesji TLS
|
|
|
|
Parametr określa czas w sekundach, po którym sesja TLS zostanie usunięta z
|
|
pamięci podręcznej.
|
|
|
|
=item B<sessiond> = HOST:PORT
|
|
|
|
adres sessiond - servera cache sesji TLS
|
|
|
|
=item B<sni> = NAZWA_USŁUGI:WZORZEC_NAZWY_SERWERA (tryb serwera)
|
|
|
|
Użyj usługi jako podrzędnej (virtualnego serwera) dla rozszerzenia TLS Server
|
|
Name Indication (RFC 3546).
|
|
|
|
I<NAZWA_USŁUGI> wskazuje usługę nadrzędną, która odbiera połączenia od klientów
|
|
przy pomocy opcji I<accept>. I<WZORZEC_NAZWY_SERWERA> wskazuje nazwę serwera
|
|
wirtualnego. Wzorzec może zaczynać się znakiem '*', np. '*.example.com". Z
|
|
pojedyńczą usługą nadrzędną powiązane jest zwykle wiele usług podrzędnych.
|
|
Opcja I<sni> może być rownież użyta wielokrotnie w ramach jednej usługi
|
|
podrzędnej.
|
|
|
|
Zarówno usługa nadrzędna jak i podrzędna nie może być skonfigurowana w trybie
|
|
klienckim.
|
|
|
|
Opcja I<connect> usługi podrzędnej jest ignorowana w połączeniu z opcją
|
|
I<protocol>, gdyż połączenie do zdalnego serwera jest w tym wypadku nawiązywane
|
|
przed negocjacją TLS.
|
|
|
|
Uwierzytelnienie przy pomocy biblioteki libwrap jest realizowane dwukrotnie:
|
|
najpierw dla usługi nadrzędnej po odebraniu połączenia TCP, a następnie dla
|
|
usługi podrzędnej podczas negocjacji TLS.
|
|
|
|
Opcja I<sni> jest dostępna począwszy od B<OpenSSL 1.0.0>.
|
|
|
|
=item B<sni> = NAZWA_SERWERA (tryb klienta)
|
|
|
|
Użyj parametru jako wartości rozszerzenia TLS Server Name Indication
|
|
(RFC 3546).
|
|
|
|
Pusta wartość parametru NAZWA_SERWERA wyłącza wysyłanie rozszerzenia SNI.
|
|
|
|
Opcja I<sni> jest dostępna począwszy od B<OpenSSL 1.0.0>.
|
|
|
|
=item B<sslVersion> = WERSJA_SSL
|
|
|
|
wersja protokołu TLS
|
|
|
|
Wspierane opcje: all, SSLv2, SSLv3, TLSv1, TLSv1.1, TLSv1.2
|
|
|
|
Dostępność konkretnych protokołów zależy od użytej wersji OpenSSL.
|
|
Starsze wersje OpenSSL nie wspierają TLSv1.1 i TLSv1.2.
|
|
Nowsze wersje OpenSSL nie wspierają SSLv2.
|
|
|
|
Przestarzałe protokoły SSLv2 i SSLv3 są domyślnie wyłączone.
|
|
Szczegółowe informacje dostępne są w opisie opcji B<options>.
|
|
|
|
=item B<stack> = LICZBA_BAJTÓW (z wyjątkiem modelu FORK)
|
|
|
|
rozmiar stosu procesora wątku
|
|
|
|
=item B<TIMEOUTbusy> = LICZBA_SEKUND
|
|
|
|
czas oczekiwania na spodziewane dane
|
|
|
|
=item B<TIMEOUTclose> = LICZBA_SEKUND
|
|
|
|
czas oczekiwania na close_notify (ustaw na 0, jeżeli klientem jest MSIE)
|
|
|
|
=item B<TIMEOUTconnect> = LICZBA_SEKUND
|
|
|
|
czas oczekiwania na nawiązanie połączenia
|
|
|
|
=item B<TIMEOUTidle> = LICZBA_SEKUND
|
|
|
|
maksymalny czas utrzymywania bezczynnego połączenia
|
|
|
|
=item B<transparent> = none | source | destination | both (tylko Unix)
|
|
|
|
tryb przezroczystego proxy na wspieranych platformach
|
|
|
|
Wspierane opcje:
|
|
|
|
=over 4
|
|
|
|
=item B<none>
|
|
|
|
Zablokuj wsparcie dla przezroczystago proxy. Jest to wartość domyślna.
|
|
|
|
=item B<source>
|
|
|
|
Przepisz adres, aby nawiązywane połączenie wydawało się pochodzić
|
|
bezpośrednio od klienta, a nie od programu B<stunnel>.
|
|
|
|
Opcja jest aktualnie obsługiwana w:
|
|
|
|
=over 4
|
|
|
|
=item Trybie zdalnym (opcja I<connect>) w systemie I<Linux E<gt>=2.6.28>
|
|
|
|
Konfiguracja wymaga następujących ustawień iptables oraz routingu
|
|
(na przykład w pliku /etc/rc.local lub analogicznym):
|
|
|
|
iptables -t mangle -N DIVERT
|
|
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
|
|
iptables -t mangle -A DIVERT -j MARK --set-mark 1
|
|
iptables -t mangle -A DIVERT -j ACCEPT
|
|
ip rule add fwmark 1 lookup 100
|
|
ip route add local 0.0.0.0/0 dev lo table 100
|
|
echo 0 >/proc/sys/net/ipv4/conf/lo/rp_filter
|
|
|
|
Konfiguracja ta wymaga, aby B<stunnel> był wykonywany jako root i bez opcji I<setuid>.
|
|
|
|
=item Trybie zdalnym (opcja I<connect>) w systemie I<Linux 2.2.x>
|
|
|
|
Konfiguracja ta wymaga skompilowania jądra z opcją I<transparent proxy>.
|
|
Docelowa usługa musi być umieszczona na osobnej maszynie, do której routing
|
|
kierowany jest poprzez serwer B<stunnela>.
|
|
|
|
Dodatkowo B<stunnel> powinien być wykonywany jako root i bez opcji I<setuid>.
|
|
|
|
=item Trybie zdalnym (opcja I<connect>) w systemie I<FreeBSD E<gt>=8.0>
|
|
|
|
Konfiguracja ta wymaga skonfigurowania firewalla i routingu.
|
|
B<stunnel> musi być wykonywany jako root i bez opcji I<setuid>.
|
|
|
|
=item Trybie lokalnym (opcja I<exec>)
|
|
|
|
Konfiguracja ta jest realizowana przy pomocy biblioteki I<libstunnel.so>.
|
|
Do załadowania biblioteki wykorzystywana jest zmienna środowiskowa _RLD_LIST na
|
|
platformie Tru64 lub LD_PRELOAD na innych platformach.
|
|
|
|
=back
|
|
|
|
=item I<destination>
|
|
|
|
Oryginalny adres docelowy jest używany zamiast opcji I<connect>.
|
|
|
|
Przykładowana konfiguracja przezroczystego adresu docelowego:
|
|
|
|
[transparent]
|
|
client = yes
|
|
accept = <port_stunnela>
|
|
transparent = destination
|
|
|
|
Konfiguracja wymaga ustawień iptables, na przykład w pliku
|
|
/etc/rc.local lub analogicznym.
|
|
|
|
W przypadku docelowej usługi umieszczonej na tej samej maszynie:
|
|
|
|
/sbin/iptables -t nat -I OUTPUT -p tcp --dport <port_przekierowany> \
|
|
-m ! --uid-owner <identyfikator_użytkownika_stunnela> \
|
|
-j DNAT --to-destination <lokalne_ip>:<lokalny_port>
|
|
|
|
W przypadku docelowej usługi umieszczonej na zdalnej maszynie:
|
|
|
|
/sbin/iptables -I INPUT -i eth0 -p tcp --dport <port_stunnela> -j ACCEPT
|
|
/sbin/iptables -t nat -I PREROUTING -p tcp --dport <port_przekierowany> \
|
|
-i eth0 -j DNAT --to-destination <lokalne_ip>:<port_stunnela>
|
|
|
|
Przezroczysty adres docelowy jest aktualnie wspierany wyłącznie w systemie Linux.
|
|
|
|
=item I<both>
|
|
|
|
Użyj przezroczystego proxy zarówno dla adresu źródłowego jak i docelowego.
|
|
|
|
=back
|
|
|
|
Dla zapewnienia kompatybilności z wcześniejszymim wersjami wspierane są dwie
|
|
dodatkowe opcje:
|
|
|
|
=over 4
|
|
|
|
=item I<yes>
|
|
|
|
Opcja została przemianowana na I<source>.
|
|
|
|
=item I<no>
|
|
|
|
Opcja została przemianowana na I<none>.
|
|
|
|
=back
|
|
|
|
=item B<verify> = POZIOM
|
|
|
|
weryfikuj certyfikat drugiej strony połączenia
|
|
|
|
Opcja ta jest przestarzała i należy ją zastąpić przez opcje
|
|
I<verifyChain> i I<verifyPeer>.
|
|
|
|
=over 4
|
|
|
|
=item I<poziom 0>
|
|
|
|
zarządaj certyfikatu i zignoruj go
|
|
|
|
=item I<poziom 1>
|
|
|
|
weryfikuj, jeżeli został przedstawiony
|
|
|
|
=item I<poziom 2>
|
|
|
|
weryfikuj z zainstalowanym certyfikatem Centrum Certyfikacji
|
|
|
|
=item I<poziom 3>
|
|
|
|
weryfikuj z lokalnie zainstalowanym certyfikatem drugiej strony
|
|
|
|
=item I<poziom 4>
|
|
|
|
weryfikuj z certyfikatem drugiej strony ignorując łańcuch CA
|
|
|
|
=item I<domyślnie>
|
|
|
|
nie weryfikuj
|
|
|
|
=back
|
|
|
|
=item B<verifyChain> = yes | no
|
|
|
|
weryfikuj łańcuch certyfikatów drugiej strony
|
|
|
|
Do weryfikacji certyfikatu serwera kluczowe jest, aby wymagać również
|
|
konkretnego certyfikatu przy pomocy I<checkHost> lub I<checkIP>.
|
|
|
|
Samopodpisany certyfikat głównego CA należy umieścić albo w pliku
|
|
podanym w opcji I<CAfile>, albo w katalogu podanym w opcji I<CApath>.
|
|
|
|
domyślnie: no
|
|
|
|
=item B<verifyPeer> = yes | no
|
|
|
|
weryfikuj certyfikat drugiej strony
|
|
|
|
Certyfikat drugiej strony należy umieścić albo w pliku podanym w opcji
|
|
I<CAfile>, albo w katalogu podanym w opcji I<CApath>.
|
|
|
|
domyślnie: no
|
|
|
|
=back
|
|
|
|
|
|
=head1 ZWRACANA WARTOŚĆ
|
|
|
|
B<stunnel> zwraca zero w przypadku sukcesu, lub wartość niezerową
|
|
w przypadku błędu.
|
|
|
|
|
|
=head1 SIGNAŁY
|
|
|
|
Następujące sygnały mogą być użyte do sterowania programem w systemie Unix:
|
|
|
|
=over 4
|
|
|
|
=item SIGHUP
|
|
|
|
Załaduj ponownie plik konfiguracyjny.
|
|
|
|
Niektóre globalne opcje nie będą przeładowane:
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
chroot
|
|
|
|
=item *
|
|
|
|
foreground
|
|
|
|
=item *
|
|
|
|
pid
|
|
|
|
=item *
|
|
|
|
setgid
|
|
|
|
=item *
|
|
|
|
setuid
|
|
|
|
=back
|
|
|
|
Jeżeli wykorzystywana jest opcja 'setuid' B<stunnel> nie będzie mógł załadować
|
|
ponownie konfiguracji wykorzystującej uprzywilejowane (<1024) porty.
|
|
|
|
Jeżeli wykorzystywana jest opcja 'chroot' B<stunnel> będzie szukał wszystkich
|
|
potrzebnych plików (łącznie z plikiem konfiguracyjnym, certyfikatami, logiem i
|
|
plikiem pid) wewnątrz katalogu wskazanego przez 'chroot'.
|
|
|
|
=item SIGUSR1
|
|
|
|
Zamknij i otwórz ponownie log.
|
|
Funkcja ta może zostać użyta w skrypcie rotującym log programu B<stunnel>.
|
|
|
|
=item SIGTERM, SIGQUIT, SIGINT
|
|
|
|
Zakończ działanie programu.
|
|
|
|
=back
|
|
|
|
Skutek wysłania innych sygnałów jest niezdefiniowany.
|
|
|
|
|
|
=head1 PRZYKŁADY
|
|
|
|
Szyfrowanie połączeń do lokalnego serwera I<imapd> można użyć:
|
|
|
|
[imapd]
|
|
accept = 993
|
|
exec = /usr/sbin/imapd
|
|
execArgs = imapd
|
|
|
|
albo w trybie zdalnym:
|
|
|
|
[imapd]
|
|
accept = 993
|
|
connect = 143
|
|
|
|
Aby umożliwić lokalnemu klientowi poczty elektronicznej korzystanie z serwera
|
|
I<imapd> przez TLS należy skonfigurować pobieranie poczty z adresu localhost i
|
|
portu 119, oraz użyć następującej konfiguracji:
|
|
|
|
[imap]
|
|
client = yes
|
|
accept = 143
|
|
connect = serwer:993
|
|
|
|
W połączeniu z programem I<pppd> B<stunnel> pozwala zestawić prosty VPN.
|
|
Po stronie serwera nasłuchującego na porcie 2020 jego konfiguracja
|
|
może wyglądać następująco:
|
|
|
|
[vpn]
|
|
accept = 2020
|
|
exec = /usr/sbin/pppd
|
|
execArgs = pppd local
|
|
pty = yes
|
|
|
|
Poniższy plik konfiguracyjny może być wykorzystany do uruchomienia
|
|
programu B<stunnel> w trybie I<inetd>. Warto zauważyć, że w pliku
|
|
konfiguracyjnym nie ma sekcji I<[nazwa_usługi]>.
|
|
|
|
exec = /usr/sbin/imapd
|
|
execArgs = imapd
|
|
|
|
Aby skonfigurować VPN można użyć następującej konfiguracji klienta:
|
|
|
|
[socks_client]
|
|
client = yes
|
|
accept = 127.0.0.1:1080
|
|
connect = vpn_server:9080
|
|
verifyPeer = yes
|
|
CAfile = stunnel.pem
|
|
|
|
Odpowiadająca jej konfiguracja serwera vpn_server:
|
|
|
|
[socks_server]
|
|
protocol = socks
|
|
accept = 9080
|
|
cert = stunnel.pem
|
|
key = stunnel.key
|
|
|
|
Do przetestowania konfiguracji można wydać na maszynie klienckiej komendę:
|
|
|
|
curl --socks4a localhost http://www.example.com/
|
|
|
|
Przykładowa konfiguracja serwera SNI:
|
|
|
|
[virtual]
|
|
; usługa nadrzędna
|
|
accept = 443
|
|
cert = default.pem
|
|
connect = default.internal.mydomain.com:8080
|
|
|
|
[sni1]
|
|
; usługa podrzędna 1
|
|
sni = virtual:server1.mydomain.com
|
|
cert = server1.pem
|
|
connect = server1.internal.mydomain.com:8081
|
|
|
|
[sni2]
|
|
; usługa podrzędna 2
|
|
sni = virtual:server2.mydomain.com
|
|
cert = server2.pem
|
|
connect = server2.internal.mydomain.com:8082
|
|
verifyPeer = yes
|
|
CAfile = server2-allowed-clients.pem
|
|
|
|
Przykładowa konfiguracja umożliwiająca uwierzytelnienie z użyciem klucza prywatnego
|
|
przechowywanego w Windows Certificate Store (tylko Windows).
|
|
W przypadku użycia silnika CAPI, nie należy ustawiać opcji cert, gdyż klucz klienta
|
|
zostanie automatycznie pobrany z Certificate Store na podstawie zaufanych certyfikatów
|
|
CA przedstawionych przez serwer.
|
|
|
|
engine = capi
|
|
|
|
[service]
|
|
engineId = capi
|
|
client = yes
|
|
accept = 127.0.0.1:8080
|
|
connect = example.com:8443
|
|
|
|
Przykładowa konfiguracja umożliwiająca użycie certyfikatu i klucza prywatnego z
|
|
urządzenia zgodnego z pkcs11:
|
|
|
|
engine = pkcs11
|
|
engineCtrl = MODULE_PATH:opensc-pkcs11.so
|
|
engineCtrl = PIN:123456
|
|
|
|
[service]
|
|
engineId = pkcs11
|
|
client = yes
|
|
accept = 127.0.0.1:8080
|
|
connect = example.com:843
|
|
cert = pkcs11:token=MyToken;object=MyCert
|
|
key = pkcs11:token=MyToken;object=MyKey
|
|
|
|
Przykładowa konfiguracja umożliwiająca użycie certyfikatu i klucza prywatnego
|
|
umieszczonego na tokenie SoftHSM
|
|
|
|
engine = pkcs11
|
|
engineCtrl = MODULE_PATH:softhsm2.dll
|
|
engineCtrl = PIN:12345
|
|
|
|
[service]
|
|
engineId = pkcs11
|
|
client = yes
|
|
accept = 127.0.0.1:8080
|
|
connect = example.com:843
|
|
cert = pkcs11:token=MyToken;object=KeyCert
|
|
|
|
=head1 NOTKI
|
|
|
|
=head2 OGRANICZENIA
|
|
|
|
B<stunnel> nie może być używany do szyfrowania protokołu I<FTP>,
|
|
ponieważ do przesyłania poszczególnych plików używa on dodatkowych
|
|
połączeń otwieranych na portach o dynamicznie przydzielanych numerach.
|
|
Istnieją jednak specjalne wersje klientów i serwerów FTP pozwalające
|
|
na szyfrowanie przesyłanych danych przy pomocy protokołu I<TLS>.
|
|
|
|
=head2 TRYB INETD (tylko Unix)
|
|
|
|
W większości zastosowań B<stunnel> samodzielnie nasłuchuje na porcie
|
|
podanym w pliku konfiguracyjnym i tworzy połączenie z innym portem
|
|
podanym w opcji I<connect> lub nowym programem podanym w opcji I<exec>.
|
|
Niektórzy wolą jednak wykorzystywać oddzielny program, który odbiera
|
|
połączenia, po czym uruchamia program B<stunnel>. Przykładami takich
|
|
programów są inetd, xinetd i tcpserver.
|
|
|
|
Przykładowa linia pliku /etc/inetd.conf może wyglądać tak:
|
|
|
|
imaps stream tcp nowait root @bindir@/stunnel
|
|
stunnel @sysconfdir@/stunnel/imaps.conf
|
|
|
|
Ponieważ w takich przypadkach połączenie na zdefiniowanym porcie
|
|
(tutaj I<imaps>) nawiązuje osobny program (tutaj I<inetd>), B<stunnel>
|
|
nie może używać opcji I<accept>. W pliku konfiguracyjnym nie może
|
|
być również zdefiniowana żadna usługa (I<[nazwa_usługi]>), ponieważ
|
|
konfiguracja taka pozwala na nawiązanie tylko jednego połączenia.
|
|
Wszystkie I<OPCJE USŁUG> powinny być umieszczone razem z opcjami
|
|
globalnymi. Przykład takiej konfiguracji znajduje się w sekcji
|
|
I<PRZYKŁADY>.
|
|
|
|
=head2 CERTYFIKATY
|
|
|
|
Protokół TLS wymaga, aby każdy serwer przedstawiał się nawiązującemu
|
|
połączenie klientowi prawidłowym certyfikatem X.509.
|
|
Potwierdzenie tożsamości serwera polega na wykazaniu, że posiada on
|
|
odpowiadający certyfikatowi klucz prywatny.
|
|
Najprostszą metodą uzyskania certyfikatu jest wygenerowanie go przy pomocy
|
|
wolnego pakietu B<OpenSSL>. Więcej informacji na temat generowania
|
|
certyfikatów można znaleźć na umieszczonych poniżej stronach.
|
|
|
|
Istotną kwestią jest kolejność zawartości pliku I<.pem>.
|
|
W pierwszej kolejności powinien on zawierać klucz prywatny,
|
|
a dopiero za nim podpisany certyfikat (nie żądanie certyfikatu).
|
|
Po certyfikacie i kluczu prywatnym powinny znajdować się puste linie.
|
|
Jeżeli przed certyfikatem znajdują się dodatkowe informacje tekstowe,
|
|
to powinny one zostać usunięte. Otrzymany plik powinien mieć
|
|
następującą postać:
|
|
|
|
-----BEGIN RSA PRIVATE KEY-----
|
|
[zakodowany klucz]
|
|
-----END RSA PRIVATE KEY-----
|
|
[pusta linia]
|
|
-----BEGIN CERTIFICATE-----
|
|
[zakodowany certyfikat]
|
|
-----END CERTIFICATE-----
|
|
[pusta linia]
|
|
|
|
=head2 LOSOWOŚĆ
|
|
|
|
B<stunnel> potrzebuje zainicjować PRNG (generator liczb pseudolosowych),
|
|
gdyż protokół TLS wymaga do bezpieczeństwa kryptograficznego źródła
|
|
dobrej losowości. Następujące źródła są kolejno odczytywane aż do
|
|
uzyskania wystarczającej ilości entropii:
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Zawartość pliku podanego w opcji I<RNDfile>.
|
|
|
|
=item *
|
|
|
|
Zawartość pliku o nazwie określonej przez zmienną środowiskową
|
|
RANDFILE, o ile jest ona ustawiona.
|
|
|
|
=item *
|
|
|
|
Plik .rnd umieszczony w katalogu domowym użytkownika,
|
|
jeżeli zmienna RANDFILE nie jest ustawiona.
|
|
|
|
=item *
|
|
|
|
Plik podany w opcji '--with-random' w czasie konfiguracji programu.
|
|
|
|
=item *
|
|
|
|
Zawartość ekranu w systemie Windows.
|
|
|
|
=item *
|
|
|
|
Gniazdo egd, jeżeli użyta została opcja I<EGD>.
|
|
|
|
=item *
|
|
|
|
Gniazdo egd podane w opcji '--with-egd-socket' w czasie konfiguracji
|
|
programu.
|
|
|
|
=item *
|
|
|
|
Urządzenie /dev/urandom.
|
|
|
|
=back
|
|
|
|
Warto zwrócić uwagę, że na maszynach z systemem Windows, na których
|
|
konsoli nie pracuje użytkownik, zawartość ekranu nie jest wystarczająco
|
|
zmienna, aby zainicjować PRNG. W takim przypadku do zainicjowania
|
|
generatora należy użyć opcji I<RNDfile>.
|
|
|
|
Plik I<RNDfile> powinien zawierać dane losowe -- również w tym sensie,
|
|
że powinny być one inne przy każdym uruchomieniu programu B<stunnel>.
|
|
O ile nie użyta została opcja I<RNDoverwrite> jest to robione
|
|
automatycznie. Do ręcznego uzyskania takiego pliku użyteczna
|
|
może być komenda I<openssl rand> dostarczana ze współczesnymi
|
|
wersjami pakietu B<OpenSSL>.
|
|
|
|
Jeszcze jedna istotna informacja -- jeżeli dostępne jest urządzenie
|
|
I</dev/urandom> biblioteka B<OpenSSL> ma zwyczaj zasilania nim PRNG w trakcie
|
|
sprawdzania stanu generatora. W systemach z I</dev/urandom> urządzenie
|
|
to będzie najprawdopodobniej użyte, pomimo że znajduje się na samym końcu
|
|
powyższej listy. Jest to właściwość biblioteki B<OpenSSL>, a nie programu
|
|
B<stunnel>.
|
|
|
|
=head2 PARAMETRY DH
|
|
|
|
Począwszy od wersji 4.40 B<stunnel> zawiera w kodzie programu 2048-bitowe
|
|
parametry DH. Od wersji 5.18 te początkowe wartości parametrów DH są
|
|
wymieniane na autogenerowane parametry tymczasowe.
|
|
Wygenerowanie parametrów DH może zająć nawet wiele minut.
|
|
|
|
Alternatywnie parametry DH można umieścić w pliku razem z certyfikatem,
|
|
co wyłącza generowanie parametrów tymczasowych:
|
|
|
|
openssl dhparam 2048 >> stunnel.pem
|
|
|
|
|
|
=head1 PLIKI
|
|
|
|
=over 4
|
|
|
|
=item F<@sysconfdir@/stunnel/stunnel.conf>
|
|
|
|
plik konfiguracyjny programu
|
|
|
|
=back
|
|
|
|
|
|
=head1 BŁĘDY
|
|
|
|
Opcja I<execArgs> oraz linia komend Win32 nie obsługuje cytowania.
|
|
|
|
|
|
=head1 ZOBACZ RÓWNIEŻ
|
|
|
|
=over 4
|
|
|
|
=item L<tcpd(8)>
|
|
|
|
biblioteka kontroli dostępu do usług internetowych
|
|
|
|
=item L<inetd(8)>
|
|
|
|
'super-serwer' internetowy
|
|
|
|
=item F<http://www.stunnel.org/>
|
|
|
|
strona domowa programu B<stunnel>
|
|
|
|
=item F<http://www.openssl.org/>
|
|
|
|
strona projektu B<OpenSSL>
|
|
|
|
=back
|
|
|
|
|
|
=head1 AUTOR
|
|
|
|
=over 4
|
|
|
|
=item Michał Trojnara
|
|
|
|
<F<Michal.Trojnara@stunnel.org>>
|
|
|
|
=back
|
|
|
|
=for comment
|
|
vim:spelllang=pl:spell
|