Procedura instalacji serwera pocztowego qmail
Zalety konfiguracji
- wirtualne domeny/użytkownicy (nie systemowi)
- SMTP AUTH
- kwoty dyskowe dla użytkowników (wirtualnych)
- wydajny antyspam, antywirus (SpamAssassin, Clamav)
- odrzucanie maili do nieistniejących adresatów na poziomie sesji SMTP
- odrzucanie maili na poziomie sesji SMTP powyżej X.Y punktów SpamAssassin
- filtrowanie typów załączników
- RBL
- SPF, Greylisting
- IMAP
- SSL lub CRAM5 w SMTP AUTH + APOP w POP3
Używany zestaw
- qmail
- simscan, smtp auth, vchkpw
- courier-authlib, courier-imap
- vpopmail
- chkuser 2.0, cqgreylist
- clamav
- spamassassin
- RBL
- stunnel
Testowane na qmail 1.03-38 (z paczki src debiana), simscan 1.2, vpopmail 5.4.13, qmail-smtpd-auth 0.5.7. Inne wersje mogą dawać jakieś konflikty (np. simscan 1.2 z K.Dąbrowski smtp-auth patch)
Uwaga: aktualny qmail-maildir++.patch jest zepsuty dla aktualnego qmaila. Należy wywalić stamtąd definicję puts i zastąpić wszędzie pisanie na stdout przez substdio_puts(&ssout,"…"); w qmail-pop3d.c. Ta zmiana jest wystarczająca, nie ma potrzeby zmieniać put(…)
Procedura instalowania
(w debianie qmail-src jest w repozytorium non-free, więc należy mieć je dopisane)
apt-get install checkinstall openssl expect zlib1g-dev apt-get install clamav clamav-base clamav-daemon clamav-freshclam # lub ze źródełek clamav (./configure bez opcji) # useradd clamav, group clamav apt-get install spamassassin spamc libnet-dns-perl libpcre3-dev apt-get install dcc-client dcc-common
- apt-get install ucspi-tcp-src
- apt-get install qmail-src
- build-ucspi-tcp (tcprules, tcpserver, rblsmtpd)
- build-qmail
- te łaty mamy od razu z debiana:
- netscape-progress - Fixes compatibility bug in POP3 daemon
- pop3-supplementarygroups - Update to checkpasswd to allow multiple groups
- qmail-link-sync - Filesystem performance patch
- qmailqueue - Allows use of external qmail-queue programs
- qregex - Allows use of regular expressions for anti-relay / spam control
- errno - Fixes glibc compatibility error
- qmail_local - Fixes memory corruption in certain .qmail files
- Zamiast poniższych trzech łat można użyć: mój qmail
patchset
(smtp auth 0.5.7 + custom error + chkuser 2.0 + mini poprawki).
Mam też taki sam mój patchset ale z
qmail-maildir++
(bardziej eksperymentalny).
Uwaga2: łata chkuser wymaga plików nagłówkowych od vpopmaila… więc może być konieczność dwókrotnej instalacji: najpierw (niestarannie) surowego qmaila i vpopmaila, a potem zapatchowane. - SMTP AUTH.
UWAGA: Aby używać uwierzytelniania CRAM-MD5 z vpopmailem, trzeba hasła w vpopmailu trzymać niezadokowane (aby można było obliczyć skróty do CRAM-MD5). Tak samo z APOP. Ponadto w vpopmail nie może być skompilowany z disable-clear-passwd
Jedna z dwóch łat do SMTP AUTH:- Napisany na bazie łaty K.Dąbrowskiego, aktualniejszy,
poprawiony
http://www.fehcom.de/qmail/smtpauth.html (qmail-smtpd-auth-0.5.7)- rozpakować do katalogu z qmailem
- ./install_auth.sh
- poprawić konflikty w Makefile i qmail-smtpd.c
- poprawić wywołania die_nomem() w mailfrom_parms() w qmail-smtpd.c, jeśli autor jeszcze tego nie zrobił
- wyłączyć CRAM-MD5 w qmail-smtpd.c
- nie używać raczej: K.Dąbrowski qmail-smtpd-auth
qmail-smtpd-auth
- poprawić konflikty w Makefile i qmail-smtpd.c
- Napisany na bazie łaty K.Dąbrowskiego, aktualniejszy,
poprawiony
- dołożyć qmail-queue-custom-error z simscana (ewentualnie)
poprawić konflikt w qmail.c - tutaj dorzucić chkuser
chkuser 2.0
- do skompilowaniu z chkuser trzeba wcześnie już mieć
zainstalownego w systemie vpopmaila
- instalacja vpopmaila wymaga zainstalowanego qmaila
więc trzeba instalować w dwóch przebiegach. najpierw bez chkuser
- instalacja vpopmaila wymaga zainstalowanego qmaila
- nałożyć netqmail-1.05_chkuser-2.0.8.patch
- poprawić konflikty w Makefile i qmail-smtpd.c
- ustawić parametry chkuser_settings.h (domyślne ok, ale jest
sporo ważnych)
- wyłączyć quotę, dopóki jest zepsuta w vpopmailu.
- ja ustawiam:
#define CHKUSER_ENABLE_UIDGID
#define CHKUSER_ERROR_DELAY 500
// #define CHKUSER_MBXQUOTA_VARIABLE “CHKUSER_MBXQUOTA”
- do skompilowaniu z chkuser trzeba wcześnie już mieć
zainstalownego w systemie vpopmaila
- tutaj można by dorzucić qmail-maildir++.patch z contrib/ z
vpopmaila.
Poprawi to egzekwowanie kwot (aliasy) i doda aktualizaowanie kwot do qmail-pop3d. courier-imapd robi to samoczynnie - skompilować, zainstalować paczkę
- uruchomić /usr/lib/qmail/qmailconfig
To ustawi:- me, defaultdomain, plusdomain, locals, rcpthosts
- sprawdzić /var/qmail/control :
- concurrencyremote 2
- databytes 10000000
- defaultdomain
- locals
- me
- plusdomain
- rcpthosts
- virtualdomains
- cd /etc ; tcprules tcp.smtp.cdb `mktemp` < tcp.smtp ; chmod
644 tcp.smtp.cdb`127.0.0.1:allow,RELAYCLIENT=""
192.168:allow,RELAYCLIENT=""
1.2.3.4:allow,RELAYCLIENT=""
:allow
przy vpopmailu /etc/tcp.smtp* i tak nie będą mogły być używane (vpopmail chce tworzyć pliki tymczasowe w /etc, więc musiałby mieć +w w /etc)
- te łaty mamy od razu z debiana:
- ściągnąć vpopmaila
- czytać install.txt
- dodać konto i grupę vchkpw:
groupadd -g 89 vchkpw
useradd -g vchkpw -u 89 vpopmail -s /bin/false -d /home/vpopmail - mv /etc/tcp.smtp* ~ [ważne, aby configure nie znalazło tcp.smtp w /etc]
- configure
domainquotas to kwoty per całe domeny (nie per user). są obecnie zepsute.
podanie –disable-clear-passwd spowoduje, że nie będzie działać APOP w qmail-popup - ./configure
–enable-roaming-users
–enable-relay-clear-minutes=60
–disable-clear-passwd
# –enable-tcpserver-file=~vpopmail/etc/tcp.smtp
# –enable-domainquotas (szkoda nie przejdzie, obecnie “code is broken”)
# –enable-default-domain=(teraz ~vpopmail/etc/defaultdomain)
# –disable-spamassassin (dla nowego vpopmaila: kierujemy do spamassassina przez simscana) - make
- checkinstall make install-strip
- mv ~/tcp.smtp* ~vpopmail/etc/
- cd ~vpopmail/etc/; tcprules tcp.smtp.cdb `mktemp` < tcp.smtp ; chmod 644 tcp.smtp.cdb
- echo glowna.domena > defaultdomain
- można dać uprawnienia:
drwxr-x--- 8 vpopmail vchkpw 4096 Sep 13 2005 /home/vpopmail/
- vadddomain glowna.domena
- vadduser itd
- tutaj można powrócić do punktu 5 i dołożyć chkuser
- qmhandle
- ripmime
- simscan
UWAGA:
simscan-1.2 psuł mi się z (KD) qmail-smtpd-auth. kawalek logu szedł na deskryptor gniazda klienta zamiast do pliku i psuł protokół bylo tak tylko przy bezpiecznym uwierzytelnianiu (tylko OE nie mógł odbierać poczty). powinienem używać 1.1, aby było ok.
BYĆ MOŻE używanie opcji –enable-spam-auth-user=y w simscan by to naprawiłouseradd -g clamav -s /bin/false -d /var/qmail/simscan simscan
./configure –enable-clamav
–enable-spam \ –enable-custom-smtp-reject \ # jeśli założyliśmy łatę z simscana na qmaila
–enable-spam-auth-user=y \ # skanować także z relayowanych adresów
–enable-per-domain \ –enable-attach \ –enable-ripmime \ –enable-spam-hits \ –enable-received \ –enable-regex \ –enable-quarantinedir \ –enable-spam-passthrupowinien być następujący output:
Current settings
-————————————–
user = simscan
qmail directory = /var/qmail
work directory = /var/qmail/simscan
control directory = /var/qmail/control
qmail queue program = /var/qmail/bin/qmail-queue
clamdscan program = /usr/bin/clamdscan
clamav scan = ON
trophie scanning = OFF
attachement scan = ON
ripmime program = /usr/local/bin/ripmime
custom smtp reject = ON
drop message = OFF
regex scanner = ON
quarantine processing = ON
quarantine directory = /var/qmail/quarantine
domain based checking = ON
add received header = ON
spam scanning = ON
spamc program = /usr/bin/spamc
spamc arguments =
spamc user = OFF
authenticated users scanned = ON
spam passthru = ON
spam hits = 10.0make
checkinstall make install-strip
/var/qmail/control/simcontrol
:clam=yes,spam=yes,spam_hits=8.5,spam_passthru=yes,attach=.scr:.bat:.com:.pif:.exesimscanmk -g - wygenerowanie pliku z wersjami
Do testowania:
`QMAILQUEUE=/var/qmail/bin/simscan SIMSCAN_DEBUG=3 qmail-inject
rob@test.com < rob/spam1QMAILQUEUE=/var/qmail/bin/simscan SIMSCAN_DEBUG=3 strace -s 512
-fvvv -o log.txt qmail-inject rob@test.com < mail `BARDZO WAŻNE - najczęstsza przyczyna nie działania: clamdscan musi móc odczytywać pliki tworzone przez simscana w podkatalogach /var/qmail/simscan. Często sprawę psuje umask. można np
chown simscan.simscan /var/qmail/simscan
chmod 2750 /var/qmail/simscan
clamav do grupy simscanalbo
usermod -g clamav simscan
# i zrobić:
drwxr-x— 5 simscan clamav 192 Aug 24 00:01 /var/qmail/simscan
-rwx–s–x 1 simscan clamav 27236 Aug 23 23:35 /usr/sbin/simscanumask. ustawienie umask w init.d/qmail nie skutkuje, bo często powłoka, pośrednicząc, będzie je zmieniać. Można zrobić tak (brudny hack, ale skuteczny – obejście kwestii umask) simscan-wrapper.c:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int main() {
umask(0027);
execl("/var/qmail/bin/simscan", "simscan", (char*)NULL);
}
- vim /etc/init.d/qmail
qmail-smtpd musi chodzić z uidem i gidem vpopmail
qmail-pop3d też
init.d/qmail:
alias_empty="./Maildir/" ... # obejśćie umask: export QMAILQUEUE=/usr/local/sbin/simscan-wrapper # export QMAILQUEUE=/usr/sbin/simscan ... sh -c "start-stop-daemon --start --quiet --user qmails \ --exec /usr/sbin/qmail-send \ --startas /usr/sbin/qmail-start -- \"$alias_empty\" $logger &" ... ulimit -v 20480 # zmienione tu: # -l0 -c 50 # uruchamianie z {u,g}id vpopmail # -x # dodanie vchkpw true za qmail-smtpd sh -c "start-stop-daemon --start --quiet --user qmaild \ --pidfile /var/run/tcpserver_smtpd.pid --make-pidfile \ --exec /usr/bin/tcpserver -- -R -H -l0 -c 50 \ -u `id -u vpopmail` -g `id -g vpopmail` \ -x ~vpopmail/etc/tcp.smtp.cdb 0 25 $rblsmtpd \ /usr/sbin/qmail-smtpd \ /home/vpopmail/bin/vchkpw /bin/true 2>&1 \ | $logger &" # UWAGA: przy SMTP AUTH K.Dąbrowksiego musi być FQDN jako arg qmail-smtpd: # /usr/sbin/qmail-smtpd `hostname`.`dnsdomainname` \ # /home/vpopmail/bin/vchkpw /bin/true 2>&1 \ # | $logger &" ... # zmienione tu: # uruchamianie z {u,g}id vpopmail # checkpassword -> vchkpw sh -c "start-stop-daemon --start --quiet --user root \ --pidfile /var/run/tcpserver_pop3d.pid --make-pidfile \ --exec /usr/bin/tcpserver -- \ -u `id -u vpopmail` -g `id -g vpopmail` -R -H \ 0 110 /usr/sbin/qmail-popup `hostname`.`dnsdomainname` \ /home/vpopmail/bin/vchkpw /usr/sbin/qmail-pop3d Maildir &"
- do crontaba:
17 */2 * * * /home/vpopmail/bin/clearopensmtp 2>&1 > /dev/null
39 */6 * * * /usr/local/bin/freshclam 2>&1 > /dev/null
13 6 * * * find /var/qmail/quarantine/ -type f -print0 | xargs -0 -n 3 rm
ewentualnie dodać można greylisting - cqgreylist: cqGreylist.
Implementacja napisana w C, bardzo szybka, w zasadzie lite-Greylisting (tylko po adresie IP).
Uwaga: greylisting spowalnia dochodzenie maili (kikana(naście) minut-godzin) lub od niektórych (lichych) serwerów może nie dochodzić.dostosować cqgreylist.c:
/* RFC 2821 specifies the timeout for recieving a command to at least 5 mins */ #define TIMEOUT 300 /* specify the greylisting time in which to not accept mail from a sender */ #define GREY_SECONDS 60 char* hostname = "serwer.exapmle.org"; char* message = "you are greylisted try again"; char* base_directory = "/var/qmail/cqgreylist/";
make
cp cqgreylist /var/qmail/bin
chown 0:vchkpw /var/qmail/bin/cqgreylist
chmod 750 /var/qmail/bin/cqgreylist
mkdir /var/qmail/cqgreylist
chown vpopmail /var/qmail/cqgreylist
poprawić init.d/qmail (dodane tylko opakowanie qmail-smtpd przez cqgreylist):
sh -c "start-stop-daemon --start --quiet --user qmaild \ --pidfile /var/run/tcpserver_smtpd.pid --make-pidfile \ --exec /usr/bin/tcpserver -- -R -H \ -u `id -u vpopmail` -g `id -g vpopmail` -x ~vpopmail/etc/tcp.smtp.cdb 0 smtp \ $rblsmtpd /var/qmail/bin/cqgreylist \ /usr/sbin/qmail-smtpd /home/vpopmail/bin/vchkpw /bin/true 2>&1 \ | $logger &"
dodać do crontaba:
23 * * * * find /var/qmail/cqgreylist -mtime +1 -type f -exec rm -f {} \;
ustawić whitelist dla greylistingu.
RELAYCLIENT jest nadrzędne w stosunku do WHITELISTED. do ~vpopmail/etc/tcp.smtp dodajemywhitelist:`64.124.204.39:allow,WHITELISTED="" 64.125.132.254:allow,WHITELISTED="" # cała klasa C: 66.94.237:allow,WHITELISTED="" # ... itd
Adresy to whitelisty można wziąć np. stąd: whitelist_ip.txt
Trzeba dodać yahoo, gmail, wp, onet itp
courier-authlib
./configure --without-authpam --without-authldap --without-authpwd
--without-authshadow --without-authpgsql --without-authmysql \
--without-authcustom --with-authvchkpw
- make
- checkinstall
- make install-migrate
- make install-configure
- authmodulelist=“authvchkpw” w /usr/local/etc/authlib/authdaemonrc
- /usr/local/sbin/authdaemond start
- courier-imap (niezły jest też binc-imap i powinien działać ok z vchkpw)
configure
configure --enable-workarounds-for-imap-client-bugs
make
su
umask 22
checkinstall –inspect
make install-configure
/usr/lib/courier-imap/share/mkimapdcert
chgrp vchkpw /usr/lib/courier-imap chmod 710 /usr/lib/courier-imap chmod og+rX /usr/lib/courier-imap chmod 711 /usr/local/var /usr/local/var/spool chgrp vchkpw /usr/local/var/spool/authdaemon
/usr/local/sbin/authdaemond start && echo ok ; /usr/lib/courier-imap/libexec/imapd.rc start && echo ok
- stunnel
configure (bez arg)
make && checkinstall
stunnel.conf:
cert = /usr/local/etc/stunnel/server.crt key = /usr/local/etc/stunnel/server.key chroot = /srv/stunnel ; tylko umozliwic zapisanie pidfile setuid = stunnel setgid = stunnel pid = /tmp/stunnel.pid [pop3s] accept = 995 connect = nasz.serwer.example.org:110 [imaps] accept = 993 connect = nasz.serwer.example.org:143 [ssmtp] accept = 465 connect = nasz.serwer.example.org:25
SpamAssassin:
Razora lepiej nie używać, bo jest fatalna łączność z serwerami razora
(cloudmark)
Z pyzorem nie lepiej
clamav conf
# Example
LogFile /var/log/clamd.log
LogFileMaxSize 30M
TemporaryDirectory /tmp
MaxDirectoryRecursion 15
User clamav
AllowSupplementaryGroups # bardzo ważne do współpracy z simscanem
ScanPE
ScanOLE2
ScanMail
ScanHTML
ScanArchive
ArchiveMaxRecursion 5
freshclam conf
# Example
AllowSupplementaryGroups
NotifyClamd
SpamAssassin
/etc/default/spamassassin
ENABLED=1
OPTIONS="--create-prefs --max-children 4 --helper-home-dir"
PIDFILE="/var/run/spamd.pid"
init.pre
loadplugin Mail::SpamAssassin::Plugin::URIDNSBL
loadplugin Mail::SpamAssassin::Plugin::Hashcash
loadplugin Mail::SpamAssassin::Plugin::SPF
local.cf
rewrite_header Subject *****SPAM*****
blacklist_to jakis@adres.blah
required_score 5.0
trusted_networks 192.168.0.0/16
score USER_IN_BLACKLIST_TO 7.0
score ALL_TRUSTED -15.0
use_bayes 0
auto_learn 0
skip_rbl_checks 0
rbl_timeout 10
use_razor2 0
use_pyzor 0
use_dcc 0
dcc_timeout 15
dcc_dccifd_path /var/lib/dcc/dccifd
dcc_home /var/lib/dcc
ok_languages en de pl
ok_locales en
Klasyfikator Bayesowski w SpamAssassinie
use_bayes 1
auto_learn 1
bayes_auto_learn 1
sa-learn --learn --spam spam-mbox
sa-learn --learn --ham good-mbox
mkdir /var/qmail/simscan/.spamassassin/
chown sinscan:clamav /var/qmail/simscan/.spamassassin/
chmod 700 /var/qmail/simscan/.spamassassin/
su -s /bin/bash - simscan
sa-learn --dump magic
Warunki relayowania poczty
obsługujemy wyłącznie pocztę, która jest:
- adresowana na nasz.serwer.org lub
- adresowana na adres któregoś serwisu, który hostujemy lub
- nadawana z sieci wewnętrznej lub
- ewentualnie innych zewnętrznych, zaufanych adresów lub
- nadawana w sesji uwierzytelnionej przez SMTP AUTH lub
- wysyłana z adresu objętego w danym momencie roamingiem vpopmail
Testowanie
Sprawdzić czy:
- można wysyłąć maile z serwer (mutt itp)
- nie mamy open relay
- dochodzi adresowana na konta w obsługiwanych domenach
- odrzucany jest w sesji SMTP mail na nieistniejące konto w domenie
- zgadzają się nagłówki simscana
- dochodzi wysyłana z zaufanych adresów
- dochodzi z sesji SMTP AUTH
- działa chkuser (jeśli mamy)
- nie dochodzą wirusy (eicar) (clamav działa)
- jest oznakowywane jako spam coś co wygląda na spam
- nie dochodzi coś, co na pewno jest spamem
- XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
- można odbierać z OE przy wyłączonym i włączonym SMTP AUTH
- działa POP3 (uwierzytelnianie zwykłe i bezpieczne)
- działa greylisting (jeśli mamy)
- działa roaming POP3
- działa IMAP
- działają POP3, SMTP i IMAP via SSL
echo-smtp - przydatne do testów
#!/bin/sh
if [ "$3" ]; then
BODY="$3"
else
BODY="BLABLALBA\r\nZZZZ\r\n TEST\r\naaaa"
fi
echo -e \
"HELO submarine.ath.cx\r\n\
MAIL FROM: $1\r\n\
RCPT TO: $2\r\n\
DATA\r\n\
From: $1\r\n\
To: $2\r\n\
Subject: Test `date '+%Y-%m-%d %H:%M'`\r\n\
\r\n\
$BODY\r\n\
.\r\n\
QUIT\r\n\c"
POP3, (E)SMTP
- POP3:
- +OK
- USER/PASS
- bezpieczne uwierzytelnianie: +OK
<
12052.1156372374@host.domena>
(pid.epoch@host)- APOP - MD5 z (pid.epoch@host)hasło
- +OK
- SMTP
- EHLO
- CRAM-MD5
Inne dobre MTA
- Postfix
- Exim
- zmailer - używają np. na onecie
- dovecot - dobry IMAP+POP3
Postfix
- apt-get install postfix dovecot-common dovecot-imapd dovecot-pop3d
- addgroup –system vmail
- adduser –system –home /srv/mail –shell /bin/false –no-create-home –group vmail
- vipw
- mkdir /srv/mail
- chown vmail.vmail /srv/mail
- chmod 700 /srv/mail
- touch /var/log/dovecot.log
- chown vmail /var/log/dovecot.log
Do standardowej konfiguracji debiana należy dodać w main.cf:
mailbox_transport = dovecot
mailbox_command = /usr/lib/dovecot/deliver
dovecot_destination_recipient_limit = 1
virtual_mailbox_domains = nasze.org, domeny-example.org
virtual_transport = dovecot
virtual_mailbox_maps = hash:/etc/dovecot/passwd
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
reject_unlisted_recipient,
check_policy_service inet:127.0.0.1:60000
broken_sasl_auth_clients = yes
smtp_sasl_security_options = noanonymous
dovecot.conf:
protocols = imap pop3 imaps pop3s
disable_plaintext_auth = no
log_path = /var/log/dovecot.log
mail_location = maildir:~/Maildir
first_valid_uid = 107 # (vmail)
protocol lda {
postmaster_address = postmaster@example.org
}
auth default {
mechanisms = plain login
passdb passwd-file {
args = /etc/dovecot/passwd
}
userdb static {
args = uid=107 gid=109 home=/srv/mail/%d/%n
}
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = vmail
group = vmail
}
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
}
dopisać do master.cf:
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}
- postconf
- dovecot -n
- main.cf
- postalias, postcat, postqueue -f
- postqueue -f
- http://www.postfix.org/postconf.5.html
- http://wiki.dovecot.org/TestInstallation
- http://wiki.dovecot.org/HowTo/SimpleVirtualInstall
- dovecot.conf:
- wywalić PAM z auth default
- dodać userdb static w auth default
- dodać passdb passwd-file w auth default
- dodać usera i grupe vmail vmail
- mkdir /srv/mail (vmail:vmail)
- w main.cf: virtual_mailbox_maps = hash:/etc/dovecot/passwd