Hristo C. Simeonov
Rev 2: 04 Feb 2012
Преди няколко дни ми се наложи да си преместя мейл сървъра на друг сървър. От доста време му бях набрал на моя мейл сървър, който беше на qmail. Нямам нищо против qmail, просто вече е морално остарял. Първата сигурна версия на Qmail 1.3 се появи през 1998 година и общо взето от тогава кода му не е мръднал много много, което от своя страна си е малко неудобство. За всяко ново нещо което ти потрябва, трябва да търсиш разни пачове из мрежата, пък те не били цели, нещо не им работило ... общо взето, ако искаш да го инсталираш с малко по нови неща, може да си строшиш нервите. На този адрес има една страница, която бях писал през 2005 година и актуализирал до 2010 как да си инсталираме qmail. Вече не я обновявам, тъй като смятам, че qmail си е загуба на време.
Операционна система: Slackware 13.37
Необходим софтуер който приемаме, че са инсталирани:
OpenSSL >= 0.9.8q 2 Dec 2010Dovecot
mysql -u root -p mysql
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 120669
Server version: 5.1.53-log Source distribution
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> CREATE DATABASE `dovecot` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON `dovecot` . * TO 'dovecot'@'localhost' IDENTIFIED BY 'dovecot' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> \q
Bye
Ако ви се наложи да дропнете базата с потребителя, ето какво трябва да направите:
mysql -u root -p mysql
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 120669
Server version: 5.1.53-log Source distribution
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> REVOKE ALL PRIVILEGES ON * . * FROM 'dovecot'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> REVOKE ALL PRIVILEGES ON `dovecot` . * FROM 'dovecot'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> REVOKE GRANT OPTION ON `dovecot` . * FROM 'dovecot'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> DROP USER 'dovecot'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> DROP DATABASE IF EXISTS `dovecot`;
Query OK, 0 rows affected (0.00 sec)
mysql> \q
Bye
Сега трябва да създадем юзера и групата, под които ще работи dovecot, също и мейл юзера, под който ще се записват писмата
groupadd dovecot
useradd dovecot -g dovecot -c 'Dovecot mail server' -s /bin/false
groupadd vmail
useradd vmail -g vmail -c 'Vmail server' -s /sbin/nologin
и продължаваме към инсталиране и конфигуриране на dovecot.
tar xzvf dovecot-2.0.21.tar.gz
chown -R root.root dovecot-2.0.21
cd dovecot-2.0.21
./configure --with-mysql
make
make install
cd /usr/local/share/doc/dovecot/
cp -r example-config /usr/local/etc/dovecot
cd /usr/local/etc/dovecot
vi dovecot.conf
При мен конфигурационния файл изглежда по следния начин, както ще видите - бинднал съм imap, който не изисква енкрипция на 127.0.0.1 само, това е с цел да се използва само от уеб емайл-а, тъй като няма нужда процесора да се натоварва излишно с безмисленна енкрипция, след като само локалния хост ще се връзва с него. Всички останали правят конекция през ssl порта. Там където в конфигурационния файл пише uid=1004 gid=1005, това са userid и groupid -то на потребителя vmail!
# 2.0.21: /usr/local/etc/dovecot/dovecot.conf
# OS: Linux 3.2.4 i686 Slackware 13.37.0 ext4
auth_mechanisms = plain login
base_dir = /usr/local/var/run/dovecot/
default_login_user = nobody
dict {
driver = sql
quota = mysql:/usr/local/etc/dovecot/dovecot-dict-sql.conf.ext
}
mail_location = maildir:/var/spool/postmail/%d/%n/Maildir
mail_privileged_group = vmail
passdb {
args = /usr/local/etc/dovecot/dovecot-sql.conf.ext
driver = sql
}
protocols = pop3 imap
service imap-login {
inet_listener imap {
address = 127.0.0.1
port = 143
}
}
ssl_cert = </etc/postfix/ssl/mail.example.com.crt
ssl_key = </etc/postfix/ssl/mail.example.com.key
userdb {
driver = static
args = uid=1004 gid=1005 home=/var/spool/postmail/%d/%u allow_all_users=yes
}
protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
}
!include conf.d/*.conf
Както и файла dovecot-sql.conf.ext
driver = mysql
connect = host=localhost dbname=postfix user=postfix password=postfix
default_pass_scheme = CRYPT
password_query = SELECT username AS user, password FROM mailbox WHERE username = '%u';
След това отивате в директорията conf.d и трябва да промените следните файлове:
mkdir /var/spool/postmail
chown -R vmail.vmail /var/spool/postmail
след като сме готови трябва да създадем таблицата в базата ни:
mysql -u dovecot -p dovecot
Enter password:
mysql> CREATE TABLE users (
userid VARCHAR(128) NOT NULL,
domain VARCHAR(128) NOT NULL,
password VARCHAR(64) NOT NULL,
home VARCHAR(255) NOT NULL,
uid INTEGER NOT NULL,
gid INTEGER NOT NULL
);
Query OK, 0 rows affected (0.00 sec)
mysql> \q
Bye
Dovecot когато работи с SQL сървър има възможност да се връзва към сокет, аз специално срещнах някакъв проблем и тъй като вече ми работи сървъра нямам голямо желание да го тествам. Сокета се описва по следния начин в dovecot-sql.conf файл:
# The mysqld.sock socket may be in different locations in different systems
driver = mysql
connect = host=/var/run/mysqld/mysqld.sock dbname=mails user=admin password=pass
Ако някой го пробва и работи да метне един емайл да каже.
openssl req -new -x509 -days 365 -nodes -out "example.cert" -keyout "example.key"
chmod 600 example.key
cp -a /root/example.cert /etc/postfix/ssl/certs/dovecot.pem
cp -a /root/example.key /etc/postfix/ssl/private/dovecot.pem
Стига толкова за dovecot, нека продължим по нататък.Postfix
groupadd postfix
groupadd postdrop
useradd postfix -g postfix -c 'Postfix daemon user account' -d /var/spool/postfix -s /bin/false
Postfix може да ви даде грешка когато го компилирате с MySQL подръжка, тъй като както postfix, така и MySQL инклудват един и същи файл events.h, за това трябва да преименувате единия файл (този на MySQL-а).
cd /usr/include/mysql/
mv events.h events.h.bak
cd /usr/local/src
tar xzvf postfix-2.9.3.tar.gz
chown -R root.root postfix-2.9.3
cd postfix-2.9.3
make -f Makefile.init makefiles \
'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_TLS -DUSE_DOVECOT_SASL -I/usr/include/sasl' \
'AUXLIBS=-L/usr/lib/sasl2 -L/usr/lib -lmysqlclient -lz -lm -L/usr/lib -lssl -lcrypto -lsasl2'
make
make install
ln -s /usr/sbin/sendmail /usr/lib/sendmail
Сега ще създадем и ключа за да не го забравим после.
perl /etc/ssl/misc/CA.pl
CA certificate filename (or enter to create)
Making CA certificate ...
Using configuration from /etc/ssl/openssl.cnf
Generating a 1024 bit RSA private key
....................++++++
.....++++++
writing new private key to './demoCA/private/cakey.pem'
Enter PEM pass phrase:някъв пасс
Сега ще създадем ключа без парола за нашия хост aaa.example.net и неподписан ключ.
openssl req -new -nodes -keyout aaa-key.pem -out aaa-req.pem -days 365
Using configuration from /etc/ssl/openssl.cnf
Generating a 1024 bit RSA private key
........................................++++++
....++++++
writing new private key to 'aaa-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]:BG
State or Province Name (full name) [Some-State]:Stara Zagora
Locality Name (eg, city) []:Stara Zagora
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Condor
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:aaa.example.net
Email Address []:owner@example.net
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:някъв пасс
An optional company name []:
Подписваме публичния сертифика за aaa.example.net със удостоверяващия частен ключ които създадохме преди няколко стъпки.
openssl ca -out aaa-cert.pem -infiles aaa-req.pem
Using configuration from /etc/ssl/openssl.cnf
Enter PEM pass phrase:някъв пасс
Check that the request matches the signature
Signature ok
The Subjects Distinguished Name is as follows
countryName :PRINTABLE:'BG'
stateOrProvinceName :PRINTABLE:'Stara Zagora'
localityName :PRINTABLE:'Stara Zagora'
organizationName :PRINTABLE:'Condor'
commonName :PRINTABLE:'aaa.example.net'
emailAddress :IA5STRING:'owner@example.net'
Certificate is to be certified until Nov 21 19:40:56 2012 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
Инсталираме публичния и частния ключ както и удостоверяващия частен ключ.
cp demoCA/cacert.pem aaa-key.pem aaa-cert.pem /etc/postfix
chmod 644 /etc/postfix/aaa-cert.pem /etc/postfix/cacert.pem
chmod 400 /etc/postfix/aaa-key.pem
Сега ги инсталираме в /etc/postfix/main.cf файла за всички клиенти. Давам примерни параметри, в конфигурационните файлове които съм дал името на ключа е различно тъй като тази част е допълвана в последствие след като видях, че съм я пропуснал.
/etc/postfix/main.cf:
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_tls_session_cache
smtp_tls_security_level = may
smtpd_tls_CAfile = /etc/postfix/cacert.pem
smtpd_tls_cert_file = /etc/postfix/aaa-cert.pem
smtpd_tls_key_file = /etc/postfix/aaa-key.pem
smtpd_tls_received_header = yes
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_tls_session_cache
tls_random_source = dev:/dev/urandom
smtpd_tls_security_level = may
Сега да създадем базата и да качим sql файла:
mysql -u root -p mysql
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 120669
Server version: 5.1.53-log Source distribution
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> CREATE DATABASE `postfix` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@'localhost' IDENTIFIED BY 'postfix' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> \q
Bye
mysql -u root -p postfix < mail.sql
Преминаваме към антивирусната програма, после ще настройваме postfix-а.
pigeonhole
Искам да вмъкна няколко думи. Ако Вашия уеб майл има подръжка на втори активен фолдер, тъй като squirrelmail-а няма, но примерно roundcuba има и желаете писмата идентифицирани като спам да отивам автоматично в тази папка, тогава имате нужда от dovecot-pigeonhole. Това е скриптов език с които можете да манипулирате писмата т.е. ако се съдържа spam в писмото премести го в еди си коя директория.
tar xzvf dovecot-2.1-pigeonhole-0.3.1.tar.gz
chown -R root.root dovecot-2.1-pigeonhole-0.3.1
cd dovecot-2.1-pigeonhole-0.3.1
./configure
make
make install
Активирате двата конфигурационни файла в dovecot и остава да си настроите филтъра след това. Филтъра може да бъде персонален и глобален за всички потребители. При мен използвам глобален ето как изглежда:
# cat /usr/local/var/lib/dovecot/sieve/default.sieve
require "fileinto";
if header :contains "X-Spam-Flag" "YES" {
fileinto "Spam";
}
Забравих да спомена, че самия dovecot също подържа команди за манипулиране на файлове, но не може да мести писма физически от една папка в друга, за това се налага да се използва pigeonhole.
clamav
groupadd clamav
useradd clamav -g clamav -c 'ClamAV system user' -d /var/lib/clamav -s /bin/false
tar xzvf clamav-0.97.5.tar.gz
chown -R root.root clamav-0.97.5
cd clamav-0.97.5
./configure
make
make install
mkdir /var/lib/clamav
chown -R clamav:clamav /var/lib/clamav
freshclam
mkdir /var/run/clamav
chown clamav:clamav /var/run/clamav
След като антивирусната програма е инсталирана, трябва да се конфигурира. Антивирусната програма има два файла: clamd.conf и freshclam.conf, който са записани в директорията /usr/local/etc. И двата файла трябва задължително да се редактират. Разгледайте ги, ако нещо не ви стане ясно или се двоумите, може да изтеглите моите файлове от директорията downloads. Те ще работят, ако сте следвали точно инструкциите.
SpamAssassin
Нека преди да инсталираме SpamAssassin, да инсталираме някой други модули, които би било добре да ги имаме. Внимание, ако вашият емайл сървър приема повече от 100,000 писма на ден, за да използвате Distributed Checksum Clearinghouse (DCC) трябва да си инсталирате локален сървър, защото писмата Ви няма да бъдат проверявани, когато надхвърлят бройката.
tar xzvf dcc.tar.Z
chown -R root.root dcc-1.3.141
cd dcc-1.3.141
./configure --disable-dccm
make
make install
cdcc info > /var/dcc/map.txt
chmod 0600 /var/dcc/map.txt
rm /var/dcc/map
cdcc "new map; load /var/dcc/map.txt"
cdcc "delete 127.0.0.1"
cd /usr/local/src
tar xjvf razor-agents-sdk-2.07.tar.bz2
chown -R root.root razor-agents-sdk-2.07
cd razor-agents-sdk-2.07
perl Makefile.PL
make
make test
make install
cd /usr/local/src
tar xjvf razor-agents-2.84.tar.bz2
cd razor-agents-2.84
perl Makefile.PL
make
make test
make install
cd /usr/local/src
tar xjvf pyzor-0.5.0.tar.bz2
chown -R root.root pyzor-0.5.0
cd pyzor-0.5.0
python setup.py build
python setup.py install
pyzor discover
cd /usr/local/src
/* SpamAssassin изисква някой модули на пърла да бъдат инсталирани. Желателно е всичко да бъде инсталирано през пърл шела. Отговаряйте положително на всеки въпрос който възниква по време на инсталацията на модулите. */
groupadd spamd
useradd spamd -g spamd -c 'SpamD system user' -d /var/lib/spamassassin -s /bin/false
perl -MCPAN -e shell
cpan> install Bundle::CPAN
cpan> install Devel::CoreStack
cpan> install Digest::HMAC
cpan> install Digest::MD5
cpan> install Digest::SHA1
cpan> install Digest::BubbleBabble
cpan> install HTML::Parser
cpan> install HTML::Tagset
cpan> install MIME::Base64
cpan> install Getopt::Long
cpan> install Time::Local
cpan> install Time::HiRes
cpan> install HTTP::Date
cpan> install Term::ReadKey
cpan> install Net::IP
cpan> install Net::DNS
cpan> install Net::SMTP
cpan> install File::Path
cpan> install File::Basename
cpan> install File::Spec
cpan> install Test::Harness
cpan> install Test::Simple
cpan> install Net::CIDR::Lite
cpan> install Sys::Hostname::Long
cpan> install Mail::Audit
cpan> install Net::DNS::Resolver::Programmable
cpan> install Error
cpan> install NetAddr::IP
cpan> install version
cpan> install Mail::SPF
cpan> install Mail::SPF::Query
cpan> install IP::Country::Fast
cpan> install Text::Wrap
cpan> install Parse::Syslog
cpan> install Statistics::Distributions
cpan> install Net::Ident
cpan> install Socket6
cpan> install IO::Socket
cpan> install IO::Socket::INET6
cpan> install Net::SSLeay
cpan> install IO::Socket::SSL
cpan> install Crypt::OpenSSL::Random
cpan> install Crypt::OpenSSL::RSA
cpan> install Mail::Address
cpan> install Email::Address
cpan> install Mail::DomainKeys
cpan> install Mail::DKIM
cpan> install IO::Zlib
cpan> install Archive::Tar
cpan> install Crypt::OpenSSL::Bignum
cpan> install DB_File
cpan> install Storable
cpan> install Data::Dump
cpan> install Encode::Detect
cpan> install Mail::SpamAssassin
cpan> quit
Lockfile removed.
sa-update -D
chown -R spamd:spamd /var/lib/spamassassin/
amavis
groupadd amavis
useradd amavis -g amavis -c 'AMaViS system user' -d /var/lib/amavis -s /bin/sh
perl -MCPAN -e shell
cpan> install Archive::Zip
cpan> install Compress::Zlib
cpan> install Compress::Raw::Zlib
cpan> install Convert::TNEF
cpan> install Convert::UUlib
cpan> install MIME::Base64
cpan> install MIME::Parser
cpan> install Mail::Internet
cpan> install Net::Server
cpan> install Digest::MD5
cpan> install IO::Stringy
cpan> install Time::HiRes
cpan> install Unix::Syslog
cpan> install BerkeleyDB
cpan> install Mail::DKIM
cpan> quit
Lockfile removed.
tar xzvf amavisd-new-2.7.1.tar.gz
chown -R root.root amavisd-new-2.7.1
cd amavisd-new-2.7.1
mkdir /var/lib/amavis
mkdir /var/lib/amavis/tmp
mkdir /var/lib/amavis/var
mkdir /var/lib/amavis/db
mkdir /var/lib/amavis/home
mkdir /var/lib/amavis/virusmails
chown -R amavis:amavis /var/lib/amavis
chmod -R 0750 /var/lib/amavis
cp amavisd /usr/local/sbin/
chown root /usr/local/sbin/amavisd
chmod 0755 /usr/local/sbin/amavisd
cp amavisd.conf /etc/
chown root:amavis /etc/amavisd.conf
chmod 0640 /etc/amavisd.conf
Отворете файла amavisd.conf, намиращ се в /etc директорията и го конфигурирайте, както прецените за добре.
DomainKeys / DKIM
perl -MCPAN -e shell
cpan> install Crypt::OpenSSL::RSA
cpan> install Digest::SHA
cpan> install Mail::Address
cpan> install MIME::Base64
cpan> install Net::DNS
cpan> install Mail::DKIM
cpan> install Net::Server
cpan> install Error
cpan> quit
Lockfile removed.
tar xzvf dkimproxy-1.4.1.tar.gz
chown -R root.root dkimproxy-1.4.1
cd dkimproxy-1.4.1
mkdir /usr/local/dkimproxy
groupadd dkim
useradd dkim -g dkim -c 'DomainKeys user' -d /usr/local/dkimproxy -s /bin/sh
./configure --prefix=/usr/local/dkimproxy
make
make install
chown -R dkim:dkim /usr/local/dkimproxy
mkdir /var/run/dkimproxy
chown dkim:dkim /var/run/dkimproxy
След като е инсталиран трябва да се конфигурира и да се създадат ключовете. Ето как изглеждат файловете при мен в директорията /usr/local/dkimproxy/etc
dkimproxy_in.conf
# specify what address/port DKIMproxy should listen on
listen 127.0.0.1:10021
# specify what address/port DKIMproxy forwards mail to
relay 127.0.0.1:10027
dkimproxy_out.conf
# specify what address/port DKIMproxy should listen on
listen 127.0.0.1:10027
# specify what address/port DKIMproxy forwards mail to
relay 127.0.0.1:10028
# specify what domains DKIMproxy can sign for (comma-separated, no spaces)
domain example.com,second.net,third.com,four.com
# specify what signatures to add
signature dkim(c=relaxed)
signature domainkeys(c=nofws)
# specify location of the private key
keyfile /usr/local/dkimproxy/etc/dkeys/example.com/private.key
# specify the selector (i.e. the name of the key record put in DNS)
selector mail
# control how many processes DKIMproxy uses
# - more information on these options (and others) can be found by
# running `perldoc Net::Server::PreFork'.
min_servers 5
min_spare_servers 2
sender_map.conf
example.com dkim(key=/usr/local/dkimproxy/etc/dkeys/example.com/private.key), domainkeys(key=/usr/local/dkimproxy/etc/dkeys/example.com/private.key)
second.net dkim(key=/usr/local/dkimproxy/etc/dkeys/second.net/private.key), domainkeys(key=/usr/local/dkimproxy/etc/dkeys/second.net/private.key)
third.com dkim(key=/usr/local/dkimproxy/etc/dkeys/third.com/private.key), domainkeys(key=/usr/local/dkimproxy/etc/dkeys/third.com/private.key)
four.com dkim(key=/usr/local/dkimproxy/etc/dkeys/four.com/private.key), domainkeys(key=/usr/local/dkimproxy/etc/dkeys/four.com/private.key)
Правите си един стартиращ скрипт, който да изглежда горе - долу така:
#!/bin/sh
# Start/stop/restart the dkimproxy daemon:
PIDFILEOUT=/var/run/dkimproxy/dkimproxyout.pid
PIDFILEIN=/var/run/dkimproxy/dkimproxyin.pid
dkim_start() {
if [ -x /usr/local/dkimproxy/bin/dkimproxy.out ]; then
# if ! ps axc | grep -q dkimproxy.out ; then
# fi
echo "Starting DKIM proxy OUT daemon: /usr/local/dkimproxy/bin/dkimproxy.out --daemonized"
/usr/local/dkimproxy/bin/dkimproxy.out --user=dkim --group=dkim --conf_file=/usr/local/dkimproxy/etc/dkimproxy_out.conf --daemonize --pidfile=/var/run/dkimproxy/dkimproxyout.pid --sender_map=/usr/local/dkimproxy/etc/sender_map.conf
fi
if [ -x /usr/local/dkimproxy/bin/dkimproxy.in ]; then
echo "Starting DKIM proxy IN daemon: /usr/local/dkimproxy/bin/dkimproxy.in --daemonized"
/usr/local/dkimproxy/bin/dkimproxy.in --conf_file=/usr/local/dkimproxy/etc/dkimproxy_in.conf --user=dkim --group=dkim --pidfile=/var/run/dkimproxy/dkimproxyin.pid --daemonize
fi
}
dkim_stop() {
if [ -e "$PIDFILEOUT" ]; then
kill $(cat $PIDFILEOUT)
rm -f $PIDFILEOUT
fi
if [ -e "$PIDFILEIN" ]; then
kill $(cat $PIDFILEIN)
rm -f $PIDFILEIN
fi
# Just in case:
killall dkimproxy 1> /dev/null 2> /dev/null
}
# See how we were called.
case "$1" in
start)
dkim_start
;;
stop)
dkim_stop
;;
restart)
dkim_stop
sleep 1
dkim_start
;;
*)
echo $"Usage: $0 {start|stop|restart}"
;;
esac
Разбира се, всички стартиращи файлове могат да се изтеглят от ТУК Това е готово, сега остава да генерираме ключовете на домейните и след това да ги добавим в нейм сървъра. От файла sender_map.conf се вижда къде са ключовете.
mkdir -p /usr/local/dkimproxy/etc/dkeys/example.net
cd /usr/local/dkimproxy/etc/dkeys/example.net
openssl genrsa -out rsa.private 768
openssl rsa -in rsa.private -out rsa.public -pubout -outform PEM
mv rsa.private private.key
mv rsa.public public.key
ln -s public.key mail
ln -s public.key mail се налага, тъй като в конфигурационния файл сме посочили, че нашия селектор е mail. Повтаряме процедурата със всичките ни домейни и най - накрая оправяме правата.
chown -R dkim:dkim /usr/local/dkimproxy
Сега трябва да вземем публичния ключ и да го добавим в нейм сървъра.
cd /usr/local/dkimproxy/etc/dkeys/example.net
grep -v ^- public.key | perl -e 'while(<>){chop;$l.=$_;}print "t=y; p=$l;\n";'
или да няма объркване:
grep -v ^- public.key | perl -e 'while(<>){chop;$l.=$_;}print "$l;\n";'
Ако искате можете да си оправите и spf записа в нейм сървъра. Преди да пипате нейм сървъра и не знаете какви са параметрите на spf и domainkeys, провете в интернет, за да имате някаква представа какво правите и двата параметъра могат да накарат мейл сървърите в интернет да не приемат писма от вашият мейл сървър.
example.com. 1D IN TXT "v=spf1 a mx -all"
example.com. 1D IN TXT "spf2.0/pra ip4:ип–то–на–вашият–мейл–сървър ip6:ип6–то–на–вашият–мейл–сървър–ако–има–такова ptr:example.com -all"
_domainkey.example.com. 1D IN TXT "t=y; o=-"
mail._domainkey.example.com. 1D IN TXT "v=DKIM1; k=rsa; t=y; p=ТУКА ДОБАВЯМЕ КЛЮЧА ОТ grep КОМАНДАТА /втората/;
Остава да настроим postfix-а и може да се каже, че сме готови. Аз също не съм голям специалист по postfix, с проба - грешка и питане в мейлинг листите го нагласих. Ето как изглежда при мен файла main.cf който се намира в /etc/postfix/
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
inet_protocols = ipv4, ipv6
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
readme_directory = no
# TLS parameters
smtpd_tls_cert_file=/etc/postfix/ssl/mail.example.com.crt
smtpd_tls_key_file=/etc/postfix/ssl/mail.example.com.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
disable_vrfy_command = yes
strict_rfc821_envelopes = yes
myhostname = mail.stzbg.com
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
#mydestination = $myhostname, localhost.$mydomain, localhost
#relayhost = $mydomain
mynetworks = 44.44.44.44/32 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
#mailbox_command = /usr/bin/procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
html_directory = no
message_size_limit = 30720000
virtual_mailbox_base = /var/spool/postmail
# Тук при мен uid 1004 е равно на потребител vmail, group 1005 е равно на група vmail
virtual_uid_maps = static:1004
virtual_gid_maps = static:1005
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
check_helo_access hash:/etc/postfix/helo_checks,
check_sender_access hash:/etc/postfix/helo_checks,
check_recipient_access pcre:/etc/postfix/recipient_checks.pcre,
reject_invalid_hostname,
reject_unauth_pipelining,
reject_non_fqdn_sender,
reject_unknown_sender_domain,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
reject_unlisted_sender,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client accredit.habeas.com,
reject_rbl_client bl.spamcop.net,
reject_rbl_client iadb.isipp.com,
reject_rbl_client dnsbl.njabl.org,
reject_rbl_client dnsbl.sorbs.net,
reject_rbl_client plus.bondedsender.org,
permit
smtpd_tls_CAfile = /etc/postfix/ssl/mail.example.com.pem
smtpd_sasl_local_domain =
smtpd_sasl_security_options = noanonymous
virtual_transport = dovecot
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_alias_maps =
proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf,
proxy:mysql:/etc/postfix/mysql_virtual_alias_domain_maps.cf,
proxy:mysql:/etc/postfix/mysql_virtual_alias_domain_catchall_maps.cf
virtual_mailbox_maps =
proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf,
proxy:mysql:/etc/postfix/mysql_virtual_alias_domain_mailbox_maps.cf
# Това е старо и не се подържа във версия 2.9
# Additional for quota support
#virtual_create_maildirsize = yes
#virtual_mailbox_extended = yes
#virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
#virtual_mailbox_limit_override = yes
#virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later.
#virtual_overquota_bounce = yes
proxy_read_maps = $local_recipient_maps $mydestionation $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps transport_maps $mynetworks $virtual_mailbox_limit_maps
content_filter = smtp-amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings
smtpd_sasl_type = dovecot
smtpd_helo_required = yes
smtpd_helo_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_invalid_helo_hostname,
reject_unknown_helo_hostname,
reject_non_fqdn_helo_hostname,
permit
sample_directory = /etc/postfix
sendmail_path = /usr/sbin/sendmail
setgid_group = postdrop
manpage_directory = /usr/local/man
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
Ето го и файла: master.cf
smtp inet n - n - - smtpd
-o smtpd_etrn_restrictions=reject
-o smtpd_sasl_auth_enable=yes
-o smtpd_proxy_filter=127.0.0.1:10021
-o smtpd_client_connection_count_limit=10
-o content_filter=dksign:[127.0.0.1]:10027
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/bin/spamc -u ${recipient} -e /usr/local/libexec/dovecot/deliver -d ${recipient}
pickup fifo n - - 60 1 pickup
cleanup unix n - - - 0 cleanup
qmgr fifo n - n 300 1 qmgr
tlsmgr unix - - - 1000? 1 tlsmgr
rewrite unix - - - - - trivial-rewrite
bounce unix - - - - 0 bounce
defer unix - - - - 0 bounce
trace unix - - - - 0 bounce
verify unix - - - - 1 verify
flush unix n - - 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - - - - smtp
relay unix - - - - - smtp
-o smtp_fallback_relay=
showq unix n - - - - showq
error unix - - - - - error
retry unix - - - - - error
discard unix - - - - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - - - - lmtp
anvil unix - - - - 1 anvil
scache unix - - - - 1 scache
#smtp inet n - n - 1 postscreen
#smtpd pass - - n - - smtpd
dnsblog unix - - n - 0 dnsblog
tlsproxy unix - - n - 0 tlsproxy
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 - - - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-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 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
-o local_header_rewrite_clients=
127.0.0.1:10030 inet n - n - - smtpd
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=
-o mynetworks=127.0.0.0/8
-o receive_override_options=no_unknown_recipient_checks
dksign unix - - n - 4 smtp
-o smtp_send_xforward_command=yes
-o smtp_discard_ehlo_keywords=8bitmime,starttls
127.0.0.1:10028 inet n - n - 10 smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
Ако решите да променяте част от настройките, имайте на предвид, че може да забраните някои параметри, които сте разрешили в main.cf файла. Всички файлове, които са описани в main.cf +, стартиращите скриптове и базата данни може да изтеглите от ТУКА
Поиграйте си малко с файловете helo_checks и recipient_checks.pcre, можете да си ги настроите така, че да блокират писма, които не пристигат от вашия емайл сървър, а се представят, че са. След като приключите с тях изпълнявате командата:
postmap /etc/postfix/helo_checks
Създавате директория sasl и файл smtpd.conf със следното съдържание:
mkdir /etc/postfix/sasl
cd /etc/postfix/sasl
echo "pwcheck_method: auxprop" > /etc/postfix/sasl/smtpd.conf
echo "auxprop_plugin: sql" >> /etc/postfix/sasl/smtpd.conf
echo "mech_list: PLAIN LOGIN" >> /etc/postfix/sasl/smtpd.conf
echo "sql_engine: mysql" >> /etc/postfix/sasl/smtpd.conf
echo "sql_hostnames: localhost" >> /etc/postfix/sasl/smtpd.conf
echo "sql_user: postfix" >> /etc/postfix/sasl/smtpd.conf
echo "sql_passwd: postfix" >> /etc/postfix/sasl/smtpd.conf
echo "sql_database: postfix" >> /etc/postfix/sasl/smtpd.conf
echo "#sql_verbose: yes" >> /etc/postfix/sasl/smtpd.conf
echo "sql_select: SELECT password FROM mailbox WHERE username = '%u'" >> /etc/postfix/sasl/smtpd.conf
chown root.root /etc/postfix/sasl/smtpd.conf
chmod 0640 /etc/postfix/sasl/smtpd.conf
За да може без проблемно след това да добавяте домейни, менаджирате, пощи и т.н. ви съветват да си инсталирате postfixadmin.