Почтовый сервер как у провайдера, часть 4: взлетаем

Все три предыдущие статьи мы готовились к большому и важному событию в жизни нашего почтового сервера — его запуску. Теперь, когда все сопутствующее мы настроили, самое время его запустить и проверить. Итак:

# chown -R exim:mail /var/log/exim
# chown -R exim:mail /var/mail
# chown -R exim:mail /var/spool
# rm /usr/sbin/sendmail
# ln -s /usr/local/sbin/exim /usr/sbin/sendmail
# rm /usr/bin/mailq
# ln -s /usr/local/sbin/exim /usr/bin/mailq

Проверим правильность нашей конфигурации exim, выполнив exim -bV. Должно вывести что-то вроде такого:

Exim version 4.71 #0 (FreeBSD 7.2) built 20-Jan-2010 17:40:29
Copyright (c) University of Cambridge, 1995 - 2007
Probably Berkeley DB version 1.8x (native mode)
Support for: crypteq iconv() use_setclassresources PAM Perl Expand_dlfunc OpenSSL Content_Scanning DKIM Old_Demime Experimental_SPF
Lookups: lsearch wildlsearch nwildlsearch iplsearch cdb dbm dbmnz dnsdb dsearch mysql nis nis0 passwd
Authenticators: cram_md5 dovecot plaintext spa
Routers: accept dnslookup ipliteral manualroute queryprogram redirect
Transports: appendfile/maildir/mailstore/mbx autoreply lmtp pipe smtp
Fixed never_users: 0
Size of off_t: 8
OpenSSL compile-time version: OpenSSL 0.9.8e 23 Feb 2007
OpenSSL runtime version: OpenSSL 0.9.8e 23 Feb 2007
Configuration file is /usr/local/etc/exim/configure

Если ошибок нет, идем дальше. К этому времени мы уже создали локальный домен и как минимум постмастера в нем, проверим распознавание локальной почты к нему (тут меняем [email protected] на созданного пользователя):

# exim -bt [email protected]
[email protected] -> /var/mail/jared.kiev.ua/jared
 transport = virtual_delivery

Если ошибок нет, проверим распознавание почты на внешние адреса:

# exim -bt [email protected]
[email protected]
 router = dnslookup, transport = remote_smtp
 host mail.messaging.microsoft.com [65.55.88.22] MX=10

Будем считать, что все прошло хорошо и можно пробовать отправлять настоящие тестовые письма локальному пользователю и себе любимому на внешний ящик:

# exim -v [email protected]
From: [email protected]
To: [email protected]
Subject: test

This is a test
^D
LOG: MAIN
 <= [email protected] U=root P=local S=363 T="test"
# delivering 1NZ4L1-0004bb-6B
LOG: MAIN
 => /var/mail/jared.kiev.ua/jared <[email protected]> R=virtual_domains T=virtual_delivery
LOG: MAIN
 Completed

# exim -v [email protected]
From: [email protected]
To: [email protected]
Subject: test 2

This is a test #2
^D
LOG: MAIN
  <= [email protected] U=root P=local S=362 T="test 2"
# delivering 1NZ4Sz-0004cT-DY
Connecting to mail.mail.ru [193.84.77.159]:25 from 123.123.123.123 ... connected
  SMTP<< 220 mail.mail.ru, ESMTP EXIM 4.71
  SMTP>> EHLO mail.mail.ru
  SMTP<< 250-mail.mail.ru Hello mail.mail.ru [123.123.123.123]
         250-SIZE 52428800
         250-PIPELINING
         250-AUTH PLAIN LOGIN CRAM-MD5
         250-STARTTLS
         250 HELP
  SMTP>> STARTTLS
  SMTP<< 220 TLS go ahead
  SMTP>> EHLO mail.mail.ru
  SMTP<< 250-mail.mail.ru Hello mail.mail.ru [123.123.123.123]
         250-SIZE 52428800
         250-PIPELINING
         250-AUTH PLAIN LOGIN CRAM-MD5
         250 HELP
  SMTP>> MAIL FROM:<[email protected]> SIZE=1396
  SMTP>> RCPT TO:<[email protected]>
  SMTP>> DATA
  SMTP<< 250 OK

Вот в принципе и все, дальше можно проверять разные варианты авторизиции, но, как показывает практика, эта секция, как правило, работает сразу, кому интересно — вот статья Wombat-a, а мы будем потихоньку запускаться:

# /usr/local/etc/rc.d/exim start

В итоге в /var/log/exim/mainlog должно появиться такое сообщение:

2010-01-24 17:09:58 exim 4.71 daemon started: pid=17604, -q30m, listening for SMTP on [123.123.123.123]:25

Теперь еще для пущей красоты добавим в файл /etc/crontab строку

0       0       *       *       *       /usr/local/sbin/exicyclog

Вуаля, мы взлетели. Спасибо за выбор нашей авиакомпании, желаю приятного полета! :-))

Почтовый сервер как у провайдера, часть 1: Exim

Почтовый сервер как у провайдера, часть 2: ClamAV, SpamAssassin, Dovecot

Почтовый сервер как у провайдера, часть 3: Vexim

Почтовый сервер как у провайдера, часть 4: взлетаем

Вам также может понравиться

Об авторе jared

17 комментариев

  1. Позвольте порекомендовать вам так же использовать exilog для мониторинга логов

  2. Интересная штука, не знал про нее. А про логи напишу чуть позже, будет статья со скриптом для отрисовки графиков, работает где-то так:

  3. Я так понимаю что эту статистику вы снимаете по snmp ?
    .
    Могу так же посоветовать Вам в качестве веб интерфейса для почты
    AfterLogic Webmail Pro. Продукт платный но цены не кусаются,а качество работы намного выше и не сравнится ни с одним бесплатным продуктом аля RoundCube и тп

  4. Нет, статистика собирается простым перловым парсером лога. Что до платных вебмейлов — ну не знаю. Мои пользователи пока не жаловались на куб, потому платить за что-то сейчас особого смысла нету. Мы же просто провайдер а не большая почтовая лавка :-))

  5. Я данную статистику снимаю по snmp,и через cacti вывожу в график
    если будет интересно обращайтесь. Буду рад помочь

  6. Ну так регистрируйтесь и статью в студию! :-))
    Сайт, правда, еще сырой совсем, но со временем докручу до приличного вида.

  7. Вот подсказали как решить вот такую проблему
    Исходящая почта, ваяем shadow bcc.
    В главный конфиг:

    system_filter = /etc/exim/systemfilter.txt
    system_filter_directory_transport = local_copy_outgoing

    И в него же в секцию транспортов:

    local_copy_outgoing:
    driver = appendfile
    delivery_date_add
    envelope_to_add
    return_path_add
    group = exim
    user = exim
    mode = 0660
    maildir_format = true
    create_directory = true

    Юзера и группу exim не забудь сменить на свои, если у тебя другие.

    Дальше в /etc/exim/systemfilter.txt:

    if $sender_address_domain is example.com
    then
    unseen save /var/mail/example.com/mailarchive/.${tr{$sender_address}{.}{_}}.outgoing/
    endif

    example.com меняй на свое. Вуаля.

    Теперь заворачиваем входящее через shadow transport.

    приводим транспорт address_directory к такому виду (это для maildir, а если используешь доставку на реальные аккаунты системы, то и транспорт local_delivery):

    address_directory:
    driver = appendfile
    create_directory
    delivery_date_add
    directory_mode = 770
    envelope_to_add
    maildir_format
    return_path_add
    shadow_transport = local_copy_incoming
    shadow_condition = ${if eq {$domain}{example.com}{yes}{no}}

    Ну и к транспортам добавляешь вот такой.

    local_copy_incoming:
    driver = appendfile
    directory = /var/mail/example.com/mailarchive/ .${tr {$local_part}{.}{_}}@${tr {$domain}{.}{_}}.incoming/
    delivery_date_add
    envelope_to_add
    return_path_add
    group = exim
    user = exim
    mode = 0660
    maildir_format = true
    create_directory = true

  8. не запускаеццо ексим (((

    exim -bV
    Exim version 4.76 #0 (FreeBSD 8.2) built 02-Sep-2011 22:15:20
    Copyright (c) University of Cambridge, 1995 — 2007
    Probably Berkeley DB version 1.8x (native mode)
    Support for: crypteq iconv() use_setclassresources PAM Perl Expand_dlfunc TCPwrappers OpenSSL Content_Scanning DKIM Old_Demime Experimental_SPF
    Lookups (built-in): lsearch wildlsearch nwildlsearch iplsearch cdb dbm dbmnz dnsdb dsearch mysql nis nis0 passwd
    Authenticators: cram_md5 dovecot plaintext spa
    Routers: accept dnslookup ipliteral manualroute queryprogram redirect
    Transports: appendfile/maildir/mailstore/mbx autoreply lmtp pipe smtp
    Fixed never_users: 0
    Size of off_t: 8
    2011-09-05 20:25:22 Exim configuration error in line 69 of /usr/local/etc/exim/configure:
    Unexpected end of configuration file: .endif missing

  9. оч странная фишка… закоментил везде в конфигах
    .ifdef
    .endif
    (т.е. выполнять без проверки на условие/галочки)
    всё вроде заработало…. непонятно только почему…
    может где-то что-то недособирал?

  10. пробывали ли вы запускать данную связку из под jail с серыми ip?
    при этом порты с интернет IP на хост машине пробрасывались бы в тюрьму.

    это для случая когда интернет IP назначить тюрьме не получится, а обезопасить себя хочется 🙂

    понятное дело что проще всего сразу дать интернет IP 🙂

  11. ошибка
    Warning: ACL «warn» statement skipped: condition test deferred: MYSQL: query failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘and users.domain_id = domains.domain_id’ at line 1

  12. отвечу сам себе: опытным путем выяснилось что переменная acl_c_spam почему то, хотя не должна, не видна в acl_check_content вернее она там NULL, отсюда и ошибка в мускульном запросе, как вариант весь блок проверки спамассасина (.ifdef USE_SPAMD) вынес из acl_check_content в acl_check_rcpt, ошибка исчезла, но вот правильно ли это?

  13. имеется такая ошибка в логах:
    Mar 18 13:26:34 ns spamd[39105]: razor2: razor2 check failed: Operation not permitted razor2: razor2 had unknown error during get_server_info at /usr/local/lib/perl5/site_perl/5.16/Mail/SpamAssassin/Plugin/Razor2.pm line 187, line 51. at /usr/local/lib/perl5/site_perl/5.16/Mail/SpamAssassin/Plugin/Razor2.pm line 330, line 51.
    Права на каталог razor
    ll /var/spool/mqueue/
    total 12
    drwx—— 2 exim mail 512 Mar 18 13:29 .spamassassin/
    drwxr-xr-x 2 exim mail 512 Mar 7 11:10 razor/
    -rw-r—r— 1 exim mail 446 Mar 7 11:11 razor-agent.log
    что ему не нравится непойму

  14. ошибка
    Warning: ACL «warn» statement skipped: condition test deferred: MYSQL: query failed: You have an error in your SQL syntax;…
    исчезла после переноса строки
    accept authenticated = *
    из 400-й части — в самый конец 410-й, сразу после обьявления переменной
    warn set acl_c_spam = $acl_m0
    решение найдено здесь — http://forum.lissyara.su/viewtopic.php?t=36700

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *