Почтовый сервер как у провайдера, часть 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: взлетаем
18 thoughts on “Почтовый сервер как у провайдера, часть 4: взлетаем”
Позвольте порекомендовать вам так же использовать exilog для мониторинга логов
Интересная штука, не знал про нее. А про логи напишу чуть позже, будет статья со скриптом для отрисовки графиков, работает где-то так:
Я так понимаю что эту статистику вы снимаете по snmp ?
.
Могу так же посоветовать Вам в качестве веб интерфейса для почты
AfterLogic Webmail Pro. Продукт платный но цены не кусаются,а качество работы намного выше и не сравнится ни с одним бесплатным продуктом аля RoundCube и тп
Нет, статистика собирается простым перловым парсером лога. Что до платных вебмейлов — ну не знаю. Мои пользователи пока не жаловались на куб, потому платить за что-то сейчас особого смысла нету. Мы же просто провайдер а не большая почтовая лавка :-))
Я данную статистику снимаю по snmp,и через cacti вывожу в график
если будет интересно обращайтесь. Буду рад помочь
Ну так регистрируйтесь и статью в студию! :-))
Сайт, правда, еще сырой совсем, но со временем докручу до приличного вида.
# chown -R exim:mail /var/mail
# chown -R exim:mail /var/spool
так делать нельзя
Вот подсказали как решить вот такую проблему
Исходящая почта, ваяем 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
А куда девается почта которая не прошла по рейтингу что это спам.?
не запускаеццо ексим (((
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
оч странная фишка… закоментил везде в конфигах
.ifdef
.endif
(т.е. выполнять без проверки на условие/галочки)
всё вроде заработало…. непонятно только почему…
может где-то что-то недособирал?
пробывали ли вы запускать данную связку из под jail с серыми ip?
при этом порты с интернет IP на хост машине пробрасывались бы в тюрьму.
это для случая когда интернет IP назначить тюрьме не получится, а обезопасить себя хочется 🙂
понятное дело что проще всего сразу дать интернет IP 🙂
ошибка
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
отвечу сам себе: опытным путем выяснилось что переменная acl_c_spam почему то, хотя не должна, не видна в acl_check_content вернее она там NULL, отсюда и ошибка в мускульном запросе, как вариант весь блок проверки спамассасина (.ifdef USE_SPAMD) вынес из acl_check_content в acl_check_rcpt, ошибка исчезла, но вот правильно ли это?
I’m extremely inspired together with your writing abilities and also with the layout in your weblog. Is that this a paid topic or did you modify it your self? Anyway stay up the excellent quality writing, it’s rare to look a great blog like this one nowadays..
имеется такая ошибка в логах:
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
что ему не нравится непойму
разобрался, порт 2703 нужно было открыть
ошибка
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