Hristo C. Simeonov
Rev 5: 22 Jul 2018
Преди няколко дни ми се наложи да си преместя мейл сървъра на друг сървър. От доста време му бях набрал на моя мейл сървър, който беше на qmail. Нямам нищо против qmail, просто вече е морално остарял. Първата сигурна версия на Qmail 1.3 се появи през 1998 година и общо взето от тогава кода му не е мръднал много много, което от своя страна си е малко неудобство. За всяко ново нещо което ти потрябва, трябва да търсиш разни пачове из мрежата, пък те не били цели, нещо не им работило ... общо взето, ако искаш да го инсталираш с малко по нови неща, може да си строшиш нервите. На този адрес https://www.ixip.net/qmail/ има една страница, която бях писал през 2005 година и актуализирал до 2010 как да си инсталираме qmail. Вече не я обновявам, тъй като смятам, че qmail си е загуба на време.
Има разлика в трите версии, както се казва за всеки по нещо. Крайния резултат е един и същи, методите са различни. Във версия 1 и 4 голяма част от нещата се случват благодарение на разни модули писани на perl. До тук добре, докато няма актуализация на текущата версия на perl примерно от версия 5.26.0 на 5.28.0, но и с всяка друга версия, тогава разбирате в какъв филм сте се забъркали. Разбира се, другите операционни системи нямат такива проблеми защото за разлика от Slackware имат пектни мениджъри и богати хранилища със софтуер където всичко вече е свършено от някой друг, за потребителя остава само да го изтеглите и пуснете и в повечето случаи даже е конфигурирано предварително и на края да си сложите титлата "Администратор" или "Админ" която Ви харесва повече :)
В тази версия съм премаханал всички модули на Perl и съм ги заменил с Rspamd. Един софтуер който заменя SpamAssassin, но покрай инсталацията и Amavis-а става излишен. В същност точно заради проблеми с Amavis тръгнах да търся вариант за негоава замяна.
Едно много важно нещо преди да изберете кой е вашия метод на инсталация трябва да Ви кажа. Сега няма да Ви рисувам схеми, тях може да си ги намерите в интернет ако искате да си обясните по - подробно процесите, но това което трябва да знаете е: Във версията с Rspamd не се подържат алиаси. Всъшност той няма отношение с алиасите, но е променен самия метод по който се доставя писмото. След като минат проверките писмото се доставя до Dovecot-а който не знае какво да го прави. На Вас може никога да не Ви се наложи да ги използвате, аз ги ползвах за следното:
Искам да си направя регистрация някъде и сайта трябва да ми изпрати писмо за удостоверение на което трябва да натисна линка. Разбира се, не желая да си давам мейла за да не получавам спам след това, повечето от сайтовете продават базата данни с мейловете на други лица, а и сайтовете за безплатно получаване на емайли са забранени във въпросния сайт. Имам 1 - 2 постоянни алиаса например алиаса който раздавам: hc@mydomain.com който пренасочва писмата към истинският ми емайл адрес hcs@mydomain.com. Като зачести спама към алиаса го изтривам.
Старата версия на статията R2 може да бъде намерена на адрес: https://www.ixip.net/postfix/postfix-r2.html. Разликата в двете статий е, че в тази съм премахнал вече DKIMproxy (защото писмата се проверяват и подписват от rspamd и не е необходимо още един процес да работи) и съм добавил mailgraph.
Операционна система: Slackware >= 15.00
Необходим софтуер който приемаме, че са инсталирани:
OpenSSL >= 1.1.0h 27 Mar 2018
wget http://www.ixip.net/postfix/downloads/lua-5.1.5-x86_64-1.txz
wget http://www.ixip.net/postfix/downloads/luajit-2.0.5-x86_64-3cf.txz
wget http://www.ixip.net/postfix/downloads/ragel-6.10-x86_64-2cf.txz
wget http://www.ixip.net/postfix/downloads/redis-4.0.10-x86_64-1.txz
installpkg lua-5.1.5-x86_64-1.txz
installpkg luajit-2.0.5-x86_64-3cf.txz
installpkg ragel-6.10-x86_64-2cf.txz
installpkg redis-4.0.10-x86_64-1.txz
Dovecot
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 utf8mb4 COLLATE utf8mb4_unicode_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
След акто създадохме базата, трябва да го конфигурираме. При мен конфигурационния файл изглежда по следния начин, както ще видите - бинднал съм imap, който не изисква енкрипция на 127.0.0.1 само, това е с цел да се използва само от уеб емайл-а, тъй като няма нужда процесора да се натоварва излишно с безмисленна енкрипция, след като само локалния хост ще се връзва с него. Всички останали правят конекция през ssl порта. Там където в конфигурационния файл пише uid=1004 gid=1005, това са userid и groupid -то на потребителя vmail!
# 2.2.29.1 (e0b76e3): /etc/dovecot/dovecot.conf
# OS: Linux 4.9.30 x86_64 Slackware 14.2
auth_mechanisms = plain login
base_dir = /var/run/dovecot/
default_login_user = nobody
dict {
driver = sql
quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
}
mail_location = maildir:/var/spool/postmail/%d/%n/Maildir
mail_privileged_group = vmail
passdb {
args = /etc/dovecot/dovecot-sql.conf.ext
driver = sql
}
protocols = imap lmtp sieve
service imap-login {
inet_listener imap {
address = 127.0.0.1
port = 143
}
inet_listener imaps {
address = 0.0.0.0
port = 993
}
}
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0660
group = postfix
user = postfix
}
user = vmail
}
ssl_cert = </etc/postfix/ssl/mail.example.com.crt
ssl_key = </etc/postfix/ssl/mail.example.com.key
ssl_dh = </etc/dovecot/dhparams.pem
userdb {
driver = static
args = uid=1002 gid=1001 home=/var/spool/postmail/%d/%n 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=postfix user=admin password=pass
Ако някой го пробва и работи да метне един емайл да каже.
openssl req -new -x509 -days 365 -nodes -out "example.cert" -keyout "example.key"
chmod 600 example.key
openssl dhparam -out /etc/dovecot/dh2048.pem 2048
cp -a /root/example.cert /etc/postfix/ssl/certs/dovecot.pem
cp -a /root/example.key /etc/postfix/ssl/private/dovecot.pem
Стига толкова за dovecot, нека продължим по нататък.Postfix
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 utf8mb4 COLLATE utf8mb4_unicode_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.3-pigeonhole-0.5.2.tar.gz
chown -R root.root dovecot-2.3-pigeonhole-0.5.2
cd dovecot-2.3-pigeonhole-0.5.2
./configure
make
make install
Активирате двата конфигурационни файла в dovecot и остава да си настроите филтъра след това. Филтъра може да бъде персонален и глобален за всички потребители. При мен използвам глобален ето как изглежда:
# cat /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.100.1.tar.gz
chown -R root.root clamav-0.100.1
cd clamav-0.100.1
./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. Те ще работят, ако сте следвали точно инструкциите.
Rspamd
Нека преди да инсталираме Rspamd, да инсталираме някои други модули, които би било добре да ги имаме. Внимание, ако вашият емайл сървър приема повече от 100,000 писма на ден, за да използвате Distributed Checksum Clearinghouse (DCC) трябва да си инсталирате локален сървър, защото писмата Ви няма да бъдат проверявани, когато надхвърлят бройката. Rspamd не може да работи с Razor и Pyzor ако помните предходните версии.
tar xzvf dcc.tar.Z
chown -R root.root dcc-1.3.163
cd dcc-1.3.163
./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"
Отваряме файла dcc_conf който се намира в директрорията /var/dcc/dcc_conf и променяме следните настройки:
DCCM_LOG_AT=NEVER
DCCM_REJECT_AT=MANY
DCCIFD_ENABLE=on
Продължаваме ...
wget https://git.rspamd.com/vstakhov/rspamd/archive/1.7.8.tar.gz
tar xzvf 1.7.8.tar.gz
cd rspamd
mkdir rspamd.build
cd rspamd.build
cmake ..
make
make install
Може да си инсталирате допълнително и Hyperscan. Има една малка особенност при компилирането на Rspamd, след версиите 2.2+ на Slackware. За да го компилирате успешно трябва да промените линкера. Вижте долният абзац.
cmake/Toolset.cmake
Switch LLD_PATH and GOLD_PATH conditions in cmake/Toolset.cmake, so it looks like:
if(NOT LINKER_NAME)
if(GOLD_PATH)
set(LINKER_NAME "gold")
elseif(LLD_PATH)
set(LINKER_NAME "lld")
else()
message(STATUS "Use generic 'ld' as a linker")
endif()
endif()
Well it builds if I pass LDFLAGS='-fuse-ld=lld' to the cmake environment with some weird errors in CMakeLTOTest (doesn't seem to be critical).
и след това може да замените реда:
cmake ..
с
cmake .. -DENABLE_HYPERSCAN=ON -DENABLE_LUAJIT=ON -DBUILD_SHARED_LIBS=YES -DENABLE_JEMALLOC=OFF
Сега трябва да конфигурираме Rspamd. Rspamd има много конфигурационни файлове, разработчците на проекта съветват да не се редактират основните файлове, а да използваме имената които са запазили за самостартиране. На сайта на rspamd, може да намерите докуметация за всички модули и как да ги пуснете. Разгледайте ги и си направете вашите настройки по начина който желаете. Може да копирате съдържанието на файловете по - долу, аз ще активирам някои от най - използваемите модули и ще се старая да оставям по някой коментар кое за какво е. Всички наши конфигурационни файлове отиват в /usr/local/etc/rspamd/local.d.
rspamadm pw
Enter passphrase:
$2$pajhfjsixyp7aj7n1gsje1t3ha4f46m1$4mxk5uwggdgdfgdddrtt445648t5ew4jjsn7zme9r5bd9fry
Копираме хеша и отваряме първия конфигурационен файл worker-controller.inc. Може да работи и през сокет, но няма да може да настроите проксито на уеб сървъра, за това съм го конфигурирал да слуша на tcp 127.0.0.1
count = 1;
password = "$2$pajhfjsixyp7aj7n1gsje1t3ha4f46m1$4mxk5uwggdgdfgdddrtt445648t5ew4jjsn7zme9r5bd9fry";
enable_password = "$2$bpwpkrfnzqohu8z5g3z61cbyyxf6t394$rqzji3cds7wq15k65onmf6gdzrd5nq3ndp1q441b9z11ptdo1fub";
#bind_socket = "/var/run/rspamd/rspamd.sock mode=0666 owner=nobody";
bind_socket = "127.0.0.1:11334";
secure_ip = "127.0.0.1";
#secure_ip = "::1";
static_dir = "${WWWDIR}";
worker-normal.inc
enabled = true;
worker-proxy.inc
milter = yes; # Enable milter mode
timeout = 120s; # Needed for Milter usually
bind_socket = "/var/run/rspamd/milter.sock mode=0666 owner=nobody";
#bind_socket = "127.0.0.1:11334"
upstream "local" {
default = yes;
self-scan = yes;
}
count = 4; # Do not spawn too many processes of this type
max_retries = 5; # How many times master is queried in case of failure
discard_on_reject = false; # Discard message instead of rejection
quarantine_on_reject = false; # Tell MTA to quarantine rejected messages
spam_header = "X-Spam"; # Use the specific spam header
reject_message = "Spam message rejected"; # Use custom rejection message
redis.conf
servers = "127.0.0.1";
antivirus.conf
clamav {
action = "reject";
attachments_only = true;
#max_size = 20000000;
type = "clamav";
# You can enable logging for clean messages
#log_clean = true;
# servers to query (if port is unspecified, scanner-specific default is used)
# can be specified multiple times to pool servers
# can be set to a path to a unix socket
# Enable this in local.d/antivirus.conf
servers = "127.0.0.1:3310";
}
dcc.conf
host = "/var/dcc/dccifd";
# Port is only required if `dccifd` listens on a TCP socket
# port = 1234
timeout = 5s;
mx_check.conf
enabled = true;
phishing.conf
openphish_enabled = true;
phishtank_enabled = true;
surbl.conf
redirector_hosts_map = "/usr/local/etc/rspamd/redirectors.inc";
url_reputation.conf
enabled = true;
url_tags.conf
enabled = true;
replies.conf
action = "no action";
Може да си генерирате и ключовете за домейните с rspamadm dkim_keygen
dkim_signing.conf
path = "/usr/local/etc/dkeys/$domain/$domain.$selector.key";
#path = "/var/db/rspamd/dkim/$domain.$selector.key";
selector = "mail";
Може да си инсталирате Razor2 и Pyzor, но смятам, че е безсмисленно. Ако все пак искате, може да разгледате документацията ТУК
Mailgraph
Ако искате да гледате графика на получените писма и да я изучавате, трябва да настройте http сървъра да проксира заявките. Ето примерна конфигурация за Apache, може да го реализирате с Nginx, lighthttpd и др.
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2.example.com
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:11334/
ProxyPassReverse / http://127.0.0.1:11334/
ServerName your.virtual.net
</VirtualHost>
Ако нямате контрол над DNS-a или не Ви се занимава, може да конфигурирате Apache с mod_rewrite и .htaccess .
RewriteEngine On
RewriteRule ^/rspamd/(.*) http://127.0.0.1:11334/$1 [P,L]
<Location /rspamd>
Options FollowSymLinks
Require all granted
</Location>
DomainKeys / DKIM
Разбира се, всички стартиращи файлове могат да се изтеглят от ТУК Това е готово, сега остава да генерираме ключовете на домейните и след това да ги добавим в нейм сървъра. Сега да генерираме ключовете. Обърнете внимание, че пътищата тъка са различни както описаните по - горе в настойките на rspamd. Трябва да сочат към едни и същи файлове. Оправете ги.
rspamadm dkim_keygen -k /var/db/rspamd/dkim/example.com.dkim.key -b 2048 -s dkim -d example.com
След като приключите ще видите низа който трябва да добавите в зоната на съответния домейн. Не забравяйте да смените сериала :)
dkim._domainkey IN TXT ( "v=DKIM1; k=rsa; "
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzGdxkFW0tIDYdNrGyj/J2Hff7N/9BEWE2qxMw6PBW5FhJRullZT9WNZOVrrXk1TsiBHRq8YQrSS1TfLbNV9PE7sE0vGx0eLgkiqnqLMwTy5Y9+jEbiNrddNR6v+TGHuMckYJO3JMjiROhMi/86Lv6P/rv2R/lxFldCeYQxa41/8LH+b3ZXWTLYRM6y2/2UpGz/wtknvA+DtO0rn+YuLuPrh+ftzmJb6i3g01XFgAO8ZzMLMdO/k7UJDX/Q6himKxVv2t3vSvS1MGqiWThXiU3WxhQED0zZUlkC5Lfx4BCo1h0v7fwZeMdu2NPOzlDBMDq5HRYgbwuFXTAmxSM7WRqQIDAQAB"
) ;
Ако искате можете да си оправите и 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=ТУКА ДОБАВЯМЕ КЛЮЧА;"
или редът трябва да изглежда така:
mail._domainkey.example.com. 1D IN TXT "v=DKIM1; k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5jCReX1jJhsC5pDRIqgk3UCkNPsfn8KBpjZCr8AxRDPmiXTAtDDEEfH1DTRBey8CMRglMvX9hMWdTReACK4a2o85pkhcbV/6XlOhUGiT/7Dv8/9yEu68eRTIbLEhbexXt3HEVY305FzuEnVmj5skWluXP98myz00pMJlYmL5oNQIDAQAB;"
Остава да настроим 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_unverified_recipient,
reject_unauth_pipelining,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
reject_unlisted_sender,
reject_unauth_destination,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client dnsbl-1.uceprotect.net,
reject_rbl_client bl.spamcop.net,
reject_rbl_client iadb.isipp.com,
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
##
## Local mail delivery to Dovecot via LMTP
##
#virtual_transport = dovecot
virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_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
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
Основната промяна е тука която е и целта за да може да използваме mailgraph. Ако искате да не използвате mailgraph може да намерите конфигурационните файлове в директорията от която може да ги изтеглите (описана е по на долу), те завършват с nograp разширение.
smtp inet n - n - - smtpd
-o smtpd_etrn_restrictions=reject
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_connection_count_limit=10
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/dovecot-lda -f ${sender} -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
submission inet n - n - - smtpd
-o smtpd_tls_dh1024_param_file=/etc/postfix/ssl/dhparams.pem
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o smtpd_sasl_security_options=noanonymous
-o smtpd_sasl_local_domain=$myhostname
# -o milter_macro_daemon_name=ORIGINATING
smtps inet n - n - - smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
Ако решите да променяте част от настройките, имайте на предвид, че може да забраните някои параметри, които сте разрешили в 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
chgrp -R postdrop /var/spool/postfix/public
chgrp -R postdrop /var/spool/postfix/maildrop
/usr/sbin/postfix set-permissions
postfix check
Ако всичко работи, трябва да обучите Rspamd да разпознава спам писмата и периодично да го обучавате, тъй като и спамерите не спят. Когато се съберат повече писма които не са спам, може лесно да го научите кои писма не са спам с командата: rspamc learn_ham directory
#!/bin/bash
spamfile=spam--`date '+%Y-%m-%d'`.gz
spamfile_unpacked=spam--`date '+%Y-%m-%d'`
wget http://artinvoice.hu/spams/$spamfile
gunzip $spamfile
./mb2md.py -i $spamfile_unpacked -o spam/
rspamc learn_spam spam/cur/
rm -r $spamfile_unpacked spam/
exit 0
След като се уверим, че файла mb2md.py има флаг +х стартираме шел скрипта: sh spamdl.sh