Postfix + Tls + Sasl + Popa3d + Stunnel [Qpopper + Tls]

Slackware FAQ - czyli baza pytań i odpowiedzi.

Moderatorzy: Moderatorzy, Administratorzy

ODPOWIEDZ
Awatar użytkownika
xil
Moderator
Posty: 862
Rejestracja: 2004-06-20, 22:20
Lokalizacja: Białystok
Kontakt:

Postfix + Tls + Sasl + Popa3d + Stunnel [Qpopper + Tls]

Post autor: xil »

Adresy:
POSTFIX: http://www.postfix.org/
POPA3D: http://www.openwall.com/popa3d/
QPOPPER: http://www.eudora.com/qpopper
STUNNEL: http://www.stunnel.org/
SASL:
http://asg.web.cmu.edu/cyrus/
http://asg.web.cmu.edu/sasl/


Spis treści:
1. Wstęp
2. Kompilacja i skonfigurowanie SASL
3. Kompilacja i instalacja Postfixa
3.1 Tworzenie certyfikatów
4. /etc/postfix/main.cf - plik konfiguracyjny Postfixa
5. Uruchomienie SASL+Postfix
6. Qpopper + Tls czy Popa3d + Stunnel ???
6.1 Popa3d + Stunnel
6.1.1 Popa3d
6.1.2 Stunnel
6.2 Qpopper + Tls
7. Czynności kończące...

1. Wstęp
Opis dotyczyć będzie następujących wersji programów:
- postfix-2.2.4
- cyrus-sasl-2.1.21
- qpopper4.0.5
- stunnel 4.07 on i686-pc-linux-gnu PTHREAD+POLL+IPv4+LIBWRAP with OpenSSL 0.9.7e 25 Oct 2004 ( standardowa paczka w Slackware 10.1)
- popa3d - 0.6.4.1

Wszystko uruchomione i testowane na systemie: Slackware 10.1

Postfix będzie odpowiedzialny za odbieranie i dostarczanie poczty do użytkowników, wzbogacony o obsługę Tls będzie mógł to robić korzystając z szyfrowanego połączenia (stąd odpowiedni patch do obsługi Tls jest wymagany). Żebyśmy nie byli RBL`em, czyli nie przekazywali poczty nie zaadresowanej do nas i tym samym nie poddawali się tak łatwo atakom spamerów chcących wykorzystać naszą maszynę do wysyłania spamu dodać należy autoryzację użytkownika przy wysyłaniu poczty. W tym celu posłużymy się programem Sasl, zapewniającym autoryzację zarówno w postaci czystego hasła (PLAIN), jak i sposobem Outlooka (LOGIN). Wszystko to będzie oczywiście zabezpieczone poprzez Tls. Przyjmować będziemy połączenia szyfrowane Tls na portach:
- smtp (25) tzw. regular port (zarówno plain jak i tls obsługiwane)
- pop3 (110) tzw. regular port (z użyciem popa3d nieszyfrowane - plain)
- spop3 (995) tzw. dedicated port tylko dla tls - szyfrowane pop3

Dostarczanie poczty poprzez protokół smtp nie jest wszystkim, co jest potrzebne do szczęścia. Należy także dać możliwość użytkownikom korzystania z klientów programowych, uruchomionych na ich własnych maszynach.
W tym celu będzie wykorzystany Popa3d zabezpieczone tunelem (stunnel) lub alternatywnie wykorzystany będzie Qpopper wraz z tls.
Dodatkowo dodać należy obsługę zapytań do baz Open-Relay, zawierającej czarne listy spamerów.

Ściągamy pliki potrzebne do instalacji, po czym przegrywamy je standardowo do /usr/local/src/ oraz rozpakowujemy poleceniem:

Kod: Zaznacz cały

cd /usr/local/src
tar -xzf cyrus-sasl-2.1.21.tar.gz
tar -xzf postfix-2.2.4.tar.gz
Zakładam, że podczas instalacji linuxa standardowo wyrzuciliśmy Sendmaila. Jeśli mamy pozostałości po Sendmailu należy zajrzeć do pliku INSTALL pakietu postfixa, przed jego kompilacją.
Przed kompilacją i instalacją systemu obsługi poczty, zajmiemy się samym modułem autoryzacji, czyli....

2. Kompilacja i skonfigurowanie SASL

Kod: Zaznacz cały

cd /usr/local/src/cyrus-sasl-2.1.21 
Uruchamiamy skrypt configure z następującymi opcjami:

Kod: Zaznacz cały

./configure --disable-cram --disable-digest \
--disable-krb4 --enable-plain --disable-anon \
--enable-login --with-saslauthd=/var/saslauthd
Użyte opcje:
--disable-cram - wyłącza autoryzację CRAM-MD5
--disable-digest - wyłącza autoryzację DIGEST-MD5
--disable-krb4 - wyłącza autoryzację KERBEROS V4
--enable-plain - pozwala na autoryzację za pomocą czystego tekstu
--disable-anon - wyłącza autoryzację ANONYMOUS
--enable-login - aktywuje możliwość logowania z poziomu Outlooka (wszystko M$ jest niekompatybilne...)
--with-saslauthd=/var/saslauthd - aktywuje używanie saslauth w stałym katalogu

Następnie kompilujemy i instalujemy demona, oraz tworzymy symlinki:

Kod: Zaznacz cały

make
make install
ln -s /usr/local/lib/sasl2 /usr/lib/sasl2 
ln -s /usr/local/lib/libsasl2.so.2.0.21 /usr/lib/libsasl2.so.2
Ten drugi symlink nie jest ujęty w pliku install dla sasl, jednakże, bez niego saslauthd nie będzie sie uruchamiać. UWAGA: 2.0.21 a nie 2.1.21!!! (dziwne nie?)
Tworzymy katalog dla saslauthd oraz plik konfiguracyjny dla autoryzacji smtp:

Kod: Zaznacz cały

mkdir /var/saslauthd
touch /usr/local/lib/sasl2/smtpd.conf

Zawartość powyższego pliku powinna być następująca:

Kod: Zaznacz cały

pwcheck_method: saslauthd
Mamy już skonfigurowanego i gotowego do działania Saslauthd, należy więc przygotować mu program, z którym będzie współpracować, czyli...

3. Kompilacja i instalacja Postfixa
Na wstępie zmieniamy katalog, w którym bedziemy pracować:

Kod: Zaznacz cały

cd /usr/local/src/postfix-2.2.4	
Przygotowujemy system do pracy z postfixem, tworząc spejalnego usera oraz 2 nowe grupy.
Tworzymy nowego usera 'postfix', z nieużywanym dotąd UID i GID. Ja standardowo dodaję grupę 'postfix', i jako jedynego umieszczam w niej usera 'postfix'.

Kod: Zaznacz cały

groupadd postfix
useradd -u nowy_UID -g postfix -s /dev/null -d /dev/null postfix
Użytkownik 'postfix' nie ma shella, nie ma katalogu domowego, ma tylko unikalny UID.
Dla podkreślenia możemy jeszcze wyedytować ręcznie plik /etc/shadow i zmienić hash do hasła na jakiś wybrany symbol, np: '*' czy '!', oczywiscie dla użytkownika 'postfix' :-)
Należy także utworzyć nową grupę o nazwie 'postdrop' z unikalnym GID:

Kod: Zaznacz cały

groupadd postdrop


Przygotowujemy postfixa z nastepujacymi opcjami (w jednej linijce):

Kod: Zaznacz cały

make makefiles CCARGS="-DUSE_TLS -I/usr/local/include -DUSE_SASL_AUTH -I/usr/local/include/sasl" AUXLIBS="-L/usr/local/lib -lsasl2 -lssl -lcrypto"
W przypadku problemów można sprobować dodać jeszcze w AUXLIBS wpis: -L/usr/local/lib.

Jeśli wszystko przebiegło poprawnie możemy już uruchomić proces kompilacji i instalacji:

Kod: Zaznacz cały

make
make install
Make install uruchamia skrypt konfigurujący postfixa, należy podać scieżki, pod którymi chcemy mieć postfixa oraz jego pliki, katalogi na many, info, howto i przykładowe pliki.
Proponowane przeze mnie odpowiedzi na pytania są takie (<enter> oznacza wciśnięcie entera i nie wpisywanie niczego):

Kod: Zaznacz cały

Please specify the prefix for installed file names. Specify this ONLY
if you are building ready-to-install packages for distribution to other
machines.
install_root: [/] <enter>

Please specify a directory for scratch files while installing Postfix. You
must have write permission in this directory.
tempdir: [/usr/local/src/postfix-2.2.4] <enter>

Please specify the final destination directory for installed Postfix
configuration files.
config_directory: [/etc/postfix] <enter>

Please specify the final destination directory for installed Postfix
daemon programs. This directory should not be in the command search path
of any users.
daemon_directory: [/usr/libexec/postfix] /var/lib/postfix/daemons

Please specify the final destination directory for installed Postfix
administrative commands. This directory should be in the command search
path of adminstrative users.
command_directory: [/usr/sbin] /var/lib/postfix/admin

Please specify the final destination directory for Postfix queues.
queue_directory: [/var/spool/postfix] <enter>

Please specify the final destination pathname for the installed Postfix
sendmail command. This is the Sendmail-compatible mail posting interface.
sendmail_path: [/usr/sbin/sendmail] <enter>

Please specify the final destination pathname for the installed Postfix
newaliases command. This is the Sendmail-compatible command to build
alias databases for the Postfix local delivery agent.
newaliases_path: [/usr/bin/newaliases] <enter>

Please specify the final destination pathname for the installed Postfix
mailq command. This is the Sendmail-compatible mail queue listing command.
mailq_path: [/usr/bin/mailq] <enter>

Please specify the owner of the Postfix queue. Specify an account with
numerical user ID and group ID values that are not used by any other
accounts on the system.
mail_owner: [postfix] <enter>

Please specify the group for mail submission and for queue management
commands. Specify a group name with a numerical group ID that is
not shared with other accounts, not even with the Postfix mail_owner
account. You can no longer specify "no" here.
setgid_group: [postdrop] <enter>

Please specify the destination directory for the Postfix HTML
files. Specify "no" if you do not want to install these files.
html_directory: [no] /etc/postfix/html_files

Please specify the destination directory for the Postfix on-line manual
pages. You can no longer specify "no" here.
manpage_directory: [/usr/local/man] <enter>

Please specify the destination directory for the Postfix README
files. Specify "no" if you do not want to install these files.
readme_directory: [no] /etc/postfix/readme_files
Proponuje także skopiować plik z /usr/local/src/postfix-2.2.4/proto/aliases0 do /etc/aliases (i dla pewności wydać komende chown root.root /etc/aliases). Zawiera on całkiem przyzwoity zbiór aliasów. Jeśli z jakichś powodów nie chcemy używać tego pliku należy w /etc/aliases dodać linijki:

Kod: Zaznacz cały

#plik aliasow pocztowych
root: moje_konto
postfix: root
postmaster: root
Gdzie 'moje_konto' nazwa usera, który jest administratorem systemu.
Możemy dodatkowo sprawdzić, czy nasz postfix został poprawnie skompilowany i zawiera w sobie obsługę ssl, w tym celu wydajemy komende:

Kod: Zaznacz cały

ldd /var/lib/postfix/daemons/smtpd
libsasl2.so.2 => /usr/local/lib/libsasl2.so.2 (0x0012c000)
libssl.so.0 => /usr/lib/libssl.so.0 (0x00141000)
libcrypto.so.0 => /usr/lib/libcrypto.so.0 (0x00173000)
libpcre.so.0 => /usr/lib/libpcre.so.0 (0x00272000)
libdb-3.3.so => /lib/libdb-3.3.so (0x00283000)
libnsl.so.1 => /lib/libnsl.so.1 (0x00317000)
libresolv.so.2 => /lib/libresolv.so.2 (0x0032d000)
libc.so.6 => /lib/libc.so.6 (0x00340000)
libdl.so.2 => /lib/libdl.so.2 (0x0045e000)
/lib/ld-linux.so.2 (0x00110000)
Jeśli są:

Kod: Zaznacz cały

libsasl2.so.2 => /usr/local/lib/libsasl2.so.2 (0x0012c000)
libssl.so.0 => /usr/lib/libssl.so.0 (0x00141000)
libcrypto.so.0 => /usr/lib/libcrypto.so.0 (0x00173000) 
to najwidoczniej wszystko jest poprawnie.

Postfix jest juz zainstalowany.

3.1 Tworzenie certyfikatów (stworzylem tak jak w opisie postfixa)
Na czas tworzenia założyłem mały katalog:

Kod: Zaznacz cały

mkdir /certs
cd /certs/
Ustawiłem dość nieładne parametry certyfikatów i instytucji certyfikującej; nic nie stoi na przeszkodzie zmienić niektóre rzeczy.

Kod: Zaznacz cały

/etc/ssl/misc/CA.pl -newca

Kod: Zaznacz cały

CA certificate filename (or enter to create)

Making CA certificate ...
Generating a 1024 bit RSA private key
...++++++
........................++++++
writing new private key to './demoCA/private/cakey.pem'
Enter PEM pass phrase: TU PODAJEMY HASLO
Verifying - Enter PEM pass phrase: WERYFIKACJA HASLA
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:PL
State or Province Name (full name) [Some-State]:Bialystok
Locality Name (eg, city) []:Bialystok
Organization Name (eg, company) [Internet Widgits Pty Ltd]:host.domena.pl
Organizational Unit Name (eg, section) []:host.domena.pl
Common Name (eg, YOUR name) []:host.domena.pl
Email Address []:xil@host.domena.pl

Kod: Zaznacz cały

openssl req -new -nodes -keyout host-key.pem -out host-req.pem -days 1024

Kod: Zaznacz cały

Generating a 1024 bit RSA private key
....++++++
.++++++
writing new private key to 'host-key.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:PL
State or Province Name (full name) [Some-State]:Bialystok
Locality Name (eg, city) []:Bialystok
Organization Name (eg, company) [Internet Widgits Pty Ltd]:host.domena.pl
Organizational Unit Name (eg, section) []:host.domena.pl
Common Name (eg, YOUR name) []:host.domena.pl
Email Address []:xil@host.domena.pl

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: wpisane wczesniej HASLO
An optional company name []:

Kod: Zaznacz cały

openssl ca -out host-cert.pem -infiles host-req.pem

Kod: Zaznacz cały

Using configuration from /etc/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number:
            df:65:29:cd:40:2b:63:7f
        Validity
            Not Before: Jul  9 13:28:28 2005 GMT
            Not After : Jul  9 13:28:28 2006 GMT
        Subject:
            countryName               = PL
            stateOrProvinceName       = Bialystok
            organizationName          = host.domena.pl
            organizationalUnitName    = host.domena.pl
            commonName                = host.domena.pl
            emailAddress              = xil@host.domena.pl
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                15:7A:FE:F1:32:7A:D8:93:57:14:7B:2C:AD:38:73:E4:F5:69:C9:F0
            X509v3 Authority Key Identifier:
                keyid:9B:37:9C:72:34:3B:88:C8:77:A6:5F:1A:E4:C4:F7:55:B8:7D:C5:C5
                DirName:/C=PL/ST=Bialystok/L=Bialystok/O=host.domena.pl/OU=host.domena.pl/CN=host.domena.pl/emailAddress=xil@host.domena.pl
                serial:DF:65:29:CD:40:2B:63:7E

Certificate is to be certified until Jul  9 13:28:28 2006 GMT (365 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Zakladamy katalog na certyfikaty:

Kod: Zaznacz cały

mkdir /etc/postfix/ssl
i kopiujemy je oraz ustawiamy prawa dostępu:

Kod: Zaznacz cały

cp demoCA/cacert.pem host-key.pem host-cert.pem /etc/postfix/ssl
chmod 644 /etc/postfix/ssl/host-cert.pem /etc/postfix/ssl/cacert.pem
chmod 400 /etc/postfix/ssl/host-key.pem
4. /etc/postfix/main.cf - plik konfiguracyjny Postfixa
Głównym plikiem konfiguracyjnym postfixa jest /etc/postfix/main.cf, który własnie będziemy modyfikować.
Wszystkie zmieniane opcje są przedstawiane poniżej (wraz z nazwami sekcji, do których należą), dodatkowo, jeśli coś należy zahaszować, również jest to ujęte w spisie. Pozostałe opcje są domyślne.

Kod: Zaznacz cały

# INTERNET HOST AND DOMAIN NAMES
# pełna nazwa naszego hosta wraz z domeną
myhostname = host.domena.pl

# SENDING MAIL
# skąd listy będą wysyłane?
myorigin = $myhostname

# RECEIVING MAIL
# definiujemy, na których interfejsach będziemy odbierać pocztę
inet_interfaces = all
# lista domen, dla których ten komputer/system będzie zródłem listów
mydestination = $myhostname

# REJECTING MAIL FOR UNKNOWN LOCAL USERS
# w przypadku nieistniejącego usera zwracamy kod błędu 550, czyli REJECT,
# standardowo jest 450(spróbuj ponownie później) - dla bezpieczeństwa
# przy uruchamianiu/testowaniu postfixa
unknown_local_recipient_reject_code = 550

# TRUST AND RELAY CONTROL
# lista interfejsów, na których nasłuchujemy...
mynetworks = 192.168.3.0/24, 127.0.0.0/8
# przekazujemy pocztę tylko dla domeny:
relay_domains = $mydestination

# ALIAS DATABASE
# wybieramy plik txt z aliasami...
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

# DELIVERY TO MAILBOX
# jak dostarczać pocztę?
# ja preferuje pliki w kat. domowym usera, stąd wybieram Mailbox
home_mailbox = Mailbox

# SHOW SOFTWARE VERSION OR NOT
# mała podmiana banera przy logowaniu się na port 25
mail_name = Sendmail
mail_version = 8.12.10
smtpd_banner = $myhostname ESMTP $mail_name $mail_version
#smtpd_banner = $myhostname ESMTP $mail_name
#smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)

# ======== OPCJE DODANE, OPCJE DLA SASL ORAZ TLS ========
# sprawdzamy domenę wysyłającego list na nasz adres,
# jeśli nie posiada wpisu A lub MX to odrzucamy jego list;
# jeśli wpis z jego nazwą usera, user@domena lub domena
# znajduje się w pliku /etc/postfix/spam/access
# to odrzucamy/kasujemy po odebraniu ten list (patrz dalej)
smtpd_sender_restrictions = reject_unknown_sender_domain, hash:/etc/postfix/spam/access

# chcemy sprawdzać IP wysyłającego przed możliwością
# relayowania listu, jeśli jego IP znajduje się w bazie
# relays.ordb.org (lub innej tu podanej) to odrzucamy list (REJECT), jeśli
# IP jest ok to prosimy o hasło użytkownika, jeśli ok to wysyłamy list,
# w przeciwnym wypadku odrzucamy go, chyba, że jest zaadresowany na adres relay_domains
smtpd_recipient_restrictions = reject_rbl_client relays.ordb.org,permit_sasl_authenticated,reject_unauth_destination

# -- SASL -----------------------------------
# włączamy obsługę SASL
smtpd_sasl_auth_enable = yes

# czy można wysłać list bez zgody SASL? tak, bo może to być list z localhost..
broken_sasl_auth_clients = yes

# nie chcemy anonymous..
smtpd_sasl_security_options = noanonymous

# TLS WZOROWANY NA NAJNOWSZYM OPISIE WBUDOWANEGO MECHANIZMU w postfixie
smtp_tls_CAfile = /etc/postfix/ssl/cacert.pem
smtp_tls_cert_file = /etc/postfix/ssl/host-cert.pem
smtp_tls_key_file = /etc/postfix/ssl/host-key.pem
smtp_tls_session_cache_database = btree:/var/run/smtp_tls_session_cache
smtp_use_tls = yes
smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem
smtpd_tls_cert_file = /etc/postfix/ssl/host-cert.pem
smtpd_tls_key_file = /etc/postfix/ssl/host-key.pem
smtpd_tls_received_header = yes
smtpd_tls_session_cache_database = btree:/var/run/smtpd_tls_session_cache
smtpd_use_tls = yes
tls_random_source = dev:/dev/urandom
smtpd_tls_loglevel = 1

# EOF
Mnogość opcji dostępnych w postfixie jest przeogromna. Warto zajżeć do readme_files w katalogu /etc/postfix/readme_files

5. Uruchomienie SASL+Postfix
Uruchamiamy saslauthd wydając polecenie:

Kod: Zaznacz cały

/usr/local/sbin/saslauthd -a shadow
Domyślnie uruchamia się bodajże 5 procesów, jednakże możemy to zmienić dodając parametr -n :

Kod: Zaznacz cały

/usr/local/sbin/saslauthd -a shadow -n 2
i mamy 2 procesy zamiast 5-ciu. Hasła są zapisane w pliku /etc/shadow
Następnie tworzymy bazę aliasow postfixa:

Kod: Zaznacz cały

/var/lib/postfix/admin/postalias /etc/aliases

Teraz zajmemy się formatem wpisów dla bazy odrzucanych adresów/domen...
Tworzymy ten plik (już podaliśmy scieżke w main.cf!!!) :

Kod: Zaznacz cały

cd /etc/postfix
mkdir spam
cd spam
touch access
Edytujemy go, tak, jak w przykładzie:

Kod: Zaznacz cały

# /etc/postfix/spam/access

# cala domena, z której listy będą odrzucane
amexmail.com REJECT
# konkretny adres, z którego listy będa odbierane, po czym
# zostaną dyskretnie automatycznie skasowane
tdaily@18plus.com DISCARD
info@electropages.com DISCARD
# EOF
Bazę tą budujemy poleceniem:

Kod: Zaznacz cały

/var/lib/postfix/admin/postmap /etc/postfix/spam/access
Startujemy postfixa:

Kod: Zaznacz cały

/var/lib/postfix/admin/postfix start
Telnetujemy się na port 25, żeby sprawdzić działanie systemu ( w przykładzie jest wybranych mniej możliwych autoryzacji dla saslauthd!) :

Kod: Zaznacz cały

telnet 0 25
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
220 host.domena.pl ESMTP Sendmail 8.12.10
ehlo root@host.domena.pl
250- host.domena.pl
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN OTP
250-AUTH=LOGIN PLAIN OTP
250-XVERP
250 8BITMIME

Widzimy opcję 250-STARTTLS oraz banerek, który sami ustawiliśmy. Oznacza to, że wszystko idzie po naszej myśli ;-]

6. Qpopper + Tls czy Popa3d + Stunnel???
Można zapytać które z wyżej z wymienionych rozwiązań wybrać. Ja kiedyś używałem Qpopper`a z Tls i takie rozwiązanie było przedstawione w początkowej wersji tego FAQ. Z czasem okazało się, że Qpopper (chyba?) przestał być dalej wspierany, chodź jego żródła są nadal dostępne. Teoretycznie Qpopper postawić jest łatwiej od Popa3d, praktycznie okazało się, że nie zawsze. Z tego powodu dodałem opis jak uruchomić szyfrowane połączenie z wykorzystaniem Popa3d i Stunnel`a. Osobiście uważam, że Popa3d jest bezpieczniejsze od Qpopper oraz rozwiązanie z Popa3d i Stunnelem wydaje się być bardziej wydajne od używania Qpoppera. Opis jak uruchomić Qpopper zostaje jako alternatywa - lub dla osób lubiących się pobawić.

6.1.1Popa3d

Kod: Zaznacz cały

cd /usr/local/src
wget http://www.openwall.com/popa3d/popa3d-0.6.4.1.tar.gz
tar -xzf popa3d-0.6.4.1.tar.gz
cd /usr/local/src/popa3d-0.6.4.1
Edytujemy plik params.h:
Ustawiamy

Kod: Zaznacz cały

#define POP_STANDALONE                  1
Zmieniamy

Kod: Zaznacz cały

#define DAEMON_ADDR                     "0.0.0.0"       /* INADDR_ANY */
na

Kod: Zaznacz cały

#define DAEMON_ADDR                     "127.0.0.1"
dodajemy katalog w istniejącym wpisie:

Kod: Zaznacz cały

#define POP_CHROOT                      "/var/empty/popa3d"
Wpis

Kod: Zaznacz cały

#define MAIL_SPOOL_PATH                 "/var/mail"
zahaszujemy, wynik:

Kod: Zaznacz cały

/*#define MAIL_SPOOL_PATH                 "/var/mail"*/
Zapisujemy zmiany. Edytujemy Makefile
Jedna zmiana, znajdujemy zahaszowane pozycje wymienione niżej i ustawiamy tak jak podane poniżej:

Kod: Zaznacz cały

# Linux with glibc, FreeBSD, NetBSD
LIBS += -lcrypt
Instalujemy Popa3d oraz dodajemy użytkownika i grupę dla demona oraz tworzymy katalog roboczy programu.

Kod: Zaznacz cały

make
make install
mkdir -m 755 /var/empty/popa3d
groupadd popa3d
useradd -g popa3d -d /dev/null -s /dev/null popa3d
Od tej chwili możemy uruchomić demona Popa3d za pomocą polecenia:

Kod: Zaznacz cały

/usr/local/sbin/popa3d -D
6.1.2 Stunnel
Stunnel zakładam, że został zainstalowany wraz z systemem Slackware 10.1. Jeśli tak, istnieje przykładowy plik konfiguracji /etc/stunnel/stunnel.conf-sample. To z niego skorzystamy.

Kod: Zaznacz cały

cp /etc/stunnel/stunnel.conf-sample /etc/stunnel/stunnel_popa3d.conf
Edytujemy stunnel_popa3d.conf. Zmieniane pozycje są wypisane poniżej:

Kod: Zaznacz cały

; Certificate/key is needed in server mode and optional in client mode
; nasze własne certyfikaty
cert = /etc/postfix/ssl/host-cert.pem
key = /etc/postfix/ssl/host-key.pem

; zmieniony katalog..
chroot = /var/empty/stunnel
; ustawiamy z kim sie łączymy
[pop3s]
accept  = 995
connect = 127.0.0.1:110

; zahaszujemy to co niżej:::!!!!
;[imaps]
;accept  = 993
;connect = 143

;[ssmtp]
;accept  = 465
;connect = 25
Tworzymy katalog roboczy dla demona:

Kod: Zaznacz cały

mkdir -m 755 /var/empty/stunnel
chown nobody.nogroup /var/empty/stunnel
Od tej chwili możemy uruchamiać Stunnel za pomocą polecenia:

Kod: Zaznacz cały

/usr/sbin/stunnel /etc/stunnel/stunnel_popa3d.conf
6.2. Qpopper + Tls.

Kod: Zaznacz cały

cd /usr/local/src/
tar -xzf qpopper4.0.5.tar.gz
cd /usr/local/src/qpopper4.0.5
Przygotowujemy configure:

Kod: Zaznacz cały

./configure --with-openssl=/usr/local/ssl \
--enable-specialauth --prefix=/usr/local/qpopper \
--enable-home-dir-mail=Mailbox --enable-log-login --without-pam
Przy czym:
--with-openssl=/usr/local/ssl - ścieżka do OpenSSL
--enable-specialauth - chcemy korzystać z /etc/shadow
--prefix=/usr/local/qpopper - tu sobie życzymy binarki ;-]
--enable-home-dir-mail=Mailbox - skoro postfix tak nam ma dostarczać, to Qpopper musi także
--enable-log-login - chcemy poprawne zalogowania także logować!
--without-pam - wyłącza autoryzację PAM

Niestety, po wydaniu make install, skrypt nie zrobił automatycznie katalogów do trzymania Qpopper, musiałem więc je stworzyć sam. Kompilacja i instalacja wygląda więc tak:

Kod: Zaznacz cały

make
mkdir /usr/local/qpopper
mkdir /usr/local/qpopper/etc
mkdir /usr/local/qpopper/man
mkdir /usr/local/qpopper/man/man8
mkdir /usr/local/qpopper/sbin/
make install
touch /usr/local/qpopper/etc/qpopper.conf

Utworzyliśmy plik konfiguracyjny. Teraz należy go wyedytować. Opcję powinny być takie:

Kod: Zaznacz cały

set tls-support = stls 
set tls-server-cert-file = /etc/postfix/ssl/host-cert.pem

Uwaga na pustą linijkę na końcu!!!!!!!!!
W pliku tym ustawiliśmy korzystanie z tego samego klucza, co przy wysyłaniu, stąd gotowa ścieżka do pliku, z którego korzysta także postfix.
W tym miejscu należy się kilka dodatkowych uwag (dzieki Radek_R). Otóż posiadamy dwa krytyczne pliki - plik certyfikatu oraz plik klucza. By to uwzględnić możemy postąpić dwojako: stworzyć jeden plik z kluczem i certyfikatem jako jego zawartością lub dodać opcję w pliku konfiguracyjnym Qpoppera.
Jeśli wybierzemy pierwsze rozwiązanie to należy skopiować zawartość pliku /etc/postfix/ssl/host-key.pem na poczatek pliku /etc/postfix/ssl/host-cert.pem tak by w wyniku uzyskać plik host-cert.pem w postaci analogicznej do tej poniżej:

Kod: Zaznacz cały

-----BEGIN RSA PRIVATE KEY----- 
MIICXgIBAAKB.... 
... 
-----END RSA PRIVATE KEY----- 
Certificate: 
    Data: 
        Version: 3 (0x2) 
... 
        d1:81 
-----BEGIN CERTIFICATE----- 
MIIEATCCA2qgAwIBAgIBCjANBgkqhkiG9... 
... 
SNSweeFHTZfpnGjjSp9lb258gtGB 
-----END CERTIFICATE-----
Jeśli wybierzemy drugie rozwiązanie należy dodać do pliku konfiguracyjnego Qpopper`a jeszcze taką linijkę:

Kod: Zaznacz cały

set tls-private-key-file = /etc/postfix/ssl/host-key.pem
Zostało jeszcze dodanie linijek w pliku /etc/inetd.conf :

Kod: Zaznacz cały

# obsluga portu 25 - normal i Tls
pop3 stream tcp nowait root /usr/sbin/tcpd /usr/local/qpopper/sbin/popper -f /usr/local/qpopper/etc/qpopper.conf

# obsluga spop3 - dla klientów Outlook i innych, które
# korzystają z Tls na porcie dedykowanym
spop3 stream tcp nowait root /usr/sbin/tcpd /usr/local/qpopper/sbin/popper -f /usr/local/qpopper/etc/qpopper.conf -l2 -p2 	
Na porcie spop3 zmuszmy Qpopper do pracy tylko w trybie Tls.
Teraz killujemy superserver inetd i ponownie uruchamiamy. Mamy już możliwość sprawdzenia, czy Qpopper działa. Po wskazówki należy się udać do pliku /var/log/maillog ;-]

7. Czynności kończące...
Do /etc/rc.d/rc.local dodajemy:

Kod: Zaznacz cały

/usr/local/sbin/saslauthd -a shadow -n 1;
/var/lib/postfix/admin/postfix start;
/usr/local/sbin/popa3d -D;
/usr/sbin/stunnel /etc/stunnel/stunnel_popa3d.conf;
i mamy w pełni skonfigurowany systemik do poczty.


Autor: Marek K. [xil]
Podziękowania za poprawki: Radek_R, traser
Ostatnio zmieniony 2005-08-07, 19:47 przez xil, łącznie zmieniany 23 razy.
ODPOWIEDZ