Instalacja i konfiguracja bezpiecznego serwera IMAP

Arkadiusz Piotrowski
20-03-2000

0. Wstęp

Dokument ten opisuje proces instalacji serwera poczty IMAP używającego bezpiecznych połączeń przy użyciu protokołu SSL. Nie opisujemy instalacji pakietu OpenSSL - jest jej poświęcony odrębny dokument. Zakładamy, że wszystkie działania wykonywane są z poziomu administratora.

1. Instalacja IMAPa

1.1. Kompilacja pakietu

Sposób kompilacji odbiega nieco od przyjętego standardu:

    uncompress imap.tar.Z
    tar xfv imap.tar
    make lnx

Do polecenia make podajemy jeden argument, którym jest skrót nazwy systemu dla którego kompilujemy program (patrz imap-2001/Makefile).

1.2. Ustawienia demona inetd

W pliku /etc/inetd.conf należy dodać następującą linię:

    imap   stream  tcp	  nowait  root	/usr/sbin/imapd	  imapd

(Zakładamy, że imapd został zainstalowany w katalogu /etc/sbin)

1.3. Ustawienia pliku /etc/services

Należy dodać następujący wpis:

    imap	143/tcp

2. Instalacja stunnel-a

2.1. Kompilacja pakietu

     gzip -cd stunnel-VERSION.tar.gz | tar xfv -
     cd stunnel-VERSION
     ./configure --with-pem-dir=/usr/local/ssl/certs \
                 --with-ssl=/usr/local
     make
     make install

gdzie i parametry polecenia configure interpretujemy następująco:

  • --with-ssl=DIR - ścieżka gdzie zostały zainstalowane pliki wykonywalne SSL'a
  • --with-pem-dir=DIR - domyślny katalog dla pliku stunnel.pem
    (Certyfikat serwera - musi być generowany z opcją -nodes - generuje ona klucz prywatny bez hasła.)

Uwaga: Instalując Stunnel'a (na pewno stunnel-3.9, niższa wersja raczej nie), generujemy jednocześnie jego certyfikat stunnel.pem typu "self-signed". Certyfikat ten służy jedynie do celów testowych. Nie należy go używać jako zaufanego, gdyż każdy w sieci będzie miał do niego dostęp. Ponadto programy takie jak Netscape Messenger i Outlook Express posiadają ścisłą listę zaufanych CA i nie będą mogły korzystać z bezpiecznej poczty, dopóki certyfikat stunnel.pem nie zostanie podpisany przez dowolny, z tej listy, urząd certyfikacyjny.

2.2. Generacja certyfikatu serwera

Należy wykonać następujące polecenie

    openssl req -new -days 365 -nodes -config stunnel.cnf \
                -out certreq.pem -keyout stunnel.key

Uwaga: Common Name musi być nazwą serwera (FQDN - Fully Qualified Domain Name), na którym będzie uruchamiany stunnel.

Polecenie to generuje klucz prywatny serwera stunnel.key i certyfikat serwera certreq.pem. Teraz należy przesłać certreq.pem do odpowiedniego ( wybranego ) urzędu certyfikacyjnego, który podpisze ten certyfikat. Następnie należy wykonać:

   cat stunnel.key certreq.pem > stunnel.pem

dodatkowo usuwając wszelkie nagłówki typu subject, itp. Ostatecznie plik stunnel.pem powinien mieć postać :

   -----BEGIN RSA PRIVATE KEY-----
   ...
   -----END RSA PRIVATE KEY-----
   -----BEGIN CERTIFICATE-----
   ...
   -----END CERTIFICATE-----

3. Opcje konfiguracyjne

Najważniejszą opcją jest '-v'. Określa ona sposób weryfikacji klienta. Może ona przyjmować następujące argumenty:

  • -v 1 oznacza, że należy spróbować zweryfikować osobę nawiązującą połączenie. Jeśli "wylegitymuje się" prawidłowym certyfikatem, nawiązuje połączenie, jeśli certyfikat jest zły połączenie zostaje przerwane. Jeśli klient nie przedstawi żadnego certyfikatu, to połączenie będzie mimo wszystko nawiązane.
  • -v 2 oznacza, że należy zweryfikować klienta przy każdym połączeniu z serwerem. Jeśli użytkownik nie posiada certyfikatu lub posiada zły certyfikat (tzn. nieważny, niewłaściwy lub też nie posiadamy certyfikatu CA, którym podpisany jest certyfikat klienta) wówczas nawiązanie połączenia z serwerem będzie niemożliwe.
  • -v 3 nakazuje stunnelowi zweryfikować klienta a także poszukać jego certyfikatu w naszej lokalnej bazie.
  • brak opcji -v
    jest to domyślna opcja. Stunnel ignoruje przedstawiane certyfikaty akceptując każde żądane połączenie.

Inne ważne opcje:

  • -p ścieżka do certyfikatu stunnel.pem. Można ją określić podczas instalacji używając opcji --with-pem-dir=DIR.
  • -A ścieżka do pliku zawierającego certyfikaty CA. Używana z opcją -v.
  • -a ścieżka do katalogu gdzie znajdują się lokalna baza certyfikatów. Używana z opcją -v 3.
  • -d
  • -r

4. Przykłady

Podamy kilka przykładów jak można wystartowac serwer stunnela. Mamy wiele ciekawych możliwości. (Zakładamy ze w pliku /etc/services znajduje się wpis : imaps 993/tcp i że nic nie nasłuchuje na tym porcie).

  • stunnel -d imaps -r pc207b:imap

    co oznacza tyle, że serwer nasłuchuje na porcie 993 (imaps). Jeśli przyjmie zgłoszenie, odszyfruje przesłanż wiadomość i prześle ją na port 143 (imap) na maszynie pc207b.

  • stunnel -d imaps -l /usr/sbin/imapd

    co oznacza tyle, że serwer nasłuchuje na porcie imaps i jeśli przyjmie zgłoszenie, uruchamia program /usr/sbin/imapd. Jeśli usuniemy z pliku /etc/inetd.conf linię uruchamiającą imapa i zrestartujemy demona inetd (kill -HUP pid) zapewnimy sobie tym samym gwarancję, że z serwera imap'a bedą korzystać tylko te programy klienckie, które chćą nawiązać bezpieczne połączenie. W przeciwnym przypadku połączenie nie zostaje zrealizowane.

  • stunnel -d imaps -v 2 -p /usr/local/ssl/certs/stunnel.pem \
            -A /usr/local/ssl/certs/cacert.pem -r pc207b:imap &

    podobnie jak w przykładzie pierwszym. Dodatkowo wymagana jest weryfikacja klienta. Każdy kto posiada certyfikat podpisany przez dowolny z CA, których certyfikaty (klucze publiczne) znajdują się w pliku cacert.pem, może korzystać z bezpiecznej usługi.

  • stunnel -d imaps -v 3 -p /usr/local/ssl/certs/stunnel.pem \
            -A /usr/local/ssl/certs/cacert.pem \
            -a /usr/local/ssl/certs/trusted \
            -r pc207b:imap &
    

    podobnie jak w przykładzie czwartym. Różnica polega na tym, że z bezpiecznej poczty mogą korzystać wybrabne osoby, których certyfikaty umieszczamy w katalogu /usr/local/ssl/certs/trusted.

    Uwaga: Po umieszczeniu nowego certyfikatu w powyższym katalogu należy wykonać polecenia:

     
        c_hash nowy_certyfikat.pem  
        # dostaniemy np: f3e3425b4.0 => nowy_certyfikat.pem 
        mv nowy_certyfikat.pem f3e3425b4.0
    

    Następnie restartujemy stunnela.

  • stunnel -d imaps -v 3 -p /usr/local/ssl/certs/stunnel.pem \
            -A /usr/local/ssl/certs/cacert.pem \
            -a /usr/local/ssl/certs/trusted  \
            -l /usr/sbin/imapd &
    

    dodatkowo należy w pliku /etc/inetd.conf usunać linie uruchamiającą imapa (patrz przykład drugi).