Postfix + PostfixAdmin + Dovecot + Roundcube + Autoresponder + Clamav + SpamAssassin

21 kwietnia 2015

Postfix to przeznaczony na systemy uniksopodobne serwer poczty elektronicznej (MTA), odpowiedzialny za przekazywanie i dostarczanie poczty elektronicznej.

Przykład oparty o system Debian – wheezy

Przykładowe dane konfiguracyjne :

adres IP serwera : 192.168.3.131
maska : 255.255.255.0
brama : 192.168.3.1

nazwa domeny : eproit.pl
nazwa serwera : mail

1) Konfiguracja serwera – Debian

Konfiguracja karty sieciowej (statyczne adresy) :

 nano /etc/network/interfaces 
iface eth0 inet static
address 192.168.3.131
netmask 255.255.255.0
network 192.168.3.0
broadcast 192.168.3.255
gateway 192.168.3.1

Konfiguracja pliku hosts :

/etc/hosts

format:
adres_IP kanoniczna_nazwa_komputera [aliasy…]

127.0.0.1       localhost mail
127.0.1.1       mail
192.168.3.131   mail.eproit.pl eproit.pl

Konfiguracja pliku hostname :

nano /etc/hostname

mail

Restart systemu :

reboot

Dodanie repozytoriów :

nano /etc/apt/sources.list

#~~~~~~Wheezy~~~~~~#

deb http://ftp.pl.debian.org/debian/ wheezy main non-free contrib
deb-src http://ftp.pl.debian.org/debian/ wheezy main non-free contrib
deb http://security.debian.org/ wheezy/updates main contrib non-free
deb-src http://security.debian.org/ wheezy/updates main contrib non-free
deb http://ftp.pl.debian.org/debian/ wheezy-updates main non-free contrib
deb-src http://ftp.pl.debian.org/debian/ wheezy-updates main non-free contrib 
apt-get update 

Ustawienie daty/godziny w Debianie :

ręczna zmiana (przykład) :

date --set 2015-04-02
date --set 21:08:00

Ustawienie zegara systemowego z serwera NTP np. tempus1.gum.gov.pl :

apt-get install ntpdate

ntpdate tempus1.gum.gov.pl

2) Instalacja Postfix

apt-get install postfix postfix-mysql

a)Wybieramy konfigurację serwera poczty elektronicznej

Dostępne opcje :

brak konfiguracji:
Opcja powinna być wybrana w sytuacji kiedy chcemy pozostawić obecną konfigurację bez zmian.

strona internetowa:
Poczta jest wysyłana i otrzymywana bezpośrednio za pomocą SMTP.

strona ze smarthost:
Poczta jest otrzymywana bezpośrednio za pomocą SMTP lub przez narzędzie takie jak fetchmail. Poczta wychodząca jest wysyłana przez smarthost.

system rozproszony:
Cała poczta jest wysyłana do innego komputera, zwanego “smarthost” w celu doręczenia.

Wybierz typ : strona internetowa

b)Wybierz systemową nazwę pocztową

Powinna to być pojedyncza, pełna nazwa domenowa (ang. fully qualified domain name – FQDN).

Dlatego, jeśli adresem pocztowym lokalnego komputera jest np. firma@eproit.pl, poprawną wartością dla tej opcji jest eproit.pl

W tym przykładzie będzie to : eproit.pl

2.1) Konfiguracja podstawowych parametrów

Konfigurujemy podstawowe parametry w pliku /etc/postfix/main.cf

a) Parametr myorigin : jaka nazwa domeny używana będzie przy użyciu poczty wychodzącej

ustawienie domyślne :

myorigin = /etc/mailname

b) Parametr mydestination : w tym parametrze określamy dla jakich domen serwer pocztowy będzie dostarczał pocztę lokalnie. Domyślnie odbierana jest poczta na tej samej maszynie.

ustawienie domyślne :

mydestination = $myhostname localhost.$mydomain localhost

wykonujemy w konsoli :

postconf -e mydestination = eproit, \$myhostname, localhost.localdomain, localhost

c) Parametr mynetworks :

Bardzo ważny parametr !

W tym parametrze umieszcza się tylko adresy IP, którym się ufa. Lista “zaufanych” zdalnych klientów SMTP, które mają więcej uprawnień niż “obcy klient”.

Zobacz również na parametr mynetworks_style.

Przykłady :

mynetworks = 127.0.0.0/8 168.100.189.0/28
mynetworks = !192.168.0.1, 192.168.0.0/28
mynetworks = 127.0.0.0/8 168.100.189.0/28 [::1]/128 [2001:240:587::]/64
mynetworks = $config_directory/mynetworks
mynetworks = hash:/etc/postfix/network_table

wykonujemy w konsoli :

postconf -e mynetworks = 127.0.0.0/8

d) Parametr relayhost : Domyślnie Postfix próbuje dostarczyć pocztę do Internetu. W zależności od lokalnych warunków to może być niemożliwe.Przykładowo system może być wyłączony, może być za firewallem lub może być połączony z operatorem Internetowym, który nie zezwala bezpośrednio wysyłać maile do Internetu. Należy w tym przypadku skonfigurować Postfix do dostarczania poczty przez pośrednika.

Przykłady (wybierz jedną z opcji) :

relayhost = (domyślnie: bezpośrednio dostarczenie do Internetu)

relayhost = $mydomain (dostarczenie za pośrednictwem lokalnego mailhuba)

relayhost = [mail.$mydomain] (dostarczenie za pośrednictwem lokalnego mailhuba)

relayhost = [mail.isp.tld] (dostarczenie za pośrednictwem dostawcy mailhuba)

w tym przykładzie pozostawiam wartość domyślną.

e) Parametr myhostname : parametr ten określa pełną kwalifikowaną nazwę domeny komputera działającego pod kontrolą systemu Postfix.

Zmienna $myhostname jest ustawiona domyślnie. Jest to nazwa komputera lokalnego. Jeśli twoja nazwa lokalnej maszyny nie jest w pełni kwalifikowaną domeną, lub jeśli uruchamiasz Postfix na wirtualnym interfejsie to należy podać pełną nazwę domeny, której system poczty powinien używać.

wykonujemy w konsoli :

postconf -e myhostname = mail.eproit.pl

f) Parametr mydomain : parametr ten określa rodzica domeny z $myhostname.

Domyślnie pochodzi z $myhostname.

postconf -e mydomain = eproit.pl

W przypadku wprowadzenia zmian do pliku main.cf lub master.cf, wykonaj następujące polecenie jako użytkownik root, aby przeładować system pocztowy :

postfix reload

Aby zrestartować Postfixa wykonujemy:

service postfix restart

Aby wyświetlić konfigurację (pliku main.cf) wykonujemy :

postconf -n

Aby sprawdzić dziennik logów, należy wykonać :

tail -f /var/log/mail.log

2.2) Utworzenie użytkownika oraz grupy vmail. Utworzenie katalogu w którym trzymana będzie poczta

Tworzymy użytkownika systemowego (vmail) oraz grupę (vmail). Do tego użytkownika będą należały wszystkie wirtualne skrzynki pocztowe znajdujące się w /var/vmail.

Przyjmujemy że GID (Group ID) 7030 jest wolny i taki przypisujemy grupie. Dla użytkownika przypisujemy również UID (User ID) = 7030. Tworzymy katalog /var/vmail

groupadd -g 7030 vmail
useradd -m -d /var/vmail -s /bin/false -u 7030 -g vmail vmail

Nadanie praw do katalogu :

chmod 2770 /var/vmail/

3) Wygenerowanie certyfikatów

Przed utworzeniem certyfikatów warto zmodyfikować plik konfiguracyjny openssl.cnf (opcjonalnie)

Można ustawić zmienne domyślne, które będą wprowadzane automatycznie przy tworzeniu certyfikatów :

nano /etc/ssl/openssl.cnf

Przykład :

 [ req_distinguished_name ]
countryName_default             = PL
stateOrProvinceName_default     = DOLNOSLASKIE
localityName_default            = WROCLAW
0.organizationName_default      = eproit.pl
organizationalUnitName_default  = eproit.pl
commonName_default              = eproit.pl
emailAddress_default            = admin@eproit.pl 

Można ustawić ile dni będzie ważny wygenerowany certyfikat np. 365 dni:

 default_days    = 365 

3.1) Utworzenie miejsca trzymania certyfikatów

cd /etc/ssl

mkdir CA
cd CA
mkdir demoCA
cd demoCA
mkdir newcerts
mkdir private
echo '01' serial
touch index.txt
cd ..

3.2) Utworzenie własnego CA (Centrum Autoryzacji) – opcjonalnie

W konsoli wykonujemy :

openssl req -new -x509 -extensions v3_ca -keyout demoCA/private/cakey.pem -out cacert.pem -days 365

Objaśnienie opcji :

req – polecenie generujące certyfikat lub żądanie o podpis certyfikatu

new – generowanie nowego żądania certyfikatu

x509 – wygenerowanie podpisanego certyfikatu

keyout – plik wyjściowy klucza

out – plik wyjściowy certyfikatu

days – ważność certyfikatu podana w dniach
Po wykonaniu tego polecenia zostanie utworzony klucz prywatny (cakey.pem) oraz certyfikat CA (cacert.pem).

Certyfikat ważny będzie przez rok.

Robimy kopię klucza i certyfikatu :

cp -i demoCA/private/cakey.pem demoCA/private/cakey.eproit.pl.pem

cp -i cacert.pem cacert.eproit.pl.pem

cp -i cacert.pem cacert.eproit.pl.crt

3.3) Zabezpieczenie prywatnego klucza CA

chmod 600 demoCA/private/*

3.4) Udostępnienie certyfikatu

Utworzony certyfikat CA wrzucamy do katalogu do którego ma dostęp serwer WWW-APACHE. Certyfikat będą mogli sobie zainstalować klienci w przeglądarkach (zaufane CA):

cp -i cacert.eproit.pl.crt /var/www/

Zabezpieczamy następnie dostęp do certyfikatu na serwerze :

chmod 0644 /var/www/cacert.eproit.pl.crt

3.5) Dodanie certyfikatu do miejsca przechowywania CA

mkdir /usr/share/ca-certificates/self
cp -i cacert.eproit.pl.crt /usr/share/ca-certificates/self/

dpkg-reconfigure ca-certificates

Na pytanie : Czy ufać nowym certyfikatom urzędów certyfikacji, wybierz TAK.

Następnie wybieramy z listy certyfikat do aktywowania (Spacja) ten który chcemy potwierdzić jako zaufany i klikamy Enter.

3.6) Tworzymy NOWE żądanie podpisania certyfikatu

openssl req -new -nodes -out req.pem

Jako Common Name podajemy : mail.eproit.pl

Polecenie utworzy plik :

privkey.pem – prywatny klucz

req.pem – żądanie podpisania certyfikatu

Wykonujemy kopię klucza :

cp -i privkey.pem privkey.eproit.pl.pem

Następnie zmieniamy prawa do pliku :

chmod 600 privkey.*

3.7) Podpisanie certyfikatu własnym CA

openssl ca -out certyfikat_serwer.pem -cert cacert.pem -infiles req.pem

Utworzony certyfikat to : certyfikat_serwer.pem

3.8) Dekodowanie utworzonego certyfikatu (certyfikat_serwer.pem)

openssl x509 -in certyfikat_serwer.pem -out mail.eproit.pl.pem

Certyfikat do użycia : mail.eproit.pl.pem

3.9) Przygotowanie certyfikatu i kluczy dla usług

– Dla Postfix i Dovecot (już są utworzone)

– Dla Apache

Dla Apache należy połączyć certyfikat i klucz w jeden plik.
Łączymy klucz prywatny (privkey.eproit.pl.pem) z certyfikatem mail.eproit.pl.pem

cat privkey.eproit.pl.pem mail.eproit.pl.pem > apache_mail.eproit.pl.pem

3.10) Zabezpieczenie dostępu do katalogu /etc/ssl/CA

chmod -R 600 /etc/ssl/CA

4) Instalacja PostfixAdmin

Ściągamy PostfixAdmin:

http://sourceforge.net/projects/postfixadmin/files/postfixadmin/

Aktualna wersja 2.91 – (stabilna)

wget http://heanet.dl.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.91/postfixadmin_2.91-1_all.deb

Instalujemy potrzebne pakiety :

apt-get install apache2 mysql-server php5-mysql
apt-get install php5-common php5-imap php5-cli php5 php5-cgi libapache2-mod-php5 wwwconfig-common dbconfig-common postfix-mysql

Instalujemy PostfiAdmin :

Tworzymy najpierw bazę danych i konto użytkownika. Logujemy się do serwera bazy danych

mysql -u root -p

i wykonujemy :

create database postfixadmin;
grant all privileges on postfixadmin.* to 'postfixadmin'@'localhost' identified by 'fdjyr';
flush privileges;

Instalujemy pakiet postfixadmin :

dpkg -i postfixadmin_2.92-1_all.deb

Przy instalacji Postfixadmin wybieramy serwer WWW (APACHE2) do automatycznej konfiguracji (spacją)

Przy Configure database for postfixadmin with dbconfig-common? wybieramy TAK

Przy Database type to be used by postfixadmin: wybieramy mysql

Po zakończeniu instalacji otwieramy przeglądarkę internetową i wpisujemy adres :

http://ADRES_IP_SERWERA/postfixadmin/setup.php

Sprawdzamy na stronie czy wszystko się wykonało (done). Jeśli tak to zakładamy hasło instalacyjne.

Generujemy Hash.

Wchodzimy do katalogu /usr/share/postfixadmin

cd /usr/share/postfixadmin

Edytujemy plik config.inc.php :

nano config.inc.php

Edytujemy parametr (przykład) :

$CONF['setup_password'] ='95f3a3884d20183445b8f07889e0b030:0e5f8a2160ba8aa550991384db76765f78a03bba';

Po zakończeniu ponownie otwieramy przeglądarkę internetową i wpisujemy adres :

http://ADRES_IP_SERWERA/postfixadmin/setup.php

Sprawdzamy czy wszystko się wykonało.Jeśli tak, zakładamy konto superadmina.

Podajemy hasło instalacyjne, które wcześniej ustaliliśmy a następnie adres mailowy administratora np. admin@eproit.pl oraz hasło.

Klikamy dodaj administratora.

Po dodaniu konta administratora logujemy się :

http://ADRES_IP_SERWERA/postfixadmin/login.php

4.1) Zabezpieczenie dodatkowym hasłem zasobu serwera WWW – Postfixadmin

Metoda zabezpieczenia : Basic Auth

Przykładowe dane do logowania :

login : postfixadmin
hasło : fd#@f5a

Dostęp do panelu administracyjnego Postfixadmin będzie posiadał tylko użytkownik o adresie 192.168.3.100

Do panelu użytkownika postfixadmin wszyscy użytkownicy będą mogli się łączyć.

Przechodzimy do katalogu :

cd /usr/share/postfixadmin

Tworzymy hasło dla użytkownika postfixadmin :

htpasswd -c .htpasswd postfixadmin

root@mail:/usr/share/postfixadmin# htpasswd -c .htpasswd postfixadmin
New password:fd#@f5a
Re-type new password:fd#@f5a
Adding password for user postfixadmin

Edytujemy plik apache2.conf :

nano /etc/postfixadmin/apache.conf
Alias /postfixadmin /usr/share/postfixadmin

Directory /usr/share/postfixadmin/
  Files ~ login.php
    Order Deny,Allow
    Deny from All
    Allow from 192.168.3.100
    AuthUserFile /usr/share/postfixadmin/.htpasswd
    AuthGroupFile /dev/null
    AuthName Dostep do PostfixAdmin wymaga autoryzacji
    AuthType Basic
    Require valid-user
    /Files
    /Directory

  Directory /usr/share/postfixadmin/users/
  Files ~ login.php
    Order Allow,Deny
    Allow from All
    Satisfy Any
  /Files
  /Directory

# END FOR POSTFIXADMIN
service apache2 restart

Dodatkowo (druga opcja):

Jeżeli chcemy zabezpieczyć również dostęp do strony użytkownika postfixadmin,

w konfiguracji apache.conf (nano /etc/postfixadmin/apache.conf) zmień :

Order Allow,Deny
Allow from All
Satisfy Any

na :

Order Deny,Allow
Allow from All
AuthUserFile /usr/share/postfixadmin/users/.htpasswd
AuthGroupFile /dev/null
AuthName Dostep do strony uzytkownika PostfixAdmin wymaga autoryzacji
AuthType Basic
Require valid-user

Dodatkowo należy dla każdego użytkownika, utworzyć login i hasło :

Przechodzimy do katalogu :

cd /usr/share/postfixadmin/users

Tworzymy hasło dla użytkownika :

htpasswd .htpasswd nazwa_loginu

np. htpasswd .htpasswd anna.kowalska

Hasła i loginy będą się znajdować w jednym pliku (htpasswd bez opcji -c).

Drugi możliwy sposób przechowywania haseł:

Przechowywanie loginów i haseł w bazie danych – np. MySQL.

– Wykorzystanie libapache2-mod-auth-mysql i bazy danych

Opis wkrótce.

Zmiana treści wysyłanej wiadomości powitalnej po utworzeniu skrzynki pocztowej uzytkownika:

/etc/postfixadmin/config.inc.php

Szukamy parametr :

$CONF['welcome_text'] = EOM

przykładowa treść :

Witaj,

Twoje nowe konto pocztowe.

Pamiętaj o zmianie hasła.

Na stronie:

http://postfixadmin.eproit/users/login.php

Zmienisz hasło, przekierowanie, autoresponder.
EOM;

4.2) Utworzenie wirtualnej domeny oraz kont pocztowych

Serwer będzie obsługiwał wirtualne domeny oraz wirtualnych użytkowników.

Logujemy się : http://ADRES_IP_SERWERA/postfixadmin/login.php
Lista domen -> nowa domena
Lista zbiorcza -> dodaj konto

przykładowe konto pocztowe :

anna.kowalska@eproit.pl

Pamiętaj o skonfigurowaniu rekordów MX w DNS. Musisz również być właścicielem tej domeny.

4.3) Mapowania:

Przechodzimy do :

cd /etc/postfix

A) Tworzymy pierwszy plik : mysql_virtual_alias_maps.cf

Zwracający aliasy.

nano /etc/postfix/mysql_virtual_alias_maps.cf
user = postfixadmin
password = fdjyr
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT goto FROM alias WHERE address='%s' AND active = 1

Aby sprawdzić czy poprawnie działa kwerenda należy wykonać w konsoli :

postmap -q test@eproit.pl mysql:/etc/postfix/mysql_virtual_alias_maps.cf

Wynikiem powinny być adresy e-mail pod które poczta zostanie przekierowana.

B) Tworzymy drugi plik : mysql_virtual_domains_maps.cf

Zwracający nasze domeny wirtualne.

nano /etc/postfix/mysql_virtual_domains_maps.cf
user = postfixadmin
password = fdjyr
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT domain FROM domain WHERE domain='%s'
#optional query to use when relaying for backup MX
#query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '0' and active = '1'

C) Tworzymy trzeci plik: mysql_virtual_mailbox_maps.cf

nano /etc/postfix/mysql_virtual_mailbox_maps.cf
user = postfixadmin
password = fdjyr
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1

Nadajemy właściciela oraz uprawnienia do wcześniej utworzonych plików:

cd /etc/postfix

chmod 640 mysql_*

chown root:postfix mysql_*

4.4) Wirtualne domeny, użytkownicy – Współpraca z Postfix – konfiguracja pliku /etc/postfix/main.cf

W konsoli wykonujemy :

postconf -e virtual_minimum_uid = 7030
postconf -e virtual_gid_maps = static:7030   # Utworzony wcześniej użytkownik systemowy (uid) vmail oraz grupa (gid) vmail Do nich należą wszystkie wirtualne skrzynki pocztowe znajdujące się w /var/vmail.
postconf -e virtual_uid_maps = static:7030
postconf -e virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf    # mapowanie aliasów użytkowników
postconf -e virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf  #mapowanie wirtualnych domen
postconf -e virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf    #mapowanie wirtualnych użytkowników do wirtualnych skrzynek pocztowych
postconf -e virtual_mailbox_base = /var/vmail/ 

Jeżeli teraz zostanie wysłana wiadomość do użytkownika test@eproit.pl to automatycznie zostanie utworzony katalog pocztowy w /var/vmail

5) Instalacja DOVECOT

apt-get install dovecot-common dovecot-imapd dovecot-pop3d

dovecot-common – Jest to pakiet przejściowy, który będzie można bezpiecznie usunąć po zakończeniu instalacji.

dovecot-imapd – Dovecot jest serwerem poczty, którego głównym celem jest zapewnienie bezpieczeństwa i niezawodności.Obsługuje mbox/Maildir i własne formaty DBOX/mdbox, a ponadto jest wystarczająco szybki, rozszerzalny i przenośny. Pakiet zawiera serwer IMAP – Dovecot.

dovecot-pop3d – Pakiet zawiera serwer POP3 – Dovecot.

5.1) Obsługa Dovecot LDA przez Postfix

Dovecot LDA (deliver) – lokalny agent dostarczania, który odbiera maila z MTA (Mail Transport Agent) np. od Postfix i dostarcza wiadomość do skrzynki pocztowej użytkownika.

Główne funkcje Dovecot LDA :

– indeksowanie skrzynki pocztowej podczas dostarczania maila, zapewniając później szybszy dostęp do skrzynki pocztowej

– limitowanie miejsca dyskowego (Quota), z którego użytkownik może korzystać (miejsce na skrzynce pocztowej)

– obsługa Sieve (język filtrowania poczty, przekazywanie poczty, autoresponder)

Konfiguracja odbywa się w sekcji protocol lda (plik /etc/dovecot/dovecot.conf lub /etc/dovecot/conf.d/15-lda.conf)

**********************
Konfiguracja protokołu Dovecot LDA
**********************

Ważne parametry do ustawienia :

postmaster_address – jest adresem w polu FROM (adres nagłówkowy w mailach odrzuconych)

hostname – jest używany przy generowaniu ID wiadomości (nagłówek w mailach odrzuconych)

auth_socket_path – określa gniazdo UNIX dla dovecot-auth

Wartości zwracane przez Dovecot :

0 (EX_OK): dostarczenie się powiodło

64 (EX_USAGE): podano nieprawidłowy parametr

67 (EX_NOUSER): nazwa użytkownika nie została odnaleziona

78 (EX_CONFIG): błąd odczytu pliku konfiguracyjnego lub problem z konfiguracją.

75 (EX_TEMPFAIL): tymczasowa awaria. Zwracana wartość przy niepowodzeniu.

Edytujemy sekcję protocol lda (/etc/dovecot/conf.d/15-lda.conf) :

protocol lda {
auth_socket_path = /var/run/dovecot/auth-master
log_path = /var/log/dovecot-deliver-errors.log
info_log_path = /var/log/dovecot-deliver.log
mail_plugins = quota sieve
postmaster_address = postmaster@eproit.pl
quota_full_tempfail = yes
rejection_reason = Your message to was automatically rejected:The Subject of your message was: %s
}

########################################
Ważne : zapełnienie lub brak dostępu (zapisu, odczytu) do plików logów
spowoduje że poczta nie zostanie dostarczona poprawnie.
########################################

Tworzymy plik dovecot-deliver.log oraz dovecot-deliver-errors.log

touch /var/log/dovecot-deliver.log
touch /var/log/dovecot-deliver-errors.log

Nadajemy uprawnienia :

chmod a+rw /var/log/dovecot-deliver.log
chmod a+rw /var/log/dovecot-deliver-errors.log

Przechodzimy do :

cd /etc/logrotate.d/

Tworzymy plik dovecot o zawartości:

/var/log/dovecot-deliver.log
{
missingok
notifempty
delaycompress
sharedscripts
postrotate
kill -s 0 `cat /var/run/dovecot/master.pid` || kill -s USR1 `cat /var/run/dovecot/master.pid`
true
endscript
}

Tworzymy drugi plik dovecot2 o zawartości :

/var/log/dovecot-deliver-errors.log
{
missingok
notifempty
delaycompress
sharedscripts
postrotate
kill -s 0 `cat /var/run/dovecot/master.pid` || kill -s USR1 `cat /var/run/dovecot/master.pid`
true
endscript
}

# Więcej na http://wiki2.dovecot.org/Logging

Przykładowy LOG :

Apr 16 16:38:16 lda(testowy2@eproit): Info: sieve: msgid=: stored mail into mailbox ‘INBOX’

Edytujemy plik master.cf

Dodajemy nowy proces :

nano /etc/postfix/master.cf

Szukamy wpis procesu :

maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}

Po tym wpisie wstawiamy nowy proces :

dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient} -e

Ustawiamy transport dla użytkowników wirtualnych (main.cf) :

postconf -e virtual_transport = dovecot

postconf -e dovecot_destination_concurrency_limit = 2

postconf -e dovecot_destination_recipient_limit = 1

Restart Postfix :

service postfix restart

5.2 Konfiguracja Dovecot :

***********************
5.2.1 Konfiguracja uwierzytelniania
***********************

Komunikacja Postfix z Dovecot SASL :

Komunikacja pomiędzy serwerem Postfix SMTP i Dovecot SASL odbywać się może poprzez gniazdo
domeny UNIX lub gniazdo TCP.

Ja używam gniazdo domeny UNIX dla zapewnienia lepszej ochrony prywatności.

Gniazdo znajduje się w /var/spool/postfix/private/auth.

Linie : group = postfix, mode = 0660, user = postfix nadają uprawnienia odczytu i zapisu tylko grupie i użytkownikowi Postfix.

Edytujemy plik /etc/dovecot/conf.d/10-master.conf

service auth {
unix_listener /var/spool/postfix/private/auth {
group = postfix
mode = 0660
user = postfix
}
unix_listener auth-master {
mode = 0600
user = vmail
}
user = root
}

Edytujemy plik 10-auth.conf (uwierzytelnianie) :

1) Plaintext Authentication

Dyrektywa disable_plaintext_auth wyłącza logowanie nieszyfrowane w otwartym tekście. Jeżeli chcemy pozwolić logować się wszystkim to ustawiamy na no.

disable_plaintext_auth = no (ustawienia domyślne)

disable_plaintext_auth = no

* Zmień później na yes.

2) Włączenie mechanizmów uwierzytelniających dla serwera Postfix SMTP(auth_mechanisms)

Włącz uwierzytelnianie PLAIN, LOGIN oraz CRAM-MD5.

auth_mechanisms = plain login cram-md5

Mechanizmy zostały opisane na stronie:

http://wiki2.dovecot.org/Authentication/Mechanisms

Edytujemy plik /etc/dovecot/dovecot.conf

Użytkownik i hasło będzie sprawdzane z bazy danych.

dodajemy do pliku :

# Uwierzytelnianie za pomocą bazy danych :

passdb {
args = /etc/dovecot/dovecot-sql.conf.ext
driver = sql
}

# Wyszukaj użytkowników z listy SQL :

userdb {
args = /etc/dovecot/dovecot-sql.conf.ext
driver = sql
}

Uwierzytelnianie używając bazy danych SQL :

Edytujemy plik /etc/dovecot/dovecot-sql.conf.ext

na końcu pliku umieszczamy dane do bazy postfixadmin :

driver = mysql
connect = host=127.0.0.1 dbname=postfixadmin user=postfixadmin password=fdjyr
default_pass_scheme = MD5-CRYPT
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT CONCAT('/var/vmail/',maildir) AS home, 7030 AS uid, 7030 AS gid FROM mailbox WHERE username = '%u' AND active = '1' 

########
UWAGA : Istnieje możliwość definiowania wielu baz uwierzytelniających
http://wiki2.dovecot.org/Authentication/MultipleDatabases
########

Edytujemy plik /etc/dovecot/conf.d/10-master.conf

1) unix_listener auth-userdb dodajemy do komentarza.

unix_listener auth-userdb {
#mode = 0666
#user =
#group =
}

dodajemy do komentarza :

#unix_listener auth-userdb {
#mode = 0666
#user =
#group =
# }

************
Włączenie uwierzytelniania SASL i autoryzacji na serwerze Postfix SMTP
************

Jeżeli chcemy używać uwierzytelniania Dovecot SASL należy w parametrze smtpd_sasl_type określić wartość dovecot.
Możliwe jest również użycie implementacji cyrus.

Dodatkowo należy określić gdzie serwer Postfix ma szukać serwer uwierzytelniania Dovecot.
Wszystko to zależy od ustawień w pliku conf.d/10-master.conf w sekcji service auth w linii unix_listener.
Jeśli skonfigurowano Dovecot dla komunikacji z gniazdem UNIX, należy w parametrze smtpd_sasl_path podać private/auth.

Natomiast dla komunikacji z gniazdem TCP należy ustawić w następujący sposób rodzaj ścieżki :

/etc/postfix/main.cf:
smtpd_sasl_path = inet:adres_ip:12345

Jeśli określisz zdalny adres IP, informacje będą wysyłane w sposób niezaszyfrowany.

Niezależnie od wybranego sposobu realizacji uwierzytelniania, należy zawsze włączyć opcję : smtpd_sasl_auth_enable = yes
Po przeładowaniu serwera Postfix (postfix reload), klienci SMTP będą widzieć dodatkową możliwość AUTH w sesji SMTP.
Zostaną wypisane mechanizmy uwierzytelniania, które są wspierane przez serwer.

Przykład :

telnet mail.eproit.pl 25


220 mail.eproit.pl ESMTP Postfix
EHLO client.eproit.pl
250-mail.eproit.pl
250-PIPELINING
250-SIZE 10240000
250-AUTH DIGEST-MD5 PLAIN CRAM-MD5

Aby zapewnić kompatybilność (uwierzytelnianie) ze starszymi klientami pocztowymi, należy uaktywnić opcję broken_sasl_auth_clients = yes.
Opcja dla starszych wersji programu Outlook. Po przeładowaniu Postfix, serwer będzie propagował możliwość
uwierzytelniania dwa razy – raz dla klientów, tzw. “zgodnych” i raz dla klientów starszych wersji programu pocztowego.

Przykład :

telnet mail.eproit.pl 25


220 mail.eproit.pl ESMTP Postfix
EHLO client.eproit.pl
250-mail.eproit.pl
250-PIPELINING
250-SIZE 10240000
250-AUTH DIGEST-MD5 PLAIN CRAM-MD5
250-AUTH=DIGEST-MD5 PLAIN CRAM-MD5

Polityka serwera Postfix, właściwości mechanizmów uwierzytelniania :

Postfix wspiera politykę ograniczającą mechanizmy uwierzytelniania za pomocą ich właściwości.

Właściwości i opis opcji :

noanonymous – nie używać mechanizmów, które umożliwiają uwierzytelnianie anonimowe.
noplaintext – nie używać mechanizmów, które przekazują w sposób niezaszyfrowany login i hasło.
nodictionary – nie stosować mechanizmów, które są podatne na ataki słownikowe.

Przykłady konfiguracji:

Niezaszyfrowana sesja SMTP :

Domyślna polityka zezwala na użycie dowolnych mechaniznów uwierzytelniania za wyjątkiem uwierzytelniania anonimowego :
smtpd_sasl_security_options = noanonymous
Zawsze wartość noanonymous powinna być ustawiona. Inaczej Postfix może dać “obcym klientom”zezwolenie na uwierzytelnienie.

Szyfrowana sesja SMTP (TLS) :

Aby uwierzytelnienie oferowało nawiązywanie sesji tylko przy połączeniu szyfrowanym, należy uaktywnić opcję :
smtpd_tls_auth_only = yes

Włączenie autoryzacji SASL w Postfix :

Po uwierzytelnieniu klienta, Postfix decyduje do czego zdalny klient SMTP będzie dopuszczony np.
do wysłania wiadomości do zdalnego odbiorcy. Uprawnienia nie są domyślnie uaktywnione.

Domyślnie klient SMTP może określić dowolny adres nadawcy w polu MAIL FROM.
Używając uwierzytelniania, Postfix wie, kim jest nadawca.
Mając tabelę adresów nadawców, nazw loginów, Postfix może zdecydować czy uwierzytelniony klient może korzystać z określonego
adresu nadawcy w polu MAIL FROM.

/etc/postfix/main.cf:
smtpd_sender_login_maps = hash:/etc/postfix/controlled_envelope_senders

smtpd_recipient_restrictions =

reject_sender_login_mismatch
permit_sasl_authenticated

W pliku /etc/postfix/controlled_envelope_senders określamy powiązania pomiędzy adresami nadawcy i ich właścicielami.
Z ograniczeniem reject_sender_login_mismatch serwer odrzuci adres nadawcy jeśli smtpd_sender_login_maps nie określa nazwy logowania klienta SMTP jako właściciela tego adresu.

Przykład :

/etc/postfix/controlled_envelope_senders

# adres nadawcy właściciele (SASL nazwy loginów)
anna.kowalska@eproit.pl anna.kowalska@eproit.pl
kadry@eproit.pl anna.kowalska@eproit.pl, jan.kowalski@eproit.pl
postmaster admin@eproit.pl

http://www.postfix.org/SASL_README.html#server_sasl_enable

Edytujemy plik /etc/postfix/main.cf lub wykonujemy (postconf):

#Włączenie uwierzytelniania (SMTP AUTH)
postconf -e smtpd_sasl_auth_enable = yes
#Nazwa obszaru uwierzytelniania
postconf -e smtpd_sasl_local_domain = $mydomain
#Nie ma możliwości na uwierzytelnianie anonimowe
postconf -e smtpd_sasl_security_options = noanonymous
postconf -e broken_sasl_auth_clients = yes   # w celu zapewnienia kompatybilności ze starszymi klientami
postconf -e smtpd_sasl_authenticated_header = yes

postconf -e smtpd_sasl_type = dovecot

postconf -e smtpd_sasl_path = private/auth  # ścieżka do demona odpowiedzialnego za uwierzytelnianie (Dovecot). Ścieżka /etc/dovecot/dovecot.conf, sekcja auth default

postconf -e smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated, reject_unauth_destination" # ustawiamy kto może wysyłać wiadomości mail.

Test :

telnet mail.eproit 25

root@mail:/etc/postfix# telnet mail.eproit 25
Trying 192.168.3.131…
Connected to mail.eproit.
Escape character is ‘^]’.
220 mail.eproit ESMTP Postfix (Debian/GNU)

EHLO eproit

250-mail.eproit
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN CRAM-MD5
250-AUTH=PLAIN LOGIN CRAM-MD5
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

***************************
Ustawienia dla portu 587 i 465 :
***************************
Edycja pliku /etc/postfix/master.cf :

Odkomentowujemy linijki :


# Ustawienia portu SMTP dzałającego na porcie 587

submission inet n       -       -       -       -       smtpd		# Ustawienia dla portu 587

    -o smtpd_sasl_auth_enable=yes   # włączenie uwierzytelniania SASL
    -o smtpd_client_restrictions=permit_sasl_authenticated,reject_unauth_destination # restrykcje dot. klientów, osób wysyłających pocztę
    -o syslog_name=postfix/submission

# ustawienia portu SMTP SSL (465)

smtps     inet  n       -       -       -       -       smtpd           # Ustawienia transmisji szyfrowanej SSL
     -o syslog_name=postfix/smtps    # nazwa systemu pocztowego, która będzie wyświetlana w rekordach logów procesu syslog
     -o smtpd_tls_wrappermode=yes
     -o smtpd_sasl_auth_enable=yes   # włączenie uwierzytelniania SASL
     -o smtpd_client_restrictions=permit_sasl_authenticated,reject_unauth_destination # restrykcje dot. klientów, osób wysyłających pocztę

Test :

telnet mail.eproit 587
openssl s_client -crlf -connect mail.eproit:465

*****************************
5.2.2 Konfiguracja lokalizacji skrzynek pocztowych
*****************************

Edytujemy drugi plik 10-mail.conf (ustawienie lokalizacji poczty) :

mail_location = mbox:~/mail:INBOX=/var/mail/%u

zamieniamy na :

mail_location = maildir:/var/vmail/%d/%n

Dyrektywa mail_location wskazuje katalogi z pocztą.

Rodzaje skrzynek pocztowych zostały opisane w : http://wiki2.dovecot.org/FindMailLocation

Usuwamy znak komentarza # z :

#first_valid_uid = 500

**************************
5.2.3 Konfiguracja protokołów
**************************

Edytujemy plik /etc/dovecot/dovecot.conf :

1)

dodajemy linijkę do komentarza :

#!include_try /usr/share/dovecot/protocols.d/*.protocol

2)

Wstawiamy następnie do pliku dovecot.conf :

protocols = pop3 imap

************************
Konfiguracja protokołu IMAP
************************

Włączenie pluginów Quota.
Limitowanie miejsca dyskowego, z którego użytkownik może korzystać – Quota.
Dwie wtyczki Quota : quota imap_quota
Wtyczka Autocreate – plugin zezwala administratorowi określić skrzynki pocztowe, które muszą zawsze istnieć dla wszystkich użytkowników.Skrzynki pocztowe są tworzone i subskrybowane zawsze po zalogowaniu użytkownika.

Edytujemy plik /etc/dovecot/conf.d/20-imap.conf :

DODAJEMY OBSŁUGĘ PLUGINÓW DLA IMAP :

mail_plugins = autocreate quota imap_quota

KONFIGURACJA NASŁUCHIWANIA – IMAP :

Edytujemy plik /etc/dovecot/conf.d/10-master.conf :

service imap-login {
inet_listener imap {
address = *
port = 143
}
inet_listener imaps {
address = *
port = 993
}
}

Pozostawiamy bez zmian :

service imap {
# Most of the memory goes to mmap()ing files. You may need to increase this
# limit if you have huge mailboxes.
#vsz_limit = $default_vsz_limit

# Max. number of IMAP processes (connections)
#process_limit = 1024
}

***********************
Konfiguracja protokołu POP3
***********************

Edytujemy plik /etc/dovecot/conf.d/20-pop3.conf

DODAJEMY OBSŁUGĘ PLUGINÓW DLA POP3 :

mail_plugins = quota

2) Ustawienie parametru pop3_uidl_format

Wyłączamy z komentarza :

pop3_uidl_format = %08Xu%08Xv

Dyrektywa pop3_uidl_format określa jak nazywane będą pliki z pocztą.

Konfiguracja nasłuchiwania – POP3 :

Edytujemy plik /etc/dovecot/conf.d/10-master.conf :

service pop3-login {
inet_listener pop3 {
#port = 110
}
inet_listener pop3s {
#port = 995
#ssl = yes
}
}

Konfiguracja usługi POP3

Edytujemy plik /etc/dovecot/conf.d/10-master.conf :

Pozostawiamy bez zmian :

service pop3 {
# Max. number of POP3 processes (connections)
#process_limit = 1024
}

**************************
Konfiguracja protokołu LMTP
**************************

Protokół LMTP służy do doręczania wiadomości pomiędzy systemami pocztowymi w tej samej sieci. Jeśli wiadomość ma zostać doręczona do jakiegoś innego pakietu oprogramowania, który może być uruchomiony w tym samym komputerze lub w innym systemie w sieci lokalnej, menedżer kolejek wywołuje agenta lmtp. LMTP może być użyte w sytuacji, gdy serwer POP/IMAP przechowuje wiadomości w formacie niestandardowym. POP i IMAP to protokoły do odbierania wiadomości. Serwer POP/IMAP ma własny format do zapisywania i przechowywania wiadomości, Postfix używa LMTP do przekazywania wiadomości do serwera POP/IMAP.
Jeśli wystąpi problem z doręczeniem wiadomości, agent lmtp powiadamia menedżera kolejek, że wiadomość powinna zostać oznaczona do doręczenia później i zapisana w kolejce wiadomości doręczonych.

Źródło : Helion – Postfix. Przewodnik encyklopedyczny.

Edytujemy plik /etc/dovecot/conf.d/10-master.conf :

service lmtp {
unix_listener lmtp {
mode = 0600
user = postfix
group = postfix
}
}

********************
AUTH-WORKER
********************

Edytujemy plik /etc/dovecot/conf.d/10-master.conf :

Pozostawiamy bez zmian :

service auth-worker {
# Auth worker process is run as root by default, so that it can access
# /etc/shadow. If this isn't necessary, the user should be changed to
# $default_internal_user.
#user = root
}

Edytujemy plik /etc/dovecot/conf.d/10-master.conf :

Pozostawiamy bez zmian :

service dict {
# If dict proxy is used, mail processes should have access to its socket.
# For example: mode=0660, group=vmail and global mail_access_groups=vmail
unix_listener dict {
#mode = 0600
#user =
#group =
}
}

*************************
5.2.4 Konfiguracja pluginów
*************************

link do materiałów : http://wiki2.dovecot.org/Quota/Configuration

Edytujemy plik /etc/dovecot/conf.d/90-plugin.conf :

plugin {
#skrzynki pocztowe określone przez administratora, która zawsze istnieją
#po zalogowaniu się użytkownika
autocreate = Spam
autosubscribe = Spam
autocreate2 = Trash
autosubscribe2 = Trash
# autocreate3 = ..etc..
# autosubscribe3 = ..etc..
# konfigurowanie limitów pojemności skrzynki pocztowej (rodzaj quota)
# Konfiguracja korzenia Quota zawiera : nazwę backend, nazwę główną i parametry jeśli istnieją.
quota = maildir:User quota
# Konfiguracja reguł quota, rzeczywistych limitów
# Składnia :
# quota_rule = : # quota_rule2 = ...
# quota_rule3 = ..etc..
# * jako nazwa skrzynki pocztowej, konfiguruje domyślny limit dla
# wszystkich katalogów pocztowych
# limit skrzynki pocztowej (jednej)10 MB. Dla zabawy dałem 10 MB 😉
quota_rule = *:storage=10M
# limit skrzynki pocztowej (jednej)10 MB i limit na 30 wiadomości na jedną skrzynkę
# quota_rule = *:storage=10M:messages=30
# Inne reguły
# quota_rule = *:storage=1G
# quota_rule2 = Trash:storage=+100M
# quota_rule3 = SPAM:ignore
}

******!!!!!*******

Edytujemy plik /etc/dovecot/conf.d/10-auth.conf :

1)

disable_plaintext_auth = no

zamieniamy na :

disable_plaintext_auth = yes

2)

!include auth-sql.conf.ext

zamieniamy na # :

#!include auth-sql.conf.ext

# Wyłączam ten plik z konfiguracji ponieważ konfiguracja została przeprowadzona w pliku /etc/dovecot/dovecot.conf

3)

!include auth-system.conf.ext

zamieniamy na # :

#!include auth-system.conf.ext

# Nie korzystałem z autoryzacji użytkowników systemowych

***********
TLS
***********
7 Konfiguracja TLS

Nawiązywanie szyfrowanego i autoryzowanego połączenia za pomocą protokołu TLS z drugim serwerem SMTP, lub z klientem pocztowym.
TLS umożliwia bezpieczną wymianę informacji.

Edytujemy plik /etc/postfix/main.cf :

Definiujemy ściężkę do pliku z kluczem prywatnym i certyfikatami serwera oraz CA :

przykład :

smtpd_tls_cert_file = /etc/ssl/CA/mail.eproit.pl.pem
smtpd_tls_key_file = /etc/ssl/CA/privkey.eproit.pl.pem
smtpd_tls_CAfile = /etc/ssl/CA/cacert.eproit.pl.pem

Ustawiamy :

smtpd_use_tls=yes

# włączenie szyfrowania

smtpd_tls_security_level = may

# smtpd_tls_security_level = encrypt

smtpd_tls_wrappermode = no  # wyłączamy tryb "wrapper"

smtpd_tls_auth_only = yes #wymuszamy szyfrowane uwierzytelnianie

smtpd_tls_received_header = yes

*****************************
8. Konfiguracja szyfrowania – DOVECOT
*****************************

/etc/dovecot/conf.d/10-ssl.conf

Ustawiamy :

ssl = yes

Dyrektywa ssl włącza (yes) lub wyłącza szyfrowanie (no).

Podajemy ścieżki do klucza prywatnego i certyfikatu SSL :

ssl_cert =
250 ok
rcpt to:
250 ok
data
From: Testowy
To: Xmail
Subject: test

testowy mail
.
250 2.0.0 Ok: queued as A09B011FB41
quit
221 2.0.0 Bye

TEST : port 465

openssl s_client -crlf -connect mail.eproit.pl:465

Edytujemy plik /etc/postfix/master.cf :

Konfigurujemy submission na porcie 587 :

Odkomentowujemy linijki wymuszające uwierzytelnianie :

submission inet n       -       -       -       -       smtpd
     -o syslog_name=postfix/submission
     -o smtpd_sasl_auth_enable=yes
     -o smtpd_client_restrictions=permit_sasl_authenticated,reject_unauth_destination

Test :

telnet mail.eproit 587 

*****************
TESTY: POP3, POP3 SSL, IMAP, IMAP SSL
****************

Test POP3 :

telnet mail.eproit.pl pop3
Trying 192.168.3.131...
Connected to mail.eproit.
Escape character is '^]'.
+OK Dovecot ready.
USER testowy@eproit
+OK
PASS has54w$
+OK Logged in.
LIST
+OK 1 messages:
1 1345
.
RETR 1
+OK 1345 octets

....
....
....

Test POP3 SSL :

openssl s_client -connect mail.eproit.pl:995
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: zlib compression
Expansion: zlib compression
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : DHE-RSA-AES256-GCM-SHA384
    Session-ID: FC317BABD1BF2436DC3A28B651A4A5A0B068874CB199EBDA946269738D69C895
    Session-ID-ctx:
    Master-Key: C3108205A00C5E5DB23709D2C12554514D861D0A0BCA0BDE44A481FAE2D4E8AE1B85316F40129DB736E597B1DFFC56D5
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - 52 c3 10 4d 85 18 5e cb-78 b1 03 25 93 c5 96 78   R..M..^.x..%...x
    0010 - d4 62 2e 56 8b ac c5 54-10 b7 19 9c 4a f7 58 f7   .b.V...T....J.X.
    0020 - c5 75 d0 dc f4 bf 3b 74-bd 32 66 1b 11 9b e4 a0   .u....;t.2f.....
    0030 - 98 5d 46 64 1d 51 ed b7-1f 82 01 bd a3 47 29 30   .]Fd.Q.......G)0
    0040 - b0 57 86 5c 44 c7 2d ba-44 6c a4 c6 db 42 05 05   .W.\D.-.Dl...B..
    0050 - 7c 38 cc d0 7a 17 8d bd-bc f6 71 1f d0 f5 d6 51   |8..z.....q....Q
    0060 - 64 89 67 a8 59 13 10 f1-2f 8a 98 ed 16 32 af 6b   d.g.Y.../....2.k
    0070 - 0a f3 9e b9 ff c3 dd 51-32 b6 1e 52 ad 67 d8 f9   .......Q2..R.g..
    0080 - 2e c6 be 48 c5 8e 15 78-ca b5 3f 18 07 08 7b 37   ...H...x..?...{7
    0090 - 07 26 80 2e b3 35 1e c2-0f b3 40 16 4c 0b 25 ef   .&...5....@.L.%.

    Compression: 1 (zlib compression)
    Start Time: 1429282846
    Timeout   : 300 (sec)
    Verify return code: 21 (unable to verify the first certificate)
---
+OK Dovecot ready.
USER testowy@eproit
+OK
PASS has54w$
+OK Logged in.
LIST
+OK 1 messages:
1 1345
.

TEST IMAP :

telnet mail.eproit.pl imap
telnet mail.eproit.pl imap

Trying 192.168.3.131...
Connected to mail.eproit.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS AUTH=PLAIN AUTH=LOGIN AUTH=CRAM-MD5] Dovecot ready.
a1 LOGIN testowy@eproit has54w$
a1 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS SPECIAL-USE QUOTA] Logged in
a2 LIST "" "*"
* LIST (\HasNoChildren \Drafts) "." "Drafts"
* LIST (\HasNoChildren \Trash) "." "Trash"
* LIST (\HasNoChildren \Junk) "." "Junk"
* LIST (\HasNoChildren \Sent) "." "Sent"
* LIST (\HasNoChildren) "." "INBOX"
a2 OK List completed.

TEST IMAP SSL :

openssl s_client -connect mail.eproit.pl:993 

SSL handshake has read 1855 bytes and written 507 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: zlib compression
Expansion: zlib compression
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : DHE-RSA-AES256-GCM-SHA384
    Session-ID: 3AA4D243CC5E3324517C4FABB1825A2482FBA7ED436C96EDA0CCF88730467161
    Session-ID-ctx:
    Master-Key: F90292DE7CC66C8A8F500F2FA8D5B62108956E8E5F6088F1773982DDAB9929CD581BF2D147419D38805324AC70C26168
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - 5d ca 7c f9 08 4d 6e a3-54 a6 37 c3 c5 94 22 45   ].|..Mn.T.7..."E
    0010 - a8 a5 af 8c 42 c2 61 48-b1 22 b0 7e 33 b0 c2 24   ....B.aH.".~3..$
    0020 - a1 1d 68 dc b5 64 bc 77-a6 9f 1c 01 ce 92 b5 ff   ..h..d.w........
    0030 - 1b c4 4c fa 2b 52 42 e5-fb cf f8 77 5f 4f 45 8d   ..L.+RB....w_OE.
    0040 - 54 85 a8 a5 d0 26 9e 74-87 c1 fd 18 24 f4 c2 56   T....&.t....$..V
    0050 - c3 09 76 c5 5e ee df ed-3b 95 7f 13 b4 6c 2c 16   ..v.^...;....l,.
    0060 - 17 56 e5 9a f9 df 35 94-49 17 87 19 45 ef 9a 9a   .V....5.I...E...
    0070 - 21 7a 0d c4 86 26 d6 fc-28 a2 8b 13 3f 03 51 6d   !z...&..(...?.Qm
    0080 - 6c 52 c2 71 8d bc 9a 41-1a 27 03 b8 b3 cc f4 10   lR.q...A.'......
    0090 - 39 a3 4a 13 bb 18 07 1f-2b 14 d2 fb 3d b1 89 1c   9.J.....+...=...

    Compression: 1 (zlib compression)
    Start Time: 1429267591
    Timeout   : 300 (sec)
    Verify return code: 21 (unable to verify the first certificate)
---
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN AUTH=CRAM-MD5] Dovecot ready.
a1 LOGIN testowy@eproit has54w$
a1 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY T                                                                                                   HREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18N                                                                                                   LEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS SPECIAL-USE                                                                                                    QUOTA] Logged in
a2 LIST "" "*"
* LIST (\HasNoChildren \Drafts) "." "Drafts"
* LIST (\HasNoChildren \Trash) "." "Trash"
* LIST (\HasNoChildren \Junk) "." "Junk"
* LIST (\HasNoChildren \Sent) "." "Sent"
* LIST (\HasNoChildren) "." "INBOX"
a2 OK List completed.

*****************
RoundCube
*****************

10) Instalacja RoundCube

Ściągamy paczkę :

wget http://switch.dl.sourceforge.net/project/roundcubemail/roundcubemail/1.1.1/roundcubemail-1.1.1-complete.tar.gz

Rozpakowujemy :

tar -zxf roundcubemail-1.1.1-complete.tar.gz

Przechodzimy do rozpakowanego katalogu i czytamy plik INSTALL 🙂

10.1 Instalacja potrzebnych pakietów

10.1.1 Instalacja wybranego serwera www ( The Apache, Lighttpd, Cherokee or Hiawatha web server)

apt-get install apache2

10.1.2 Instalacja PHP

# Instalacja driverów dla MySQL, PostgreSQL lub SQLite
# Instalacja paczek PEAR (Dołączone z Roundcube lub zewnętrzne)
– Mail_Mime 1.8.1 or newer
– Mail_mimeDecode 1.5.5 or newer
– Net_SMTP (latest from https://github.com/pear/Net_SMTP/)
– Net_IDNA2 0.1.1 or newer
– Auth_SASL 1.0.6 or newer
– Net_Sieve 1.3.2 or newer (for managesieve plugin)
– Crypt_GPG 1.2.0 or newer (for enigma plugin)

# dla MySQL

apt-get install php5 php-pear php5-mysql
apt-get install php5-mcrypt php5-intl
service apache2 restart

10.1.3 Instalacja Libiconv, Zip (rekomendowane)

10.1.4 Instalacja Fileinfo, Mcrypt, mbstring (opcjonalnie)

Instalacja Roundcube :

Rozpakowany katalog roundcubemail-1.0.4 należy przenieść do katalogu serwera WWW

cp -r /home/roundcubemail-1.1.1 /var/www

Można zmienić nazwę katalogu :

cd /var/www
mv roundcubemail-1.1.1 roundcubemail

Utwórz katalogi :
/temp
/logs

mkdir /var/www/roundcubemail/temp logs

Nadaj prawo zapisu do katalogów temp logs przez web serwer.

chmod -R 722 logs temp

Utwórz nową bazę danych i użytkownika dla Roundcube :

logujemy się do mysql :

mysql -u root -p

wykonujemy w konsoli mysql :

CREATE DATABASE roundcubemail;
CREATE USER 'roundcube'@'localhost' IDENTIFIED BY 'asfas';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, INDEX, ALTER, DROP ON `roundcubemail`.* TO 'roundcube'@'localhost';
FLUSH PRIVILEGES;
QUIT

Kopiujemy plik konfiguracyjny :

cp /var/www/roundcubemail/config/config.inc.php.sample /var/www/roundcubemail/config/config.inc.php

Edytujemy plik /var/www/roundcubemail/config/config.inc.php :

Konfigurujemy dostęp do bazy danych :

$config['db_dsnw'] = 'mysql://roundcube:asfas@localhost/roundcubemail';

#Włączamy tryb instalacyjny. Dodajemy parametr :

$config['enable_installer'] = true;

Przechodzimy do pliku : /etc/php5/apache2/php.ini :

Ustawiamy :

date.timezone = Europe/Warsaw
 instalujemy php5-ldap 
service apache2 restart

Otwieramy przeglądarkę internetową i wpisujemy adres :

http://ADRES_IP_SERWERA/installer/

a) sprawdzamy środowisko. Jeżeli jest OK klikamy NEXT

b) Create config. Przeprowadzamy konfigurację pliku. Aktualizujemy konfigurację (UPDATE CONFIG). Postępujemy wg. instrukcji na ekranie.

c) Testujemy konfigurację (Test config)

Klikamy na initialize database aby utworzyć tabele bazy danych.

Ustawiamy porty dla SMTP : 465
IMAP : 993

nano /var/www/config/config.inc.php

przykład zawartości pliku:

$config['db_dsnw'] = 'mysql://roundcube:asfas@localhost/roundcubemail';
$config['default_host'] = 'ssl://localhost';
$config['default_port'] = 993;
$config['smtp_server'] = 'ssl://localhost';
$config['smtp_port'] = 465;
$config['smtp_user'] = '%u';
$config['smtp_pass'] = '%p';
$config['support_url'] = '';
$config['des_key'] = 'aQr_AYCiKEtREwvkaekGRr%=';
$config['plugins'] = array('archive', 'zipdownload');
$config['enable_installer'] = true; 

nalezy w pliku defaults.inc.php : zmienić z :

 $config['smtp_auth_type'] = ''; 

na

 $config['smtp_auth_type'] = 'PLAIN'; 
 $config['imap_auth_type'] = ''; 

ja zmieniłem na :

 $config['imap_auth_type'] = 'PLAIN'; 

Po zakończeniu instalacji i konfiguracji należy usunąć katalog instalacyjny :

rm -r /var/www/roundcubemail/installer

11) Konfiguracja Apache, MySQL, PHPMYADMIN

11.1 Import certyfikatu dla Apache

cd /etc/ssl/CA

cp apache_mail.eproit.pl.pem /etc/apache2

Zabezpieczenie :

chmod 600 /etc/apache2/apache_mail.eproit.pl.pem

11.2 Włączamy moduł SSL i rewrite

a2enmod ssl

a2enmod rewrite

service apache2 restart

11.3 Główna strona jako roundcubemail

Edycja pliku default
ServerAdmin webmaster@eproit.pl
ServerName mail.eproit.pl
DocumentRoot /var/www/roundcubemail/

Options FollowSymLinks
AllowOverride None
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all

Edytujemy DocumentRoot.

11.4 Tworzymy kopię pliku konfiguracyjnego domyślnej witryny w celu zmodyfikowania jej do użycia przez stronę po SSL

cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl

edycja pliku konfiguracyjnego :

nano /etc/apache2/sites-available/default

Zmieniamy linijkę podając własny adres pocztowy :

 ServerAdmin webmaster@eproit.pl 

dodajemy :

 ServerName mail.eproit.pl

DocumentRoot /var/www 

Zapisujemy zmiany.

edycja pliku konfiguracyjnego :

nano /etc/apache2/sites-available/ssl

Zmieniamy lub dodajemy następujące linie :

 VirtualHost *:443
ServerAdmin webmaster@eproit.pl
ServerName mail.eproit.pl
SSLEngine on
SSLCertificateFile /etc/apache2/apache_mail.eproit.pl.pem
DocumentRoot /var/www/roundcubemail/ 

Zapisujemy zmiany.

11.5 Włączamy nową witrynę

a2ensite ssl

service apache2 reload

(opcjonalnie) aby klienci łączyli się bezpośrednio po SSL należy dodać do pliku:

/etc/apache2/sites-available/default

po :

 VirtualHost *:80 

następujące linie:

	RewriteEngine   on
        RewriteCond     %{SERVER_PORT} ^80$
        RewriteRule     ^(.*)$ https://%{SERVER_NAME}$1 [L,R]
        RewriteLog      "/var/log/apache2/rewrite.log"
        RewriteLogLevel 2
service apache2 reload

************
CLAMAV
************

12) Konfiguracja Antywirusa i Antyspamu

apt-get install amavisd-new clamav-daemon spamassassin

Amavisd-new – interfejs między serwerem (MTA – Postfix) a filtrem spamu i skanerem antywirusowym
Clamav – skaner antywirusowy
SpamAssassin – filtr antyspamowy

12.1 Instalacja programów do rozpakowywania plików

 apt-get install rar

 apt-get install lha

 apt-get install arj

 apt-get install lzma

 apt-get install arc

 apt-get install zoo

 apt-get install ripole

 apt-get install cabextract

 apt-get install tnef

 apt-get install lzop

 apt-get install pax

12.2 Dodanie użytkownika clamav do grupy amavis

adduser clamav amavis

12.3 Dodanie użytkownika amavis do grupy clamav

adduser amavis clamav

lub wykonaj : usermod -g clamav -G amavis clamav

Restart usługi clamav-daemon :

/etc/init.d/clamav-daemon restart

Kiedy pojawi się komunikat :

[FAIL] Clamav signatures not found in /var/lib/clamav … failed!
[FAIL] Please retrieve them using freshclam … failed!
[FAIL] Then run ‚/etc/init.d/clamav-daemon start’ … failed!

należy wykonać aktualizację sygnatur (bazy wirusów) clamav :

freshclam

Pliki bazy danych wirusów zapisywane są w :

/var/lib/clamav/daily.cvd
/var/lib/clamav/main.cvd

Aby sprawdzić wersję bazy wirusów, sprawdź w logach :

/var/log/clamav/freshclam.log

Przykładowy log :

Thu Apr 16 18:41:44 2015 -> Update process terminated
Thu Apr 16 18:41:48 2015 -> --------------------------------------
Thu Apr 16 18:41:48 2015 -> freshclam daemon 0.98.6 (OS: linux-gnu, ARCH: i386, CPU: i486)
Thu Apr 16 18:41:48 2015 -> ClamAV update process started at Thu Apr 16 18:41:48 2015
Thu Apr 16 18:41:48 2015 -> main.cvd is up to date (version: 55, sigs: 2424225, f-level: 60, builder: neo)

Pamiętaj że zawsze po zmianie konfiguracji clamav należy wykonać restart usługi :

/etc/init.d/clamav-daemon restart

*****************************
Konfigurujemy skanowanie załączników - clamav :
*****************************
nano /etc/amavis/conf.d/20-debian_defaults

Na koniec wykonujemy :

/etc/init.d/clamav-daemon restart
/etc/init.d/clamav-freshclam restart
/etc/init.d/amavis restart

Aby ustawić aktualizacje bazy wirusów wykonaj :

dpkg-reconfigure clamav-freshclam

Po zakończeniu konfiguracji sprawdź logi :
/var/log/clamav

Częste błędy :

- Nie można utworzyć katalogu tymczasowego

Thu Apr 16 16:10:40 2015 -> Received signal: wake up
Thu Apr 16 16:10:40 2015 -> ERROR: Can't create temporary directory /var/lib/clamav/clamav-c284e0301167f24025f83046a611ad73.tmp
Thu Apr 16 16:10:40 2015 -> Hint: The database directory must be writable for UID 110 or GID 114

Naprawa :

Nadaj odpowiednie uprawnienia :

chown 110:114 /var/lib/clamav & chmod 755 /var/lib/clamav

- Błąd przy ściąganiu bazy wirusów. Brak połączenia z serwerem

Należy sprawdzić czy np. firewall nie blokuje połączenia (port 80)

***********
WARTO WIEDZIEĆ
***********

Mając zainstalowango Clamava można przeskanować również cały system na którym działa serwer pocztowy :

Wykonaj w konsoli :

clamscan --recursive=yes --infected /home # Aby przeskanować np. katalog /home

Przykładowy wynik skanowania :

/home/eicar.com.txt: Eicar-Test-Signature FOUND

----------- SCAN SUMMARY -----------
Known viruses: 3789765
Engine version: 0.98.6
Scanned directories: 403
Scanned files: 2425
Infected files: 1
Data scanned: 53.79 MB
Data read: 20.05 MB (ratio 2.68:1)
Time: 106.681 sec (1 m 46 s)

Jeżeli chcesz usunąć zainfekowany plik, dodaj opcję : --remove lub możesz użyć opcję --move=/dir, aby przenieść plik do kwarantanny.

np. clamscan --remove --recursive=yes --infected /home

Aby wykluczyć katalogi ze skanowania użyj : --exclude-dir

np. clamscan --recursive=yes --infected --exclude-dir='^/sys|^/proc|^/dev|^/lib|^/bin|^/sbin' /

Dodanie opcji -l /path/to/file spowoduje zapisanie logu znalezionych wirusów

np.

clamscan -l /var/log/znalezione_wirusy --recursive=yes --infected /home

Sprawdzenie pliku pod względem wirusów :

np.

wget -O- http://www.eicar.org/download/eicar.com.txt | clamscan -

*****************
Konfiguracja AMAVIS
*****************

13 Konfiguracja AMAVIS

nano /etc/amavis/conf.d/15-content_filter_mode

Usuwamy znaki komentarza – # z następujących linii

@bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);

@bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

Restartujemy usługę Amavis :

/etc/init.d/amavis restart

Konfigurujemy parametry w /etc/amavis/conf.d/05-node_id :

nano /etc/amavis/conf.d/05-node_id
$myhostname = "mail.eproit.pl"

Konfiguracja Postfix :

/etc/postfix/main.cf

Dodajemy na końcu lub wykonujemy postconf :

#Amavis

postconf -e content_filter = smtp-amavis:[127.0.0.1]:10024

Edytujemy plik /etc/postfix/master.cf :

/etc/postfix/master.cf

Na końcu wklejamy :

smtp-amavis     unix    -       -       n       -       2       smtp
	-o smtp_data_done_timeout=1200
	-o smtp_send_xforward_command=yes
	-o disable_dns_lookups=yes
	-o max_use=20

127.0.0.1:10025 inet n    -       n       -       -     smtpd
	-o content_filter=
	-o smtpd_tls_security_level=none
	-o smtpd_delay_reject=no
	-o smtpd_client_restrictions=permit_mynetworks,reject
	-o smtpd_helo_restrictions=
	-o smtpd_sender_restrictions=
	-o smtpd_recipient_restrictions=permit_mynetworks,reject
	-o smtpd_data_restrictions=reject_unauth_pipelining
	-o smtpd_end_of_data_restrictions=
	-o smtpd_restriction_classes=
	-o mynetworks=127.0.0.0/8
	-o smtpd_error_sleep_time=0
	-o smtpd_soft_error_limit=1001
	-o smtpd_hard_error_limit=1000
	-o smtpd_client_connection_count_limit=0
	-o smtpd_client_connection_rate_limit=0
	-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters
	-o local_header_rewrite_clients=

Jeżeli w /etc/postfix/main.cf ustawiono smtpd_tls_security_level = encrypt to należy dodać jeszcze do master.cf :

-o smtpd_tls_security_level=none
	-o content_filter=
	-o receive_override_options=no_header_body_checks

Restartujemy Postfix :

 /etc/init.d/postfix reload

*******************
TESTOWANIE WYKRYWANIA WIRUSÓW - POCZTA
*******************

Aby przetestować działania antywirusa zaintaluj :

apt-get install clamav-testfiles

lub wyślij testowego wirusa eicar na skrzynkę pocztową :

wget https://secure.eicar.org/eicar.com.txt

Wirus :

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Sprawdź logi /var/log/mail.log :

Apr 16 18:27:23 localhost postfix/cleanup[6186]: 1BA62120DE6: message-id=
Apr 16 18:27:23 localhost postfix/qmgr[5240]: 1BA62120DE6: from=, size=2640, nrcpt=1 (queue active)
Apr 16 18:27:23 localhost amavis[5958]: (05958-01) Blocked INFECTED (Eicar-Test-Signature) {DiscardedInternal,Quarantined}, LOCAL [::1]:34329 [::1] -> , quarantine: i/virus-inwGQow2irog, Queue-ID: 29529120D93, Message-ID: <47c9d0ff52827698a620a6ad4684c602@eproit>, mail_id: inwGQow2irog, Hits: -, size: 1162, 2065 ms
Apr 16 18:27:23 localhost postfix/smtp[6187]: 29529120D93: to=, relay=127.0.0.1[127.0.0.1]:10024, delay=2.3, delays=0.11/0.05/0.08/2, dsn=2.7.0, status=sent (250 2.7.0 Ok, discarded, id=05958-01 - INFECTED: Eicar-Test-Signature)
Apr 16 18:27:23 localhost postfix/qmgr[5240]: 29529120D93: removed

Widzimy w logach że wiadomość zawiera wirusa Eicar-Test-Signature. Nie została dostarczona do odbiorcy. Została zablokowana.

**************
14. Instalacja oraz konfiguracja SPAMASSASSIN - sluzy do oznaczania wiadomości jako SPAM
**************
Instalacja :

apt-get install spamassassin

8.5 Konfiguracja SPAMASSASSIN

nano /etc/default/spamassassin

Zmień wartośĆ NA 1 (Zezwól na wystartowanie spamd):

ENABLED=1

Jeżeli tego nie zrobimy to nie uruchomimy Spamassassin.

BŁĄD :

SpamAssassin Mail Filter Daemon: disabled, see /etc/default/spamassassin

Aby włączyć automatyczne aktualizacje reguł :

CRON=1

Następnie wykonaj :

/etc/init.d/spamassassin start

plik konfiguracyjny :
/etc/spamassassin/local.cf

* rewrite_header Subject *****SPAM***** # w jaki sposób w temacie będzie zaznaczana wiadomość oznaczona jako spam

* report_safe 1 # włączenie raportowania

trusted_networks 212.17.35. # ustaw sieci, lub hosty, które uznawane są za bezpieczne. Nie są spamerami.

lock_method flock # ustaw metodę blokowania plików. flock nie jest bezpieczny ale szybszy.

* required_score 5.0 # ustawienie progu, przy którym wiadomość jest uznawana jako SPAM (domyślnie 5.0)

* use_bayes 1 # włączenie używania klasyfikacji Bayesa. (domyślnie włączone)

* bayes_auto_learn 1 # automatyczne uczenie się filtra Bayes-a (domyślnie włączone)

# zestaw nagłówków, które mogą zapewnić nieodpowiednie klasyfikacje Bayesa

bayes_ignore_header X-Bogosity
bayes_ignore_header X-Spam-Flag
bayes_ignore_header X-Spam-Status

#

shortcircuit USER_IN_WHITELIST on
shortcircuit USER_IN_DEF_WHITELIST on
shortcircuit USER_IN_ALL_SPAM_TO on
shortcircuit SUBJECT_IN_WHITELIST on

Po zmianach restart usługi :

service spamassassin restart

Konfiguracja Postfix (master.cf) :

Dodajemy na końcu :

spamassassin unix - n n - - pipe
user=debian-spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}

Modyfikujemy linijkę:

smtp inet n - n - - smtpd

zamieniamy na :

smtp inet n - - - - smtpd -o content_filter=spamassassin

oraz modyfikujemy linijkę : submission inet n - - - - smtpd

zamieniamy na :

submission inet n - - - - smtpd -o content_filter=spamassassin

Wykonujemy :

/etc/init.d/postfix reload

**************
Testowanie systemu spamowego
**************

Wysyłka testowego maila o zawartosci :

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

Analiza logów /var/log/mail.log :

Przykład 1 :

Apr 15 17:41:58 localhost postfix/cleanup[4071]: D234C120DCC: message-id=
Apr 15 17:41:59 localhost postfix/qmgr[3978]: D234C120DCC: from=<>, size=3637, nrcpt=1 (queue active)
Apr 15 17:41:59 localhost amavis[2258]: (02258-01) Blocked SPAM {BouncedOutbound,Quarantined}, LOCAL [::1]:39175 [::1] -> , quarantine: v/spam-vwTeItUwlUxh.gz, Queue-ID: DF3D0120CD0, Message-ID: , mail_id: vwTeItUwlUxh, Hits: 999.001, size: 758, 15549 ms
Apr 15 17:41:59 localhost postfix/smtp[4073]: DF3D0120CD0: to=, relay=127.0.0.1[127.0.0.1]:10024, delay=22, delays=0.28/0.22/9/12, dsn=2.5.0, status=sent (250 2.5.0 Ok, id=02258-01, BOUNCE)
Apr 15 17:41:59 localhost postfix/qmgr[3978]: DF3D0120CD0: removed
Apr 15 17:42:00 localhost postfix/pipe[4086]: D234C120DCC: to=, relay=dovecot, delay=1.6, delays=0.17/0.09/0/1.4, dsn=2.0.0, status=sent (delivered via dovecot service)
Apr 15 17:42:00 localhost postfix/qmgr[3978]: D234C120DCC: removed
Apr 15 17:42:41 localhost dovecot: imap-login: Login: user=, method=PLAIN, rip=127.0.0.1, lip=127.0.0.1, mpid=4089, TLS, session=
Apr 15 17:42:41 localhost dovecot: imap(testowy2@eproit): Disconnected: Logged out in=318 out=1999

Jak widzimy SPAM został zablokowany. Wiadomość SPAM nie została dostarczona do adresata.

Tak się stanie jeśli parametr $final_spam_destiny zostanie ustawiony na D_BOUNCE :

/etc/amavis/conf.d/20-debian_defaults

$final_spam_destiny = D_BOUNCE;

D_BOUNCE - lokalnie zostanie odbita wiadomość SPAM przez amavisd-new. Wiadomość SPAM nie zostanie dostarczona do adresata.

Przykład 2 :

Apr 16 17:23:28 localhost postfix/cleanup[5677]: F3958120DF6: message-id=
Apr 16 17:23:28 localhost postfix/qmgr[5240]: F3958120DF6: from=, size=1468, nrcpt=1 (queue active)
Apr 16 17:23:28 localhost postfix/smtpd[5690]: disconnect from localhost[127.0.0.1]
Apr 16 17:23:28 localhost amavis[2267]: (02267-04) Passed SPAM {RelayedTaggedInternal,Quarantined}, LOCAL [::1]:34029 [::1] -> , quarantine: T/spam-TMioI2qZCXtw.gz, Queue-ID: 22E49120DF2, Message-ID: , mail_id: TMioI2qZCXtw, Hits: 999, size: 758, queued_as: F3958120DF6, 4789 ms
Apr 16 17:23:28 localhost postfix/smtp[5679]: 22E49120DF2: to=, relay=127.0.0.1[127.0.0.1]:10024, delay=5.1, delays=0.15/0.1/0.03/4.8, dsn=2.0.0, status=sent (250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as F3958120DF6)
Apr 16 17:23:28 localhost postfix/qmgr[5240]: 22E49120DF2: removed
Apr 16 17:23:29 localhost postfix/pipe[5691]: F3958120DF6: to=, relay=dovecot, delay=1.6, delays=0.09/0.09/0/1.5, dsn=2.0.0, status=sent (delivered via dovecot service)
Apr 16 17:23:29 localhost postfix/qmgr[5240]: F3958120DF6: removed
Apr 16 17:24:26 localhost dovecot: imap-login: Login: user=, method=PLAIN, rip=127.0.0.1, lip=127.0.0.1, mpid=5694, TLS, session=<5OAeD9kT6AB/AAAB>
Apr 16 17:24:26 localhost dovecot: imap(testowy2@eproit): Disconnected: Logged out in=119 out=893

W logach widzimy że SPAM został oznaczony jako SPAM. Wiadomość SPAM została dostarczona do adresata.

Tak się stanie jeśli parametr $final_spam_destiny zostanie ustawiony na D_PASS :

/etc/amavis/conf.d/20-debian_defaults

$final_spam_destiny = D_PASS;

D_PASS - dostarcza wiadomość

Jeżeli w logach widzimy że wiadomość SPAM została oznaczona jako SPAM ale użytkownik nie widzi jej w swoich katalogach, należy sprawdzić parametr @local_domains_acl:

nano /etc/amavis/conf.d/05-domain_id

parametr :

#@local_domains_acl = ( ".$mydomain" );

zamień na

@local_domains_acl = ('.');

Przykład 3

Log przesłanej wiadomości, która nie jest SPAMEM :

Apr 16 18:08:52 localhost postfix/cleanup[6054]: 1146C120DF9: message-id=
Apr 16 18:08:52 localhost postfix/qmgr[5240]: 1146C120DF9: from=, size=1309, nrcpt=1 (queue active)
Apr 16 18:08:52 localhost amavis[5959]: (05959-01) Passed CLEAN {RelayedInternal}, LOCAL [::1]:34250 [::1] -> , Queue-ID: 8E690120DEF, Message-ID: , mail_id: YUnmdBYv35xP, Hits: -1, size: 721, queued_as: 1146C120DF9, 3630 ms
Apr 16 18:08:52 localhost postfix/smtp[6055]: 8E690120DEF: to=, relay=127.0.0.1[127.0.0.1]:10024, delay=4, delays=0.2/0.07/0.2/3.5, dsn=2.0.0, status=sent (250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as 1146C120DF9)

******************************
WIADOMOŚCI SPAM W KATALOGU SPAM
*******************************

Aby SPAM trafiał do skrzynki "Spam" zainstaluj dovecot-sieve dovecot-managesieved :

apt-get install dovecot-sieve dovecot-managesieved

W katalogu /var/lib/dovecot tworzymy plik default.sieve

o zawartości :

require "fileinto";
if header :contains "X-Spam-Flag" "YES" {
fileinto "Spam";
}

Utworzony skrypt "budujemy" :

sievec /var/lib/dovecot/default.sieve

Nadajemy użytkownika :

chown -R vmail:vmail /var/lib/dovecot

Konfigurujemy protokół LDA :

Ustawienia mogą się znajdować w :

/etc/dovecot/dovecot.conf

lub w osobnym pliku :

/etc/dovecot/conf.d/15-lda.conf

lda_mailbox_autosubscribe = yes
lda_mailbox_autocreate = yes

# Skrzynka SPAM zostanie automatycznie utworzona jeśli taka wiadomość SPAM się pojawi.

Sprawdzamy ustawienia protokołu LDA :

/etc/dovecot/conf.d/15-lda.conf

protocol lda {
auth_socket_path = /var/run/dovecot/auth-master
log_path = /var/log/dovecot-deliver-errors.log
info_log_path = /var/log/dovecot-deliver.log
mail_plugins = quota sieve
postmaster_address = postmaster@eproit.pl
quota_full_tempfail = yes
rejection_reason = Your message was automatically rejected:%n%r%n%nThe Subject of your message was: %s

}

Dodajemy obsługę protokołu sieve :

/etc/dovecot/dovecot.conf

protocols = pop3 imap sieve

Dodajemy plugin :

/etc/dovecot/conf.d/90-plugin.conf

plugin {
sieve_global_path = /var/lib/dovecot/default.sieve
sieve_global_dir = /var/lib/dovecot/
#...
#...
}

Restartujemy usługę :

/etc/init.d/dovecot restart

Aby sprawdzić czy SPAM jest przekazywany (dostarczany) do katalogu SPAM, przeglądamy logi /var/log/dovecot-deliver.log :

Przykład :

Apr 16 17:23:29 lda(testowy@eproit): Info: sieve: msgid=: stored mail into mailbox 'Junk'
Apr 16 17:33:11 lda(testowy@eproit): Info: sieve: msgid=<62c5efa4e1daa9a61c664133ca141a21@eproit>: stored mail into mailbox 'Junk'
Apr 16 17:37:03 lda(testowy2@eproit): Info: sieve: msgid=: stored mail into mailbox 'INBOX'

Warto również sprawdzić czy pojawiają się jakieś błędy w przekazywaniu :

/var/log/dovecot-deliver-errors.log

15. Instalacja Autorespondera

Autoresponder (skrypt vacation.pl) - Postfixadmin

Po zainstalowaniu Postfixadmin przechodzimy do :

cd /usr/share/doc/postfixadmin/examples/VIRTUAL_VACATION

Rozpakowujemy skrypt vacation.pl.gz

Tworzymy użytkownika vacation :

groupadd --gid 10002 vacation
useradd -o -d /var/spool/vacation -g 10002 -u 10002 -s /bin/false vacation

Instalujemy dodatkowe biblioteki :

apt-get install libmail-sender-perl libdbd-pg-perl libemail-valid-perl libmime-perl liblog-log4perl-perl liblog-dispatch-perl libgetopt-argvfile-perl

Instalujemy skrypt vacation :

mkdir /usr/lib/postfixadmin
cp vacation.pl /usr/lib/postfixadmin/vacation.pl
chown -R root:vacation /usr/lib/postfixadmin
chmod 750 /usr/lib/postfixadmin/ /usr/lib/postfixadmin/vacation.pl

Ustawiamy transport :

/etc/postfix/master.cf

Dodajemy na końcu pliku :

vacation unix - n n - - pipe
flags=Rq user=vacation argv=/usr/lib/postfixadmin/vacation.pl -f ${sender} -- ${recipient}

Tworzymy nowy transport Postfix:

/etc/postfix/transport

o zawartości :

autoreply.yourdomain.com vacation:

#za yourdomain.com podajemy swoją domenę.

W pliku /etc/postfix/main.cf

Dodajemy :

transport_maps = hash:/etc/postfix/transport
dovecot_destination_recipient_limit = 1

Wykonujemy w konsoli :

postmap /etc/postfix/transport

postfix reload

Tworzymy plik /etc/postfixadmin/vacation.conf

Wrzucamy zawartość:

$db_type = 'mysql';
$db_host = '';
$db_username = 'postfixadmin';
$db_password = 'haslo_baza_postfixadmin';
$db_name = 'postfixadmin';
$vacation_domain = 'autoresponder.eproit';
$smtp_server = 'localhost';
$smtp_client = 'localhost';
$smtp_auth = undef;
$smtp_authid = 'someuser';
$smtp_authpwd = 'somepass';
$smtp_server_port = 25;
$syslog = 0;
$logfile='/var/log/vacation.log';
$log_level = 1;
$log_to_file = 0;
$interval = 0;
1;

# $logfile='/var/log/vacation.log';
# 2 = debug + info, 1 = info only, 0 = error only

- zmieniamy typ bazy danych
- podajemy dostęp do bazy danych Postfixadmin
- konfigurujemy zapis logów

chown root:vacation /etc/postfixadmin/vacation.conf
chmod 640 /etc/postfixadmin/vacation.conf

touch /var/log/vacation.log
chown root:vacation /var/log/vacation.log
chmod 620 /var/log/vacation.log

Dodajemy do pliku /etc/hosts wpis:

127.0.0.1 autoresponder.eproit

W pliku /usr/lib/postfixadmin/vacation.pl

zmieniamy :

if (-f "/etc/mail/postfixadmin/vacation.conf") {
require "/etc/mail/postfixadmin/vacation.conf";
}

na

if (-f "/etc/postfixadmin/vacation.conf") {
require "/etc/postfixadmin/vacation.conf";
}

Konfigurujemy PostfixAdmin:

W pliku /etc/postfixadmin/config.inc.php zmieniamy parametry :

$CONF['vacation'] = 'YES';
$CONF['vacation_domain'] = 'autoresponder.eproit';
$CONF['vacation_control'] ='YES';
$CONF['vacation_control_admin'] = 'YES';

Test :

Konfigurujemy automatyczną odpowiedź na stronie konsoli administracyjnej Postfixadmin:

http://postfixadmin.eproit/login.php

lub na konsoli użytkownika :

http://postfixadmin.eproit/users/login.php

Istnieje możliwość zintegrowania Postfixadmin z Roundcube.
Plugin Roundcube: rcb-pfa-autoresponder-master

markos
Specjalizuję się w systemach komputerowych Windows oraz Linux. Oprócz wykonywanej pracy w zawodzie, informatyka jest moją pasją.

4
Dodaj komentarz

avatar
3 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
4 Comment authors
Bogumił PiskorzMarcin MazurekMarek Kościelnyarmen10 Recent comment authors
  Subscribe  
najnowszy najstarszy oceniany
Powiadom o
armen10
Gość
armen10

Czy ta konfiguracja działa w 100% ?
Na jakiej wersji Debiana była robiona ?

Marcin Mazurek
Gość
Marcin Mazurek

Fajny tutorial, trzeba zwracać uwagi na szczegóły 🙂 (trzeba myśleć, tzn.nie jest to Ctrl+c ctrl+v w 100%).
Generalnie bdb podręcznik postawienia serwera poczty, dla obytych w temacie.
Dzięki !!!

Bogumił Piskorz
Gość
Bogumił Piskorz

Walczę już dłuższy czas z ta konfiguracją na Debian 8. Niestety nie jestem zbyt biegły w tym temacie. Czy jest opcja na jakąś małą pomoc? Jestem dokładnie w “8. Konfiguracja szyfrowania – DOVECOT”

:~# telnet localhost 587
Trying ::1…
Connected to localhost.
Escape character is ‘^]’.
Connection closed by foreign host.
:~#

LOG
email postfix/smtpd[5299]: warning: cannot get RSA private key from file /etc/ssl/CA/privkey.omegaserwis.com.pl.pem: disabling TLS support
email postfix/smtpd[5299]: warning: TLS library problem: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch:x509_cmp.c:341:
email postfix/smtpd[5299]: fatal: unexpected command-line argument: #
email postfix/master[3509]: warning: process /usr/lib/postfix/smtpd pid 5299 exit status 1
email postfix/master[3509]: warning: /usr/lib/postfix/smtpd: bad command startup — throttling