7 Настройка Courier
Укажем
Courier, чтобы он проводил аутентификацию
используя нашу базу данных MySQL. Редактируем
/etc/courier/authdaemonrc и изменяем значение
authmodulelist:
vi
/etc/courier/authdaemonrc
[...]
authmodulelist="authmysql"
[...]
Сделаем резервную копию файла
/etc/courier/authmysqlrc и очистим его содержимое:
cp
/etc/courier/authmysqlrc /etc/courier/authmysqlrc_orig cat
/dev/null > /etc/courier/authmysqlrc
Откроем
/etc/courier/authmysqlrc и вставим в него следующие
строки:
vi
/etc/courier/authmysqlrc
MYSQL_SERVER localhost
MYSQL_USERNAME mail_admin
MYSQL_PASSWORD mail_admin_password
MYSQL_PORT 0
MYSQL_DATABASE mail
MYSQL_USER_TABLE users
MYSQL_CRYPT_PWFIELD password
#MYSQL_CLEAR_PWFIELD password
MYSQL_UID_FIELD 5000
MYSQL_GID_FIELD 5000
MYSQL_LOGIN_FIELD email
MYSQL_HOME_FIELD "/home/vmail"
MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')
#MYSQL_NAME_FIELD
MYSQL_QUOTA_FIELD quota
Перезапустим Courier:
/etc/init.d/courier-authdaemon
restart /etc/init.d/courier-imap
restart /etc/init.d/courier-imap-ssl
restart /etc/init.d/courier-pop
restart /etc/init.d/courier-pop-ssl restart
Запустим
telnet
localhost pop3
чтобы
убедится, что наш сервер POP3 корректно
работает. Мы должны увидеть +OK Hello.
(введите quit для возврата в оболочку
Linux).
root@server1:/etc/postfix# telnet localhost pop3 Trying
127.0.0.1... Connected to localhost.localdomain. Escape
character is '^]'. +OK Hello there. quit +OK Better luck
next time. Connection closed by foreign
host. root@server1:/etc/postfix#
8 Изменяем /etc/aliases
Откроем
и изменим /etc/aliases. Сделаете так, что
postmaster указывать на root, а root указывает
на ваше имя пользователя или ваш почтовый
адрес, у вас должно получится примерно
так:
[...]
postmaster: root
root: postmaster@yourdomain.tld
[...]
или так (здесь administrator ваше имя
пользователя):
[...]
postmaster:
root
root:
administrator
[...]
После
изменения /etc/aliases, вы должны запустить
команду
newaliases
и перезапустить
Postfix:
/etc/init.d/postfix
restart
9 Установка amavisd-new, SpamAssassin и
ClamAV
Для
установки amavisd-new, spamassassin и clamav, выполним
следующую команду:
apt-get
install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2
unzoo libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop
pax
Настроим
amavisd-new. Конфигурационные файлы находятся
в директории /etc/amavis/conf.d . Ознакомитесь
с ними. Большинство из настроек в этих
файлах отлично выставлены, но все же мы
изменим три файла:
Во
первых включим ClamAV и SpamAssassin in
/etc/amavis/conf.d/15-content_filter_mode раскомментировав
@bypass_virus_checks_maps и @bypass_spam_checks_maps lines:
vi
/etc/amavis/conf.d/15-content_filter_mode
Файл
должен быть похож на этот:
use
strict;
#
You can modify this file to re-enable SPAM checking through
spamassassin
#
and to re-enable antivirus checking.
#
#
Default antivirus checking mode
#
Uncomment the two lines below to enable it back
#
@bypass_virus_checks_maps
= (
\%bypass_virus_checks, \@bypass_virus_checks_acl,
\$bypass_virus_checks_re);
#
#
Default SPAM checking mode
#
Uncomment the two lines below to enable it back
#
@bypass_spam_checks_maps
= (
\%bypass_spam_checks, \@bypass_spam_checks_acl,
\$bypass_spam_checks_re);
1;
# ensure a defined return
Вам следует посмотреть настройки спама
и действия со спамом в
/etc/amavis/conf.d/20-debian_defaults. Вам нет необходимости
менять настройки по умолчанию. Этот
файл содержит хорошие комментарии и
поэтому нет необходимости дополнительно
их разъяснять здесь:
vi
/etc/amavis/conf.d/20-debian_defaults
[...]
$QUARANTINEDIR = "$MYHOME/virusmails";
$quarantine_subdir_levels = 1; # enable quarantine dir hashing
$log_recip_templ = undef; # disable by-recipient level-0 log entries
$DO_SYSLOG = 1; # log via syslogd (preferred)
$syslog_ident = 'amavis'; # syslog ident tag, prepended to all messages
$syslog_facility = 'mail';
$syslog_priority = 'debug'; # switch to info to drop debug output, etc
$enable_db = 1; # enable use of BerkeleyDB/libdb (SNMP and nanny)
$enable_global_cache = 1; # enable use of libdb-based cache if $enable_db=1
$inet_socket_port = 10024; # default listening socket
$sa_spam_subject_tag = '***SPAM*** ';
$sa_tag_level_deflt = 2.0; # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 6.31; # add 'spam detected' headers at that level
$sa_kill_level_deflt = 6.31; # triggers spam evasive actions
$sa_dsn_cutoff_level = 10; # spam level beyond which a DSN is not sent
$sa_mail_body_size_limit = 200*1024; # don't waste time on SA if mail is larger
$sa_local_tests_only = 0; # only tests which do not require internet access?
[...]
$final_virus_destiny = D_DISCARD; # (data not lost, see virus quarantine)
$final_banned_destiny = D_BOUNCE; # D_REJECT when front-end MTA
$final_spam_destiny = D_BOUNCE;
$final_bad_header_destiny = D_PASS; # False-positive prone (for spam)
[...]
Последним отредактируем
/etc/amavis/conf.d/50-user добавив посередке
параметр $pax='pax'; :
vi
/etc/amavis/conf.d/50-user
use
strict;
#
#
Place your configuration directives here. They will override those
in
#
earlier files.
#
#
See /usr/share/doc/amavisd-new/ for documentation and examples of
#
the directives you can use in this file
#
$pax='pax';
#------------
Do not modify anything below this line -------------
1;
# ensure a defined return
После
этого добавим пользователя clamav в группу
amavis и презапустим amavisd-new и ClamAV:
adduser clamav
amavis /etc/init.d/amavis restart /etc/init.d/clamav-daemon
restart /etc/init.d/clamav-freshclam restart
Настроим Postfix так чтобы он получал всю
входящую почту через amavisd-new:
postconf
-e 'content_filter = amavis:[127.0.0.1]:10024'
postconf
-e 'receive_override_options = no_address_mappings'
Добавим
следующие строки в /etc/postfix/master.cf:
vi
/etc/postfix/master.cf
[...]
amavis
unix - - - - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
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_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o
receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_bind_address=127.0.0.1
Перезапустим Postfix:
/etc/init.d/postfix
restart
Выполним
netstat
-tap
убедимся, что Postfix (master) прослушивает 25
(smtp) и 10025 порт, а amavisd-new расположен на
10024:
root@server1:/etc/postfix#
netstat -tap
Active
Internet connections (servers and established)
Proto
Recv-Q Send-Q Local Address Foreign Address State
PID/Program name
tcp
0 0 localhost.localdo:10024 *:* LISTEN
15645/amavisd (mast
tcp
0 0 localhost.localdo:10025 *:* LISTEN
16677/master
tcp
0 0 localhost.localdo:mysql *:* LISTEN
6177/mysqld
tcp
0 0 *:www *:* LISTEN
5367/apache2
tcp
0 0 *:smtp *:* LISTEN
16677/master
tcp6
0 0 [::]:imaps [::]:* LISTEN
14020/couriertcpd
tcp6
0 0 [::]:pop3s [::]:* LISTEN
14088/couriertcpd
tcp6
0 0 [::]:pop3 [::]:* LISTEN
14051/couriertcpd
tcp6
0 0 [::]:imap2 [::]:* LISTEN
13983/couriertcpd
tcp6
0 0 [::]:ssh [::]:* LISTEN
4006/sshd
tcp6
0 52 server1.example.com:ssh 192.168.0.210%8191:3340
ESTABLISHED 4059/0
root@server1:/etc/postfix#
10 Установка Razor, Pyzor And DCC и
настройка SpamAssassin
Razor, Pyzor и DCC это спам фильтры, которые
используются совместно для фильтрации
в сети. Установим Razor и Pyzor
apt-get install razor pyzor
DCC не содержится в репозитории Ubuntu 8.04,
поэтому мы его установим так:
cd
/tmp
wget
http://launchpadlibrarian.net/11564361/dcc-server_1.3.42-5_i386.deb
wget
http://launchpadlibrarian.net/11564359/dcc-common_1.3.42-5_i386.deb
dpkg
-i dcc-common_1.3.42-5_i386.deb
dpkg
-i dcc-server_1.3.42-5_i386.deb
Скажем SpamAssassin использовать эти три
программы. Отредактируем
/etc/spamassassin/local.cf добавив несколько строчек
в него:
vi
/etc/spamassassin/local.cf
[...]
#dcc
use_dcc
1
dcc_path
/usr/bin/dccproc
#pyzor
use_pyzor
1
pyzor_path
/usr/bin/pyzor
#razor
use_razor2
1
razor_config
/etc/razor/razor-agent.conf
#bayes
use_bayes
1
use_bayes_rules
1
bayes_auto_learn
1
Мы должны включить плагин DCC в SpamAssassin.
Откроем /etc/spamassassin/v310.pre и раскомментируем
такую строчку loadplugin Mail::SpamAssassin::Plugin::DCC
:
vi
/etc/spamassassin/v310.pre
[...]
#
DCC - perform DCC message checks.
#
#
DCC is disabled here because it is not open source. See the DCC
#
license for more details.
#
loadplugin
Mail::SpamAssassin::Plugin::DCC
[...]
Можно
проверить настройки SpamAssassin выполнив:
spamassassin
—lint
Вывод
не должен содержать никаких ошибок.
Перезапускаем
amavisd-new:
/etc/init.d/amavis
restart
Обновим
набор правил для SpamAssassin следующим
образом:
sa-update
—no-gpg
Добавим
в cron задание, чтобы набор правил обновлялся
регулярно. Запустим
crontab
-e
чтобы
открыть редактор cron и добавим в него
следующее задание:
23
4 */2 * * /usr/bin/sa-update --no-gpg &> /dev/null
Это
позволит обновлять набор правил каждый
2 день в 4 часа 23 минуты.
11 Предупреждения
при превышении квоты
Для
того чтобы получать сообщения об
превышении квоты почтовых ящиков
пользователей сделаем так:
cd
/usr/local/sbin/
wget
http://puuhis.net/vhcs/quota.txt
mv
quota.txt quota_notify
chmod
755 quota_notify
Откроем
для редактирования файл
/usr/local/sbin/quota_notify отредактируем переменные
сверху. В конце файла находятся две
строчки где вы должны добавить % для
подписи:
vi
/usr/local/sbin/quota_notify
[...]
my
$POSTFIX_CF = "/etc/postfix/main.cf";
my
$MAILPROG = "/usr/sbin/sendmail -t";
my
$WARNPERCENT = 80;
my
@POSTMASTERS = ('postmaster@yourdomain.tld');
my
$CONAME = 'My Company';
my
$COADDR = 'postmaster@yourdomain.tld';
my
$SUADDR = 'postmaster@yourdomain.tld';
my
$MAIL_REPORT = 1;
my
$MAIL_WARNING = 1;
[...]
print "Subject: WARNING: Your mailbox is $lusers{$luser}%
full.\n";
[...]
print "Your mailbox: $luser is $lusers{$luser}%
full.\n\n";
[...]
Запустим
crontab
-e
чтоб
задать задание cron на выполнения скрипта
0 0 * * * /usr/local/sbin/quota_notify &> /dev/null
12 Проверка
Postfix
Чтоб
ы посмотреть слушает ли Postfix порты
SMTP-AUTH и TLS, выполним
telnet
localhost 25
После
установления подключения с вашим
почтовым сервером Postfix введем следующее:
ehlo
localhost
и
увидим следующие строки
250-STARTTLS
и
250-AUTH LOGIN PLAIN
если
все нормально:
root@server1:/usr/local/sbin#
telnet localhost 25
Trying
127.0.0.1...
Connected
to localhost.localdomain.
Escape
character is '^]'.
220
server1.example.com ESMTP Postfix (Ubuntu)
ehlo
localhost
250-server1.example.com
250-PIPELINING
250-SIZE
10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH
LOGIN PLAIN
250-AUTH=LOGIN
PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250
DSN
quit
221
2.0.0 Bye
Connection
closed by foreign host.
root@server1:/usr/local/sbin#
введем
quit
для
того чтобы вернутся в оболочку Linux.
13 Заполнение базы данных и
ее тестирование
Для
заполнения базы данных будем использовать
оболочку MySQL:
mysql
-u root -p
USE
mail;
По
крайней мере нам необходимо добавить
записи в таблицы domains и users:
INSERT
INTO `domains` (`domain`) VALUES ('example.com');
INSERT
INTO `users` (`email`, `password`, `quota`) VALUES
('sales@example.com', ENCRYPT('secret'), 10485760);
(Пожалуйста,
с осторожностью используйте синтаксис
ENCRYPT во втором объявлении INSERT для
шифрования пароля!)
Если
необходимо вставить данные в остальные
две таблицы, сделаем так:
INSERT
INTO `forwardings` (`source`, `destination`) VALUES
('info@example.com', 'sales@example.com');
INSERT
INTO `transport` (`domain`, `transport`) VALUES ('example.com',
'smtp:mail.example.com');
Выйдем
с оболочки MySQL набрав
quit;
Большинству
более удобно работать через графический
интерфейс с MySQL, для этого можно
использовать phpMyAdmin ( в данном примере
необходимо набрать в строке вашего
интернет браузера http://192.168.0.100/phpmyadmin/
или http://server1.example.com/phpmyadmin/) для
администрирования базы данных mail .
При создании пользователей, мы должны
использовать функцию ENCRYPT для шифрования
пароля.
Таблица
forwardings может иметь записи следующего
вида:
source
|
destination
|
|
info@example.com
|
sales@example.com
|
Перенаправляет
почту предначначеную для info@example.com
на sales@example.com
|
@example.com
|
thomas@example.com
|
Создает
ловушку для всех аккаунтов
thomas@example.com. Вся почта домена example.com
будет доставляться на адрес
thomas@example.com, исключая тех кто находится
в таблице users (например, если
sales@example.com существует в таблице users, то
письма направленные на sales@example.com будут
по прежнему доставляться sales@example.com).
|
@example.com
|
@anotherdomain.tld
|
Перенаправляет
письма всех пользователей направленные
на example.com на этих же пользователей в
домен anotherdomain.tld. Например, письмо для
thomas@example.com будет направленно на
thomas@anotherdomain.tld.
|
info@example.com
|
sales@example.com, billing@anotherdomain.tld
|
Перенапрваить
почту для info@example.com на двух и большее
количество адресатов. Все указанные
адресаты получат копию почтового
сообщения.
|
Таблица
transport может иметь записи такого вида:
domain
|
transport
|
|
example.com
|
:
|
Delivers emails for example.com locally. This is as if this record
would not exist in this table at all.
|
example.com
|
smtp:mail.anotherdomain.tld
|
Delivers all emails for example.com via smtp to the server
mail.anotherdomain.com.
|
example.com
|
smtp:mail.anotherdomain.tld:2025
|
Delivers all emails for example.com via smtp to the server
mail.anotherdomain.com, but on port 2025, not 25 which is the
default port for smtp.
|
example.com
|
smtp:[1.2.3.4] smtp:[1.2.3.4]:2025
smtp:[mail.anotherdomain.tld]
|
The square brackets prevent Postfix from doing lookups of the MX
DNS record for the address in square brackets. Makes sense for IP
addresses.
|
.example.com
|
smtp:mail.anotherdomain.tld
|
Mail for any subdomain of example.com is delivered to
mail.anotherdomain.tld.
|
*
|
smtp:mail.anotherdomain.tld
|
All emails are delivered to mail.anotherdomain.tld.
|
joe@example.com
|
smtp:mail.anotherdomain.tld
|
Emails for joe@example.com are delivered to
mail.anotherdomain.tld.
|
Посмотри
man
transport
чтобы
узнать больше деталей.
Запомните,
что порядок записей в таблице transport
очень важен! Записи считываются сверху
вниз.
Важно:
Postfix использует механизм кэширования
для транспортов, и чтобы изменения
сделанные в таблице transport вступили в
действия, вам необходимо выполнить
перезагрузку
postfix
reload
14 Отправка электронного
письма приветствия для создания почтового
каталога
При попытке
получения почты с нового почтового
ящика (через POP3/IMAP) вы получите сообщение
о том, что почтовый каталог не существует.
Почтовый каталог создается автоматически,
когда приходит первое письмо, поэтому
лучше всего отправлять письмо приветствия
после создания нового почтового ящика.
Установим
пакет mailx:
apt-get
install mailx
Для
отправки письма приветствия на
sales@example.com, мы сделаем так:
mailx
sales@example.com
Вам
будет предложено ввести тему, введите
ее (например, добро пожаловать!), нажмите
ENTER и в следующих строчках напишите
ваше сообщения. Когда закончим набирать
сообщения необходимо набрать CTRL+D и еще
раз ENTER:
root@server1:/usr/local/sbin#
mailx sales@example.com
Subject:
Welcome <-- ENTER
Welcome!
Have fun with your new mail account. <-- ENTER
<--
CTRL+D
Cc:
<-- ENTER
root@server1:/usr/local/sbin#
|