|
|
www.lissyara.su
—> статьи
—> FreeBSD
—> почтовые системы
—> exim&dovecot+postfixadmin
Установка почтового сервера Exim & Dovecot + Postfixadmin
Статья пишется..... Думаю скоро допишу и открою.
/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
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
|
/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, должно быть что то типа этого.
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'
| Создаем таблицы в БД:
############# БД: `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;
|
/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
|
//> 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
|
//> 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 |
+--------------------------------------------------------------------+
|
Добавляем алиас в 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']=' ';
// 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
Далее переходим в браузере http://192.168.1.xxx/postfixadmin/
там создаем Администратора для того чтобы создавать домены и других админов
Будет что то типа
Видим хеш нашего пароля, вводим его в config.inc.php
Меняем два параметра в конфиге
$CONF['configured'] = false;
на
$CONF['configured'] = true;
и
$CONF['setup_password'] = 'changeme';
на
$CONF['setup_password'] = 'ХЕШ который получили';
|
Далее вводим пароль и создаем администратора.
//> 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 , я его собирал без антивируса т.к masterhost.ru сам проверяет на вирусы, а два раза проверять на вирусы, это слишком (плюс еще к тому же на каждом компе антивирь NOD32)т.е даже трижды.
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
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
|