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

FreeBSD
  настройка
  подсчёт трафика
  программы
  почтовые системы
  FreeBSD Mail Howto
  exim & dovecot
  exim & courier-imap
  squirrelmail
  exim + saslauthd + courier-imap
  postfix -> exim
  sendmail -> exim
  imapsync
  Postfix + LDAP
  maildrop & postfix
  DSPAM
  Exim + LDAP
  ISPmanager
  Backup MX
  exim + exchange
  exim + dovecot + win2003 AD
  RoundCube
  qmail-ldap + AD
  spamooborona
  exim&dovecot + fetchmail + SSL
  Postfix + DBMail
  Mailgraph
  smfsav
  Exim+PgSQL
  Postfix + Dovecot + Clamav + SpamAssasin + LDAP vs MYSQL
  Simplemail Admin
  MTA qmail full install
  OpenLDAP адресная книга
  POSTFIX Статистики
  Backup MX (exim)
  Exim + dovecot + PgSQL + web
  Exim+dovecot2+dspam
  Возможности Dovecot 2
  Dovecot2 configfiles RUS
  Почтовый сервер по шагам ч.1
  Почтовый сервер по шагам ч.2
  Почтовый сервер по шагам ч.3
  Шелезяки
  Мелочи
  Файловая система
  WWW
  Security
  system
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco


www.lissyara.su —> статьи —> FreeBSD —> почтовые системы —> Exim+PgSQL

EXIM+PgSQL+COURIER+CLAMAV+SPAMASSASIN on FreeBSD 7.1

Автор: DNK.


Много времени утекло как уважаемый lissyara написал статью об еxim+mysql,
изменились и версия freebsd и версии пакетов,вот решил дополнить немного да
и БД использовать постгресс (я все-таки предпочитаю pgsql а не mysql).
Ну и конфиги построены так, что НЕ НУЖНО в них что-либо менять, все
настройки пропишем в БД.
Если посчитаете мою статью лишней - не пинайте,сообщайте,уберу.
И так начнем.

На FreeBSD 7.1 ставим postgresql 8.2

cd /usr/ports/databases/postgresql82-server/
make install clean


>su - pgsql
#initdb
#exit
>echo 'postgresql_enable="YES"' >> /etc/rc.conf
>/usr/local/etc/rc.d/postgresql start



Создадим пользователя exim и БД

>su - pgsql
#createuser exim
#createdb -U exim exim
#exit
>psql -U exim exim


создаем таблицы

        CREATE TABLE accounts (
            uid serial NOT NULL,
            login character varying(128),
            "password" character varying(128),
            maildir character varying(255),
            home character varying(255),
            mailquota integer DEFAULT 20
        );
        ALTER TABLE ONLY accounts
            ADD CONSTRAINT uid_k PRIMARY KEY (uid);
        ALTER TABLE ONLY accounts
            ADD CONSTRAINT login_k UNIQUE (login);

        CREATE TABLE aliases (
            mail character varying(128) NOT NULL,
            alias character varying(128)
        );
        ALTER TABLE ONLY aliases
            ADD CONSTRAINT mail_k PRIMARY KEY (mail);

        CREATE TABLE hostreject (domain text);
        CREATE TABLE local_domain (domain text);
        CREATE TABLE relayfromhosts (hosts text);
        CREATE TABLE relaytohosts (hosts text);

Примечание:
названия таблиц говорят об их предназначении

Cтавим Exim

cd /usr/ports/mail/exim-postgresql/
make install clean
echo 'exim_enable="YES"' >> /etc/rc.conf
echo 'sendmail_enable="NONE"' >> /etc/rc.conf


Cтавим SpamAssasin

cd /usr/ports/mail/p5-Mail-SpamAssassin/
make install clean
### Впроцессе установки отвечаем на поросы по желанию
echo 'spamd_enable="YES"' >> /etc/rc.conf
echo 'spamd_flags="-u spamd -H /var/spool/spamd"' >> /etc/rc.conf


Ставим антивирус

cd /usr/ports/security/clamav/
make install clean
echo 'clamav_clamd_enable="YES"' >> /etc/rc.conf

Обновляем базу
freshclam

Ну и наконец courier

cd /usr/ports/mail/courier-imap/
make install clean
### Выбираем в меню PgSQL
echo 'courier_authdaemond_enable="YES"' >> /etc/rc.conf
echo 'courier_imap_imapd_enable="YES"' >> /etc/rc.conf
echo 'courier_imap_imapd_ssl_enable="YES"' >> /etc/rc.conf
echo 'courier_imap_pop3d_enable="YES"' >> /etc/rc.conf


C установкой покончено, берем бубен и напильник ,начинаем шаманить.
Файл /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

Правим настройки clamv в /usr/local/etc/clamd.conf (раскоментировать)

        TCPSocket 3310
        TCPAddr 127.0.0.1

Настраиваем imapd.

cd /usr/local/etc/courier-imap/
cp imapd.cnf.dist imapd.cnf


и приводим imapd.cnf к виду

RANDFILE = /usr/local/share/courier-imap/imapd.rand

[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
prompt = no
[ req_dn ]
C=UA
ST=Lv
L=Lviv
O=Courier Mail Server
OU=Automatically-generated IMAP SSL key
CN=localhost
emailAddress=postmaster@мой_домен.ua
[ cert_type ]
nsCertType = server

Далее генерируем сертификат специальным скриптом:

cd /usr/local/share/courier-imap/
./mkimapdcert


В файле /usr/local/etc/authlib/authdaemonrc
меняем строку на вид

authmodulelist="authpgsql"

Файл /usr/local/etc/authlib/authpgsqlrc приводим к виду

PGSQL_HOST              localhost
PGSQL_PORT              5432
PGSQL_USERNAME          exim
PGSQL_PASSWORD          exim
PGSQL_DATABASE          exim
PGSQL_USER_TABLE        accounts
#PGSQL_CRYPT_PWFIELD    crypt
PGSQL_CLEAR_PWFIELD     password
DEFAULT_DOMAIN          testim.u.ua
PGSQL_UID_FIELD         26
PGSQL_GID_FIELD         26
PGSQL_LOGIN_FIELD       login
PGSQL_HOME_FIELD        home
PGSQL_NAME_FIELD        login
PGSQL_QUOTA_FIELD       mailquota
PGSQL_MAILDIR_FIELD     maildir

И наконец настраиваем конфиг exim (можно просто вставить этот конфиг)
/usr/local/etc/exim/configure

######################################################################
#                  Runtime configuration file for Exim               #
######################################################################

# Здесь мы определяем макросы, описывающие различные пути

CONFIG_PREFIX=/usr/local/etc/exim

# Здесь мы указываем, где находить наш postgresql сервер, соединение
# осуществляется через локальный сокет, команда hide помогает спрятать эту
# настройку при вызове exim -bP, когда exim выводит 
# все конфигурационные опции в
# стандартный вывод. Учтите,
# что сам /usr/local/etc/exim/configure должен иметь владельца root:wheel и
# иметь права доступа 0600, что отличается от того, что принято по умолчанию
# (0644)
#hide pgsql_servers = host/database/db_user/password
hide pgsql_servers = localhost/exim/exim/exim
# Тут мы описываем списки доменов

# Local_domains включает домены, считающиеся локальными, то есть те домены, для
# которых exim делает локальную доставку, для остальных доменов почта
# доставляется по MX записям в DNS.

domainlist local_domains =${lookup pgsql{SELECT domain FROM local_domain}}


# Список хостов, почту на которые мы явно отвергаем

hostlist host_reject = ${lookup pgsql{SELECT domain FROM hostreject}}

#Список доменов куда разрешен прием
domainlist relay_to_domains = ${lookup pgsql{SELECT hosts FROM relaytohosts}}

# Список адресов, с которых разрешена передача почты во внешний мир
hostlist relay_from_hosts =${lookup pgsql{SELECT hosts FROM relayfromhosts}}

# Проверка получателя
acl_smtp_rcpt = acl_check_rcpt
# Проверка mime содержимого
acl_smtp_mime = acl_check_mime
# Проверка на спам и вирусы
acl_smtp_data = acl_check_virus

# Здесь мы описываем наш антивирус
av_scanner = clamd:127.0.0.1 3310
# И spamassasin
spamd_address = 127.0.0.1 783
# Настройки пользователя и группы по умолчанию
exim_user = mailnull
exim_group = mail
# Никогда не осуществляем доставку под рутом - root должен быть алиасом на
# другого локального пользователя. Кстати, это _обязательное_ условие, заданное
# еще на этапе компиляции
never_users = root
# Настройки директории для очереди
spool_directory = /var/spool/exim
# Разделяем spool_directory на несколько более маленьких - аналог хеш таблицы,
# ускоряет обработку spool'а
split_spool_directory

# Пытаемся сделать соответствие прямой и обратной зоны dns для каждого хоста.
# Несколько затратно, но весьма полезно
host_lookup = *

# Убираем проверку identd на клиентской стороне. Из-за неправильно настроенных
# firewall'ов это часто вызывает длительные тайм-ауты, кроме того, этот сервис
# поднят не у многих
rfc1413_query_timeout = 0s

# Указываем кое-какие лимиты (их назначение ясно из названия)
smtp_accept_max = 50
smtp_connect_backlog = 40
smtp_accept_max_per_host = 10
smtp_accept_queue = 22
smtp_accept_queue_per_connection = 10
recipients_max = 16
recipients_max_reject = true
message_size_limit = 20M
accept_8bitmime

# Игнорируем сообщения, которые приходят нам же, 
# давность которых более 12-ти часов
ignore_bounce_errors_after = 12h

# Удаляем замороженные сообщения, давность которых больше 3 дней.
timeout_frozen_after = 3d

# Настройки TLS
tls_certificate = CONFIG_PREFIX/mailed.crt
tls_privatekey = CONFIG_PREFIX/mailed.key
tls_advertise_hosts = *
tls_verify_certificates = *
# Следующая опция закомментирована, но весьма полезна, 
# позволяя авторизироваться
# только через безопасный ssl канал
#auth_advertise_hosts = ${if eq{$tls_cipher}{}{}{*}}

######################################################################
#                       ACL CONFIGURATION                            #
#         Specifies access control lists for incoming SMTP mail      #
######################################################################

begin acl

# Этот список доступа описывает проверки, осуществляемые при вызове любой RCPT
# команды
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!"
          hosts         =  *:!+relay_from_hosts
          condition     = ${if eq{$sender_helo_name}\
                          {$sender_host_address}{true}{false}}


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

# Рубаем тех, кто в HELO пихает только цифры
# (не бывает хостов ТОЛЬКО из цифр)
  deny    condition     = ${if match{$sender_helo_name}\
                          {\N^\d+$\N}{yes}{no}}
          hosts         = !127.0.0.1:!localhost:*
          message       = "В HELO не могут быть тока цифры!"

  # Рубаем хосты типа *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 = "host in blacklist- $dnslist_domain \n $dnslist_text"
#          dnslists      = opm.blitzed.org : \
#                          proxies.blackholes.easynet.nl : \
#                          cbl.abuseat.org : \
#                          bl.spamcop.net : \
#                          bl.csma.biz : \
#                          dynablock.njabl.org :

           dnslist = :


  # Задержка. (это такой метод борьбы со спамом,
  # основанный на принципе его рассылки) На этом рубается
  # почти весь спам. Единственно - метод неприменим на
  # реально загруженных MTA - т.к. в результате ему
  # приходится держать много открытых соединений.
  # но на офисе в сотню-две человек - шикарный метод.
  #
  # более сложный вариант, смотрите в статье по exim и
  # курьер имап. Т.к. там метод боле умный (просто правил
  # больше :), то можно и на более загруженные сервера ставить)
  warn
        # ставим дефолтовую задержку в 20 секунд
        set acl_m0 = 20s
  warn
        # ставим задержку в 0 секунд своим хостам и
        # дружественным сетям (соседняя контора :))
        hosts = +relay_from_hosts
        set acl_m0 = 0s


  # Проверка получателя в локальных доменах.
  # Если не проходит, то проверяется следующий 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 hosts         =!+relay_from_hosts

  # Реализация нашего бан-листа
  deny   hosts          = +host_reject
         message        = You are banned. Go away.

  # еще боримся со спамом и вирусами
  deny    message       = Мы не принимает ".$found_extension" \
                          незапакованные вложения \
                          Для отправки запакуйте их.
          demime = bat:btm:cmd:com:cpl:dll:exe:lnk:msi:pif:prf:reg:scr:vbs:url


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

  # Список доступа для проверки mime частей сообщения
acl_check_mime:

  # Произодим декодирование mime сообщений. Полезно для дальнейшей проверки на
  # вирусы
  warn decode = default

  # Можно очень быстро отсеять сообщения, просто запретив некоторые mime
  # вложения, чаще всего содержащие вирусы, хотя, конечно, это не панацея
  deny message = Blacklisted file extension detected
       condition = ${if match \
          {${lc:$mime_filename}} \
          {\N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.com)$\N} \
                     {1}{0}}

  # Много ли у нас людей, знающих китайский? 
  # А вот китайского спама это поубавит
  # :)
  deny message = Sorry, noone speaks chinese here
       condition = ${if eq{$mime_charset}{gb2312}{1}{0}}

  accept

# Проверка содержимого на вирусы и спам
acl_check_virus:
        # Мы не запрещаем письма со спамом, а просто добавляем заголовок,
        # содержащий количество спамерских очков, а пользователь на своей
        # стороне уже просто настраивает свои фильтры. Так мы исключаем жалобы
        # со стороны пользователей о потерянных письмах
        warn  message = X-Spam-Score: $spam_score ($spam_bar)
                spam = nobody:true

        # Добавляем заголовки, указывающие, что письма были проверены
        # spamasssasin'ом
        warn message = X-Spam-Scanned: Yes
         warn message = X-Spam-Scanner: SpamAssassin running

        # Вот что-что, а вирусы нам не нужны.
        deny  message   = Message rejected: virus found. \
Your message was successfully trashed.
                    hosts       = *
                    malware     = *
        accept

######################################################################
#                      ROUTERS CONFIGURATION                         #
#               Specifies how addresses are handled                  #
######################################################################
#     THE ORDER IN WHICH THE ROUTERS ARE DEFINED IS IMPORTANT!       #
# An address is passed to each router in turn until it is accepted.  #
######################################################################

begin routers

# Роутер, осуществляющий поиск по MX записям в DNS
dnslookup:
  driver = dnslookup
  domains = ! +local_domains
  transport = remote_smtp
  ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
  no_more

# Все останльные роутеры обслуживают доставку локальной почты

# Драйвер алиасов пользователя. Обратите внимание на lookup в pgsql базе. Что
# интересно, этот lookup работает даже для иерархических алиасов
# Также определяются транспорты
# для передачи почты в файл (>/path/to/file) и в pipe
# (|/usr/local/libexec/slocal)
system_aliases:
  driver = redirect
  allow_fail
  allow_defer
  data = ${lookup pgsql{select alias from aliases \
           where mail ='$local_part@$domain'}{$value}fail}
  user = mailnull
  group = mail
  file_transport = address_file
  pipe_transport = address_pipe

# Для локальных пользователей также создаем возможность перенаправления почты
# через ~/.forward файл. Если включена директива allow_filter, то в .forward
# файле можно использовать язык sieve фильтров. Для подробностей см.
# документацию на www.exim.org, т.к. на рассмотрение этой темы уйдет слишком
# много времени
userforward:
  driver = redirect
  check_local_user
  file = $home/.forward
  no_verify
  no_expn
  check_ancestor
# allow_filter
  file_transport = address_file
  pipe_transport = address_pipe
  reply_transport = address_reply
  condition = ${if exists{$home/.forward} {yes} {no} }

# Локальная доставка, если данный пользователь найдем в базе

localuser:
  driver = accept
  condition = ${lookup pgsql {select uid from \
            accounts where login = '$local_part@$domain'}{yes}{no}}
  transport = local_delivery
  cannot_route_message = Unknown user

######################################################################
#                      TRANSPORTS CONFIGURATION                      #
######################################################################
#                       ORDER DOES NOT MATTER                        #
#     Only one appropriate transport is called for each delivery.    #
######################################################################

begin transports

# Драйвер для доставки через соединения с удаленными smtp серверами
remote_smtp:
  driver = smtp

# Этот транспорт доставляет почту в локальные maildir'ы. 
# Путь к maildir хранится
# опять же в таблице accounts. Разрешения на директорию 0770 для возможности
# работы с данными директориями imap сервера. При этом владельцем является
# группа и пользователь из accounts 
#(потому при вставлении записей в эту таблицу
# надо начинать значения uid с достаточно большого числа, например, 2000 и
# пересекаться с реальными пользователями оно должно только если реальному
# пользователю нужен локальный доступ к maildir'у).
# Также из таблицы accounts извлекается данные о размере квоты, и
# устанавливается порог в 75% от квоты, когда пользователю посылается указанное
# предупреждение об подходе к порогу квоты
local_delivery:
  driver = appendfile
  directory = ${lookup pgsql{select maildir from \
            accounts where login = '$local_part@$domain'}{$value}fail}
  create_directory
  directory_mode = 0770
  maildir_format
  delivery_date_add
  envelope_to_add
  return_path_add
  group = 26
  user = 26
  mode = 0660
  no_mode_fail_narrower
  quota = ${lookup pgsql{select mailquota from \
        accounts where login = '$local_part@$domain'}{$value}fail}M
  quota_warn_message = "\
          To: $local_part@domain\n\
        From: postmaster@test.ru\n\
        Subject: Your maildir is going full\n\
        This message is automaticaly gnerated by your mail server.\n\
        This means, that your mailbox is 75% full. If you would \n\
        override this limit new mail would not be delivered to you!\n"
  quota_warn_threshold = 75%

# Транспорт, осуществляющий доставку в pipe
address_pipe:
  driver = pipe
  return_output

# Транспорт, осуществляющий доставку прямо в файл
address_file:
  driver = appendfile
  delivery_date_add
  envelope_to_add
  return_path_add

# Этот транспорт используется для автоматического ответа на сообщения
#об ошибках

address_reply:
  driver = autoreply

######################################################################
#                      RETRY CONFIGURATION                           #
######################################################################

begin retry

# Настройки по умолчанию, которые я не трогал, управляют интервала повторной
# передачи сообщений

# This single retry rule applies to all domains and all errors. It specifies
# retries every 15 minutes for 2 hours, then increasing retry intervals,
# starting at 1 hour and increasing each time by a factor of 1.5, up to 16
# hours, then retries every 6 hours until 4 days have passed since the first
# failed delivery.

# Address or Domain    Error       Retries
# -----------------    -----       -------

*                      *           F,2h,15m; G,16h,1h,1.5; F,4d,6h


######################################################################
#                   AUTHENTICATION CONFIGURATION                     #
######################################################################

# Описания аутентификации

begin authenticators
# CRAM-MD5 аутентификация, требует наличия пароля в открытом виде, имя
# пользователя должно быть в формате user@domain, как оно хранится в таблице
# accounts
lookup_cram:
        driver = cram_md5
        public_name = CRAM-MD5
        server_secret = ${lookup pgsql {select password \
                      from accounts where login='$1'}{$value}fail}
        server_set_id = $1
# LOGIN аутентификация - не требует хранения пароля в открытом виде, однако, по
# сети пароль передается в открытом виде - требуется лишь выполнение условия
# server_condition - $1 - имя пользователя, а $2 - пароль. LOGIN безопасен
# только при установлении ssl соединения.
login:
        driver = plaintext
        public_name = LOGIN
        server_prompts = Username:: : Password::
        server_condition = ${lookup pgsql {select login \
          from accounts where login='$1' and password='$2'}{yes}{no}}
        server_set_id = $1


# End of Exim configuration file

cd /usr/local/etc/exim/
Генерим сертификаты

openssl genrsa -out mailed.key 2048
openssl req -new -x509 -key mailed.key -days 365 -out mailed.crt


Для почтовых ящиков мы выбрали директорию /var/mail/exim , вот
и создадим ее

mkdir /var/mail/exim
ну и права ей назначим соответствующие
(chown mailnull:mail /var/mail/exim)

Зайдем в БД exim и создадим тестового юзера и тестовый домен
(для тестирования не нужен реальный домен прописанный в MX,
по окончании проверки создадим реальное)

psql -U exim exim
>INSERT INTO accounts VALUES (1,'test@testim.u.ua','12345',\
'/var/mail/exim/test/','/var/mail/exim/test/',20);
>INSERT INTO local_domain VALUES ('testim.u.ua');
>INSERT INTO relayfromhosts VALUES ('localhost');
>INSERT INTO relayfromhosts VALUES ('192.168.0.0/16');
>INSERT INTO relaytohosts VALUES ('testim.u.ua');
>\q



Вот собственно и все.Можно запустить по очереди все сервисы или
просто перегрузиться.

Проверим как оно работает

mail -s testmail test@testim.u.ua < /etc/pf.conf
ls /var/mail/exim/
tail /var/log/exim/mainlog


Если директория /var/mail/exim/test создана - все ОК, нет -
проверяем права доступа и настройки.
Дальше проверяем отправку от test@testim.u.ua на самого себя
и куда-то в мир.Смотрим лог : на себя отправка проходит, в мир
типа

... Domain of sender address test@testim.u.ua does not exist

Теперь можно прописывать реальный домен и пользователей.
Да :) меняем в файле /usr/local/etc/authlib/authpgsqlrc
строчку
DEFAULT_DOMAIN          testim.u.ua

Замечание : директории для ящика НЕ создаются , пока не будет получено
первое письмо, поэтому, после вставки нового юзера в БД, либо
создайте директории , либо выполните команду
mail -s hello_new_user new_user@domain < file_to _hello

Ну и на последок : я не использую postfixadmin , использую простенькие
скрипты для активации ящиков.Если они кому-то нужны, могу выложить.
Самый простенкий скрипт для создания ящика или изменения пароля
(перед использование создайте файл /root/text_mail.txt с любым
содержанием)
#!/usr/bin/perl
use DBI;

#==========================preferences=========================
$dbname='exim';
$dbuser='exim';
$dbpass='exim';
$def_dir='/var/mail/exim/';
$def_domain='мой_домен.ua';
$quota=20;
#=============================================================

$dbh=DBI->connect("DBI:Pg:dbname=$dbname","$dbuser","$dbpass");
print "Name :>";
$s=<STDIN>;
chomp($s);
$login=sprintf("%s\@%s",$s,$def_domain);
$sth=$dbh->prepare("select count(uid) from accounts where login='$login'");
$sth->execute;
my($a)=$sth->fetchrow_array();
$sth->finish();
if($a>0){print "name $login allready exist!!!! will change password\n";}
print "Password :>";
$s1=<STDIN>;chomp($s1);
if($s1 eq ""){print "ERROR password\n";$dbh->disconnect();exit 0;}
if($a>0){
$sth=$dbh->do("update accounts set password='$s1' where login='$login'");
        print "Password changed !\n";}else
{       $sth=$dbh->prepare("select max(uid) from accounts");
        $sth->execute();
        ($uid)=$sth->fetchrow_array();
        $sth->finish();
        $uid++;
        $s2=sprintf("%d,'%s','%s','%s%s\/','%s%s\/',%s",
$uid,$login,$s1,$def_dir,$s,$def_dir,$s,$quota);
        print "=========================\n
UID     =>$uid\nEmail   =>$login\nHome_dir=>$def_dir$s\nQuota   =>$quota\n
=========================\n";
        $sth=$dbh->do("insert into accounts values($s2)");
        print "Created email $login\n";
        @b=`mail -s Hello $login < /root/text_mail.txt`;}
$dbh->disconnect();

Ну и огромное спасибо lissyara (взял у него кое-что для конфига exim..
уж очень его коменты нравятся)и cebka.



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

размещено: 2009-06-16,
последнее обновление: 2010-11-09,
автор: DNK

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

mefis, 2009-02-24 в 16:44:57

в этой строчке
INSERT INTO accounts VALUES (1,'test@testim.u.ua','12345',\
не являеться ли лишним знак "\" ?
я думал такой знак используется только в сочитании с какой- нибудь буквой отвечающей за определенную команду. не?
и потому что у меня выдает
Invalid command \. Try \? for help.

DNK, 2009-02-25 в 12:25:05

В данном случае знак "\" является знаком переноса строки.Набери данную строку и последующую в одной строке.

oleks1y, 2009-06-16 в 15:58:52

У меня все застопоряется на строке:
mail -s testmail test@testim.u.ua < /etc/pf.conf

Я использую не пакетный фильтр, а IPFILTER. Как быть мне???

macuser, 2009-06-16 в 18:05:29

oleks1y, это просто отправка тестового письма, отправьте что угодно...

uHk, 2009-06-16 в 18:13:46

/etc/pf.conf это все-лишь для примера, можете попробовать /etc/rc.conf

oleks1y, 2009-06-19 в 14:23:46

Спасибо, почту отправил все работает. Но не получает(( При попытке получения пишет что соединение с pop3 сервером прошло удачно, но затем ошибка login failed

John Mate, 2009-06-22 в 16:16:09

Спасибо, может кто смог прикрутить postfixadmin, пишите.rnDNK, выложи плиз скрипты.

oleks1y, 2009-06-30 в 11:11:05

Народ, помогите! На отправку почта работает, а на прием соединение с pop3 сервером прошло удачно, но затем ошибка login failed!!!! Перечитал кучу инфы, но решения не нашел. Пробовал пустой пароль на учетную запись (думал проблема с кодировкой), та же фигня. Если нужно выложить какие-то свои конфиги, выложу.

Covax, 2009-07-13 в 20:49:54

Ссылка на обсуждение неправильная.

Osis, 2009-08-21 в 17:02:20

Just wanted to add that there are many many bad people outside that does not want to confugure their smtp servers correctly as a result with this configuration you wont be able to receive e-mail messages from unsuspecting users that use services provided by lazy site administrator. I would not dare to put configuration so tight on production server.

also good rule is:

deny local_parts = !/etc/exim4/local_user
   domains = /etc/exim4/local_domain
   set acl_m0 = ${eval:$acl_m0+1}
   message  = Bad RCPTS

deny condition = ${if >{$acl_m0}{1}{yes}{no}}
message  = Bad local RCPTS

little bit of explanation:
if user does not exist for that domain acl_m0 is increased by 1, if message have more than one addressee, then these 2 rules will be checked for each recipient, so, if  someone have put 2 non-existent recipients in one message message will be denied even if it has some valid recipients for your domain

UBIK, 2009-09-25 в 4:03:31

hostlist relay_from_hosts =${lookup pgsql{SELECT hosts FROM relayfromhosts}}
заменил на
hostlist relay_from_hostslocalhost:127.0.0.0/8:192.168.0.0/16

локально почта заработала

loko9988, 2009-10-07 в 17:54:07

Не отсылает почту на внешку..... хз как лечить... ссылка на обсуждение левая

Cancer, 2010-08-22 в 13:25:33

В строке
dynablock.njabl.org : \


Убери : \ так как после него ничего нету

loko9988, 2010-08-22 в 14:39:28

спс вам, за ответ и статью

DNK, 2010-11-09 в 16:17:03

Внес небольшие изменения в статью.Все работает с copy-past. Проверил на FreeBSD 8.1. Единственное замечание : хосты для блэклиста поищите сами :)


Оставьте свой комментарий:
Ваше имя:   *
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 + сжатие и шифрование
подписка

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

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

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0844 секунд
Из них PHP: 51%; SQL: 49%; Число SQL-запросов: 86 шт.
Исходный размер: 190579; Сжатая: 38042