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

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&dovecot+postfixadmin

Установка почтового сервера Exim & Dovecot + Postfixadmin


Статья пишется..... Думаю скоро допишу и открою.





Ставим Apache 1.3

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

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

Запускаем сам apache
//> /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 install clean

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


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

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

759 ?? Is 0:00,05 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/usr/db/mysql/my.cnf --user=mysql --datadir=/usr/db/mysql --pid-file=/usr/db/mysql/server.WORKGROUP.pid
808 ?? I 0:01,69 /usr/local/libexec/mysqld --defaults-extra-file=/usr/db/mysql/my.cnf --basedir=/usr/local --datadir=/usr/db/mysql --log-error=/usr/db/mysql/server.WORKGROUP.err --pid-file=/usr/db/mysql/server.WORKGROUP.pid


Далее, задаем пароль для суперпользователя 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.3.5                           |
     | +----------------------------------------------------------------+ |
     | |  [X] CLI        Build CLI version                              | |
     | |  [X] CGI        Build CGI version                              | |
     | |  [ ] FPM        Build FPM version (experimental)               | |
     | |  [X] APACHE     Build Apache module                            | |
     | |  [ ] AP2FILTER   Use Apache 2.x filter interface (experimental)| |
     | |  [ ] DEBUG      Enable debug                                   | |
     | |  [X] SUHOSIN    Enable Suhosin protection system (not for jails) |
     | |  [X] MULTIBYTE  Enable zend multibyte support                  | |
     | |  [X] IPV6       Enable ipv6 support                            | |
     | |  [ ] MAILHEAD   Enable mail header patch                       | |
     | |  [ ] LINKTHR    Link thread lib (for threaded extensions)      | |
     | |                                                                | |
     | |                                                                | |
     | |                                                                | |
     +-+------v(+)------------------------------------------------------+-+
     |                       [  OK  ]       Cancel                        |
     +--------------------------------------------------------------------+

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





Ставим PHP5_EXTENSIONS

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

     +--------------------------------------------------------------------+
     |                   Options for php5-extensions 1.4                  |
     | +----------------------------------------------------------------+ |
     | |  [ ] BCMATH      bc style precision math functions             | |
     | |  [X] BZ2         bzip2 library support                         | |
     | |  [ ] CALENDAR    calendar conversion support                   | |
     | |  [X] CTYPE       ctype functions                               | |
     | |  [ ] CURL        CURL support                                  | |
     | |  [ ] DBA         dba support                                   | |
     | |  [X] DOM         DOM support                                   | |
     | |  [ ] EXIF        EXIF support                                  | |
     | |  [ ] FILEINFO    fileinfo support                              | |
     | |  [X] FILTER      input filter support                          | |
     | |  [ ] FRIBIDI     FriBidi support                               | |
     | |  [ ] FTP         FTP support                                   | |
     | |  [X] GD          GD library support                            | |
     | |  [X] GETTEXT     gettext library support                       | |
     | |  [ ] GMP         GNU MP support                                | |
     | |  [X] 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                            | |
     | |  [ ] MSSQL       MS-SQL database support                       | |
     | |  [X] MYSQL       MySQL database support                        | |
     | |  [X] MYSQLI      MySQLi database support                       | |
     | |  [ ] ODBC        unixODBC support                              | |
     | |  [ ] OPENSSL     OpenSSL support                               | |
     | |  [ ] PCNTL       pcntl support (CLI only)                      | |
     | |  [ ] PDF         PDFlib support (implies GD)                   | |
     | |  [X] PDO         PHP Data Objects Interface (PDO)              | |
     | |  [X] PDO_SQLITE  PDO sqlite driver                             | |
     | |  [ ] PGSQL       PostgreSQL database support                   | |
     | |  [X] 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                               | |
     | |  [X] 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 install clean


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

И раскомментируем строку
//> ee /usr/local/etc/php.ini

session.save_path = "/tmp"


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


Ставим Postfixadmin

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

     +--------------------------------------------------------------------+
     |                   Options for postfixadmin 2.3.2                   |
     | +----------------------------------------------------------------+ |
     | |  [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 install 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 828 2010-05-17 22:56:23Z christian_boltz $ 
 * @license GNU GPL v2 or later. 
 * 
 * File: config.inc.php
 * Contains configuration options.
 */

/*****************************************************************
 *  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
 * You have to set $CONF['configured'] = true; before the
 * application will run!
 * Doing this implies you have changed this file as required.
 * i.e. configuring database etc; specifying setup.php password etc.
 */
$CONF['configured'] = false;

// In order to setup Postfixadmin, you MUST specify a hashed password here.
// To create the hash, visit setup.php in a browser and type
// a password into the field,
// on submission it will be echoed out to you as a hashed value.
$CONF['setup_password'] = 'changeme';

// Postfix Admin Path
// Set the location of your Postfix Admin installation here.
// YOU MUST ENTER THE COMPLETE URL e.g. http://domain.tld/postfixadmin
$CONF['postfix_admin_url'] = 'http://192.168.1.222/postfixadmin';

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

// Language config
// Language files are located in './languages', change as required..
$CONF['default_language'] = 'ru';

// Database Config
// mysql = MySQL 3.23 and 4.0, 4.1 or 5
// mysqli = MySQL 4.1+ 
// pgsql = PostgreSQL
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'exim';
$CONF['database_password'] = 'exim';
$CONF['database_name'] = 'exim';
$CONF['database_prefix'] = '';
// If you need to specify a different port for a
// MYSQL database connection, use e.g.
//   $CONF['database_host'] = '172.30.33.66:3308';
// If you need to specify a different port for POSTGRESQL
// database connection
//   uncomment and change the following
// $CONF['database_port'] = '5432';


// 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',
    'quota' => 'quota',
    'quota2' => 'quota2',
);

// Site Admin
// Define the Site Admins email address below.
// This will be used to send emails from to create mailboxes.
$CONF['admin_email'] = 'postmaster@mydomain.ru';

// Mail Server
// Hostname (FQDN) of your mail server.
// This is used to send email to Postfix in order to create mailboxes.
$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!)
// mysql_encrypt = useful for PAM integration
// authlib = support for courier-authlib style passwords
// dovecot:CRYPT-METHOD = use dovecotpw -s 'CRYPT-METHOD'.
// Example: dovecot:CRAM-MD5
$CONF['encrypt'] = 'cleartext';

// In what flavor should courier-authlib style passwords be enrypted?
// md5 = {md5} + base64 encoded md5 hash
// md5raw = {md5raw} + plain encoded md5 hash
// SHA = {SHA} + base64-encoded sha1 hash
// crypt = {crypt} + Standard UNIX DES-enrypted with 2-character salt
$CONF['authlib_default_flavor'] = 'md5raw';

// If you use the dovecot encryption method: 
// where is the dovecotpw binary located?
$CONF['dovecotpw'] = "/usr/sbin/dovecotpw";

// Minimum length required for passwords. Postfixadmin will not
// allow users to set passwords which are shorter than this value.
$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'.
$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',
    'hostmaster' => 'hostmaster@mydomain.ru',
    'postmaster' => 'postmaster@mydomain.ru',
    'webmaster' => 'webmaster@mydomain.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
$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';
// If you want to define your own function to generate a maildir
// path set this to the name of the function.
// Notes: 
//   - this configuration directive will override both domain_path
//   and domain_in_mailbox
//   - the maildir_name_hook() function example is present below,
//   commented out
//   - if the function does not exist the program will default
//   to the above domain_path and domain_in_mailbox settings
$CONF['maildir_name_hook'] = 'NO';

/*
    maildir_name_hook example function
 
 Called by create-mailbox.php if $CONF['maildir_name_hook']
 == '<name_of_the_function>'
 - allows for customized maildir paths determined by a custom function
 - the example below will prepend a single-character directory to the
 beginning of the maildir, splitting domains more or less evenly over
 36 directories for improved filesystem performance with large numbers
 of domains.

    Returns: maildir path
    ie. I/example.com/user/
*/
/*
function maildir_name_hook($domain, $user) {
    $chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    $dir_index = hexdec(substr(md5($domain), 28)) % strlen($chars);
    $dir = substr($chars, $dir_index, 1);
    return sprintf("%s/%s/%s/", $dir, $domain, $user);
}
*/


// Default Domain Values
// Specify your default values below. Quota in MB.
$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'] = 'NO';
// 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.
// (See VIRTUAL-VACATION/)
$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.change-this-to-your.domain.tld';

// Vacation Control
// If you want users to take control of vacation set this to 'YES'.
$CONF['vacation_control'] ='YES';

// Vacation Control for admins
// Set to 'YES' if your domain admins should be able to edit user vacation.
$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'.
$CONF['alias_control'] = 'YES';

// Alias Control for admins
// Set to 'NO' if your domain admins shouldn't 
// be able to 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';

// Alias Domains
// Alias domains allow to "mirror" aliases and mailboxes to another domain.
//  This makes 
// configuration easier if you need the same set of aliases
//  on multiple domains, but
// also requires postfix to do more database queries.
// Note: If you update from 2.2.x or earlier, you will 
// have to update your postfix configuration.
// Set to 'NO' to disable alias domains.
$CONF['alias_domain'] = 'YES';

// Backup
// If you don't want backup tab set this to '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';
$CONF['logging'] = 'YES';

// Fetchmail
// If you don't want fetchmail tab set this to 'NO';
$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://192.168.1.222/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'] = 'Return to change-this-to-your.domain.tld';
$CONF['footer_link'] = 'http://change-this-to-your.domain.tld';

// 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.
$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
// 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';
// mails to these domains will never be flagged as undeliverable
// $CONF['show_undeliverable_exceptions']=array("unixmail.domain.ext" \
// ,"exchangeserver.domain.ext","gmail.com");
$CONF['show_popimap']='NO';
$CONF['show_popimap_color']='darkgrey';
// you can assign special colors to some domains. To do this,
// - add the domain to show_custom_domains
// - add the corresponding color to show_custom_colors
$CONF['show_custom_domains']=array("subdomain.domain.ext","domain2.ext");
$CONF['show_custom_colors']=array("lightgreen","lightblue");
// If you use a recipient_delimiter in your postfix config,
//  you can also honor it when aliases are checked.
// Example: $CONF['recipient_delimiter'] = "+";
// Set to "" to disable this check.
$CONF['recipient_delimiter'] = "";


// 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.
// Parameters: (1) username (2) domain (3) maildir (4) quota
// $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.
// Parameters: (1) username (2) domain (3) maildir (4) quota
// $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.
// Parameters: (1) username (2) domain
// $CONF['mailbox_postdeletion_script']='sudo -u courier \
// /usr/local/bin/postfixadmin-mailbox-postdeletion.sh';

// Optional:
// Script to run after creation 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.
// Parameters: (1) username
//$CONF['domain_postcreation_script']='sudo -u courier \
// /usr/local/bin/postfixadmin-domain-postcreation.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.
// Parameters: (1) username
// $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';
//
// Specify '' for Dovecot and 'INBOX.' for Courier.
$CONF['create_mailbox_subdirs_prefix']='INBOX.';

// Optional:
// Show used quotas from Dovecot dictionary backend in virtual
// mailbox listing.
// See: DOCUMENTATION/DOVECOT.txt
//      http://wiki.dovecot.org/Quota/Dict
//
$CONF['used_quotas'] = 'NO';

// if you use dovecot >= 1.2, set this to yes.
// Note about dovecot config: table "quota" is for 1.0 & 1.1,
//  table "quota2" is for dovecot 1.2 and newer
$CONF['new_quota_table'] = 'NO';

//
// 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';

// XMLRPC Interface.
// This should be only of use if you wish to use e.g the 
// Postfixadmin-Squirrelmail package
//  change to boolean true to enable xmlrpc
$CONF['xmlrpc_enabled'] = false;


// 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')) {
    include(dirname(__FILE__) . '/config.local.php');
}

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


Перезагрузим apache
//> apachectl restart

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




Видим хеш нашего пароля, вводим его в config.inc.php
Меняем два параметра в конфиге
$CONF['configured'] = false;
на
$CONF['configured'] = true;
и
$CONF['setup_password'] = 'changeme';
на
$CONF['setup_password'] = 'ХЕШ который получили';


Далее вводим пароль и создаем администратора.




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

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

     +--------------------------------------------------------------------+
     |                   Options for dovecot 1.2.16                       |
     | +----------------------------------------------------------------+ |
     | |  [X] KQUEUE       kqueue(2) support                            | |
     | |  [X] SSL          SSL support                                  | |
     | |  [X] 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 install clean


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

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


protocol pop3 {
        listen = *:110
#        ssl_listen = *:995
}
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 = 128
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
# После отладки и первого запуска можно убрать auth_debug
auth_debug = yes
# Тоже после отладки можно убрать
mail_debug = yes
mail_location = maildir:/usr/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@mydomain.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 без переносов "\"
//> ee /usr/local/etc/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 CONCAT('/usr/mail/exim/',LCASE(`maildir`)) AS `home`, \
26 AS `uid`, 26 AS `gid` FROM `mailbox` WHERE `username` \
= LCASE('%n@%d') AND `active`='1'


//> mkdir -p /usr/mail/exim
//> chmod 700 /usr/mail/exim/
//> chown mailnull:mail /usr/mail/exim


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



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

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

PORTSDIR?=      /usr/ports
.if ${.CURDIR} == ${PORTSDIR}/mail/exim
LOG_FILE_PATH?=         syslog
.endif

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

     +--------------------------------------------------------------------+
     |                   Options for exim 4.76                            |
     | +----------------------------------------------------------------+ |
     | |  [ ] ALT_CONFIG_PREFIX  Restrict the set of configuration files| |
     | |  [X] AUTH_CRAM_MD5      Enable CRAM-MD5 authentication mechanisms|
     | |  [X] AUTH_DOVECOT       Enable Dovecot authentication mechanisms |
     | |  [X] AUTH_PLAINTEXT     Enable plaintext authentication        | |
     | |  [ ] AUTH_RADIUS        Enable radius (RFC 2865) authentication| |
     | |  [ ] AUTH_SASL          Enable use of Cyrus SASL auth library  | |
     | |  [X] AUTH_SPA           Enable Secure Password Authentication  | |
     | |  [X] CDB                Enable CDB-style lookups               | |
     | |  [ ] CONTENT_SCAN       Enable exiscan email content scanner   | |
     | |  [X] DAEMON             Install scripts to run as a daemon     | |
     | |  [ ] DCC                Enable DCC at ACL support via dccifd   | |
     | |  [ ] DEBUG              Build with debugging symbols           | |
     | |  [X] DISABLE_D_OPT      Disable macros overrides using option -D |
     | |  [X] DNSDB              Enable DNS-style lookups               | |
     | |  [X] DSEARCH            Enable directory-list lookups          | |
     | |  [X] EMBEDDED_PERL      Enable embedded Perl interpreter       | |
     | |  [ ] EXIMON             Build eximon monitor (require XFree86!)| |
     | |  [X] ICONV              Enable header charset conversion       | |
     | |  [X] IPV6               Enable IPv6 support                    | |
     | |  [ ] KAS                Build with Kaspersky AntiSpam local scan |
     | |  [X] LMTP               RFC2033 SMTP over command pipe transport |
     | |  [X] LSEARCH            Enable wildcarded-file lookups         | |
     | |  [X] MAILDIR            Enable Maildir mailbox format          | |
     | |  [X] MAILSTORE          Enable Mailstore mailbox format        | |
     | |  [X] MBX                Enable MBX mailbox format              | |
     | |  [X] MYSQL              Link against libmysqlclient library    | |
     | |  [X] NIS                Enable NIS-style lookups               | |
     | |  [X] OLD_DEMIME         Enable old, deprecated demime ACL      | |
     | |  [ ] OPENLDAP           Link against libldap                   | |
     | |  [X] PAM                Enable PAM authentication mechanisms   | |
     | |  [X] PASSWD             Enable /etc/passwd lookups             | |
     | |  [ ] PGSQL              Link against libpq                     | |
     | |  [ ] READLINE           Enable readline(3) library             | |
     | |  [ ] SASLAUTHD          Enable use of Cyrus SASL auth daemon   | |
     | |  [ ] SA_EXIM            SA-Exim support                        | |
     | |  [ ] SO_1024            Build with Spamooborona-1024 local scan| |
     | |  [ ] SPF                Enable Sender Policy Framework checking| |
     | |  [ ] SQLITE             Enable SQLite lookups                  | |
     | |  [ ] SRS                Enable Sender Rewriting Scheme         | |
     | |  [ ] SRS_ALT            Enable alternative SRS library         | |
     | |  [X] SUID               Install the exim binary suid root      | |
     | |  [ ] TCP_WRAPPERS       Enable /etc/hosts.allow access control | |
     | |  [X] TLS                Link against OpenSSL                   | |
     | |  [ ] WISHLIST           Include the unsupported patches        | |
     | |  [ ] XCLIENT            Enable XCLIENT command in exim         | |
     | |                                                                | |
     +-+------v(+)------------------------------------------------------+-+
     |                       [  OK  ]       Cancel                        |
     +--------------------------------------------------------------------+

/usr/ports/mail/exim/> make install 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 вот в такое состояние.
# Имя хоста. Используется в EHLO.
# Фигурирует в других пунктах, если они не заданы -
# типа qualify_domain и прочих..
# Если тут ничё не установлено (строка закомметрована)
# то используется то, что вернёт функция uname()
primary_hostname = mydomain.ru

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


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


# делаем список доменов с которых разрешены релеи.
# Далее этот список будет в виде +relay_to_domains
# Можно использовать символы подстановки, типа:
# .... = *.my.domen.su : !spam.my.domen.ru : first.ru
# тогда пропускается всё, что похоже на *.my.domain.ru, но
# от spam.my.domen.su релеится почта не будет.
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:192.168.0.0/24

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

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

# Адрес куда слать на проверку спама (SpamAssasin)
#spamd_address = 127.0.0.1 783

# Порты какие будет слушать Exim (25 и 465)
daemon_smtp_ports = 25 : 465

# Указываем порт который будет работать с шифрованием SSL TLS
tls_on_connect_ports = 465

# Указываем где у нас находяться сертификат и ключ
#tls_certificate = /usr/local/etc/exim/ssl-keys/ssl.crt
#tls_privatekey = /usr/local/etc/exim/ssl-keys/ssl.key

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

# Имя хоста для ситуации, обратной предыдущей, - это имя домена
# добавляемое к почте для системных юзеров, ну и вообще для почты
# пришедшей на адрес типа `root`, `lissyara`, & etc... Если этот
# пункт незадан то используется значение полученное из
# предыдущего пункта - `qualify_domain`
qualify_recipient = mydomain.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 = *

warn_message_file = /usr/local/etc/exim/warn_message_file
bounce_message_file = /usr/local/etc/exim/bounce_message_file

# Тоже анахронизм (на самом деле, не такой уж анахронизм, но все давно
# забили на 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@mydomain.ru и
# переправляет его на user@mydomain.ru. Делается это для
# перечисленного списка доменов (* - все):
# percent_hack_domains = *

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

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

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

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

# Список хостов, почта от которых принимается, несмотря
# на ошибки в HELO/EHLO (тут указана моя подсеть)
helo_accept_junk_hosts = 192.168.0.0/24

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

# Приветствие сервера, при коннекте на 25 порт выглядеть будет так
# (220 mydomain.ru, ESMTP EXIM 4.76 Thu, 12 May 2011 12:49:53 +0400)
smtp_banner = "$primary_hostname, ESMTP EXIM $version_number $tod_full"

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

# максимальное число сообщений принимаемое за одно соединение
smtp_accept_max_per_connection = 20

# максимальное число писем в очереди SMTP
smtp_accept_queue = 40

# максимальное число сообщений записываемых в логи
smtp_connect_backlog = 30

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

# ограничение на сообщение
#recipients_max = 16

# отклонять сообщения у которых слишком много получателей
#recipients_max_reject = true

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

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

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

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

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

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

# Указать директорию в которую писать логи
#log_file_path = /var/log/exim/%slog

# Выбираем, что мы будем логировать
# + - писать в логи,
# - - Не писать в логи.
# +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 CONFIGURATION                            #
#         Specifies access control lists for incoming SMTP mail      #
######################################################################
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   = ^[./|] : ^.*[@%!] : ^.*/\\.\\./

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

  # Принимаем сообщения от тех, кто аутентифицировался:
  accept  authenticated = *

  # Рубаем нах, тех, кто подставляет свой IP в HELO
  deny    message       = "Your IP in HELO - access denied!"
          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       = "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..."

# Рубаем всех, кроме нашего внешнего пересыльщика masterhost.ru и localhost
#  deny   condition = ${if match{$sender_helo_name}{masterhost.ru}{no}{yes}}
#         hosts     = !127.0.0.1 : !localhost : !192.168.0.0/24 : *
#         message   = "Access deny!"

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

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

    warn
        # ставим задержку в 0 секунд своим хостам и
        # дружественным сетям (соседняя контора :))
        hosts = +relay_from_hosts : 127.0.0.1/8 : 192.168.0.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 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

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

  # Если неподошло ни одно правило - чувак явно ищет
  # открытый релей. Пинаем с сервера.
    deny message = "Access deny - autorization failed. Relay not permitted"

acl_check_mime:

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

  # Запрет mime вложений по расширениям
  deny message = Blacklisted file extension detected
     condition = ${if match \
                 {${lc:$mime_filename}} \
                 {\N(\.cpl|\.pif|\.bat|\.scr|\.lnk|\.com|\.exe)$\N} \
                 {1}{0}}

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

acl_check_data:

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

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

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

  # Пропускаем остальное
  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

# 1.Проверка на "Левые рассылки" сделана через инклуды =)
#.include_if_exists /usr/local/etc/exim/includes/rewrite_trash

# 2.Копируем всю """исходящую""" почту с домена @mydomain.ru
# на почтовый ящик audit@mydomain.ru
#copy_message:
#   driver = redirect
#   condition = ${if match{$sender_address:}{@mydomain.ru}{yes}{no}}
#   unseen
#   domains = *
#   data = audit@mydomain.ru

# 2.Копируем всю почту на audit@mydomain.ru.ru
#copy_message:
#   driver = redirect
#   unseen
#   domains = *
#   data = audit@mydomain.ru

# 3.Все ошибки (отлупы) падают на ящик admin@mydomain.ru
#delivery_masterhost:
#   driver = redirect
#   condition = ${if match{$h_from:}{MAILER-DAEMON@|Mailer-Daemon@}{yes}{no}}
#   unseen
#   domains = *
#   data = admin@mydomain.ru

# 4. Смотрим альясы
mysql_aliases:
      driver = redirect
      allow_fail
      allow_defer
      data = ${lookup mysql{SELECT LCASE(`goto`) FROM `alias` WHERE \
            `address`=LCASE('${quote_mysql:$local_part@$domain}') OR \
            `address`=LCASE('${quote_mysql:@$domain}') AND `active`='1' \
            ORDER BY SUBSTRING_INDEX(`address`,'@',1) DESC LIMIT 1}}

# 5. Доставляем почту в dovecot
dovecot_user:
      driver = accept
      condition = ${lookup mysql{SELECT LCASE(`goto`) FROM \
            `alias` WHERE \
            `address`=LCASE('${quote_mysql:$local_part@$domain}') OR \
            `address`=LCASE('${quote_mysql:@$domain}') AND `active`='1' \
            ORDER BY SUBSTRING_INDEX(`address`,'@',1) DESC LIMIT 1}{yes}{no}}
      transport = dovecot_delivery
      cannot_route_message = Unknown user

# 7.Отправка почты в МИР через провайдера "КОМСТАР" smtp.aaanet.ru
aaanet_router:
   driver = manualroute
   transport = aaanet_transport
   domains = ! +local_domains
   route_list = * smtp.aaanet.ru

# 8.Если лег сервак aaanet.ru то EXIM отправляет напрямую
dnslookup:
   driver = dnslookup
   domains = ! +local_domains
   transport = remote_smtp
   ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
   no_more


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


begin transports

# Доставка локальным адресатам - в dovecot
# Надо заметить что тут использовалась ранее прямая доставка
# в директорию, но щас с портами стал-таки устанавливаться deliver
# программа dovecot занимающаяся доставкой messages.
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

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

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

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

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


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


begin retry

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


######################################################################
#                      REWRITE CONFIGURATION                         #
######################################################################


begin rewrite

#*@rnd.mydomain.ru	$local_part@mydomain.ru	Eh
#*@office.mydomain.ru	$local_part@mydomain.ru Eh

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


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


begin authenticators

# Аутентификатор для Мастерхоста (masterhost_transport) LOGIN
# И плюс аутентификацию что лисяра придумал server_condition итд это она
# 1. Так авторизуется Netscape => (LOGIN)
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

# 2. Так авторизуется Outlook Express => (PLAIN)
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

# 3. Так авторизуется TheBat! => (CRAM-MD5)
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


И добавляем в /etc/rc.conf

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


Ну и запускаем Exim

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


Создаем а админке Postfixadmin домен, почтовые ящики, алиасы.

После чего можно проверить почтовый сервера на возможность использования почтового сервера в качестве пересыльщика почты Open relay
Вот ссылка http://test.nettools.ru/
          http://www.abuse.net/relay.html





Хостинг HOST-FOOD

2014-07-27, lissyara
gmirror

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

Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
подписка

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

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

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.2996 секунд
Из них PHP: 73%; SQL: 27%; Число SQL-запросов: 80 шт.
Исходный размер: 224660; Сжатая: 40138