Мы — долго запрягаем, быстро ездим, и сильно тормозим.

Авторы
История сайта
Статистика
Архив
  CVSup
  EXIM & courier-imap
  postfix & courier-imap
  SQUID
  SAMBA
  IPsec
  C-ICAP
  exim & dbmail
  vpnd
  Samba как PDC
  pureftpd
  diskless
  gmirror
  SAMBA + LDAP
  IPSEC
  SAMBA+ACL
  Lightsquid
  LiveCD (+restore)
  1С:Предприятие 8.2
Карта сайта
поисковые слова
Личные настройки
Реклама
Друзья сайта


www.lissyara.su —> главная —> Архив —> exim & dbmail

Exim и dbmail

Автор: lissyara.


2007-07-20: Статья передвинута в архив как устаревшая. Также, ввиду глючности dbmail, юзайте dovecot, например по этой статье.

   Связка Exim и dbmail. Ну, для начала немного воды. Почему экзим? Да потому, что он мне просто нравится. Понятный конфиг, в виде единого файла, который при желании можно разбить на несколько, маленький, шустрый, надёжный. Чё ещё надо для счастья? :) Почему dbmail? Тут всё чуть сложней - в офисе был настроен имап (на тот момент courier-imap), но оутглюк не мог создавать свои папки прям в корне, ему надо было обязятельно написать INBOX... Другой косяк - если пытаешься настроить имап со второй машины на тот же ящик, то служебные папки уже не в виде дерева, а все во входящих... Короче через одно место всё. Начал перебирать всё что было в /usr/ports/mail. Перебрал не так много, но больше всех понравился dbmail - именно самой идеей - хранить письма в БД MySQL - открывается масса возможностей по управлению всем этим хозяйством. Ну и моих проблем по созданию папок в корне тут не существовало.
   Ставить начнём с dbmail, как обычно, из портов:
/usr/ports/>make search name='dbmail'
Port:   dbmail-mysql-2.0.7_2
Path:   /usr/ports/mail/dbmail
Info:   An SQL database-based mail system (POP3 and IMAP)
Maint:  mark_sf@kikg.ifmo.ru
B-deps: gettext-0.14.5_1 gmake-3.80_2 libiconv-1.9.2_1 mysql-client-4.1.18_1
R-deps: mysql-client-4.1.18_1
WWW:    http://www.dbmail.org/

/usr/ports/>
/usr/ports/>cd /usr/ports/mail/dbmail
/usr/ports/mail/dbmail/>make && make install && make clean

После установки рихтуем конфиг, предварительно скопировав его из дефолтового:
/usr/ports/mail/dbmail/>cd /usr/local/etc/
/usr/local/etc/>ls | grep dbmail
dbmail.conf-dist
/usr/local/etc/>cp dbmail.conf-dist dbmail.conf
/usr/local/etc/>

Должно получиться нечто подобное:
/usr/local/etc/dbmail.conf
# Це мой русифицированный, по самое небалуйся, конфик dbmail`а :)

# общая конфигурация dbmail
[DBMAIL]
# Данные для подключения к БД MySQL
host=localhost          # Хост на котором крутится MySQL
sqlport=3306            # Порт на котором работает MySQL. Необходим для
                        # соединения если БД не локальная, или локальная,
                        # но подерживает тока соединения по TCP/IP.
                        # А реально нужен тока если порт нестандартный...
sqlsocket=/tmp/mysql.sock       # Путь к локальному сокету. Нужен лишь
                        # в том случае, если БД на этом же сервере.
                        # Кстати - самый быстрый способ работы. По
                        # возможности, лучше пользоваться именно им.
user=dbmail             # Узер для работы с БД
pass=dbmail             # Пасворд юзера для работы с БД
db=dbmail               # Имя базы данных в которой будет храниться почта
POSTMASTER=admin@lissyara.su    # Адрес постмастера. Зачем нужен - не знаю.
                                # Видимо, слать какие-то оповещения...
TRACE_LEVEL=1           # Уровень детализации логов, для
                        # dbmail-util (это программы управления БД)


# А вот дальше местами могу только догадываться, к сожалению
# документация по dbmail очень и очень неполна...
[SMTP]
SENDMAIL=/usr/sbin/sendmail     # где находится исполняемый файл
                                # сендмыла (тока это не сендмыло вовсе -
                                # по этому пути давно уже лежит скрипт,
                                # имитирующий работу сендмайла для программ)
AUTO_NOTIFY=no                  # авто-уведомления? о чём?
AUTO_REPLY=no                   # авто-ответы? на что?
TRACE_LEVEL=1                   # уровень детализации логов для SMTP

# локальный протокол доставки почты. Когда разберусь -
# опишу подробней, а пока тока это - RFC2033
[LMTP]
EFFECTIVE_USER=mailnull         # Узер от которого работает LMTP
EFFECTIVE_GROUP=mail            # Сответственно группа в которой этот юзер
BINDIP=127.0.0.1                # IP который будет слушать LMTP. Звёздочка -
                                # все адреса, 127.0.0.1 тока локалхост.
PORT=24                         # Порт который слушать
NCHILDREN=20                    # Эти числа опредляют число процессов
MAXCHILDREN=10                  # на старте, и число соединений обслуживаемых
MINSPARECHILDREN=2              # каждым процессом. Тока он не очень их
MAXSPARECHILDREN=4              # слушает. Я ловил методом тыка...
MAXCONNECTS=10000               # Максимальное число обслуживаемых соединений
TIMEOUT=300                     # Таймаут простоя, после которого dbmail-lmtpd
                                # рвёт соедиение...
RESOLVE_IP=yes                  # Если `yes`, то dbmail-lmtpd резольвит
                                # IP адреса в DNS имена (в логи пишет)
TRACE_LEVEL=1                   # уровень детализации логов
MAX_ERRORS=500

# конфиг dbmail-pop3d
[POP]
EFFECTIVE_USER=mailnull         # Пользователь от которого пашет dbmail-pop3d
EFFECTIVE_GROUP=mail            # Группа в которой пашем
BINDIP=*                        # Адреса которые слушать. 127.0.0.1 поставить
                                # можно, но смысл это будет иметь только в
                                # случае если на машине организован WEB-интерфейс
                                # работающий по pop3. * - все адреса
PORT=110                        # Порт который слушает dbmail-pop3d
NCHILDREN=20                    # Эти числа опредляют число процессов
MAXCHILDREN=10                  # на старте, и число соединений обслуживаемых
MINSPARECHILDREN=2              # каждым процессом. Тока он не очень их
MAXSPARECHILDREN=4              # слушает. Я ловил методом тыка...
MAXCONNECTS=10000               # Максимальное число обслуживаемых соединений
TIMEOUT=300                     # Время простоя(секунд), через которое dbmail-pop3d
                                # разорвёт соединение с клиентом.
RESOLVE_IP=yes                  # Если `yes`, то dbmail-pop3d резольвит
                                # IP адреса в DNS имена (в логи пишет)
POP_BEFORE_SMTP=no              # Насколько я понял - требовать авторизацию по
                                # POP3 до отправки писем по SMTP
TRACE_LEVEL=1                   # уровень детализации логов

# Конфиг dbmail-imapd
[IMAP]
EFFECTIVE_USER=mailnull         # Пользователь от которого пашет dbmail-pop3d
EFFECTIVE_GROUP=mail            # Группа в которой пашем
BINDIP=*                        # Аналогично предыдущей секции - pop3
PORT=143                        # Порт на котором работаем
NCHILDREN=20                    # Эти числа опредляют число процессов
MAXCHILDREN=10                  # на старте, и число соединений обслуживаемых
MINSPARECHILDREN=2              # каждым процессом. Тока он не очень их
MAXSPARECHILDREN=4              # слушает. Я ловил методом тыка...
MAXCONNECTS=10000               # Максимальное число обслуживаемых соединений
TIMEOUT=4000                    # Таймаут простоя до того как dbmail-imapd
                                # закроет соединение
RESOLVE_IP=yes                  # Резольвить IP в DNS-имена (для логов)
IMAP_BEFORE_SMTP=no             # Требовть авторизацию по IMAP до SMTP
TRACE_LEVEL=1                   # уровень детализации логов

По конфигу пояснений не даю, по-моему я его достаточно прокомментировал. Затем создаём в базу данных, пользователя, и заливаем таблицы.
/usr/home/lissyara/>cd /usr/local/share/dbmail/sql/
/usr/local/share/dbmail/sql/>ls
create_tables.mysql                     migrate_from_1.x_to_2.0.mysql
create_tables_innoDB.mysql              migrate_from_1.x_to_2.0_innodb.mysql
/usr/local/share/dbmail/sql/>mysql --user=dbmail \
? --password=dbmail --database=dbmail \
? < create_tables_innoDB.mysql
ERROR 1067 (42000) at line 180: Некорректное значение по умолчанию для 'since'
/usr/local/share/dbmail/sql/>

Косяк. У меня на тестовой машине MySQL5.0 и поэтому пришлось поправить строку
since datetime default '0' not null,

На такую:
since datetime default '0000-00-00 00:00:00' not null,

После чего пробуем запустить dbmail:
/usr/local/etc/rc.d/>ls | grep dbmail
dbmail-imapd.sh
dbmail-lmtpd.sh
dbmail-pop3d.sh
/usr/local/etc/rc.d/>
/usr/local/etc/rc.d/>echo '' >> /etc/rc.conf
/usr/local/etc/rc.d/>echo 'dbmail_imapd_enable="YES"' >> /etc/rc.conf
/usr/local/etc/rc.d/>echo 'dbmail_pop3d_enable="YES"' >> /etc/rc.conf
/usr/local/etc/rc.d/>./dbmail-imapd.sh start
Starting dbmail_imapd.
/usr/local/etc/rc.d/>./dbmail-pop3d.sh start
Starting dbmail_pop3d.
/usr/local/etc/rc.d/>

Я забыл поменять дефолтовые значения по количеству запускаемых демонов, и поэтому на моей тестовой машине (AMD K6-II 550MHz 256RAM) не хватило ресурсов на запуск такого количества процессов. И получил следующую ошибку в логах:
Feb 23 21:49:08 lissyara dbmail/pop3d[74405]: scoreboard_delete(): delete shared mem segment failed
Feb 23 21:49:08 lissyara dbmail/pop3d[74413]: scoreboard_delete(): delete shared mem segment failed
Feb 23 21:49:08 lissyara dbmail/pop3d[74398]: scoreboard_delete(): delete shared mem segment failed
Feb 23 21:49:08 lissyara dbmail/pop3d[74408]: scoreboard_delete(): delete shared mem segment failed
Feb 23 21:49:08 lissyara dbmail/pop3d[73623]: scoreboard_delete(): delete shared mem segment failed

После снижения числа процессов всё стало нормально. Вообще число процессов надо рассчитывать исходя из реальной нагрузки на сервер - например у меня всего 4 пользователя pop3 - поэтому я запускаю всего 4 таких процесса - а вот imap - 25 человек, и соответственно у меня 30 процессов (у народа привычка оставлять почтового клиента открытым, чтоб он постоянно проверял почту - и 25 соединений одновременно - у меня нормальное явление...) Проверям, всё ли запустилось:
/usr/home/lissyara/>ps -jax | grep db
root     90499     1 90498 90498   0 S   ??  0:00,01 /usr/local/sbin/dbmail-imapd
mailnull 90501 90499 90498 90498   0 S   ??  0:00,07 /usr/local/sbin/dbmail-imapd
mailnull 90504 90501 90498 90498   0 S   ??  0:00,01 /usr/local/sbin/dbmail-imapd
mailnull 90506 90501 90498 90498   0 S   ??  0:00,01 /usr/local/sbin/dbmail-imapd
mailnull 90508 90501 90498 90498   0 S   ??  0:00,01 /usr/local/sbin/dbmail-imapd
root     90525     1 90524 90524   0 S   ??  0:00,01 /usr/local/sbin/dbmail-pop3d
mailnull 90526 90525 90524 90524   0 S   ??  0:00,07 /usr/local/sbin/dbmail-pop3d
mailnull 90527 90526 90524 90524   0 S   ??  0:00,01 /usr/local/sbin/dbmail-pop3d
mailnull 90528 90526 90524 90524   0 S   ??  0:00,01 /usr/local/sbin/dbmail-pop3d
mailnull 90529 90526 90524 90524   0 S   ??  0:00,01 /usr/local/sbin/dbmail-pop3d
lissyara 90531 57891 90530 57891   2 R+  p1  0:00,01 grep db
/usr/home/lissyara/>

Ну и пояснение - почему не запускал dbmail-lmtpd - я им не пользуюсь, и плохо представляю что это такое... Надо будет найти время и прочитать RFC... Для обслуживания БД используется специальная утилита, которая удаляет сообщения помеченные на удаление, проверяет целостность базы и т.п. Для её использования я настругал такой скрипт:
#!/bin/sh -xv

util="/usr/local/sbin/dbmail-util"

#${util} -c
${util} -t -y
${util} -u -y
${util} -r -y
${util} -d -y
${util} -p -y

Который и запускаю раз в неделю - в выходные, ночью, по крону.
   Далее - ставим экзим. Самый главный косяк - приходится рихтовать Makefile чтобы сделать нужные опции:
/usr/ports/mail/exim/Makefile (показаны изменённые опции)
WITHOUT_IPV6=           yes
WITH_CONTENT_SCAN=      yes
WITH_DEFAULT_CHARSET?=  koi8-r
#LOGDIR?=       /var/log/exim
LOG_FILE_PATH?= syslog

После чего собираем и ставим его (это не ошибка, правим Makefile в одной директории а ставим из другой. Если интересно почему - посмотрите Makefile и там, и там.)
/usr/ports/>cd /usr/ports/mail/exim-mysql
/usr/ports/mail/exim-mysql/>make && make install && make clean

Затем правим файл /etc/mail/mailer.conf до такого состояния
# Конфиг локальной отправки мыла.

sendmail        /usr/local/sbin/exim
send-mail       /usr/local/sbin/exim
mailq           /usr/local/sbin/exim -bp
newaliases      /usr/local/sbin/exim -bi
hoststat        /usr/local/sbin/exim
purgestat       /usr/local/sbin/exim

И конфиг экзима (/usr/local/etc/exim/configure) до такого:

# моя конфига экзма. Будь проклят тот день,
# когда мне пришла в голову мысль подписать
# русские поясния ко всем пунктам! :) Хоть и
# делал я это в первую очередь для себя -
# чтоб лучше понять его, но работа эта оказалась
# слишком масштабная и неблагодарная...


# Имя хоста. Используется в EHLO.
# Фигурирует в других пунктах, если они не заданы -
# типа qualify_domain и прочих..
# Если тут ничё не установлено (строка закомметрована)
# то используется то, что вернёт функция uname()
primary_hostname = mx.lissyara.su

# Вводим данные для подключения к MySQL серверу.
# словечко `hide`, вначале, означает, что при
# вызове проверки конфига командой
# exim -bV config_file эти данные не будут отображаться.
# Если без него - то будут показаны... Формат записи:
# хост/имя_бд/пользователь/пароль
hide mysql_servers = localhost/dbmail/dbmail/dbmail

# Делаем список локальных доменов. Далее этот
# список будет фигурировать в виде +local_domains
# В данном случае домены выбираются из БД MySQL. Также
# можно их просто перечислить через двоеточие. Есть интересная
# возможность, можно указать юзер@[хост] - lissyara@[222.222.4.5]
domainlist local_domains = ${lookup mysql{SELECT `domainname` \
                            FROM `domains` WHERE \
                            `domainname`='${domain}' AND \
                            (`type`='LOCAL' OR `type`='VIRTUAL')}}

# делаем список доменов с которых разрешены релеи.
# Далее этот список будет в виде +relay_to_domains
# Можно использовать самволы подстановки, типа:
# .... = *.my.domen.su : !spam.my.domen.su : first.su
# тогда пропускается всё, что похоже на *.my.domen.su, но
# от spam.my.domen.su релеится почта не будет.
domainlist relay_to_domains = ${lookup mysql{SELECT `domainname` \
                                FROM `domains` WHERE \
                                `domainname`='${domain}' \
                                AND `type`='RELAY'}}

# Составляем список хостов с которых разрешён неавторизованый
# релей. Обычно в нём находятся локальные сети, и локалхост...
# ЛокалХост в двух видах был внесён сознательно - пару раз
# сталкивался с кривым файлом /etc/hosts - результатом было
# непонимание `localhost` но пониманием 127.0.0.1/8
hostlist   relay_from_hosts = localhost:127.0.0.1/8:192.168.20.0/24

# Вводим названия acl`ов для проверки почты. (В общем-то, это
# необязательно, если вы делаете открытый релей, или хотите
# принимать вообще всю почту с любого хоста для любых
# получателей... Тока потом не жалуйтесь что у Вас спам
# и провайдер выкатывает немеряный счёт :))
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data

# Прикручиваем антивирус - при условии, что exim собран
# с его поддержкой. В качестве антивиря юзаем ClamAV,
# ибо - ПО должно быть свободным! :)
# Итак, указываем местоположение сокета clamd.
av_scanner = clamd:/var/run/clamav/clamd

# Адрес куда слать на проверку спама (SpamAssasin), но я
# это не юзаю. Не так много у меня спама...
# spamd_address = 127.0.0.1 783

# Имя домена добавляемое для локальных отправителей (реальных
# юзеров системы) т.е. почта отправляемая от root, будет от
# root@домен_указанный_здесь. Если пункт незадан, то используется
# имя хоста из `primary_hostname`. Логичней было бы написать здесь
# lissyara.su, но мне удобней иначе:
qualify_domain = mx.lissyara.su

# Имя хоста для ситуации, обратной предыдущей, - это имя домена
# добавляемое к почте для системных юзеров, ну и вообще для почты
# пришедшей на адрес типа `root`, `lissyara`, & etc... Если этот
# пункт незадан то используется значение полученное из
# предыдущего пункта - `qualify_domain`
qualify_recipient = mx.lissyara.su

# А это как раз кусок вышеописанного анахронизма - про почту в
# виде user@[222.222.222.222] - принимать её или нет. По дефолту
# (когда строка закомментирована) значение - false. Если захотите
# поставить true то надо будет добавить в список доменов
# комбинацию @[] - она означает `все локальные адреса`
allow_domain_literals = false

# Пользователь от которого работает exim
exim_user = mailnull

# группа в кторой работает exim
exim_group = mail

# запрещаем работу доставки под юзером root - в целях безопасности
never_users = root

# Проверяем соответствие прямой и обратной зон для всех хостов.
# Тока зачем это нужно - даже и незнаю... Спам на этом не режется...
# Зато возможны проблемы - если сервер зоны скажет `сервер файлед`
# то почту от этого хоста Вы не получите :)
host_lookup = *

# Тоже анахронизм (на самом деле, не такой уж анахронизм, но все давно
# забили на ident и закрыли файрволлом tcp:113...) Это проверка - Ваш
# хост спрашивает у удалённого, с которого было подключение, а кто
# собстно ко мне подключился на такой-то порт? Если на удалённом хосте
# работает identd - он может ответить (а может и не ответить - как
# настроить), скажет UID пользователя от которого установлено
# соединение, тип ОС, и имя пользователя. Теперь, понимаете, почему
# у всех оно зарублено и файрволлами позакрыто? :) Это же палево :)
# Тока на мой взгляд, если на сервере всё настроено правильно -
# то вовсе это и не страшно.
# Короче - если хостс поставить * то будет проверять все. Таймаут -
# если поставить 0 то не будет ждать ответа ни от кого. По
# вышеописанным причинам - отключаем
#rfc1413_hosts = *
rfc1413_query_timeout = 0s

# По дефолту, экзим отфутболивает все `неквалифицированные` адреса,
# состоящие тока из локальной части. Для того чтобы разрешить такие письма
# определённых хостов используются эти директивы:
# для `неквалифицированных` отправителей
sender_unqualified_hosts = +relay_from_hosts
# для `неквалифицированных` получателей
recipient_unqualified_hosts = +relay_from_hosts

# Интересный пункт, тока я не вполне понимаю его логику.
# Позволяет выполнять что-то типа - пришло сообщение на
# локальный ящик user%test.su@lissyara.su и
# переправляет его на user@test.su. Делается это для
# перечисленного списка доменов (* - все):
# percent_hack_domains = *

# Если сообщение было недоставлено, то генерится соощение
# об ошибке. Если сообщение об ошибке не удалось доставить
# то оно замораживается на указанный в этом пункте срок,
# после чего снова попытка доставить его. При очередной
# неудаче - сообщение удаляется.
ignore_bounce_errors_after = 45m

# Замороженные сообщения, находящиеся в очереди, дольше
# указанного времени удаляются и генерится сообщение
# об ошибке (при условии, что это не было недоставленное
# сообщение об ошибке :))
timeout_frozen_after = 15d

# собсно на этом штатный конфиг кончился, но
# меня-то это не устраивает... Поэтому пошли пункты,
# почёрпнутые из других источников.

# список адресов, через запятую, на которые засылаются
# сообщения о замороженных сообщениях (о замороженых
# уведомлениях о заморозке, сообщения не генерятся. - я
# надеюсь эта строка понятна :))
freeze_tell = admin@lissyara.su

# Список хостов, почта от которых принимается, несмотря
# на ошибки в HELO/EHLO
helo_accept_junk_hosts = 192.168.20.0/24

# Через какое время повторять попытку доставки
# замороженного сообщения
auto_thaw = 1h

# Приветствие сервера
smtp_banner = "$primary_hostname, ESMTP EXIM $version_number"

# Максимальное число одновременных подключений по
# SMTP. Рассчитывать надо исходя из нагрузки на сервер
smtp_accept_max = 50

# максимальное число сообщений принимаемое за одно соединение
# от удалённого сервера (или пользователя). C числом 25
# я имел проблемы тока один раз - когда у меня три дня лежал
# инет и после его подъёма попёрли мессаги. Но у меня не так
# много почты - всего 30 пользователей.
smtp_accept_max_per_connection = 25

# чё-то про логи и борьбу с флудом - я так понимаю -
# максимальное число сообщений записываемых в логи
smtp_connect_backlog = 30

# максимальное число коннектов с одного хоста
smtp_accept_max_per_host = 20

# Ход ладьёй - для увеличения производительности,
# директория `spool` внутри, разбивается на
# директории - это ускоряет обработку
split_spool_directory = true

# Если у сообщения много адресатов на удалённых хостах,
# то запускатеся до указанного числа максимально число
# параллельных процессов доставки
remote_max_parallel = 15

# при генерации сообщения об ошибке прикладывать
# не всё сообщение, а кусок (от начала) указанного
# размера (иногда полезно и целиком - в таком случае
# просто закомментируйте эту строку)
return_size_limit = 70k

# размер сообщения. У меня стоит относительно большой
# размер (`относительно` - потому, что на большинстве
# хостов оно ограничено 2-5-10мб, либо стоит анлим.)
message_size_limit = 24M

# разрешаем неположенные символы в HELO (столкнулся
# с этим случайно - имя фирмы состояло из двух слов
# и какой-то раздолбай домен обозвал my_firme_name
# прям с подчёркиваниями... Виндовые клиенты при
# соединении радостно рапортовали о себе
# `vasya.my_firme_name` ну а экзим их футболил :))
helo_allow_chars = _

# Принудительная синхронизация. Если отправитель
# торопится подавать команды, не дождавшись ответа,
# то он посылается далеко и надолго :) Немного,
# спам режется.
smtp_enforce_sync = true

# Выбираем, что мы будем логировать
# + - писать в логи,
# - - Не писать в логи.
# +all_parents - все входящие?
# +connection_reject - разорваные соединения
# +incoming_interface - интерфейс (реально - IP)
# +lost_incoming_connections - потеряные входящие
# соединения
# +received_sender - отправитель
# +received_recipients - получатель
# +smtp_confirmation - подтверждения SMTP?
# +smtp_syntax_error - ошибки синтаксиса SMTP
# +smtp_protocol_error - ошибки протокола SMTP
# -queue_run - работа очереди (замороженные мессаги)
log_selector = \
    +all_parents \
    +connection_reject \
    +incoming_interface \
    +lost_incoming_connection \
    +received_sender \
    +received_recipients \
    +smtp_confirmation \
    +smtp_syntax_error \
    +smtp_protocol_error \
    -queue_run

# Убираем собственную временную метку exim`a из логов, её ставит
# сам syslogd - нефига дублировать
syslog_timestamp = no



### конфигурация ACL для входящей почты
begin acl

# Эти правила срабатывают для каждого получателя
acl_check_rcpt:

  # принимать сообщения которые пришли с локалхоста,
  # не по TCP/IP
  accept  hosts = :

  # Запрещаем письма содержащие в локальной части
  # символы @; %; !; /; |. Учтите, если у вас было
  # `percent_hack_domains` то % надо убрать.
  # Проверяются локальные домены
  deny    message       = "Недопустимые символы в адресе"
          domains       = +local_domains
          local_parts   = ^[.] : ^.*[@%!/|]

  # Проверяем недопустимые символы для
  # нелокальных получателей:
  deny    message       = "Недопустимые символы в адресе"
          domains       = !+local_domains
          local_parts   = ^[./|] : ^.*[@%!] : ^.*/\\.\\./

  # Принимаем почту для постмастеров локальных доменов без
  # проверки отправителя (я закомментировал, т.к. это -
  # основной источник спама с мой ящик).

  accept  local_parts   = postmaster
          domains       = +local_domains

  # Запрещщаем, если невозможно проверить отправителя
  # (отсутствует в списке локальных пользователей)
  # У себя я это закоментил, по причине, что некоторые
  # железяки (принтеры, & etc) и программы (Касперский, DrWEB)
  # умеют слать почту, в случае проблем но не умеют ставить
  # нужного отправителя. Такие письма эта проверка не пускает.
  require verify        = sender

  # Запрещщаем тех, кто не обменивается приветственными
  # сообщениями (HELO/EHLO)
  deny    message       = "HELO/EHLO обязано быть по SMTP RFC"
          condition     = ${if eq{$sender_helo_name}{}{yes}{no}}

  # Принимаем сообщения от тех, кто аутентифицировался:
  # Вообще, большинство конфигов в рунете - это один и тот же
  # конфиг написанный Ginger, в котором этот пункт расположен
  # внизу. Но при таком расположении рубятся клиенты с adsl,
  # ppp, и прочие зарезанные на последующих проверках. Но это
  # жа неправильно! Этом мои пользователи из дома! Потому
  # я это правило расположил до проверок.
  accept  authenticated = *

# Рубаем нах, тех, кто подставляет свой IP в HELO
  deny    message       = "Не надо пихать свой IP в качестве HELO!"
          # все хосты кроме тех, что в relay_from_hosts
          hosts         =  * : !+relay_from_hosts
          condition     = ${if eq{$sender_helo_name}{$sender_host_address} \
                          {true}{false}}

# Рубаем тех, кто в HELO пихает мой IP (2500 за месяц! Рехнуться можно..)
  deny    condition     = ${if eq{$sender_helo_name}{$interface_address}{yes}{no}}
          hosts         = !127.0.0.1 : !localhost : *
          message       = "Это мой IP-адрес! Пшёл прочь!"

  # Рубаем хосты типа *adsl*; *dialup*; *pool*;....
  # Нормальные люди с таких не пишут. Если будут
  # проблемы - уберёте проблемный пункт (у меня клиенты
  # имеют запись типа asdl-1233.zone.su - я ADSL убрал...)
  deny    message       = "Не нравится мне Ваш хост..."
          condition     = ${if match{$sender_host_name} \
                               {adsl|dialup|pool|peer|dhcp} \
                               {yes}{no}}

  # Рубаем тех, кто в блэк-листах. Серваки перебираются
  # сверху вниз, если не хост не найден на первом, то
  # запрашивается второй, и т.д. Если не найден ни в одном
  # из списка - то почта пропускается.
  deny    message       = "Ваш хост в блэклисте - $dnslist_domain"
          dnslists      = opm.blitzed.org : \
                          proxies.blackholes.easynet.nl : \
                          cbl.abuseat.org : \
                          bl.spamcop.net : \
                          bl.csma.biz : \
                          dynablock.njabl.org
                          
  # Задержка. (это такой метод борьбы со спамом,
  # основанный на принципе его рассылки) На этом рубается
  # почти весь спам. Единственно - метод неприменим на 
  # реально загруженных MTA - т.к. в результате ему
  # приходится держать много открытых соединений.
  # но на офисе в сотню-две человек - шикарный метод.
  #
  # более сложный вариант, смотрите в статье по exim и 
  # курьер имап. Т.к. там метод боле умный (просто правил
  # больше :), то можно и на более загруженные сервера ставить)
  warn
        # ставим дефолтовую задержку в 20 секунд
        set acl_m0 = 20s
  warn
        # ставим задержку в 0 секунд своим хостам и 
        # дружественным сетям (соседняя контора :))
        hosts = +relay_from_hosts : 213.224.195.224/28
        set acl_m0 = 0s
  warn
        # пишем в логи задержку (если оно вам надо)
        logwrite = Delay $acl_m0 for $sender_host_name \
[$sender_host_address] with HELO=$sender_helo_name. Mail \
from $sender_address to $local_part@$domain.
        delay = $acl_m0

  # Проверка получателя в локальных доменах.
  # Если не проходит, то проверяется следующий ACL,
  # и если непрошёл и там - deny
  accept  domains       = +local_domains
          endpass
          message       = "В этом домене нет такого пользователя"
          verify        = recipient

  # Проверяем получателя в релейных доменах
  # Опять-таки если не проходит -> следующий ACL,
  # и если непрошёл и там - deny
  accept  domains       = +relay_to_domains
          endpass
          message       = "Моя сервера не знать маршрут на этот хост..."
          verify        = recipient

  # Разрешаем почту от доменов в списке relay_from_hosts
  accept  hosts         = +relay_from_hosts

  # Если неподошло ни одно правило - чувак явно ищет
  # открытый релей. Пшёл прочь. :)
  deny    message       = "Свободен. Это тебе не ОпенРелей."




# Тут идут ACL проверяющие содержимое (тело) письма.
# Без них будут пропускаться все сообщения.

acl_check_data:

  # Проверяем письмо на вирусы
  deny malware = *
  message = "В письме вирус - $malware_name"

  # Если есть необходимость - тут проверки на спам

  # Пропускаем остальное
  accept



# чё делаем с почтой
begin routers

# Поиск маршрута к хосту в DNS. Если маршрут не найден в DNS -
# то это `унроутабле аддресс`. Не проверяются локальные
# домены, 0.0.0.0 и 127.0.0.0/8
dnslookup:
  driver = dnslookup
  domains = ! +local_domains
  transport = remote_smtp
  ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
  no_more

# Всё что осталось - это локальные адресаты.
# Доставляем почту в dbmail
dbmailuser:
  driver = accept
  condition = ${lookup mysql{SELECT `alias_idnr` FROM \
  `dbmail_aliases` WHERE \
  `alias`='${quote_mysql:$local_part@$domain}' OR \
  `alias`='${quote_mysql:@$domain}'}{yes}{no}}
  transport = dbmail_delivery


# начинаются транспорты - как доставляем почту
begin transports

# Доставка на удалённые хосты - по SMTP
remote_smtp:
  driver = smtp

# Доставка локальным адресатам - в dbmail
dbmail_delivery:
  driver = pipe
  check_string =
  command = /usr/local/sbin/dbmail-smtp -d ${pipe_addresses}
  group = mail
  message_prefix = ""
  message_suffix = ""
  path="/bin:/sbin:/usr/local/bin:/usr/local/sbin"
# Имя программы
address_pipe:
  driver = pipe
  return_output

# Транспорт для автоответов
address_reply:
  driver = autoreply



# Начинаются повторы недоставленных писем.
begin retry

# Этот кусок я не трогал. Думаю разработчики лучше знают,
# какие тут должны быть цифирьки. Если же вы это знаете
# лучше их - меняйте. Хотя... А какого, если Вы такой
# умный, читаете этот мануал? Может ну, их, цифирьки, а? :)
# Address or Domain  Error   Retries
# -----------------  -----   -------
*                    *       F,2h,15m; G,16h,1h,1.5; F,4d,6h


# преобразование адресов. У меня такого нету.
begin rewrite


# Секция авторизации при отправке писем. Ввиду того,
# что почтовых клиентов много, и все всё делают
# по-своему, то и механизмов авторизации три...
begin authenticators

# А вот по какому методу авторизуется оутглюк - я уже и
# не помню... Хотя в своё время долго ковырялся,
# пока настроил... Толь plain, толь login...
auth_plain:
  driver = plaintext
  public_name = PLAIN
  server_condition = ${lookup mysql{SELECT `user_idnr` FROM \
                     `dbmail_users` WHERE `userid` = \
                     '${quote_mysql:$1}' AND `passwd` = \
                     '${quote_mysql:$2}'}{yes}{no}}
  server_prompts = :
  server_set_id = $2

# Вроде по этому оутглюк, а по предыдущему нетскейп.
auth_login:
  driver = plaintext
  public_name = LOGIN
  server_condition = ${lookup mysql{SELECT `user_idnr` FROM \
                     `dbmail_users` WHERE `userid` = \
                     '${quote_mysql:$1}' AND `passwd` = \
                     '${quote_mysql:$2}'}{yes}{no}}
  server_prompts = Username:: : Password::
  server_set_id = $1

# А так авторизуется "Летучая Мышь" - TheBat!
auth_cram_md5:
  driver = cram_md5
  public_name = CRAM-MD5
  server_secret = ${lookup mysql{SELECT `passwd` FROM \
                        `dbmail_users` WHERE `userid` \
                        = '${quote_mysql:$1}'}{$value}fail}
  server_set_id = $1

# Фсё. Конфиг кончился. Два дня убил.
# &copy; lissyara       2006-02-25, 01:19

Комментировать не буду и этот конфиг. По моему - вполне достаточно комментов... Теперь создаём таблицу с доменами такой структуры, и примерно такого содержания:
-- 
-- БД: `dbmail`
-- 

-- --------------------------------------------------------

-- 
-- Структура таблицы `domains`
-- 

CREATE TABLE `domains` (
  `unic_id` int(8) unsigned NOT NULL auto_increment,
  `domainname` varchar(128) NOT NULL default '',
  `type` enum('LOCAL','VIRTUAL','RELAY') NOT NULL default 'LOCAL',
  PRIMARY KEY  (`unic_id`)
) TYPE=MyISAM AUTO_INCREMENT=9 ;

-- 
-- Дамп данных таблицы `domains`
-- 

INSERT INTO `domains` VALUES (1, 'mail.my-domain.ru', 'LOCAL');
INSERT INTO `domains` VALUES (2, 'my-domain.ru', 'LOCAL');
INSERT INTO `domains` VALUES (3, 'localhost', 'LOCAL');
INSERT INTO `domains` VALUES (4, 'lissyara.su', 'LOCAL');
INSERT INTO `domains` VALUES (4, 'mx.lissyara.su', 'LOCAL');

Затем ставим ClamAV.
/root/>cd /usr/ports/security/clamav
make && make install && make clean

При запуске вылазиет красивое окошко с выбором опций - ничего не выбираем (у меня он предложил "URL downloading" и "milter"). Добавляем в /etc/rc.conf строку, запускаем демона и проверяем заработало ли:
/root/>echo '' >> /etc/rc.conf
echo 'clamav_clamd_enable="YES"' >> /etc/rc.conf
/root/>/usr/local/etc/rc.d/clamav-clamd.sh start
Starting clamav_clamd.
/root/>ps -ax | grep clam
 3073  ??  Is     0:00.00 /usr/local/sbin/clamd
 3078  p0  DL+    0:00.00 grep clam
/root/>

В особой настройке не нуждается, по умолчанию неплохо работает, но при желании можно поправить конфиг - /usr/local/etc/clamd.conf, ещё есть прикол - строка в этом файле в начале файла - Example если она есть и незакомментирована - то он неработает. Единственное для чего точно требуется настройка - это обновление антивирусных баз - для этого запускаем планировщик (crontab -e - нужно учесть что запускается редактор по-умолчанию, т.е. vi если вы это не исправили :)) от суперпользователя и вносим в него такую строку:
28	*/4	*	*	*    /usr/local/bin/freshclam >/dev/null 2>&1

Теперь каждый час, который делится нацело на 4 (т.е. в 0, 4, 8, 12, 16, 20) в 28 минут будет проводиться обновление антивируса. Если кажется слишком часто - можно поставить и реже.
   Вот, пожалуй, и всё. Осталось внести пользователей (и не забудте альясы - именно по ним идёт поиск пользователей и доставка экзимом) примерно так:
/home/>dbmail-users -a admin@test.su -s admin@test.su -p plaintext -w 123123
Opening connection to database...
Opening connection to authentication...
Ok. Connected
Adding user admin@test.su with password type,0 bytes mailbox limit and clientid 0
Ok, user added id [68]
Adding INBOX for new user
Ok. added
[admin@test.su]
Done
/home/>

Пароли я храню некриптованные, мне так удобней :) Хотя это и неправильно. Если неустраивает интерфейс командной строки, то можно привернуть админку на php, благо структура ясна и понятна (если непонятна - советую сделать дамп после добавления первого пользователя, и сравнить с исходным. Даю подсказку, облегчающую работу - INBOX создавать не обязательно, dbmail не дурак, сам создаст при первом письме пользователю). Лезем в /etc/rc.conf, правим строку sendmail_enable="YES" на sendmail_enable="NONE", убиваем sendmail и запускаем exim:
/usr/home/lissyara/>cd /usr/local/etc/rc.d/
/usr/local/etc/rc.d/>echo '' >> /etc/rc.conf
/usr/local/etc/rc.d/>echo 'exim_enable="YES"' >> /etc/rc.conf

/usr/local/etc/rc.d/>killall -9 sendmail
/usr/local/etc/rc.d/>killall -9 sendmail
No matching processes were found
/usr/local/etc/rc.d/>./exim.sh start
Starting exim.
/usr/local/etc/rc.d/>
/usr/local/etc/rc.d/>ps -ax | grep exim
57701  ??  Is     0:00,00 /usr/local/sbin/exim -bd -q30m (exim-4.60-0)
/usr/local/etc/rc.d/>

Теперь можно слать себе письма, в логах будет примерно такое:
Feb 26 23:19:33 mx exim[73962]: 2006-02-26 23:19:33 Delay 20s for mfront7.yandex.ru [213.180.200.38] with HELO=mfront7.yandex.ru. Mail from lissyara@yandex.ru to admin@lissyara.su.
Feb 26 23:19:45 mx exim[73963]: 2006-02-26 23:19:45 no host name found for IP address 213.239.87.155
Feb 26 23:19:46 mx exim[73963]: 2006-02-26 23:19:46 H=(sigve-qdmwqdgcz.n3mean.com.n3mean.com) [213.239.87.155] I=[213.224.195.210]:25 F=<kygsesmspbpzrsql@lenalex.com> rejected RCPT <merchandaizer@my-domain.ru>: "Ваш хост в блэклисте - bl.spamcop.net"
Feb 26 23:19:46 mx exim[73963]: 2006-02-26 23:19:46 H=(sigve-qdmwqdgcz.n3mean.com.n3mean.com) [213.239.87.155] I=[213.224.195.210]:25 F=<kygsesmspbpzrsql@lenalex.com> rejected RCPT <merchandaizer@my-domain.ru>: "Ваш хост в блэклисте - bl.spamcop.net"
Feb 26 23:19:46 mx exim[73963]: 2006-02-26 23:19:46 unexpected disconnection while reading SMTP command from (sigve-qdmwqdgcz.n3mean.com.n3mean.com) [213.239.87.155] I=[213.224.195.210]:25
Feb 26 23:19:53 mx exim[73962]: 2006-02-26 23:19:53 1FDSMz-000JEw-8b <= lissyara@yandex.ru H=mfront7.yandex.ru [213.180.200.38] I=[213.224.195.210]:25 P=esmtp S=736 id=44020D45.000001.20375@mfront7.yandex.ru from <lissyara@yandex.ru> for admin@lissyara.su
Feb 26 23:19:53 mx exim[73964]: 2006-02-26 23:19:53 1FDSMz-000JEw-8b => admin <admin@lissyara.su> R=dbmailuser T=dbmail_delivery
Feb 26 23:19:53 mx exim[73964]: 2006-02-26 23:19:53 1FDSMz-000JEw-8b Completed
Feb 26 23:24:04 mx exim[77310]: 2006-02-26 23:24:04 Delay 20s for webmail12.yandex.ru [213.180.200.53] with HELO=webmail12.yandex.ru. Mail from lissyara@yandex.ru to admin@lissyara.su.

Как раз в это время ко мне ломанулись спамеры :).
   Пару слов по поводу dbmail. Возможностей у него немеряно. Есть даже админка, написанная на perl. Но интерфейс у неё убогий... Производительность - на моём рабочем серваке (P-IV 2.4 GHz, 1Gb RAM) тормоза видел однажды - когда надо было отправить письмо в 50 мегов размером. Тормозил именно dbmail-smtp. На письмах до 30-40 мег всё работает просто прекасно... Хотя что я точно понимаю - больше сотни пользователей имап эта машина потянет со скрипом (pop3 - на порядок больше. Если не на два.). БД сейчас 20Gb - всё работает нормально, тормозов нет (я отдал MySQL 300Mb оперативки). На размере таблиц 4Gb я столкнулся с косяком - по дефолту таблицы создаются с именно таким максимальным размером (У меня MyISAM, а не InnoDB), что легко исправляется потом - чё-то там альтер табле... Короче, надо смотреть в документации MySQL.
Пожалуй, всё...



Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?t=4103.

размещено: 2006-02-27,
последнее обновление: 2007-07-20,
автор: lissyara

оценить статью:

Kerrygun, 2006-03-23 в 17:23:28

Можно немного облегчить себе жизнь, не создавая дополнительную таблицу с доменами, мы ведь будем обслуживать только те домены, почтовые ящики которых у нас уже есть? Тогда можно сделать так:

domainlist local_domains = ${lookup mysql {select distinct SUBSTRING(alias, POSITION("@" IN alias)+1,LENGTH(alias)) fr
om dbmail_aliases}}

соответственно тоже самое можно прописать и в domainlist relay_to_domains - в большинстве случаев релеятся те же локальные домены.

NuN, 2006-05-22 в 15:56:37

Всё настроил как написано, но выдаёт это :
14:58:48  5191 check malware = *
14:58:48  5191 LOG: MAIN PANIC
14:58:48  5191   malware acl condition: clamd: ClamAV returned /var/spool/exim/scan/1Fi93b-0001Lj-Io: lstat() failed. ERROR
14:58:48  5191 deny: condition test deferred
14:58:48  5191 unspool_mbox(): unlinking '/var/spool/exim/scan/1Fi93b-0001Lj-Io/1Fi93b-0001Lj-Io.eml'
14:58:48  5191 unspool_mbox(): unlinking '/var/spool/exim/scan/1Fi93b-0001Lj-Io/1Fi93b-0001Lj-Io-00000.com'
14:58:48  5191 SMTP>> 451 Temporary local problem - please try later

Без ClamAV всё работает, в чём трабла ?

Seller, 2006-06-20 в 22:01:23

а у меня dbmail демоны раньше мускула поднимаются и кричат что не могут соедениться с мускулом... ручками после запустишь - все ок... что делать?

lissyara, 2006-06-20 в 22:35:20

У самого так :) Решения два - первое - переименовать MySQL или dbmail чтобы они при команде ls отображались в порядке запуска, либо добавить зависимость в скрипт dbmail (для последних версий фри)
Я перименовал mysql-server.sh в 000.mysql-server.sh

Seller, 2006-06-21 в 0:50:56

я тоже так думал (про первый способ), но у меня он не прокатил... посему хотелось бы узнать попобдробней про второй, т.к. фря 6.1

Seller, 2006-06-21 в 1:36:51

да, похоже и rcorder мне тут не помошник... прописал зависимости - результат нет. но! добавление 'sleep 1' в mysql-server дало желаемый результат...

lissyara, 2006-06-21 в 9:03:22

У меня тоже. И прокатило.
P.S. В форум :))

Сергей, 2006-10-18 в 13:07:10

Хорошая статья! Спасибо! Все пашет
Хотел узнать существует ли для Dbmail веб интерфейс?
и как его прикрутить чтоб пользователи удаленно могли почту читать?

alex3, 2006-11-19 в 21:02:29

Я правильно понял, что базы в dbmail создаются как InnoDB, а таблица domains в той же базе, как MyISAM?

dutcher, 2006-11-24 в 11:46:10

Интересно потянет ли dbmail базу в 100-200 гигов? Думаю мне не стоит перелезать с мейлдиров на dbmail

Dimrix, 2006-11-29 в 17:24:27

Добрый вечер.

Ставил всё по статье? но dbmail не стартует, а пишет в /var/log/messages следующее
Nov 29 13:54:16 dimrix kernel: pid 27200 (dbmail-imapd), uid 26: exited on signal 12
Nov 29 14:03:14 dimrix kernel: pid 27267 (dbmail-pop3d), uid 26: exited on signal 12

В чём может быть проблема?

Добрый Дядя, 2007-03-10 в 0:11:27

100 гигов могу сказать точно- тянет и без проблем- все прекрасно работает, единственное но, если своевременно производить чистку базы, она до таких размеров не расползется... иннодб еще лучше вкрутить на низкоуровневый диск,тода прирост порядка 30% по скорострельности будет...

lissyara, 2007-03-10 в 1:16:34

Уточните, что используется POP3/IMAP4, если и то и то - соотношение. Также, средний размер письма, и число пользователей. Заодно и машинку, на которой висит.
===========================
У меня щас:
23.4G - база. AMD64 3200+; 80G P-ATA; 2G RAM; LAN 1Gb MySQL отдано 1.5G RAM
35 клиентов. 2 POP3, остальные - IMAP4.
Средний размер письма - 126k, писем ~193 тыщщи.
Тупит. Прилично тупит, сволочь....

voffka, 2007-04-04 в 14:44:01

Не удаляются почта из базы. Подключаюсь оутглюком по IMAP, помечаю письма на удаление (затемняются, зачеркиваются), но при запуске скрипта для обработки БД ни чего не происходит и письма как были так и остаются.
Пробовал dbmail-util -a -y отрабатывает но все равно не удаляет... :( По POP3 все удаляется

Setting DELETE status for deleted messages...
Ok. [0] messages set for deletion.
Re-calculating used quota for all users...
Ok. Used quota updated for all users.

Vacuuming and optimizing database...
Ok. Database cleaned up.

Ткните где рыть...!!!

lissyara, 2007-04-04 в 17:29:36

Это оутглюк пометил.
Он же их для начала должен и удалить.
Роу настройки егоные.

voffka, 2007-04-05 в 18:27:47

lissyara спасибо большое, но я не то имел ввиду. Почему делая
dbmail-util -a -y  (-a perform all checks (in this release: -ctubpd))в старых версиях dbmail вроде не было ключа -a, не убиваются письма помеченные на удаление. Работает все как часики, сервер используется для дубляжа всей почты от Exchang 2003 (кому то это оч надо...!). БД выросла до 60 Гб... и чистится не желает! Отработка утилиты проходит без ошибок.
В отутлук не мочет мышка их типа удаляет(их просто становится не видно) но в БД они есть, опции все перерыл
Заранее спасибо...

nk, 2007-05-07 в 18:31:55

voffka, тебе удалось как то решить эту проблему?

Kid, 2007-05-18 в 14:16:58

Поправка, к конфигу dbmail 2.2.4
driver=mysql
authdriver=sql
Иначе материццо

nk, 2007-06-01 в 14:51:44

Мда, у меня только 2.0.11 версия нормально работает, все остальные глючат с удалением писем из БД

XIII, 2007-06-11 в 15:00:34

не разобрался как добавлять юзеров

ashgdw, 2007-06-13 в 10:37:49

помоему, десь был перевод дока по exim - не могу найти, или я глючу?

lissyara, 2007-06-13 в 10:38:43

http://www.lissyara.su/?id=1200

omega, 2007-07-06 в 11:58:58

Люди подскажите плз как сделать чтоб почта уходила на все домены а не только на те которые прописаны в domains таблице????

nk, 2007-08-09 в 18:31:01

Да, это точно, глючный в ноль, афтару руки переломал бы:)
Не советую ставить!

Piligrim, 2007-11-25 в 13:29:38

Привет Лисяр. :)

Статья хорошая. Поднял второй почтовик по этой статье. Но есть дин нюанс, вроде как для plain и login аутентификации пароль в базе храниться в чистом виде, но это не нужно. Если хранить пароли в md5, то в запросе выполняемом при авторизации на отправку можно написать следующее: `passwd` = md5('${quote_mysql:$2}'}).

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

Последний dbmail работает хорошо, глюков пока нет. Всего 7000 пользователей в базе, но живых наверное будет до тысячи или двух.

Если кому интересно пишите, конфиг допеленный могу выложить.

doker, 2009-01-12 в 15:38:29

dbmailuser:
 driver = accept
 condition = ${lookup mysql{SELECT `alias_idnr` FROM \
 `dbmail_aliases` WHERE \
 `alias`='${quote_mysql:$local_part@$domain}' OR \
 `alias`='${quote_mysql:@$domain}'}{yes}{no}}
 transport = dbmail_delivery


а я вод так сделал

dbmailuser:
driver = accept
condition = ${lookup pgsql{SELECT alias FROM dbmail_aliases where alias='${quote_pgsql:$local_part@$domain}' \
union all select userid from dbmail_users where userid='${quote_pgsql:$local_part@$domain}'}{yes}{no}}
transport = dbmail_delivery


позволяет избежать дублировани алиасов с адресами

stooper, 2009-06-25 в 6:10:42

у меня после установки dbmail-a в логи сыплется вот что:

dbmail/imap4d[2597]: FATAL:[db] dbmodule.c,db_load_driver(+48): unsupported driver: , please choose from MySQL, PGSQL, SQLite

а пересборка не помогла, хотя собрал с поддержкой mysql.
google ответа не дал. обидно. самое начало, а уже глючит. буду искать решения. freebsd7 + dbmail-2.2.10_1

stooper, 2009-07-03 в 23:56:40

как то что то поборол. версия dbmail 2.3.6, работает вместе с exim4 + roundcube. были проблемы с кубом в других версиях дбмейла, остановился на последней. итого: все работает, кроме отправки аттачами больших файлов. как побороть - не известно никому. в логе после отправки письма с аттачем:
R=dbmailuser T=dbmail_delivery: Child process of dbmail_delivery transport (running command "/usr/local/sbin/dbmail-deliver -d $local_part@$domain") was terminated by signal 11 (segmentation fault)
и затем письмо возвращается сендеру с уведомлением об ошибке доставки... беда и незадача. если дбмейл хранит аттачи в самой бд, то вероятно транспортный агент просто не может заставить деливера принять в бд(в моем случае мускул) файло-аттач большого обьема. маленькие файлы до 10 метров пролетают легко. если решения не будет найдено, придется переходить на dovecot + mailbox.
если у кого есть решение, пишите в icq 303828581 :)

nix, 2011-08-01 в 17:27:26

Ошибка при проверке acl malware:
"ClamAV returned /var/spool/exim/scan/1Fi93b-0001Lj-Io.eml: lstat() failed. ERROR"

Это проблема ClamAv. Смех в том, что если отключить проверку архивов (в clamd.conf), то все заработает.

Другой вариант - проблема с правами на папку /var/spool/exim/scan/.


Оставьте свой комментарий:
Ваше имя:   *
e-mail:  
жирный
наклонный
подчёркнутый
ссылка
цвет
Нынешний год:   *
 


Хостинг HOST-FOOD

2014-07-27, lissyara
gmirror

Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9

Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту

Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis

Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS

Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT

В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat

Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp

Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration

Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster

HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS

История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire

Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной

Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server

Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs

Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec

Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash

Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT

Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3

Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
2010-08-31, Cancer
Установка и настройка OpenVPN

На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
2010-08-25, manefesto
freebsd lvm

Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
2010-04-30, gonzo111
proftpd file auth&quota

Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
2010-04-22, lissyara
tw_cli

Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
2010-04-14, fox
MySQL Master+Master

MySQL (Master Master) and (Master Slave) Как настроить репликацию…
2010-03-09, terminus
DNS zones

Краткий ликбез про управление DNS зонами. Примеры проведения делегирования прямых и обратных DNS зон.
2010-03-09, aspera
Squid+AD (group access)

Настройка прокси сервера SQUID с автроризацией пользователей в AD. Разделение пользователей на группы
2010-03-02, BlackCat
Шлюз: Часть 4

Настройка дополнительных сервисов: синхронизация времени (OpenNTPD), клиент DynDNS.org.
2010-03-01, BlackCat
Шлюз: Часть 3

Настройка DHCP и DNS серверов для работы внутри частной сети, c поддержкой внутренних (частных зон) DNS, а так же интеграция DHCP и DNS сервисов.
2010-03-01, BlackCat
Шлюз: Часть 2

Конфигурация МСЭ pf для проброса портов с изменением порта назначения и без, а так же поддержки активного режима FTP и ограничения максимального размера сегмента
2010-03-01, BlackCat
Шлюз: Часть 1

Быстрая настройка шлюза/маршрутизатора с установлением PPPoE-соединения, поддержкой NAT и DNS-forwarding.
2010-02-23, Morty
darkstat

Простая считалка траффика, со встроенным веб-сервером. Очень маленькая, может делать отчеты трафика по хостам, портам, протоколам, а также строить графики
2010-01-23, gonzo111
squid+sams+sqstat

Пилим squid и sams - примеры конфигов с объяснениями. Установка SqStat.
2009-12-19, schizoid
mpd5 + radius + ng_car + Abills

Настройка pppoe-сервера с биллинговой системой Abills и шейпером ng_car
2009-11-16, lissyara
UFS->ZFS

Удалённая миграция с UFS на ZFS. Загрузка с раздела zfs. Настройка для работы с малым количеством памяти под архитектурой i386.
2009-11-13, gx_ua
fusefs-ntfs

Установка, настройка и использование fusefs-ntfs, драйвер NTFS, предназанченного для монтирования NTFS разделов под FreeBSD
2009-11-12, Morty
LiveCD

Создание собственного LiveCD с необходимыми вам изменениями, автоматизирование данного процесса, а так же вариант скоростной сборки СД.
2009-09-27, lissyara
Samba как PDC

Контроллер домена - аналог M$ NT4 домена под самбой, без использования LDAP и прочей хиромантии. Просто и быстро =)
2009-08-30, terminus
ipfw nat

Подробное руководство по ipfw nat, сложные случаи конфигурации.
2009-08-24, levantuev
HotSpot

Установка Hotspot системы в общественное заведение.
2009-08-18, lissyara
diskless

Создание бездисковых терминалов под управлением FreeBSD - с загрузкой по сети. Используются для старта rdesktop и подключения к виндовому серверу терминалов.
2009-07-29, BAV_Lug
Видеонаблюдение

Настройка бюджетного варианта видеонаблюдения на удаленном объекте
2009-07-22, Cancer
OpenLDAP адресная книга

Настройка и создание адресной книги на базе OpenLDAP + phpLDAPadmin
2009-06-30, SergeySL
AimSniff

Руководство по созданию системы мониторинга ICQ-переписки на базе AimSniff, использующей базу данных MySQL для хранения и Web-интерфейс WAS (Web Aim Sniff) для просмотра перехваченных сообщений
2009-06-25, atrium
Управление правами доступа

Полномочия пользователей и файлов, принадлежащих им, формирует концепцию ОС UNIX.
2009-06-16, DNK
Exim+PgSQL

Установка почтовой системы exim+pgsql на FreeBSD 7.1
2009-05-30, mvalery
HDD(mbr) -> HDD(gpt)

Как разбить диск размером более 2TB на разделы, сделать загрузочным, а затем перенести на него информацию с рабочей системы — донора.
2009-05-22, Cancer
SendXMPP

Отправка сообщений на Джаббер сервер по средствам SendXMPP
2009-05-11, Raven2000
Network UPS Tools

Network UPS Tools представляет собой набор программ, которые обеспечивают общий интерфейс для мониторинга и администрирование UPS оборудования.
2009-04-29, m0ps
IPSEC over GRE with RIP

Пример IPSEC over GRE и динамическим роутингом (RIP), с ADSL в качестве последней мили на оборудовании Cisco.
2009-04-24, WhiteBear777
qemu network

Появилась необходимость поставить на БСД эмулятор(qemu) и настроить в качестве гостевой ОС Windows XP, предоставив ей выход в локалку и в сеть internet...
2009-04-22, vp
freebsd + huawei 162 gsm modem

В статье описывается простой способ подключения модема huawei 162 к freebsd + первичная настройка smstools
2009-04-12, mvalery
Мониторинг RAID

Мониторинг из командной строки RAID компаний AMCC 3ware, HighPoint, Dell (Perc 5/i и PERC 6/i) и LSI (MegaRAID SAS 8408E и SAS1078)
2009-04-09, texnotronic
RAID1 via LAN

Функциональности DRBD во FreeBSD можно добиться примонтировав блочное устройство по сети при помощи GEOM Gate (ggate) и добавив его в зеркало с локальным диском средствами gmirror.
2009-04-03, Raven2000
Оптимизация хоста для CMS

В последнее время на старый и не очень быстрый ПК (Celeron 800 RAM 256) мною было навешано с десяток сайтов и некоторые были из серии тяжелых CMS. И так нам дано FreeBSD 7.1 и ~10 сайтов/CMS.
2009-04-01, atrium
VSFTPD + AD && MySQL

Настройка самого безопасного сервера FTP - vsftpd.
2009-03-31, Dron
Peoplenet + C-motech (3G)

Описание подключения к сети Peoplenet посредством 3G модема С-motech CCu-650U на FreeBSD
2009-03-25, lissyara
mod_auth_external

mod_auth_external - авторизация пользователей в apache c помощью внешней программы - например, системных пользователей.
2009-03-24, gx_ua
Lightsquid

Частично lightsquid может заменить sams: быстрая и простая инсталляция, быстрый парсер, cgi скрипт для динамической генерации отчета, нет привязки к БД, различные графические отчеты, мультиязычный инт
2009-03-18, LHC
Установка Zabbix-1.6

Установка и первоначальная настройка системы мониторинга Zabbix (версия 1.6)
2009-03-16, Cancer
Принт-Сервер Samba+LPD & AD

Простейшая настройка Принт-Сервера на FreeBSD используя Samba+LPD & AD
2009-03-04, Mad_caterpillar
ipsec_vpnc

Настройка VPN IPSec концентратора на FreeBSD 6.2 для клиента cisco с использованием ipsec-tools и авторизацией в активной директории
2009-02-18, Andy
Free-SA

Программа анализирует log файлы Squid'а и формирует по ним отчет.
2009-02-02, Cancer
Openfire Jabber Server

Установка Jabber сервера на примере Openfire
2009-01-28, Cancer
mpd5 + сжатие и шифрование

Установка VPN сервера mpd5 + сжатие и шифрование
2009-01-26, vp
freebsd + webcamera

Подключение и настройка вебмкамеры для работы с freebsd на примере Logitech QCam STX
2009-01-10, Grishun_U_S
конфиг для офисов

В статье разбирается конфиг для офиса, пользователи которого имеют строгие ограничения по портам. Заворачиваем www трафик на транспарентный прокси, а остальное NAT'им. Эффективно делим канал интернет
2008-12-27, Storoge
sftp+chroot

Возникла необходимость дать возможность нескольким пользователям заливать на сервер контент для своих сайтов через sftp, чтобы при этом не страдала безопасность.
2008-12-13, Morty
PurefFTPd

Администрирование pureftpd-сервера с помощью вэб интерфейса Usermanager
2008-12-11, lissyara
termlog

Небольшая простая утилита, использующаяся для записи в файл всего что происходит на терминалах системы. Полезно, когда есть доступ по ssh у тех, кому не очень доверяете. Паранойя - это не плохо =)
2008-11-26, Cancer
SQUID+SAMS +Rejik-(ADLDAP)

Установка Прокси сервера SQUID с красивой мордой SAMS и редиректором REJIK,для учета кто куда ходил + графики в pdf,РЕЖИК собственно рубит банеры и запрещает пользователям ходить на запрещенные сайты,
2008-11-22, dvg_lab
php5-oci8

Решение проблем segmentation fault (core dumped) при работе с oracle8-client и php5-oci8
2008-11-21, m0ps
NTP

Пример настройки NTP сервера для локальной сети и клиента, для синхронизации времени с локальный NTP сервером. Обновление ntpd из портов.
2008-11-20, Cancer
SQUID+SAMS +Rejik-(NTLM)

Установка Прокси сервера SQUID с аутентификацией по NTL с красивой мордой SAMS и редиректором REJIK,для учета кто куда ходил + графики в pdf, РЕЖИК собственно рубит банеры и запрещает пользователям хо
2008-11-20, UA
Hotspot

Настройка безпроводной точки доступа (WiFi) на freebsd
2008-11-12, Shaman
Enemy Territory

Появилась у меня такое желание поднять сервер Enemy Territory. Поискал погуглил, ничего толкового не нашел пришлось все самому делать. И вот решил поделиться опытом. Начинаем......
2008-11-11, lissyara
Samba+ NT ACL

Использование vfs самбы - модули full_audit и recycle. Настройка для использования в качестве файлопомойки с 500+ одновременно работающих юзеров. Раздача прав через нативный виндовый интерфейс.
2008-11-11, Raven2000
Upgrading OpenBSD

Сегодня мы будем обновлять OpenBSD. Систему необходимо поддерживать в актуальном виде и следить, чтобы все работало, как часы и все дырки были залатаны до прихода врага =)
2008-11-10, lexy
SMSTools 3

Как автоматизировать отправку и обработку входящих сообщений при помощи мобильного телефона, датакабеля и компа
2008-11-06, Cancer
Asterisk IP PBX

Установка VoiP сервера Asterisk IP PBX для соединения двух шлюзов и АТС
2008-10-30, atrium
Samba & CUPS & AD & ACL

Настройка Samba в роли доменного файл-сервера, и CUPS в роли принт-сервера для Windows клиентов
2008-10-17, Raven2000
src & ports

Конечно, в OpenBSD система портов никогда не сможет быть полной сравнение с той же системой во FreeBSD. Связано это с тем, что разработчики включают в порты лишь те приложение которые протестированн
2008-10-13, Morty
Mysql - базовое описание

Базовое описание и принципы работы с MySQL
2008-10-10, Cancer
exim&dovecot + fetchmail + SSL

Exim & Dovecot + Postfixadmin & Roundcube + Fetchmail & smtp_relay С возможностью отправлять письма через смтп релей провайдера. С использование SSL шифрование: POP3s IMAPs sSMTP
2008-10-09, m0ps
Дополнительные порты для роутера

Увеличение количества Ethernet портов маршрутизатора за счет свободных портов коммутатора пробросив vlan с сабинтерфейса роутера на интерфейс коммутатора.
2008-10-06, princeps
Bacula

Настройка сервера системы резервного копирования Bacula на FreeBSD для бэкапов FreeBSD и Windows машин
2008-10-02, zheromo
Postfix + DBMail

Создание почтовой системы на основе Postfix + DBMail + SASL2 + TLS + DSpam + ClamAV + RoundCubeWebMail
2008-10-02, Cancer
SugarForge CRM

SugarForge CRM предоставляет подавляющее большинство функциональных возможностей CRM систем
2008-09-12, arksu
ng_ipacct + squid

Подсчет трафика с помощью ng_ipacct. Связка ng_ipacct + squid + парсер логов + авторизатор + nginx + mysql и куча служебных скриптов для работы всей системы.
2008-09-03, Raven2000
GLPI

Мне надо было найти замену существующей программы инвентаризации, чтобы за компьютерами, принтерами, картриджами, лицензиями и тп был учет. Желательно с дополнительными бонусами типа системы подачи...
2008-09-03, salimk
POWERDNS

Статья о том как мигрировать с DNS сетвера ISC Bind на POWERDNS
2008-09-03, DNK
Rinetd

Редирект TCP портов с помощью утилиты rinetd - просто до безобразия - само прилодение простое, конфиг в одну строчку - что ещё надо для счастья? =)
2008-09-03, L!Ner
eGroupWare

Это сервер групповой работы. Он укомплектован собственным веб-интерфейсом, который обеспечивает доступ к вашим данным с любой платформы по всей планете.
2008-08-30, jafff
MAC адрес

У девайса VoIP Planet VIP-000 слетел MAC адрес и стал FF-FF-FF-FF-FF-FF, как я его востанавливал
2008-08-30, Morty
clonehdd

Перенесение, бэкапирование HDD,легко и просто
2008-07-31, Raven2000
Proxy Auto Configuration

Возникла необходимость автоматически настраивать прокси для всех компов и не бегать например если поменялось что-то на сервере прокси. Для этого давно существует технология Proxy Auto Configuration.
2008-07-29, f0s
NNTP сервер

Конфигурирование собственного NNTP-сервера.
2008-07-28, Al
spamooborona

настройка yandex spamooborona в качестве smtp-proxy для работы с exim
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 38 чел.
За последние 30 мин было: 231 человек
За сегодня было
3271 показов,
832 уникальных IP
 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.1138 секунд
Из них PHP: 66%; SQL: 34%; Число SQL-запросов: 54 шт.
Исходный размер: 238116; Сжатая: 49014