Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> почтовые системы —> exim&dovecot + fetchmail + SSL

Установка почтового сервера Exim & Dovecot + Postfixadmin & Roundcube + Fetchmail & smtp_relay + SSL шифрование

Автор: Cancer.


Понадобилось настроить почтовый сервер. Вот первым делом спросил на форуме, какой из MTA лучший, ответ однозначный дали Exim. Конфиги мои по большей части взяты со статей на http://www.lissyara.su/.
Мне поставили такую задачу, у нас был куплен хост на masterhost.ru с почтовым доменом @domain-ak.ru . Далее мне нужно было поставить MTA Exim в локалке и сделать так, чтобы внутренняя почта ходила внутри сети, а внешняя почта приходила сначала на masterhost, а потом masterhost ее редиректил на внутренний сервер. Сделано это было для того чтобы, оставить оплаченную защиту от спама и вирусов, да и немного съэкономить траффик. Ну если наш канал умрет, то те пользователи, ящики которых прописаны только на внешнем почтовом сервере (филиалы и т.п.) отсылали почту друг другу и во внешний мир не через наш канал.

Так как хостинг на masterhost.ru не позволяет делать форвардинг почты для домена но позволяет делать списки рассылки, на который можно подписать любой адрес, схема реализации будет такой:

1.Отправка почты exim'ом на masterhost.ru для домена "@domain-ak.ru" если пользователя не существует в локальном домене "@domain-ak.ru".

2.Отправка всей не локальной почты т.е на удаленные сервера кроме домена
"@domain-ak.ru", отправка производиться через открытый релей провайдера "smtp.donpac.ru"

3.Если лег сервер провайдера donpac.ru ,то EXIM отправляет напрямую от самого себя.

4.Прием почты с мастерхоста. Все письма на адреса *@domain-ak.ru  мастерхост форвардит на  *@zern.domain-ak.ru. (создаем пересылку, подписываем адрес)

5.Подмена адреса получателя с @zern.domain-ak.ru на @domain-ak.ru. алисы типа pupkin@zern.domain-ak.ru -> pupkin@domain-ak.ru мы прописывать не будем.

6.И ставим Roundcube webmail лучше него я ничего пока еще не видел )(GPL)

7.Ну и прикрутим ко всему этому fetchmail для того что бы тянул письма с удаленных почтовых серваков на локальный.

Да и чуть не забыл, что MTA находиться в DMZ с одной сетевой картой

Сразу пишу статья почти ничем отличается от http://www.lissyara.su/?id=1173 , токо задачи чуть чуть разные, да и написал думаю чуть более полнее, ну конечно кроме конфигов exim и dovecot, их Леха хорошо перевел, так что любому понятно будет.

Перед тем как начать установку обновите порты


Ставим Apache 1.3

/usr/home/cancer/> cd /usr/ports/www/apache13
/usr/ports/www/apache13/> make && make install && make clean

Добавим строку в /etc/rc.conf для автозапуска apache при перезагрузке сервера
/usr/ports/www/apache13/> echo 'apache_enable="YES"' >> /etc/rc.conf

Запускаем сам apache
/usr/> /usr/local/etc/rc.d/apache start

Смотрим запустился ли веб сервер apache
ps axw | grep http

6283 ?? Ss 0:00,05 /usr/local/sbin/httpd
6284 ?? I 0:00,00 /usr/local/sbin/httpd
6285 ?? I 0:00,00 /usr/local/sbin/httpd
6286 ?? I 0:00,00 /usr/local/sbin/httpd
6287 ?? I 0:00,00 /usr/local/sbin/httpd
6288 ?? I 0:00,00 /usr/local/sbin/httpd
6380 p0 R+ 0:00,00 grep http

   



Ставим СУБД MySQL 5.1

/usr/ports/> cd /usr/ports/databases/mysql51-server/
/usr/ports/databases/mysql51-server/> make && make install && make clean

Добавляем в /etc/rc.conf строку для запуска mysql
//> echo 'mysql_enable="YES"' >> /etc/rc.conf

И запускаем сам сервер
//> /usr/local/etc/rc.d/mysql-server start

Проверяем работу Mysql, должно быть что то типа этого.
//> ps axw | grep mysql

6210 p0 RV 0:00,00 grep mysql (csh)
6188 p1- S 0:00,02 /bin/sh /usr/local/bin/mysqld_safe
--defaults-extra-file=/var/db/mysql/my.cnf -- user=mysql --datadir=/var
6206 p1- S 0:00,94 /usr/local/libexec/mysqld
--defaults-extra-file=/var/db/mysql/my.cnf --basedir=/usr/local --datadir=/var/

Далее, задаем пароль для суперпользователя root
//> mysqladmin -u root password 'your_password'
//> mysqladmin -u root -h hostname password 'your_password'

Создаем таблицы в БД:
//> mysql -u root -p

############# БД: `exim`
 
  
USE mysql;
INSERT INTO `user` (`Host`, `User`, `Password`)
VALUES ('localhost','exim',password('exim'));
INSERT INTO `db` (`Host`, `Db`, `User`, `Select_priv`)
VALUES ('localhost','exim','exim','Y');
FLUSH PRIVILEGES;
GRANT USAGE ON exim.* TO exim@localhost;
GRANT SELECT, INSERT, DELETE, UPDATE ON exim.* TO exim@localhost;
CREATE DATABASE `exim`;
USE `exim`;



 
#############Структура таблицы `admin`
 

CREATE TABLE `admin` (
  `username` varchar(255) NOT NULL default '',
  `password` varchar(255) NOT NULL default '',
  `created` datetime NOT NULL default '0000-00-00 00:00:00',
  `modified` datetime NOT NULL default '0000-00-00 00:00:00',
  `active` tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (`username`),
  KEY `username` (`username`)
) TYPE=MyISAM COMMENT='Exim and dovecot Admin - Virtual Admins';



 
#############Структура таблицы `alias`


CREATE TABLE `alias` (
  `address` varchar(255) NOT NULL default '',
  `goto` text NOT NULL,
  `domain` varchar(255) NOT NULL default '',
  `created` datetime NOT NULL default '0000-00-00 00:00:00',
  `modified` datetime NOT NULL default '0000-00-00 00:00:00',
  `active` tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (`address`),
  KEY `address` (`address`)
) TYPE=MyISAM COMMENT='Exim and dovecot Admin - Virtual Aliases';




#############Структура таблицы `domain`


CREATE TABLE `domain` (
  `domain` varchar(255) NOT NULL default '',
  `description` varchar(255) NOT NULL default '',
  `aliases` int(10) NOT NULL default '0',
  `mailboxes` int(10) NOT NULL default '0',
  `maxquota` int(10) NOT NULL default '0',
  `transport` varchar(255) default NULL,
  `backupmx` tinyint(1) NOT NULL default '0',
  `created` datetime NOT NULL default '0000-00-00 00:00:00',
  `modified` datetime NOT NULL default '0000-00-00 00:00:00',
  `active` tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (`domain`),
  KEY `domain` (`domain`)
) TYPE=MyISAM COMMENT='Exim and dovecot Admin - Virtual Domains';



 
#############Структура таблицы `domain_admins`
 

CREATE TABLE `domain_admins` (
  `username` varchar(255) NOT NULL default '',
  `domain` varchar(255) NOT NULL default '',
  `created` datetime NOT NULL default '0000-00-00 00:00:00',
  `active` tinyint(1) NOT NULL default '1',
  KEY `username` (`username`)
) TYPE=MyISAM COMMENT='Exim and dovecot Admin - Domain Admins';



 
#############Структура таблицы `log`
 

CREATE TABLE `log` (
  `timestamp` datetime NOT NULL default '0000-00-00 00:00:00',
  `username` varchar(255) NOT NULL default '',
  `domain` varchar(255) NOT NULL default '',
  `action` varchar(255) NOT NULL default '',
  `data` varchar(255) NOT NULL default '',
  KEY `timestamp` (`timestamp`)
) TYPE=MyISAM COMMENT='Exim and dovecot Admin - Log';




#############Структура таблицы `mailbox`
 

CREATE TABLE `mailbox` (
  `username` varchar(255) NOT NULL default '',
  `password` varchar(255) NOT NULL default '',
  `name` varchar(255) NOT NULL default '',
  `maildir` varchar(255) NOT NULL default '',
  `quota` int(10) NOT NULL default '0',
  `domain` varchar(255) NOT NULL default '',
  `created` datetime NOT NULL default '0000-00-00 00:00:00',
  `modified` datetime NOT NULL default '0000-00-00 00:00:00',
  `active` tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (`username`),
  KEY `username` (`username`)
) TYPE=MyISAM COMMENT='Exim and dovecot Admin - Virtual Mailboxes';



 
#############Структура таблицы `vacation`



CREATE TABLE `vacation` (
  `email` varchar(255) NOT NULL default '',
  `subject` varchar(255) NOT NULL default '',
  `body` text NOT NULL,
  `cache` text NOT NULL,
  `domain` varchar(255) NOT NULL default '',
  `created` datetime NOT NULL default '0000-00-00 00:00:00',
  `active` tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (`email`),
  KEY `email` (`email`)
) TYPE=MyISAM COMMENT='Exim and dovecot Admin - Virtual Vacation';


# И на последок дадим пользователю exim права бога :)

GRANT ALL PRIVILEGES ON *.* TO exim@localhost IDENTIFIED BY \
'exim' WITH GRANT OPTION;




Ставим PHP 5

/usr/> cd /usr/ports/lang/php5
/usr/ports/lang/php5/> make config

     +--------------------------------------------------------------------+
     |                   Options for php5 5.2.8                           |
     | +----------------------------------------------------------------+ |
     | |  [X] CLI        Build CLI version                              | |
     | |  [X] CGI        Build CGI version                              | |
     | |  [X] APACHE     Build Apache module                            | |
     | |  [ ] DEBUG      Enable debug                                   | |
     | |  [X] SUHOSIN    Enable Suhosin protection system (not for jails) |
     | |  [X] MULTIBYTE  Enable zend multibyte support                  | |
     | |  [ ] IPV6       Enable ipv6 support                            | |
     | |  [ ] MAILHEAD   Enable mail header patch                       | |
     | |  [ ] REDIRECT   Enable force-cgi-redirect support (CGI only)   | |
     | |  [ ] DISCARD    Enable discard-path support (CGI only)         | |
     | |  [ ] FASTCGI    Enable fastcgi support (CGI only)              | |
     | |  [ ] PATHINFO   Enable path-info-check support (CGI only)      | |
     +-+------v(+)------------------------------------------------------+-+
     |                       [  OK  ]       Cancel                        |
     +--------------------------------------------------------------------+

Устанавливаем
/usr/ports/lang/php5/> make && make install && make clean

Добавляем следующие строки в /usr/local/etc/apache/httpd.conf #для активации php
//> ee /usr/local/etc/apache/httpd.conf

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

Далее создаем тестовую страничку
//> ee /usr/local/www/data/index.php        #вот с таким содержанием

<?
    phpinfo();
?>

Перезапускаем веб сервер командой
//> /usr/local/etc/rc.d/apache restart

Проверяем работоспособность php заходим с любого
интернет браузера http://ip_tachki/index.php




Ставим PHP5_EXTENSIONS

//> cd /usr/ports/lang/php5-extensions
/usr/ports/lang/php5-extensions/> make config

     +--------------------------------------------------------------------+
     |                   Options for php5-extensions 1.2                  |
     | +----------------------------------------------------------------+ |
     | |  [ ] BCMATH      bc style precision math functions             | |
     | |  [X] BZ2         bzip2 library support                         | |
     | |  [ ] CALENDAR    calendar conversion support                   | |
     | |  [ ] CTYPE       ctype functions                               | |
     | |  [ ] CURL        CURL support                                  | |
     | |  [ ] DBA         dba support                                   | |
     | |  [ ] DBASE       dBase library support                         | |
     | |  [ ] DOM         DOM support                                   | |
     | |  [ ] EXIF        EXIF support                                  | |
     | |  [ ] FILEINFO    fileinfo support                              | |
     | |  [ ] FILTER      input filter support                          | |
     | |  [ ] FRIBIDI     FriBidi support                               | |
     | |  [ ] FTP         FTP support                                   | |
     | |  [X] GD          GD library support                            | |
     | |  [X] GETTEXT     gettext library support                       | |
     | |  [ ] GMP         GNU MP support                                | |
     | |  [ ] HASH        HASH Message Digest Framework                 | |
     | |  [X] ICONV       iconv support                                 | |
     | |  [X] IMAP        IMAP support                                  | |
     | |  [ ] INTERBASE   Interbase 6 database support (Firebird)       | |
     | |  [ ] JSON        JavaScript Object Serialization support       | |
     | |  [ ] LDAP        OpenLDAP support                              | |
     | |  [X] MBSTRING    multibyte string support                      | |
     | |  [ ] MCRYPT      Encryption support                            | |
     | |  [ ] MHASH       Crypto-hashing support                        | |
     | |  [ ] MING        ming shockwave flash support                  | |
     | |  [ ] MSSQL       MS-SQL database support                       | |
     | |  [X] MYSQL       MySQL database support                        | |
     | |  [X] MYSQLI      MySQLi database support                       | |
     | |  [ ] NCURSES     ncurses support (CLI only)                    | |
     | |  [ ] ODBC        unixODBC support                              | |
     | |  [ ] OPENSSL     OpenSSL support                               | |
     | |  [ ] PCNTL       pcntl support (CLI only)                      | |
     | |  [ ] PDF         PDFlib support (implies GD)                   | |
     | |  [ ] PDO         PHP Data Objects Interface (PDO)              | |
     | |  [ ] PDO_SQLITE  PDO sqlite driver                             | |
     | |  [ ] PGSQL       PostgreSQL database support                   | |
     | |  [ ] POSIX       POSIX-like functions                          | |
     | |  [ ] PSPELL      pspell support                                | |
     | |  [ ] READLINE    readline support (CLI only)                   | |
     | |  [ ] RECODE      recode support                                | |
     | |  [X] SESSION     session support                               | |
     | |  [ ] SHMOP       shmop support                                 | |
     | |  [X] SIMPLEXML   simplexml support                             | |
     | |  [ ] SNMP        SNMP support                                  | |
     | |  [ ] SOAP        SOAP support                                  | |
     | |  [ ] SOCKETS     sockets support                               | |
     | |  [ ] SPL         Standard PHP Library                          | |
     | |  [ ] SQLITE      sqlite support                                | |
     | |  [ ] SYBASE_CT   Sybase database support                       | |
     | |  [ ] SYSVMSG     System V message support                      | |
     | |  [ ] SYSVSEM     System V semaphore support                    | |
     | |  [ ] SYSVSHM     System V shared memory support                | |
     | |  [ ] TIDY        TIDY support                                  | |
     | |  [X] TOKENIZER   tokenizer support                             | |
     | |  [ ] WDDX        WDDX support (implies XML)                    | |
     | |  [X] XML         XML support                                   | |
     | |  [X] XMLREADER   XMLReader support                             | |
     | |  [ ] XMLRPC      XMLRPC-EPI support                            | |
     | |  [X] XMLWRITER   XMLWriter support                             | |
     | |  [ ] XSL         XSL support (Implies DOM)                     | |
     | |  [ ] YAZ         YAZ support (ANSI/NISO Z39.50)                | |
     | |  [ ] ZIP         ZIP support                                   | |
     | |  [X] ZLIB        ZLIB support                                  | |
     +-+------v(+)------------------------------------------------------+-+
     |                       [  OK  ]       Cancel                        |
     +--------------------------------------------------------------------+

Устанавливаем
/usr/ports/lang/php5-extensions/> make && make install && make clean

//> cp /usr/local/etc/php.ini-recommended /usr/local/etc/php.ini

И раскомментируем строку
session.save_path = "/tmp"

Перезагрузим apache
//> /usr/local/etc/rc.d/apache restart

   


   


Ставим Postfixadmin 2.2.1.1

//> cd /usr/ports/mail/postfixadmin/
/usr/ports/mail/postfixadmin/> make config

     +--------------------------------------------------------------------+
     |                   Options for postfixadmin 2.2.1.1                 |
     | +----------------------------------------------------------------+ |
     | |  [X] MYSQL   MySQL back-end (use mysql PHP extension)          | |
     | |  [X] MYSQLI  MySQL 4.1+ back-end (use mysqli PHP extension)    | |
     | |  [ ] PGSQL   PostgreSQL back-end (use pgsql PHP extension)     | |
     | |                                                                | |
     +-+------v(+)------------------------------------------------------+-+
     |                       [  OK  ]       Cancel                        |
     +--------------------------------------------------------------------+

//> make && make install && make clean

Добавляем алиас в httpd.conf
//> ee /usr/local/etc/apache/httpd.conf

# Алиас для "postfixadmin"
Alias /postfixadmin "/usr/local/www/postfixadmin/"
<Directory "/usr/local/www/postfixadmin/">
    Options -Indexes FollowSymLinks MultiViews
    DirectoryIndex index.php
    AllowOverride None
    Order deny,allow
    Allow from all
</Directory>

Правим конфиг postfixadmin
//> ee /usr/local/www/postfixadmin/config.inc.php

<?php
/**
 * Postfix Admin
 *
 * LICENSE
 * This source file is subject to the GPL license that is bundled with
 * this package in the file LICENSE.TXT.
 *
 * Further details on the project are available at :
 *     http://www.postfixadmin.com or http://postfixadmin.sf.net
 *
 * @version $Id: config.inc.php 408 2008-07-21 21:43:06Z GingerDog $
 * @license GNU GPL v2 or later.
 *
 * File: config.inc.php
 * Contains configuration options.
 */

if (ereg ("config.inc.php", $_SERVER['PHP_SELF']))
{
   header ("Location: login.php");
   exit;
}

/*****************************************************************
 *  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 * The following line needs commenting out or removing before the
 * application will run!
 * Doing this implies you have changed this file as required.
 */
// $CONF['configured'] = false;


// Postfix Admin Path
// Set the location of your Postfix Admin installation here.
//Указывает где установлен postfixadmin
// YOU MUST ENTER THE COMPLETE URL e.g. http://domain.tld/postfixadmin
$CONF['postfix_admin_url'] = 'http://mail.zern.domain-ak.ru/postfixadmin/';

// shouldn't need changing.
$CONF['postfix_admin_path'] = '/usr/local/www/postfixadmin/';

// Language config
// Language files are located in './languages', change as required..
// Язык интерфейса. Список всех языков можно посмотреть
// в каталоге './languages'
$CONF['default_language'] = 'ru';

// Database Config
// mysql = MySQL 3.23 and 4.0
// mysqli = MySQL 4.1
// pgsql = PostgreSQL
// Параметры БД. Здесь необходимо указать тип БД
// MySQL или PostgreSQL),
// имя пользователя и пароль, использующиеся при
// подключении, а также имя БД.
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'exim';
$CONF['database_password'] = 'exim';
$CONF['database_name'] = 'exim';
$CONF['database_prefix'] = '';

// Here, if you need, you can customize table names.
$CONF['database_prefix'] = '';
$CONF['database_tables'] = array (


    'admin' => 'admin',
    'alias' => 'alias',
    'alias_domain' => 'alias_domain',
    'config' => 'config',
    'domain' => 'domain',
    'domain_admins' => 'domain_admins',
    'fetchmail' => 'fetchmail',
    'log' => 'log',
    'mailbox' => 'mailbox',
    'vacation' => 'vacation',
    'vacation_notification' => 'vacation_notification',
);

// Site Admin
// Define the Site Admins email address below.
// This will be used to send emails from to create mailboxes.
// email от имени которго будет приходит письмо пользователю
// при создании почтового ящика
$CONF['admin_email'] = 'postmaster@domain-ak.ru';

// Mail Server
// Hostname (FQDN) of your mail server.
// This is used to send email to Postfix in order
// to create mailboxes.
// Имя хоста в формате FQDN где находится
// почтовый сервер postfix. Эти данные будут
//использоваться при отправке
// email для создания почтовых ящиков
$CONF['smtp_server'] = 'localhost';
$CONF['smtp_port'] = '25';

// Encrypt
// In what way do you want the passwords to be crypted?
// md5crypt = internal postfix admin md5
// md5 = md5 sum of the password
// system = whatever you have set as your PHP system default
// cleartext = clear text passwords (ouch!)
// system - используется метод шифрования
// установленный по умолчанию в php
// cleartext - в чистом виде, т.е. без шифрования.
$CONF['encrypt'] = 'cleartext';

// Minimum length required for passwords. Postfixadmin will not
// allow users to set passwords which are shorter than this value.
// Минимальная длина пароля. Postfixadmin не позволит 
// пользователям сделать пароль
// короче чем эта величина 
$CONF['min_password_length'] = 5;

// Generate Password
// Generate a random password for a mailbox or admin and display it.
// If you want to automagically generate paswords set this to 'YES'.
// Если вы хотите, чтобы postfix admin автоматически 
// генерировал и отображал
// пароль при создании почтового ящика установите значение YES
$CONF['generate_password'] = 'NO';

// Show Password
// Always show password after adding a mailbox or admin.
// If you want to always see what password was set set
//  this to 'YES'.
//  Показывать пароль админа или юзера при
// просмотре списка ящиков 
$CONF['show_password'] = 'NO';
// Page Size
// Set the number of entries that you would like to see
// in one page.
// Количество записей, одновременно отображаемых на странице
$CONF['page_size'] = '25';

// Default Aliases
// The default aliases that need to be created for all domains.
// Алиасы, создаваемые при создании домена
$CONF['default_aliases'] = array (
    'abuse' => 'abuse@domain-ak.ru',
    'hostmaster' => 'hostmaster@domain-ak.ru',
    'postmaster' => 'postmaster@domain-ak.ru',
    'webmaster' => 'webmaster@domain-ak.ru'
);

// Mailboxes
// If you want to store the mailboxes per domain set this to 'YES'.
// Examples:
//   YES: /usr/local/virtual/domain.tld/username@domain.tld
//   NO:  /usr/local/virtual/username@domain.tld
// Использовать имя домена в пути к почтовому ящику 'YES'.
$CONF['domain_path'] = 'YES';
// If you don't want to have the domain in your
// mailbox set this to 'NO'.
// Examples:
//   YES: /usr/local/virtual/domain.tld/username@domain.tld
//   NO:  /usr/local/virtual/domain.tld/username
// Note: If $CONF['domain_path'] is set to NO, this setting
// will be forced to YES.
// Включать имя домена в имя почтового ящика
$CONF['domain_in_mailbox'] = 'NO';

// Default Domain Values
// Specify your default values below. Quota in MB.
// Значения по умолчанию при создании домена. Количество алиасов,
// почтовых ящиков и максимальная квота в Мб.Если стоит 0,
// это без ограничений
$CONF['aliases'] = '0';
$CONF['mailboxes'] = '0';
$CONF['maxquota'] = '0';

// Quota
// When you want to enforce quota for your mailbox
// users set this to 'YES'.
// Позволяет задавать квоты при создании почтового ящика
$CONF['quota'] = 'YES';
// You can either use '1024000' or '1048576'
$CONF['quota_multiplier'] = '1024000';


// Transport
// If you want to define additional transport options for
// a domain set this to 'YES'.
// Read the transport file of the Postfix documentation.
// Позволяет устанавливать дополнительные параметры
// транспорта для домена
$CONF['transport'] = 'NO';
// Transport options
// If you want to define additional transport options
// put them in array below.
// Опции транспорта.
$CONF['transport_options'] = array (
    'virtual',  // for virtual accounts
    'local',    // for system accounts
    'relay'     // for backup mx
);
// Transport default
// You should define default transport. It must be in array above.
// Транспорт по умолчанию
$CONF['transport_default'] = 'virtual';

// Virtual Vacation
// If you want to use virtual vacation for you mailbox
// users set this to 'YES'.
// NOTE: Make sure that you install the vacation module
// Следующих два параметра используются для организации DNS
$CONF['vacation'] = 'NO';
// This is the autoreply domain that you will need to 
// set in your Postfix
// transport maps to handle virtual vacations. It does
// not need to be a
// real domain (i.e. you don't need to setup DNS for it).
$CONF['vacation_domain'] = 'autoreply.domain-ak.ru';

// Vacation Control
// If you want users to take control of vacation set this to 'YES'.
// Управления алиасами, которые создает postfix для каждого ящика
$CONF['vacation_control'] ='YES';

// Vacation Control for admins
// Set to 'YES' if your domain admins should be able to
// edit user vacation.
// Установите "YES", если администраторы имеют
// возможность редактировать 
// ящики (Активный Неактивный)
$CONF['vacation_control_admin'] = 'YES';

// Alias Control
// Postfix Admin inserts an alias in the alias table for
// every mailbox it creates.
// The reason for this is that when you want catch-all and
// normal mailboxes
// to work you need to have the mailbox replicated in the
// alias table.
// If you want to take control of these aliases as well
// set this to 'YES'.
// Если вы хотите взять под контроль алиасы, то установить "YES".
$CONF['alias_control'] = 'YES';

// Alias Control for admins
// Set to 'NO' if your domain admins shouldn't be
// ableto edit user aliases.
// Право на редактирование алисов админами
$CONF['alias_control_admin'] = 'YES';

// Special Alias Control
// Set to 'NO' if your domain admins shouldn't be
// able to edit default aliases.
// Право на редактирование стандартных алиасов админами
$CONF['special_alias_control'] = 'YES';

// Alias Goto Field Limit
// Set the max number of entries that you would like to see
// in one 'goto' field in overview, the rest will be hidden
//  and "[and X more...]"
// will be added.'0' means no limits.
$CONF['alias_goto_limit'] = '0';

// Backup
// If you don't want backup tab set this to 'NO';
// Включить кнопку бэкап "YES" "NO"
$CONF['backup'] = 'YES';

// Send Mail
// If you don't want sendmail tab set this to 'NO';
// Включает закладку "Отправить письмо"
$CONF['sendmail'] = 'YES';

// Logging
// If you don't want logging set this to 'NO';
// Позволяет вести лог действий работы с postfixadmin
$CONF['logging'] = 'YES';
// Fetchmail
// If you don't want fetchmail tab set this to 'NO';
// Включает закладку "Сбор почты" (fetchmail)
$CONF['fetchmail'] = 'YES';

// fetchmail_extra_options allows users to specify 
// any fetchmail options and any MDA
// (it will even accept 'rm -rf /' as MDA!)
// This should be set to NO, except if you *really* trust *all* your users.
$CONF['fetchmail_extra_options'] = 'NO';

// Header
// Отображать текст вверху страницы и его содержимое
$CONF['show_header_text'] = 'NO';
$CONF['header_text'] = ':: Postfix Admin ::';

// link to display under 'Main' menu when logged in as a user.
$CONF['user_footer_link'] = "http://zern.domain-ak.ru/postfixadmin";

// Footer
// Below information will be on all pages.
// If you don't want the footer information to appear set this to 'NO'.
// Аналогично, только текст будет отображаться внизу всех страниц
$CONF['show_footer_text'] = 'YES';
$CONF['footer_text'] = 'Вернуться на главную страницу';
$CONF['footer_link'] = 'http://zern.domain-ak.ru/postfixadmin';



// Welcome Message
// This message is send to every newly created mailbox.
// Change the text between EOM.
// Текст письма привествия. Это письмо будет высылаться на каждый
// создаваемый почтовый ящик
$CONF['welcome_text'] = <<<EOM
Hi,

Welcome to your new account.
EOM;

// When creating mailboxes or aliases, check that the domain-part of the
// address is legal by performing a name server look-up.
// #Обязательно поменяйте этот параметр на NO
$CONF['emailcheck_resolve_domain']='NO';


// Optional:
// Analyze alias gotos and display a colored block in the first column
// indicating if an alias or mailbox appears to deliver to a non-existent
// account.  Also, display indications, for POP/IMAP mailboxes and
// for custom destinations (such as mailboxes that forward to a UNIX shell
// account or mail that is sent to a MS exchange server, or any other
// domain or subdomain you use)
// See http://www.w3schools.com/html/html_colornames.asp for a list of
// color names available on most browsers

//set to YES to enable this feature
$CONF['show_status']='NO';
//display a guide to what these colors mean
$CONF['show_status_key']='NO';
// 'show_status_text' will be displayed with the background colors
// 'show_status_text' will be displayed with the background colors
// associated with each status, you can customize it here
$CONF['show_status_text']='&nbsp;&nbsp;';
// show_undeliverable is useful if most accounts are delivered to this
// postfix system.  If many aliases and mailboxes are forwarded
// elsewhere, you will probably want to disable this.
$CONF['show_undeliverable']='NO';
$CONF['show_undeliverable_color']='tomato';
//# Уберите обязательно перенос \
$CONF['show_undeliverable_exceptions']=array("unixmail.domain.ext", \
"exchangeserver.domain.ext" 
,"gmail.com");
$CONF['show_popimap']='NO';
$CONF['show_popimap_color']='darkgrey';
// set 'show_custom_count' to 0 to disable custom indicators
$CONF['show_custom_count']=2;
$CONF['show_custom_domains']=array("subdomain.domain.ext","domain2.ext");
$CONF['show_custom_colors']=array("lightgreen","lightblue");


// Optional:
// Script to run after creation of mailboxes.
// Note that this may fail if PHP is run in "safe mode", or if
// operating system features (such as SELinux) or limitations
// prevent the web-server from executing external scripts.
// $CONF['mailbox_postcreation_script']='sudo -u courier \
// /usr/local/bin/postfixadmin-mailbox-postcreation.sh';

// Optional:
// Script to run after alteration of mailboxes.
// Note that this may fail if PHP is run in "safe mode", or if
// operating system features (such as SELinux) or limitations
// prevent the web-server from executing external scripts.
// $CONF['mailbox_postedit_script']='sudo -u courier \
// /usr/local/bin/postfixadmin-mailbox-postedit.sh';

// Optional:
// Script to run after deletion of mailboxes.
// Note that this may fail if PHP is run in "safe mode", or if
// operating system features (such as SELinux) or limitations
// prevent the web-server from executing external scripts.
// $CONF['mailbox_postdeletion_script']='sudo -u courier \
// /usr/local/bin/postfixadmin-mailbox-postdeletion.sh';

// Optional:
// Script to run after deletion of domains.
// Note that this may fail if PHP is run in "safe mode", or if
// operating system features (such as SELinux) or limitations
// prevent the web-server from executing external scripts.
// $CONF['domain_postdeletion_script']='sudo -u courier \
// /usr/local/bin/postfixadmin-domain-postdeletion.sh';

// Optional:
// Sub-folders which should automatically be created for new users.
// The sub-folders will also be subscribed to automatically.
// Will only work with IMAP server which implement sub-folders.
// Will not work with POP3.
// If you define create_mailbox_subdirs, then the
// create_mailbox_subdirs_host must also be defined.

//
// $CONF['create_mailbox_subdirs']=array('Spam');
// $CONF['create_mailbox_subdirs_host']='localhost';
//
// Normally, the TCP port number does not have to be specified.
// $CONF['create_mailbox_subdirs_hostport']=143;
//
// If you have trouble connecting to the IMAP-server, then specify
// a value for $CONF['create_mailbox_subdirs_hostoptions']. These
// are some examples to experiment with:
// $CONF['create_mailbox_subdirs_hostoptions']=array('notls');
// $CONF['create_mailbox_subdirs_hostoptions']= \
// array('novalidate-cert','norsh');
// See also the "Optional flags for names" table at
// http://www.php.net/manual/en/function.imap-open.php


// Theme Config
// Specify your own logo and CSS file
$CONF['theme_logo'] = 'images/logo-default.png';
$CONF['theme_css'] = 'css/default.css';

// If you want to keep most settings at default values
// and/or want to ensure
// that future updates work without problems, you can use
// a separate config
// file (config.local.php) instead of editing this file
// and override some
// settings there.
if (file_exists(dirname(__FILE__) . '/config.local.php')) { # for /
    include(dirname(__FILE__) . '/config.local.php');
}

//
// END OF CONFIG FILE
//
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */

Перезагрузим apache
//> /usr/local/etc/rc.d/apache restart

Далее переходим в браузере http://ip/postfixadmin/
там создаем Администратора для того чтобы создавать домены и других админов
Будет что то типа





создаем администратора и нас просят удалить setup.php, но мы его просто переименуем :)
//> mv /usr/local/www/postfixadmin/setup.php \
/usr/local/www/postfixadmin/setup-old.php


Устанавливаем Dovecot 1.1.8

//> cd /usr/ports/mail/dovecot
/usr/ports/mail/dovecot/> make config

     +--------------------------------------------------------------------+
     |                   Options for dovecot 1.1.8                        |
     | +----------------------------------------------------------------+ |
     | |  [X] KQUEUE       kqueue(2) support                            | |
     | |  [X] SSL          SSL support                                  | |
     | |  [X] IPV6         IPv6 support                                 | |
     | |  [X] POP3         POP3 support                                 | |
     | |  [X] LDA          LDA support                                  | |
     | |  [ ] MANAGESIEVE  ManageSieve support                          | |
     | |  [ ] GSSAPI       GSSAPI support                               | |
     | |  [ ] VPOPMAIL     VPopMail support                             | |
     | |  [ ] BDB          BerkleyDB support                            | |
     | |  [ ] LDAP         OpenLDAP support                             | |
     | |  [ ] PGSQL        PostgreSQL support                           | |
     | |  [X] MYSQL        MySQL support                                | |
     | |  [ ] SQLITE       SQLite support                               | |
     | |                                                                | |
     +-+------v(+)------------------------------------------------------+-+
     |                       [  OK  ]       Cancel                        |
     +--------------------------------------------------------------------+

/usr/ports/mail/dovecot/> make && make install && make clean




Создаем сертификаты для того что бы Dovecot мог работать с SSL шифрованием
//> mkdir /etc/dovecot
//> mkdir /etc/dovecot/ssl


Далее генерим ключ и сертификат, в моем случае буду генерить 2048 битный
//> cd /etc/dovecot/ssl
/etc/dovecot/ssl/> openssl req -new -outform PEM -out dovecot.crt \
-newkey rsa:2048 -nodes -keyout dovecot.key -keyform PEM -days 9999 -x509

Generating a 2048 bit RSA private key
..........................................+++
........................................+++
writing new private key to 'dovecot.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Rostov
Locality Name (eg, city) []:Zernograd
Organization Name (eg, company) [Internet Widgits Pty Ltd]:COMPANY
Organizational Unit Name (eg, section) []:IT
Common Name (eg, YOUR name) []:pop.zern.domain-ak.ru
Email Address []:postmaster@domain-ak.ru



Далее пишем конфиг Dovecot'a
/usr/ports/mail/dovecot/> cd /usr/local/etc/
/usr/local/etc/> ee dovecot.conf

base_dir = /var/run/dovecot/
protocols = imap imaps pop3 pop3s
# Renamed ssl_disable = yes to ssl = no
ssl = yes
ssl_cert_file = /etc/dovecot/ssl/dovecot.crt
ssl_key_file = /etc/dovecot/ssl/dovecot.key
protocol imap {
       listen = *:143
       ssl_listen = *:9143
}


protocol pop3 {
        listen = *:110
        ssl_listen = *:9110
}
disable_plaintext_auth = no
shutdown_clients = yes
log_timestamp = "%b %d %H:%M:%S "
syslog_facility = mail
login_dir = /var/run/dovecot/login
login_chroot = yes
login_user = dovecot
login_process_size = 64
login_process_per_connection = yes
login_processes_count = 3
login_max_processes_count = 64
login_greeting = dovecot MUA ready
login_log_format_elements = user=<%u> method=%m rip=%r lip=%l %c
login_log_format = %$: %s
verbose_proctitle = yes
first_valid_uid = 25
first_valid_gid = 0
mail_access_groups = mail
# После отладки убрать mail_debug
mail_debug = yes
mail_location = maildir:/var/mail/exim/%d/%n
# Removed umask. It wasn't really used anywhere anymore
# umask = 0077

protocol imap {
  imap_client_workarounds = delay-newmail outlook-idle \
  netscape-eoh tb-extra-mailbox-sep
}


protocol pop3 {
  pop3_uidl_format = %08Xu%08Xv
  pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
protocol lda {
  postmaster_address = postmaster@domain-ak.ru
  auth_socket_path = /var/run/dovecot/auth-master
}
auth default { 
mechanisms = plain
   socket listen {
     master {
       path = /var/run/dovecot/auth-master
       mode = 0600
       user = mailnull
     }
   }
  passdb sql {
    args = /usr/local/etc/dovecot-sql.conf
  }
  userdb sql {
    args = /usr/local/etc/dovecot-sql.conf
}
  user = root
}
plugin {
}

Далее создаём файл dovecot-sql.conf
/usr/local/etc/> ee dovecot-sql.conf

driver = mysql
connect = host=localhost dbname=exim user=exim password=exim
default_pass_scheme = PLAIN
password_query = SELECT `username` as `user`, `password` FROM  \
`mailbox` WHERE `username` = '%n@%d' AND `active`='1'
user_query = SELECT `maildir` AS `home`, 26 AS `uid`, 26 AS `gid` \
FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'

Запускаем Dovecot
/usr/local/etc/> echo 'dovecot_enable="YES"' >> /etc/rc.conf
/usr/local/etc/> /usr/local/etc/rc.d/dovecot start
Starting dovecot.
//>


Теперь можно проверить работу сервера с сертификатом
//> openssl s_client -connect mail.zern.domain-ak.ru:imaps -debug

Если все корректно настроили в ответ выйдет куча текста.
В тексте будут присутствовать такие строки
subject=/C=RU/ST=Rostov/L=Zernograd/O=COMPANY/OU=IT
/CN=pop.zern.domain-ak.ru/emailAddress=postmaster@domain-ak.ru
issuer=/C=RU/ST=Rostov/L=Zernograd/O=COMPANY/OU=IT/
CN=pop.zern.domain-ak.ru/emailAddress=postmaster@domain-ak.ru

Устанавливаем Exim 4.69

Пишем вот это для сборки Exim , я его собирал без антивируса т.к masterhost.ru сам проверяет на вирусы, а два раза проверять на вирусы, это слишком (плюс еще к тому же на каждом компе антивирь NOD32)т.е даже трижды.
//> ee /etc/make.conf

PORTSDIR?=      /usr/ports
.if ${.CURDIR} == ${PORTSDIR}/mail/exim
WITH_MYSQL=             yes
LOG_FILE_PATH?=         syslog
WITH_DEFAULT_CHARSET?=  koi8-r
WITHOUT_IPV6=           yes
.endif

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

Отключаем sendmail
/usr/ports/mail/exim/> echo 'sendmail_enable="NONE"' >> /etc/rc.conf
/usr/ports/mail/exim/> ee /etc/mail/mailer.conf

Правим 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


Далее останавливаем Sendmail
//> /etc/rc.d/sendmail forcestop



Теперь пришло время генерить ключ и сертификат для Exim'a
//> mkdir /etc/exim
//> mkdir /etc/exim/ssl

//> cd /etc/exim/ssl

/etc/exim/ssl/> openssl req -new -outform PEM -out exim.crt -newkey rsa:2048 \
-nodes -keyout exim.key -keyform PEM -days 9999 -x509

Generating a 2048 bit RSA private key
..........................................+++
........................................+++
writing new private key to 'exim.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Rostov
Locality Name (eg, city) []:Zernograd
Organization Name (eg, company) [Internet Widgits Pty Ltd]:COMPANY
Organizational Unit Name (eg, section) []:IT
Common Name (eg, YOUR name) []:smtp.zern.domain-ak.ru
Email Address []:postmaster@domain-ak.ru




И приводим конфиг Exim'a вот в такое состояние.(Смотрите внимательнее)

//> ee /usr/local/etc/exim/configure

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

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

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

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

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

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

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


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

# Порты какие будет слушать Exim (25 и 9025)
daemon_smtp_ports = 25 : 9025
# Указываем порт который будет работать с шифрованием SSL TLS
tls_on_connect_ports = 9025
# Указываем где у нас находяться сертификат и ключ
tls_certificate = /etc/exim/ssl/exim.crt
tls_privatekey = /etc/exim/ssl/exim.key

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

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

# А это как раз кусок вышеописанного анахронизма - про почту в
# виде 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.ru@domain-ak.ru и
# переправляет его на user@test.ru. Делается это для
# перечисленного списка доменов (* - все):
# percent_hack_domains = *

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

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

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

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

# Список хостов, почта от которых принимается, несмотря
# на ошибки в HELO/EHLO (тут указана моя подсеть)
helo_accept_junk_hosts = 192.168.1.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 = 10M

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

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


# Выбираем, что мы будем логировать
# + - писать в логи,
# - - Не писать в логи.
# +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       = "incorrect symbol in address"
          domains       = +local_domains
          local_parts   = ^[.] : ^.*[@%!/|]

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

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

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

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

# Рубаем нах, тех, кто подставляет свой IP в HELO
  deny    message       = "Your IP in HELO - access denied!"
          hosts         =  * : !+relay_from_hosts : !81-196.domain-ak.ru
          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       = "main IP in your HELO! Access denied!"

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


## Рубаем тех, кто не пишет отправителя (пробел)
#  deny    condition     = ${if match{$sender_address}{\N^\s+$\N}{yes}{no}}
#          hosts         = !127.0.0.1 : !localhost : *
#          message       = "Sender address contains spaces?! not for RFC..."


# Рубаем тех, кто не пишет отправителя
  deny    condition     = ${if eq{$sender_address}{}{yes}{no}}
          hosts         = !127.0.0.1 : !localhost : *
          message       = "Sender address is empty?! not for RFC..."


# Рубаем всех, если адрес отправителя нет в алиасах, кроме локальной сети
  deny   condition = ${lookup mysql{SELECT `goto` FROM \
        `alias` WHERE \
        `address`='${quote_mysql:$local_part@domain-ak.ru}'}{no}{yes}}
        hosts         = !127.0.0.1 : !localhost : !192.168.1.0/24 : *
        message       = "No such user!"


# Рубаем всех, кроме нашего внешнего пересыльщика masterhost.ru и localhost
# (мастерхостость)Было сделано что бы никто кроме masterhost.ru
# не мог слать письма на @zern.domain-ak.ru
  deny   condition     = ${if match{$sender_helo_name}{masterhost.ru}{no}{yes}}
         hosts         = !127.0.0.1 : !localhost : *
         message       = "Access deny!"




  # Рубаем хосты типа *adsl*; *dialup*; *pool*;....
  # Нормальные люди с таких не пишут. Если будут
  # проблемы - уберёте проблемный пункт (у меня клиенты
  # имеют запись типа asdl-1233.zone.su - я ADSL убрал...)
#  deny    message       = "your hostname is bad (adsl, poll, ppp & etc)."
#          condition     = ${if match{$sender_host_name} \
#                               {adsl|dialup|pool|peer|dhcp} \
#                               {yes}{no}}
#
  # Задержка. (это такой метод борьбы со спамом,
  # основанный на принципе его рассылки) На этом рубается
  # почти весь спам. Единственно - метод неприменим на
  # реально загруженных MTA - т.к. в результате ему
  # приходится держать много открытых соединений.
  # но на офисе в сотню-две человек - шикарный метод.
  #
  # более сложный вариант, смотрите в статье по exim и
  # курьер имап. Т.к. там метод боле умный (просто правил
  # больше :), то можно и на более загруженные сервера ставить)
  warn
        # ставим дефолтовую задержку в 30 секунд
        set acl_m0 = 30s
  warn
        # ставим задержку в 0 секунд своим хостам и
        # дружественным сетям (соседняя контора :))
        hosts = +relay_from_hosts : 127.0.0.1/8 : 192.168.1.0/24 \
                                  : 83.222.25.0/24
        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       = "In my mailserver not stored this user"
          verify        = recipient

  # Проверяем получателя в релейных доменах
  # Опять-таки если не проходит -> следующий ACL,
  # и если непрошёл и там - deny
  accept  domains       = +relay_to_domains
          endpass
          message       = "main server not know how relay to this address"
          verify        = recipient

  # Рубаем тех, кто в блэк-листах. Серваки перебираются
  # сверху вниз, если не хост не найден на первом, то
  # запрашивается второй, и т.д. Если не найден ни в одном
  # из списка - то почта пропускается.

 deny  message  = "you in blacklist - $dnslist_domain \n $dnslist_text"
       dnslists = opm.blitzed.org : \
                  cbl.abuseat.org : \
                  bl.csma.biz : \
                  dynablock.njabl.org

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

  # Если неподошло ни одно правило - чувак явно ищет
  # открытый релей. Пшёл прочь. :)
  deny    message       = "Homo hominus lupus est"




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

acl_check_data:


# Тут мы проверяем письма на ***SPAM***(ну если кому это нужно)
#.include_if_exists /usr/local/etc/exim/includes/antispam.conf



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

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

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



# чё делаем с почтой
############################################################################
#                               #Секция роутеров
############################################################################
begin routers

# Все адреса *@zern.domain-ak.ru отправляем на 
# *@domain-ak.ru все пользователи у нас в 
# @domain-ak.ru, чтобы алиасы не прописывать
# Не юзаем потому что стоит подмена заголовков begin rewrite
# aliases_mysql_nnov:
#  driver = redirect
#  condition = ${if eq{zern.domain-ak.ru}{$domain}{yes}{no}}
#  allow_fail
#  allow_defer
#  data = ${quote:$local_part}@domain-ak.ru

# Копируем всю входящую и исходящую почту на audit@domain-ak.ru
# Нужно было начальству для контроля.(если вам такое нужно то раскомментите)
#copy_message:
#   driver = redirect
#   unseen
#   domains = *
#   data = audit@domain-ak.ru



# 1.Смотрим системные Алиасы
system_aliases:
    driver = redirect
    allow_fail
    allow_defer
    data = ${lookup mysql{SELECT `goto` FROM `alias` WHERE \
            `address`='${quote_mysql:$local_part@$domain}' OR \
                `address`='${quote_mysql:@$domain}'}}

# 2.Доставляем почты в dovecot
dovecot_user:
  driver = accept
  condition = ${lookup mysql{SELECT `goto` FROM \
  `alias` WHERE \
  `address`='${quote_mysql:$local_part@$domain}' OR \
  `address`='${quote_mysql:@$domain}'}{yes}{no}}
  transport = dovecot_delivery

# 3.Отправка почты на "masterhost @adomain-ak.ru" 
# для локального домена "@domain-ak.ru"
# если пользователя несуществует в локальном домене @domain-ak.ru
masterhost_router:
        driver = manualroute
        transport = masterhost_transport
        route_list = domain-ak.ru smtp.masterhost.ru

# 4.Отправка всей не локальной почты т.е 
# на удаленные сервера кроме "masterhost.ru
# домен @domain-ak.ru", отправка производить
donpac_router:
    driver = manualroute
    transport = donpac_transport
    route_list = * smtp.donpac.ru

# 5.Если лег сервак провайдера donpac.ru то EXIM отправляет напрямую 
# т.е как "mail.zern.domain-ak.ru"
# Поиск маршрута к хосту в 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


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

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

# Доставка локальным адресатам - в dovecot
# Надо заметить что тут использовалась ранее прямая доставка
# в директорию, но щас с портами стал-таки устанавливаться deliver
# программа dovecot занимающаяся доставкой мессаг.
# Соответственно юзаем его.
dovecot_delivery:
  driver = pipe
  command = /usr/local/libexec/dovecot/deliver -d $local_part@$domain
  message_prefix =
  message_suffix =
  delivery_date_add
  envelope_to_add
  return_path_add
  log_output
  user = mailnull


# Имя программы
address_pipe:
  driver = pipe
  return_output

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

# Транспорт на smtp.masterhost.ru
masterhost_transport:
        driver = smtp
        hosts = smtp.masterhost.ru

# Транспорт на smtp.donpac.ru
donpac_transport:
    driver = smtp
    hosts = smtp.donpac.ru

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

begin retry


# Address or Domain  Error   Retries
# -----------------  -----   -------
*                    *       F,2h,15m; G,16h,1h,1.5; F,4d,6h



##########################################################################
#                                   # Секция преобразование адресов
##########################################################################
begin rewrite

#Подмена заголовка @zern.domain-ak.ru на @domain-ak.ru
*@zern.domain-ak.ru     $local_part@domain-ak.ru        Eh

#########################################
# Флаги                                 #
#########################################
# E ----> все поля конверта             #
# F ----> поле "From" в конверте        #
# T ----> поле "To" в конверте          #
# b ----> заголовок "Bcc:"              #
# c ----> заголовок "Cc:"               #
# f ----> заголовок "From:"             #
# h ----> все заголовки                 #
# r ----> заголовок "Reply-To:"         #
# s ----> заголовок "Sender:"           #
# t ----> заголовок "To:"               #
#########################################


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

begin authenticators


auth_plain:
  driver = plaintext
  public_name = PLAIN
  server_condition = ${lookup mysql{SELECT `username` FROM \
                     `mailbox` WHERE `username` = \
                     '${quote_mysql:$auth2}' AND `password` = \
                     '${quote_mysql:$auth3}'}{yes}{no}}
  server_prompts = :
  server_set_id = $auth2


auth_login:
  driver = plaintext
  public_name = LOGIN
  server_condition = ${lookup mysql{SELECT `username` FROM \
                     `mailbox` WHERE `username` = \
                     '${quote_mysql:$auth1}' AND `password` = \
                     '${quote_mysql:$auth2}'}{yes}{no}}
  server_prompts = Username:: : Password::
  server_set_id = $auth1


auth_cram_md5:
  driver = cram_md5
  public_name = CRAM-MD5
  server_secret = ${lookup mysql{SELECT `password` FROM \
                        `mailbox` WHERE `username` \
                        = '${quote_mysql:$auth1}'}{$value}fail}
  server_set_id = $auth2


Да и у кого в логах вот такая фигня
Oct 1 15:52:54 mail deliver(user1@domain-ak.ru): auth input: user1@domain-ak.ru
Oct 1 15:52:54 mail deliver(user1@domain-ak.ru): auth input: home=domain-ak.ru/user1/
Oct 1 15:52:54 mail deliver(user1@domain-ak.ru): auth input: uid=26
Oct 1 15:52:54 mail deliver(user1@domain-ak.ru): auth input: gid=26
Oct 1 15:52:54 mail deliver(user1@domain-ak.ru): Home dir not found: domain-ak.ru/user1/


Нужно поправить файл добавив "/var/mail/exim/"
Выглядет это будет вот так!
//> ee /usr/local/www/postfixadmin/create-mailbox.php

if ($error != 1)
{
$password = pacrypt ($fPassword);

if ($CONF['domain_path'] == "YES")
{
if ($CONF['domain_in_mailbox'] == "YES")
{
 $maildir = "/var/mail/exim/" . $fDomain . "/" . $fUsername . "/";
}
else
{
 $maildir = "/var/mail/exim/" . $fDomain . "/" . 
escape_string ($_POST['fUsername']) . "/";
}
}
else
{
 $maildir = "/var/mail/exim/" . $fUsername . "/";

И добавляем в /etc/rc.conf
//> echo 'exim_enable="YES"' >> /etc/rc.conf

Ну и запускаем Exim
//> /usr/local/etc/rc.d/exim start




Ставим Roundcube

Ну и вот время пришло устанавливать Roundcube

//> cd /usr/ports/mail/roundcube

     +--------------------------------------------------------------------+
     |                   Options for roundcube 0.2,1                      |
     | +----------------------------------------------------------------+ |
     | |  [X] MYSQL       Use MySQL backend                             | |
     | |  [ ] PGSQL       Use PostgreSQL backend                        | |
     | |  [ ] SQLITE      Use SQLite backend                            | |
     | |  [X] SSL         Enable SSL support (imaps or google spellcheck) |
     | |  [X] LOCALCHECK  Install internal spellchecker                 | |
     | |                                                                | |
     | |                                                                | |
     | |                                                                | |
     +-+------v(+)------------------------------------------------------+-+
     |                       [  OK  ]       Cancel                        |
     +--------------------------------------------------------------------+

/usr/ports/mail/roundcube/> make && make install && make clean

Далее создаем базу в mysql для roundcube
//> mysql -u root -p
password:******
> CREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 \
    -> COLLATE utf8_general_ci;
> GRANT ALL PRIVILEGES ON roundcubemail.* TO urcube@localhost \
    -> IDENTIFIED BY 'PWD';
> use roundcubemail;
> GRANT ALL PRIVILEGES ON *.* TO urcube@localhost \
    -> IDENTIFIED BY 'PWD' WITH GRANT OPTION;
>\q

Далее нужно создать все таблицы.
//> cd /usr/local/www/roundcube/SQL/
/usr/local/www/roundcube/SQL/> mysql -u root -p roundcubemail \
< mysql5.initial.sql
password:******

Примечание у кого mysql-server менее 4.1 нужно запускать mysql.initial.sql
Далее правим конфиги roundcube
//> ee /usr/local/www/roundcube/config/db.inc.php

// PEAR database DSN for read/write operations
// format is db_provider://user:password@host/database
// currently supported db_providers: mysql, mysqli, pgsql, sqlite, mssql

$rcmail_config['db_dsnw'] = 'mysql://urcube:PWD@localhost/roundcubemail';



Так же юзаем Roundcube с SSL
//> ee /usr/local/www/roundcube/config/main.inc.php

// the mail host chosen to perform the log-in
// leave blank to show a textbox at login, give a list of hosts
// to display a pulldown menu or set one host as string.
// To use SSL connection, enter ssl://hostname:993
$rcmail_config['default_host'] = 'ssl://pop.domain-ak.ru:9143';

// TCP port used for IMAP connections
$rcmail_config['default_port'] = 9143;

// Automatically add this domain to user names for login
// Only for IMAP servers that require full e-mail addresses for login
// Specify an array with 'host' => 'domain' values to 
// support multiple hosts
$rcmail_config['username_domain'] = 'domain-ak.ru';

// This domain will be used to form e-mail addresses of new users
// Specify an array with 'host' => 'domain' values to support
//  multiple hosts
$rcmail_config['mail_domain'] = 'domain-ak.ru';

// use this host for sending mails.
// to use SSL connection, set ssl://smtp.host.com
// if left blank, the PHP mail() function is used
$rcmail_config['smtp_server'] = 'ssl://smtp.domain-ak.ru';

// SMTP port (default is 25; 465 for SSL)
$rcmail_config['smtp_port'] = 9025;

// SMTP username (if required) if you use %u as the username RoundCube
// will use the current username for login
$rcmail_config['smtp_user'] = '%u';

// SMTP password (if required) if you use %p as the password RoundCube
// will use the current user's password for login
$rcmail_config['smtp_pass'] = '%p';

// SMTP AUTH type (DIGEST-MD5, CRAM-MD5, LOGIN, PLAIN or empty to use
// best server supported one)
$rcmail_config['smtp_auth_type'] = 'PLAIN';

// Use this charset as fallback for message decoding
$rcmail_config['default_charset'] = 'UTF-8';

И добавляем алиас в конфиг apache
//> ee /usr/local/etc/apache/httpd.conf

# For Roundcube
Alias /wmail "/usr/local/www/roundcube/"
<Directory "/usr/local/www/roundcube/">
    Options -Indexes FollowSymLinks MultiViews
    DirectoryIndex index.php
    AllowOverride None
    Order deny,allow
    Allow from all
</Directory>


//> /usr/local/etc/rc.d/apache restart

И переходим в браузере  http://ip_tachki/wmail
 






Установка Fetchmail 6.3.8

Ну и для полного счастья дополнил статью fetchmail
Нужен он для того что бы забирать почту с удаленных почтовых серверов на локальный
Поехали....
//> cd /usr/ports/mail/fetchmail
//> make config

     +--------------------------------------------------------------------+
     |                   Options for fetchmail 6.3.9                      |
     | +----------------------------------------------------------------+ |
     | |  [ ] X11     Python/Tkinter dependencies for fetchmailconf     | |
     | |  [X] NLS     National language support (NLS).                  | |
     | |  [ ] NTLM    Build in support for NTLM/MSN authentication.     | |
     | |  [ ] POP2    Build pop2 support (obsolete).                    | |
     | |  [ ] GSSAPI  Build GSSAPI support (requires KRB5_HOME to be set) |
     | |                                                                | |
     | |                                                                | |
     | |                                                                | |
     +-+------v(+)------------------------------------------------------+-+
     |                       [  OK  ]       Cancel                        |
     +--------------------------------------------------------------------+

//> make && make install && make clean

Даем права на конфиг fetchmail поскольку файл конфигурации (fetchmailrc) содержит пароли, доступ к нему должен иметь только его владелец (в противном случае fetchmail даже не запустится)
//> chmod 0710 /usr/local/etc/fetchmailrc

//> echo 'fetchmail_enable="YES"' >> /etc/rc.conf

//> ee /usr/local/etc/fetchmailrc

# Your fetchmail configuration goes here.
#
# See fetchmail(1), and/or use fetchmailconf (must not build the port
# WITHOUT_X11).

# Забираем почту c cancer@mail.ru кладем в cancer@domain-ak.ru
poll pop.mail.ru with protocol POP3:
    no dns, user cancer@mail.ru password Пароль is cancer@domain-ak.ru here;

# Забираем почту c chel@mail.ru кладем в chel@domain-ak.ru
poll pop.mail.ru with protocol POP3:
    no dns, user chel@mail.ru password Пароль is chel@domain-ak.ru here;

//> /usr/local/etc/rc.d/fetchmail start

//> cat /var/log/maillog

Oct 9 12:01:59 mail fetchmail[22460]: запускается демон fetchmail 6.3.8
Oct 9 22:37:33 mail fetchmail[23835]: разбужен на четверг, 9 октября 2008 г. 22:37:33
Oct 9 22:37:33 mail fetchmail[23835]: в спящем режиме в четверг, 9 октября 2008 г. 22:37:33 на 1800 секунд

Тут меняется время подключения fetchmail к серверам в секундах (т.е fetchmail будет подключатся 1 раз в 900 секунд=15 мин) у меня стоит 1800сек=30мин  =)
//> ee /etc/rc.conf

fetchmail_polling_interval="900"


Документация

http://www.exim.org/
http://www.dovecot.org/
http://www.postfixadmin.org
http://fetchmail.berlios.de/
http://www.roundcube.net/



размещено: 2008-10-10,
последнее обновление: 2009-11-23,
автор: Cancer


abigor, 2008-09-22 в 12:22:09

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

на это exim ругается вот так
[root@bender exim]# /usr/local/etc/rc.d/exim restart
Stopping exim.
Starting exim.
2008-09-22 17:23:38 Exim configuration error in line 175 of /usr/local/etc/exim/configure:
 "smtp_accept_max" option set for the second time

Andrew, 2008-09-23 в 12:04:04

Странно, сколько конфигов видел, где exim работает с разными БД, нигде не видел где задается имя и пассводр для коннекта к БД...

Oloremo, 2008-09-23 в 12:11:35

MySQl:
hide mysql_servers = DBhost/DBname/DBuser/DBuserpass

У LDAP это приезжает в запросе.
Типа:
LDAP_AUTH = user="cn=root,dc=CAS" pass="secret"

ldap_aliases:
 driver = redirect
 allow_fail
 allow_defer
 data = ${lookup ldapm{LDAP_AUTH ldap:///dc=CAS?maildrop?sub?(&(objectClass=mailAlias)(mail=${local_part}@${domain}))}}

Cancer, 2008-09-23 в 12:17:56

А это что по твоему
configure
# хост/имя_бд/пользователь/пароль
hide mysql_servers = localhost/exim/exim/exim

Andrew, 2008-09-23 в 12:20:40

Спасибо камрады! Не заметил, плохо смотрел.

Oloremo, 2008-10-10 в 11:20:35

Всё же крайне странно видеть для боевого сервера такие вещи как MySQL 5.1 IMHO. Странно ставивть все экстеншены для PHP. И ещё более странно ставить при всём этом apache 1.3.

Это вроде как - два Биг Мака + Диетическая Кола...

lissyara, 2008-10-10 в 11:41:43

Почему? Я вообще слабо понимаю всю эту попсу c новыми апачами.
Если 1.3 работает и выполянет возложенные функции - зачем там второй?
Да и рассказ о почте. А какой апач - личное дело каждого.
======
а вот что не привязали фетчмайл к базе которая есть в новом постфиксадмине - это да, упущение. мона было бы сборкой почтs через веб инетерфейс рулить...

Oloremo, 2008-10-10 в 12:18:48

Я имел ввиду что ставить MySQL 5.1, который вообще только недавно из беты вышел и совершенно в данной конфигурации не нужен + все экстеншены к PHP - это не безопасно.

И при этом ставить апач 1.3 вроде как для безопасности?
И вообще - какую попсу? Имхо - апач 2.0 настолько уже стабилен, насколько это возможно. 67 багфиксов, как никак.

Cancer, 2008-10-16 в 14:05:12

Аутентификация exim`a как клиента

   begin routers

   # Отправка почты в МИР через smtp.masterhost.ru
   masterhost_router:
           driver = manualroute
           transport = masterhost_transport
           route_list = * smtp.masterhost.ru


   begin transports

   # Транспорт на smtp.masterhost.ru
   masterhost_transport:
           driver = smtp
           hosts = smtp.masterhost.ru
           hosts_require_auth = smtp.masterhost.ru


   begin authenticators

   # Аутентификатор для Мастерхоста (masterhost_transport) LOGIN
   # И плюс аутентификацию что лисяра придумал server_condition итд это она
   auth_login:
     driver = plaintext
     public_name = LOGIN
     client_send = : user@domain-ak.ru : masterhost_user_password
     server_condition = ${lookup mysql{SELECT `username` FROM \
                        `mailbox` WHERE `username` = \
                        '${quote_mysql:$auth1}' AND `password` = \
                        '${quote_mysql:$auth2}'}{yes}{no}}
     server_prompts = Username:: : Password::
     server_set_id = $auth1

ононим, 2008-10-17 в 1:36:52

я вот чего не пойму: зачем в dovecot активировать imap, если fetchmail все равно все распихивает в простые pop-ящики.
может кто подсказать?

Cancer, 2008-10-17 в 9:01:56

Так а как по твоему будет работать Roundcube????

staskur, 2009-01-02 в 18:22:01

Тут меняется время подключения fetchmail к серверам в секундах (т.е fetchmail будет подключатся 1 раз в 900 секунд=15 мин) у меня стоит 1800сек=30мин  =)

//> ee /usr/local/etc/rc.d/fetchmail

: ${fetchmail_polling_interval="900"}

мне кажется что правильнее не исправлять файлы, а использовать штатную возможность задания интервала опроса в rc.conf...

fetchmail_enable="YES"
fetchmail_polling_interval="900"

staskur, 2009-01-10 в 14:21:31

http://forum.lissyara.su/viewtopic.php?t=11605
тема на форуме почему то закрыта... поэтому пишу здесь.

pashtet писал  2008-10-10 15:37:53  про некорректное отображение вложений на кириллице.
http://forum.lissyara.su/viewtopic.php?t=11605#p104698


на roundcube-0.2,1   вложения на кириллице отображаются правильно и приходят к получателю в корректном виде.

Grishin_U_S, 2009-02-08 в 12:13:16

Классная статья! Люблю статьи со скринами (=

Grishin_U_S, 2009-02-10 в 7:50:15

А зачем в конце мы дали пользователю экзима права на все и вся? Если вместо прав

GRANT SELECT, INSERT, DELETE, UPDATE ON exim.* TO exim@localhost;

дать :

(добавил CREATE и ALTER)
GRANT SELECT, CREATE, ALTER, INSERT, DELETE, UPDATE ON exim.* TO 'exim'@'localhost';

то этому юзеру не потребуются права суперпользователя MySQL, что + к безопасности (=

Grishin_U_S, 2009-02-17 в 12:30:54

Зачем в /usr/local/etc/dovecot.conf
--
>>>>#!/bin/sh<<<<<
base_dir = /var/run/dovecot/
protocols = imap imaps pop3 pop3s
--
это что скрипт?

staskur, 2009-02-17 в 13:31:37

не вкурил.... о чем речь ?

Cancer, 2009-02-17 в 13:56:19

2 Grishun_U_S

исправлено!

Ive, 2009-02-18 в 14:13:53

Уберите этот acl, он зарубает bounce-ы с удаленных серверов, что как раз есть не по rfc. Сервер обязан принимать отправителей вида:
MAIL FROM:<>

# Рубаем тех, кто не пишет отправителя
 deny    condition     = ${if eq{$sender_address}{}{yes}{no}}
         hosts         = !127.0.0.1 : !localhost : *
         message       = "Sender address is empty?! not for RFC..."

Eugen, 2009-02-20 в 13:48:03

Касательно DNSBL:
opm.blitzed.org мертв - http://wiki.blitzed.org/OPM_status
dynablock.njabl.org мертв - http://www.njabl.org/dynablock.html

Предлагаю следующий список:
zen.spamhaus.org
dnsbl.sorbs.net
psbl.surriel.com
bl.spamcop.net
cbl.abuseat.org
bl.csma.biz

Kolesya, 2009-02-20 в 18:33:49

>Перезагрузим сервак так как я незнаю как сразу
>отключить sendmail :) потом исправлю ))

Примерно так :)
/etc/rc.d/sendmail forcestop

MarvinFS, 2009-07-09 в 15:20:55

для того чтобы SA не проверял почту идущую со внутренних почтовых серверов:

в sa-exim.conf изменить кондишн, где я прописал свои внутренние адреса почтовых серверов которые шлют почту через этот релэй.

SAEximRunCond: ${if and {{def:sender_host_address} {!eq {$sender_host_address}{127.0.0.1}} {!eq {$h_X-SA-Do-Not-Run:}{Yes}} {!eq {$sender_host_address}{10.11.12.220}} {!eq {$sender_host_address}{10.11.26.200}} } {1}{0}}

lexx, 2009-09-15 в 16:28:01

Господа прошу прощения за ламерский вопрос. В установке roundcube сказано:

Далее нужно создать все таблицы.
//> cd /usr/local/www/roundcube/SQL/
/usr/local/www/roundcube/SQL/> mysql -u root -p roundcubemail < mysql5.initial.sql
password:******
Какие именной таблицы?

zloe, 2009-09-25 в 19:36:23

нет таблицы alias_domain, без нее backup в postfix не работает
зы. 2lexx: а что ты только что сделал этой командой? смотри что внутри mysql5.initial.sql

Seltsam, 2009-10-22 в 14:50:08

ПРИМЕЧАНИЕ для RoundCube
Имеем траблу – пользователь может в своём аккаунте в RoundCube создать новый профиль, где ввести любой другой адрес отправителя и др. информацию. Единственное – такой адрес отправителя должен существовать на сервере. В итоге – юзер может отправлять письма от имени других пользователей! – что есть ахтунг =(
Вылечить можно несколькими способами:
1.    запретить создавать новые профили – т.е. убрать со страницы кнопку Новый профиль – пока не нашёл как и где;
2.    не отображать новые профили, что исключит выбор оных даже если они были созданы – это и реализовал =)

Способ 2.
Идём в program/include/ и редактируем файлик rcube_user.php – находим функцию function list_identities($sql_add = '') и правим SQL запрос нужным образом, чтобы вернулся только один identities. У меня получилось так:
// get contacts from DB
   $sql_result = $this->db->query(
     "SELECT * FROM ".get_table_name('identities')."
      WHERE  del<>1
      AND    user_id=?
      $sql_add
      ORDER BY ".$this->db->quoteIdentifier('standard')." DESC, name ASC, identity_id ASC LIMIT 1",
     $this->ID);

Т.е. добавил LIMIT 1, что возвратит только одну первую запись при чём которая по умолчанию (поле standart=1 а сортировка результатов именно по этому полю).

Можно конечно в WHERE прописать это условие - standart=1. Тогда никакой LIMIT не надо =)

Dystopian, 2009-10-22 в 16:42:31

Seltsam,
в main.inc.php
$rcmail_config['identities_level'] = 3;

Seltsam, 2009-10-22 в 16:50:15

2 Dystopian - сорри, пропустил... =)
спасибо!

Cancer, 2009-11-12 в 19:44:30

Upgrading Dovecot v1.1 to v1.2

http://wiki.dovecot.org/Upgrading/1.2

v_d_v, 2010-01-12 в 0:26:52

Для Exim 4.71 нашелся такой баг: при отправке наружу с SMTP авторизацией уходят письма со следующими заголовками: MAIL FROM:"mailbox@domain.tld"@hostname.com.
Если отправлять письма с локальных сетей без SMTP авторизации, то заголовки правильные.

v_d_v, 2010-01-12 в 0:56:42

Упустил, в новом конфиге Exima
#control = submission

Pendolf, 2010-05-01 в 21:52:41

много букв но за статтю респект а укоротить нельзя для профи и уменьшить оффтоп ?

Jackal, 2010-09-03 в 14:43:48

Сделал по этой статье и проблема в том что меня некоторые сервера отшибают  RCPT TO: 550 "Sender address is empty?! not for RFC...
Подскажите плиз в чем трабла

Cancer, 2010-09-03 в 14:50:07

С вопросами на форум!

386, 2011-12-22 в 20:03:09

нашел про fetchmail
http://www.sergeysl.ru/freebsd-postfixadmin/



 

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

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.3626 секунд
Из них PHP: 64%; SQL: 36%; Число SQL-запросов: 83 шт.
Исходный размер: 226064; Сжатая: 43456