NAZWA¶
stunnel - uniwersalny tunel protokołu SSL
SKŁADNIA¶
  - Unix:
 
  - stunnel [<plik>] | -fd n | -help |
      -version | -sockets
 
  - WIN32:
 
  - stunnel [ [-install | -uninstall | -start | -stop ]
      | -exit]
    
     [-quiet] [<plik>] ] | -help | -version | -sockets 
OPIS¶
Program 
stunnel został zaprojektowany do opakowywania w
  protokół 
SSL połączeń pomiędzy zdalnymi
  klientami a lokalnymi lub zdalnymi serwerami. Przez serwer lokalny rozumiana
  jest aplikacja przeznaczona do uruchamiania przy pomocy 
inetd. Stunnel
  pozwala na proste zestawienie komunikacji serwerów nie posiadających
  funkcjonalności 
SSL poprzez bezpieczne kanały 
SSL.
stunnel pozwala dodać funkcjonalność 
SSL do
  powszechnie stosowanych demonów 
inetd, np. 
pop3 lub
  
imap, do samodzielnych demonów, np. 
nntp, 
smtp lub
  
http, a nawet tunelować ppp poprzez gniazda sieciowe bez zmian w
  kodzie źródłowym.
OPCJE¶
  - <plik>
 
  - użyj podanego pliku konfiguracyjnego
 
  - -fd n (tylko Unix)
 
  - wczytaj konfigurację z podanego deskryptora pliku
 
  - -help
 
  - drukuj listę wspieranych opcji
 
  - -version
 
  - drukuj wersję programu i domyślne wartości
      parametrów
 
  - -sockets
 
  - drukuj domyślne opcje gniazd
 
  - -install (tylko NT/2000/XP)
 
  - instaluj serwis NT
 
  - -uninstall (tylko NT/2000/XP)
 
  - odinstaluj serwis NT
 
  - -start (tylko NT/2000/XP)
 
  - uruchom serwis NT
 
  - -stop (tylko NT/2000/XP)
 
  - zatrzymaj serwis NT
 
  - -exit (tylko Win32)
 
  - zatrzymaj uruchomiony program
 
  - -quiet (tylko NT/2000/XP)
 
  - nie wyświetlaj okienka informującego o
      pomyślnym zainstalowaniu lub odinstalowaniu
 
PLIK KONFIGURACYJNY¶
Linia w pliku konfiguracyjnym może być:
  - •
 
  - pusta (ignorowana)
 
  - •
 
  - komentarzem rozpoczynającym się znakiem ';'
      (ignorowana)
 
  - •
 
  - parą 'nazwa_opcji = wartość_opcji'
 
  - •
 
  - tekstem '[nazwa_usługi]' wskazującym
      początek definicji usługi
 
Parametr adres może być:
  - •
 
  - numerem portu
 
  - •
 
  - oddzieloną średnikiem parą adresu (IPv4,
      IPv6, lub nazwą domenową) i numeru portu
 
  - •
 
  - ścieżką do gniazda Unix (tylko Unix)
 
OPCJE GLOBALNE¶
  - chroot = katalog (tylko Unix)
 
  - katalog roboczego korzenia systemu plików
    
 
    Opcja określa katalog, w którym uwięziony zostanie proces
      programu stunnel tuż po jego inicjalizacji, a przed
      rozpoczęciem odbierania połączeń. Ścieżki
      podane w opcjach CApath, CRLpath, pid oraz
      exec muszą być umieszczone wewnątrz katalogu
      podanego w opcji chroot i określone względem tego
      katalogu. 
  - compression = deflate | zlib | rle
 
  - wybór algorytmu kompresji przesyłanych danych
    
 
    domyślnie: bez kompresji
     
    Algorytm deflate jest standardową metodą kompresji zgodnie z RFC
      1951.
     
    Kompresja zlib zaimplementowana w OpenSSL 0.9.8 i nowszych nie jest
      kompatybilna implementacją OpenSSL 0.9.7.
     
    Kompresja rle nie jest zaimplementowana w aktualnych wersjach OpenSSL. 
  - debug = poziom[.podsystem]
 
  - 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 debug = debug lub 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. 
  - 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 OpenSSL. Opcja jest
      dostępna z biblioteką OpenSSL 0.9.5a lub nowszą. 
  - engine = auto | <identyfikator
    urządzenia>
 
  - wybór sprzętowego urządzenia
      kryptograficznego
    
 
    domyślnie: bez wykorzystania urządzeń kryptograficznych
     
    Przykładowa konfiguracja umożliwiająca odczytanie klucza
      prywatnego z urządzenia zgodnego z OpenSC:
     
        engine=dynamic
    engineCtrl=SO_PATH:/usr/lib/opensc/engine_pkcs11.so
    engineCtrl=ID:pkcs11
    engineCtrl=LIST_ADD:1
    engineCtrl=LOAD
    engineCtrl=MODULE_PATH:/usr/lib/pkcs11/opensc-pkcs11.so
    engineCtrl=INIT
    [service]
    engineNum=1
    key=id_45
    
   
  - engineCtrl =
    <command>[:<parameter>]
 
  - konfiguracja urządzenia kryptograficznego
    
 
    Specjalne komendy "LOAD" i "INIT" pozwalają na
      załadowanie i inicjalizację modułu kryptograficznego
      urządzenia. 
  - fips = yes | no
 
  - Włącz lub wyłącz tryb FIPS 140-2.
    
 
    Opcja pozwala wyłączyć wejście w tryb FIPS, jeśli
      stunnel został skompilowany ze wsparciem dla FIPS 140-2.
     
    domyślnie: yes (pracuj w trybie FIPS 140-2) 
  - foreground = yes | no (tylko Unix)
 
  - tryb pierwszoplanowy
    
 
    Użycie tej opcji powoduje, że stunnel nie przechodzi w
      tło logując swoje komunikaty na konsolę zamiast przez
      syslog (o ile nie użyto opcji output). 
  - output = plik
 
  - plik, do którego dopisane zostaną logi
    
 
    Użycie tej opcji powoduje dopisanie logów do podanego pliku.
     
    Do kierowaniakomunikató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. 
  - pid = plik (tylko Unix)
 
  - położenie pliku z numerem procesu
    
 
    Jeżeli argument jest pusty plik nie zostanie stworzony.
     
    Jeżeli zdefiniowano katalog chroot, to ścieżka do
      pid jest określona względem tego katalogu. 
  - RNDbytes = liczba_bajtów
 
  - liczba bajtów do zainicjowania generatora
      pseudolosowego
    
 
    W wersjach biblioteki OpenSSL starszych niż 0.9.5a opcja ta
      określa również liczbę bajtów
      wystarczających do zainicjowania PRNG. Nowsze wersje biblioteki
      mają wbudowaną funkcję określającą, czy
      dostarczona ilość losowości jest wystarczająca do
      zainicjowania generatora. 
  - RNDfile = plik
 
  - ścieżka do pliku zawierającego losowe dane
    
 
    Biblioteka OpenSSL użyje danych z tego pliku do zainicjowania
      generatora pseudolosowego. 
  - RNDoverwrite = yes | no
 
  - nadpisz plik nowymi wartościami pseudolosowymi
    
 
    domyślnie: yes (nadpisz) 
  - service = nazwa_serwisu (tylko Unix)
 
  - użyj parametru jako nazwy serwisu dla biblioteki TCP
      Wrapper w trybie inetd
    
 
    domyślnie: stunnel 
  - setgid = identyfikator_grupy (tylko Unix)
 
  - grupa z której prawami pracował będzie
      stunnel
 
  - setuid = identyfikator_użytkownika (tylko
    Unix)
 
  - użytkownik, z którego prawami pracował
      będzie stunnel
 
  - socket = a|l|r:option=value[:value]
 
  - 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)
    
   
  - syslog = yes | no (tylko Unix)
 
  - włącz logowanie poprzez mechanizm syslog
    
 
    domyślnie: yes (włącz) 
  - taskbar = yes | no (tylko WIN32)
 
  - włącz ikonkę w prawym dolnym rogu ekranu
    
 
    domyślnie: yes (włącz) 
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 
stunnel ma zostać użyty w trybie 
inetd,
  gdzie za odebranie połączenia odpowiada osobny program (zwykle
  
inetd, 
xinetd lub 
tcpserver), należy przeczytać
  sekcję 
TRYB INETD poniżej.
  - accept = [adres:]port
 
  - nasłuchuje na połączenia na podanym adresie
      i porcie
    
 
    Jeżeli nie został podany adres, 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
    
   
  - CApath = katalog_CA
 
  - katalog Centrum Certyfikacji
    
 
    Opcja określa katalog, w którym stunnel będzie
      szukał certyfikatów, jeżeli użyta została opcja
      verify. 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 wersji 1.0.0 biblioteki
      OpenSSL. Należy wykonać c_rehash przy zmianie OpenSSL 0.x.x na
      1.x.x.
     
    Jeżeli zdefiniowano katalog chroot, to ścieżka do
      CApath jest określona względem tego katalogu. 
  - CAfile = plik_CA
 
  - plik Centrum Certyfikacji
    
 
    Opcja pozwala określić położenie pliku
      zawierającego certyfikaty używane przez opcję
      verify. 
  - cert = plik_pem
 
  - plik z łańcuchem certyfikatów
    
 
    Opcja określa położenie pliku zawierającego certyfikaty
      używane przez program stunnel do uwierzytelnienia się
      przed drugą stroną połączenia. Certyfikat jest
      konieczny, aby używać programu w trybie serwera. W trybie
      klienta certyfikat jest opcjonalny. 
  - ciphers = lista_szyfrów
 
  - lista dozwolonych szyfrów SSL
    
 
    Parametrem tej opcji jest lista szyfrów, które będą
      użyte przy otwieraniu nowych połączeń SSL, np.:
      DES-CBC3-SHA:IDEA-CBC-MD5 
  - client = yes | no
 
  - tryb kliencki (zdalna usługa używa SSL)
    
 
    domyślnie: no (tryb serwerowy) 
  - connect = [adres:]port
 
  - połącz się ze zdalnym serwerem na podany
      port
    
 
    Jeżeli nie został podany adres, stunnel domyślnie
      łączy się z lokalnym serwerem.
     
    Komenda może byc użyta wielokrotnie w pojedynczej sekcji celem
      zapewnienia wysokiej niezawodności lub rozłożenia ruchu
      pomiędzy wiele serwerów. 
  - CRLpath = katalog_CRL
 
  - katalog List Odwołanych Certyfikatów (CRL)
    
 
    Opcja określa katalog, w którym stunnel będzie
      szukał list CRL, jeżeli użyta została opcja
      verify. Pliki z listami CRL muszą posiadać specjalne
      nazwy XXXXXXXX.r0, gdzie XXXXXXXX jest skrótem listy CRL.
     
    Funkcja skrótu została zmieniona w wersji 1.0.0 biblioteki
      OpenSSL. Należy wykonać c_rehash przy zmianie OpenSSL 0.x.x na
      1.x.x.
     
    Jeżeli zdefiniowano katalog chroot, to ścieżka do
      CRLpath jest określona względem tego katalogu. 
  - 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 opcję
    verify. 
  - curve = nid
 
  - krzywa dla ECDH
    
 
    Listę dostępnych krzywych można uzyskać poleceniem:
     
        openssl ecparam -list_curves
    
     
    domyślnie: prime256v1 
  - delay = yes | no
 
  - opóźnij rozwinięcie adresu DNS podanego w
      opcji connect
    
 
    Opcja jest przydatna przy dynamicznym DNS, albo gdy usługa DNS nie jest
      dostępna przy starcie programu stunnel (klient VPN,
      połączenie wdzwaniane). 
  - engineNum = <numer urządzenia>
 
  - wybierz urządzenie do odczyta klucza prywatnego
    
 
    Urządzenia są numerowane od 1 w górę. 
  - exec = ścieżka_do_programu
 
  - wykonaj lokalny program przystosowany do pracy z
      superdemonem inetd
    
 
    Jeżeli zdefiniowano katalog chroot, to ścieżka do
      exec jest określona względem tego katalogu. 
  - execargs = $0 $1 $2 ...
 
  - argumenty do opcji exec włącznie z
      nazwą programu ($0)
    
 
    Cytowanie nie jest wspierane w obecnej wersji programu. Argumenty są
      rozdzielone dowolną liczbą białych znaków. 
  - failover = rr | prio
 
  - Strategia wybierania serwerów wyspecyfikowanych
      parametrami "connect".
    
 
        rr (round robin) - sprawiedliwe rozłożenie obciążenia
    prio (priority) - użyj kolejności opcji w pliku konfiguracyjnym
    
     
    domyślnie: rr 
  - ident = nazwa_użytkownika
 
  - weryfikuj nazwę zdalnego użytkownika
      korzystając z protokołu IDENT (RFC 1413)
 
  - key = plik_klucza
 
  - klucz prywatny do certyfikatu podanego w opcji 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
    
     
    domyślnie: wartość opcji cert 
  - libwrap = yes | no
 
  - włącz lub wyłącz korzystanie z
      /etc/hosts.allow i /etc/hosts.deny.
    
 
    domyślnie: yes 
  - local = serwer
 
  - 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. 
  - sni = nazwa_usługi:nazwa_serwera (tryb
    serwera)
 
  - Użyj usługi jako podrzędnej (virtualnego
      serwera) dla rozszerzenia TLS Server Name Indication (RFC 3546).
    
 
     nazwa_usługi wskazuje usługę nadrzędną,
      która odbiera połączenia od klientów przy pomocy opcji
      accept. nazwa_serwera wskazuje nazwę serwera
      wirtualnego. Z pojedyńczą usługą nadrzędną
      powiązane jest zwykle wiele usług podrzędnych. Opcja
      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 connect
      usługi podrzędnej jest ignorowana w połączeniu z
      opcją 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 sni jest dostępna począwszy od wersji 1.0.0
      biblioteki OpenSSL. 
  - sni = nazwa_serwera (tryb klienta)
 
  - Użyj parametru jako wartości rozszerzenia TLS
      Server Name Indication (RFC 3546).
    
 
    Opcja sni jest dostępna począwszy od wersji 1.0.0
      biblioteki OpenSSL. 
  - OCSP = URL
 
  - serwer OCSP do weryfikacji certyfikatów
 
  - OCSPflag = flaga
 
  - flaga serwera 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ć
      OCSPflag wielokrotnie. 
  - options = opcje_SSL
 
  - opcje biblioteki OpenSSL
    
 
    Parametrem jest nazwa opcji zgodnie z opisem w
      SSL_CTX_set_options (3ssl), ale bez przedrostka
      SSL_OP_. Aby wyspecyfikować kilka opcji należy
      użyć options wielokrotnie.
     
    Na przykład dla zachowania kompatybilności z błędami
      implementacji SSL w programie Eudora można użyć opcji:
     
        options = DONT_INSERT_EMPTY_FRAGMENTS
    
   
  - protocol = protokół
 
  - negocjuj SSL podanym protokołem aplikacyjnym (np.
      starttls lub stls)
    
 
    Opcji protocol nie należy używać z szyfrowaniem SSL na
      osobnym porcie.
     
    Aktualnie wspierane protokoły: 
  - cifs
 
  - Unieudokumentowane rozszerzenie protokołu CIFS
      wspierane przez serwer Samba. Wsparcie dla tego rozrzeczenia zostało
      zarzucone w wersji 3.0.0 serwera Samba.
 
  - connect
 
  - Negocjacja RFC 2817 - Upgrading to TLS Within
      HTTP/1.1, rozdział 5.2 - Requesting a Tunnel with CONNECT
    
 
    Ten protokół jest wspierany wyłącznie w trybie
      klienckim. 
  - imap
 
  - Negocjacja RFC 2595 - Using TLS with IMAP, POP3 and
      ACAP
 
  - nntp
 
  - Negocjacja RFC 4642 - Using Transport Layer Security
      (TLS) with Network News Transfer Protocol (NNTP)
    
 
    Ten protokół jest wspierany wyłącznie w trybie
      klienckim. 
  - pgsql
 
  - Negocjacja
      http://www.postgresql.org/docs/8.3/static/protocol-flow.html#AEN73982
 
  - pop3
 
  - Negocjacja RFC 2449 - POP3 Extension Mechanism
 
  - proxy
 
  - Przekazywanie adresu IP haproxy
      http://haproxy.1wt.eu/download/1.5/doc/proxy-protocol.txt
 
  - smtp
 
  - Negocjacja RFC 2487 - SMTP Service Extension for Secure
      SMTP over TLS
 
 
  - protocolAuthentication = uwierzytelnienie
 
  - rodzaj uwierzytelnienia do negocjacji protokołu
    
 
    aktualnie wspierane: basic, NTLM
     
    Obecnie typ uwierzytelnienia ma zastosowanie wyłącznie w protokole
      'connect'.
     
    domyślnie: basic 
  - protocolHost = adres:port
 
  - adres docelowy do negocjacji protokołu
 
  - protocolPassword = hasło
 
  - hasło do negocjacji protokołu
 
  - protocolUsername = użytkownik
 
  - nazwa użytkownika do negocjacji protokołu
 
  - pty = yes | no (tylko Unix)
 
  - alokuj pseudoterminal dla programu uruchamianego w opcji
      'exec'
 
  - retry = yes | no (tylko Unix)
 
  - połącz ponownie sekcję connect+exec po
      rozłączeniu
    
 
    domyślnie: no 
  - session =
    przeterminowanie_pamięci_podręcznej_sesji
 
  - czas w sekundach, po którym sesja SSL zostanie
      usunięta z pamięci podręcznej
 
  - sessiond = adres:port
 
  - adres sessiond - servera cache sesji SSL
 
  - sslVersion = wersja
 
  - wersja protokołu SSL
    
 
    Dozwolone opcje: all, SSLv2, SSLv3, TLSv1 
  - stack = liczba_bajtów (z wyjątkiem modelu
    FORK)
 
  - rozmiar stosu procesora wątku
 
  - TIMEOUTbusy = liczba_sekund
 
  - czas oczekiwania na spodziewane dane
 
  - TIMEOUTclose = liczba_sekund
 
  - czas oczekiwania na close_notify (ustaw na 0, jeżeli
      klientem jest MSIE)
 
  - TIMEOUTconnect = liczba_sekund
 
  - czas oczekiwania na nawiązanie
    połączenia
 
  - TIMEOUTidle = liczba_sekund
 
  - maksymalny czas utrzymywania bezczynnego
      połączenia
 
  - transparent = none | source | destination | both
    (tylko Unix)
 
  - tryb przezroczystego proxy na wspieranych platformach
    
 
    Wspierane opcje: 
  - none
 
  - Zablokuj wsparcie dla przezroczystago proxy. Jest to
      wartość domyślna.
 
  - source
 
  - Przepisz adres, aby nawiązywane połączenie
      wydawało się pochodzić bezpośrednio od klienta, a nie
      od programu stunnel.
    
 
    Opcja jest aktualnie obsługiwana w: 
  - Trybie zdalnym (opcja connect) w systemie Linux
    >=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 stunnel był wykonywany jako root i
      bez opcji setuid. 
  - Trybie zdalnym (opcja connect) w systemie Linux
    2.2.x
 
  - Konfiguracja ta wymaga skompilowania jądra z
      opcją transparent proxy. Docelowa usługa musi być
      umieszczona na osobnej maszynie, do której routing kierowany jest
      poprzez serwer stunnela.
    
 
    Dodatkowo stunnel powinien być wykonywany jako root i bez opcji
      setuid. 
  - Trybie zdalnym (opcja connect) w systemie FreeBSD
    >=8.0
 
  - Konfiguracja ta wymaga skonfigurowania firewalla i
      routingu. stunnel musi być wykonywany jako root i bez opcji
      setuid.
 
  - Trybie lokalnym (opcja exec)
 
  - Konfiguracja ta jest realizowana przy pomocy biblioteki
      libstunnel.so. Do załadowania biblioteki wykorzystywana jest
      zmienna środowiskowa _RLD_LIST na platformie Tru64 lub LD_PRELOAD na
      innych platformach.
 
 
  - destination
 
  - Oryginalny adres docelowy jest używany zamiast opcji
      connect.
    
 
    Przykładowana konfiguracja przezroczystego adresu docelowego:
     
        [transparent]
    client=yes
    accept=<port_stunnela>
    transparent=destination
    
     
    Konfiguracja wymaga następujących ustawień iptables (na
      przykład w pliku /etc/rc.local lub analogicznym):
     
        /sbin/iptables -I INPUT -i eth0 -p tcp --dport <port_stunnela> -j ACCEPT
    /sbin/iptables -t nat -I PREROUTING -i eth0 -p tcp --dport <port_przekierowany> -j DNAT --to-destination <lokalne_ip>:<port_stunnela>
    
     
    Przezroczysty adres docelowy jest aktualnie wspierany wyłącznie w
      systemie Linux. 
  - both
 
  - Użyj przezroczystego proxy zarówno dla adresu
      źródłowego jak i docelowego.
 
 
 
Dla zapewnienia kompatybilności z wcześniejszymim wersjami wspierane
  są dwie dodatkowe opcje:
  - yes
 
  - Opcja została przemianowana na source.
 
  - no
 
  - Opcja została przemianowana na none.
 
 
  - verify = poziom
 
  - weryfikuj certyfikat drugiej strony
    połączenia
 
  - poziom 0 - zarządaj certyfikatu i zignoruj
    go
 
  
  - poziom 1 - weryfikuj, jeżeli został
    przedstawiony
 
  
  - poziom 2 - weryfikuj z zainstalowanym certyfikatem
    Centrum Certyfikacji
 
  
  - poziom 3 - weryfikuj z lokalnie zainstalowanym
    certyfikatem drugiej strony
 
  
  - poziom 4 - weryfikuj z certyfikatem drugiej strony
    ignorując łańcuch CA
 
  
  - domyślnie - nie weryfikuj
 
  
 
ZWRACANA WARTOŚĆ¶
stunnel zwraca zero w przypadku sukcesu, lub wartość
  niezerową w przypadku błędu.
SIGNAŁY¶
Następujące sygnały mogą być użyte do sterowania
  programem w systemie Unix:
  - SIGHUP
 
  - Załaduj ponownie plik konfiguracyjny.
    
 
    Niektóre globalne opcje nie będą przeładowane: 
  - •
 
  - chroot
 
  - •
 
  - foreground
 
  - •
 
  - pid
 
  - •
 
  - setgid
 
  - •
 
  - setuid
 
 
 
Jeżeli wykorzystywana jest opcja 'setuid' stunnel nie będzie
  mógł załadować ponownie konfiguracji wykorzystującej
  uprzywilejowane (<1024) porty.
 
Jeżeli wykorzystywana jest opcja 'chroot' stunnel będzie szukał
  wszystkich potrzebnych plików (łącznie z plikiem
  konfiguracyjnym, certyfikatami, logiem i plikiem pid) wewnątrz katalogu
  wskazanego przez 'chroot'.
 
  - SIGUSR1
 
  - Zamknij i otwórz ponownie log. Funkcja ta może
      zostać użyta w skrypcie rotującym log programu
    stunnel.
 
  - SIGTERM, SIGQUIT, SIGINT
 
  - Zakończ działanie programu.
 
Skutek wysłania innych sygnałów jest niezdefiniowany.
PRZYKŁADY¶
Szyfrowanie połączeń do lokalnego serwera 
imapd można
  użyć:
    [imapd]
    accept = 993
    exec = /usr/sbin/imapd
    execargs = imapd
albo w trybie zdalnym:
    [imapd]
    accept = 993
    connect = 143
W połączeniu z programem 
pppd 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 
stunnel w trybie 
inetd. Warto
  zauważyć, że w pliku konfiguracyjnym nie ma sekcji
  
[nazwa_usługi].
    exec = /usr/sbin/imapd
    execargs = imapd
NOTKI¶
OGRANICZENIA¶
stunnel nie może być używany do szyfrowania protokołu
  
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 
SSL.
TRYB INETD (tylko Unix)¶
W większości zastosowań 
stunnel samodzielnie
  nasłuchuje na porcie podanym w pliku konfiguracyjnym i tworzy
  połączenie z innym portem podanym w opcji 
connect lub nowym
  programem podanym w opcji 
exec. Niektórzy wolą jednak
  wykorzystywać oddzielny program, który odbiera połączenia,
  po czym uruchamia program 
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 /usr/bin/stunnel
        stunnel /etc/stunnel/imaps.conf
Ponieważ w takich przypadkach połączenie na zdefiniowanym porcie
  (tutaj 
imaps) nawiązuje osobny program (tutaj 
inetd),
  
stunnel nie może używać opcji 
accept. W pliku
  konfiguracyjnym nie może być również zdefiniowana
  żadna usługa ( 
[nazwa_usługi]), ponieważ
  konfiguracja taka pozwala na nawiązanie tylko jednego
  połączenia. Wszystkie 
OPCJE USŁUG powinny być
  umieszczone razem z opcjami globalnymi. Przykład takiej konfiguracji
  znajduje się w sekcji 
PRZYKŁADY.
CERTYFIKATY¶
Protokół SSL 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 
OpenSSL. Więcej informacji na temat
  generowania certyfikatów można znaleźć na umieszczonych
  poniżej stronach.
Istotną kwestią jest kolejność zawartości pliku
  
.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]
LOSOWOŚĆ¶
stunnel potrzebuje zainicjować PRNG (generator liczb
  pseudolosowych), gdyż protokół SSL 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:
  - •
 
  - Zawartość pliku podanego w opcji
    RNDfile.
 
  - •
 
  - Zawartość pliku o nazwie określonej przez
      zmienną środowiskową RANDFILE, o ile jest ona
    ustawiona.
 
  - •
 
  - Plik .rnd umieszczony w katalogu domowym użytkownika,
      jeżeli zmienna RANDFILE nie jest ustawiona.
 
  - •
 
  - Plik podany w opcji '--with-random' w czasie konfiguracji
      programu.
 
  - •
 
  - Zawartość ekranu w systemie Windows.
 
  - •
 
  - Gniazdo egd, jeżeli użyta została opcja
      EGD.
 
  - •
 
  - Gniazdo egd podane w opcji '--with-egd-socket' w czasie
      konfiguracji programu.
 
  - •
 
  - Urządzenie /dev/urandom.
 
Współczesne (>=0.9.5a) wersje biblioteki 
OpenSSL
  automatycznie zaprzestają ładowania kolejnych danych w momencie
  uzyskania wystarczającej ilości entropii. Wcześniejsze wersje
  biblioteki wykorzystają wszystkie powyższe źródła,
  gdyż nie istnieje tam funkcja pozwalająca określić, czy
  uzyskano już wystarczająco dużo danych.
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
  
RNDfile.
Plik 
RNDfile powinien zawierać dane losowe -- również w
  tym sensie, że powinny być one inne przy każdym uruchomieniu
  programu 
stunnel. O ile nie użyta została opcja
  
RNDoverwrite jest to robione automatycznie. Do ręcznego uzyskania
  takiego pliku użyteczna może być komenda 
openssl rand
  dostarczana ze współczesnymi wersjami pakietu 
OpenSSL.
Jeszcze jedna istotna informacja -- jeżeli dostępne jest
  urządzenie 
/dev/urandom biblioteka 
OpenSSL ma zwyczaj
  zasilania nim PRNG w trakcie sprawdzania stanu generatora. W systemach z
  
/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
  
OpenSSL, a nie programu 
stunnel.
PARAMETRY DH¶
Począwszy od wersji 4.40 stunnel zawiera w kodzie programu 2048-bitowe
  parametry DH.
Alternatywnie parametry DH można umieścić w pliku razem z
  certyfikatem:
    openssl dhparam 2048 >> stunnel.pem
Wygenerowanie parametrów DH może zająć nawet wiele minut.
PLIKI¶
  - stunnel.conf
 
  - plik konfiguracyjny programu
 
BŁĘDY¶
Opcja 
execargs nie obsługuje cytowania.
ZOBACZ RÓWNIEݶ
  - tcpd(8)
 
  - biblioteka kontroli dostępu do usług
      internetowych
 
  - inetd(8)
 
  - 'super-serwer' internetowy
 
  - http://www.stunnel.org/
 
  - strona domowa programu stunnel
 
  - http://www.openssl.org/
 
  - strona projektu OpenSSL
 
AUTOR¶
  - Michał Trojnara
 
  - <Michal.Trojnara@mirt.net>