Главная | Контакты



Главная > Программы > Postfix

Создание почтового сервера на FreeBSD. Часть 2

Продолжаем установку почтовой системы на FreeBSD

В прошлой части мы установили postfix и вспомогательные модули для него. Сейчас же будем заводить пользователей и тестировать систему.

Apache

Устанавливаем веб сервер apache, он нам понадобится для postfixadmin.

# cd /usr/ports/www/apache22/

# make config

# make install clean

# rehash

Настраиваем автоматический запуск apache сервера при старте системы

# echo ‘apache22_enable=»YES»‘ >> /etc/rc.conf

Php

Устанавливаем php, также необходим для работы postfixadmin.

# cd /usr/ports/lang/php5

# make config

# make install clean

В самом конце установки обращаем внимание на следующие строчки

Make sure index.php is part of your DirectoryIndex.

You should add the following to your Apache configuration file:

AddType application/x-httpd-php .php

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

***************************************************************

***************************************************************

И вносим соответствующие параметры в /usr/local/etc/apache22/httpd.conf

Создаем php.ini и изменяем под свои нужды.

# cd /usr/local/etc

# cp php.ini-dist php.ini

Php-extentions

Теперь устанавливаем необходимые расширения для php. Список конкретных расширений зависит от специфики сервера. Так как перечень поддерживаемых расширений очень большой, то я не буду приводить их всех, а лишь укажу те, которые я включил. Все расширения кроме выбранных, отключены, но вы в любой момент можете установить любое необходимое вам расширение.

# cd /usr/ports/lang/php5-extensions/

# make config

[X] BZ2

[X] DOM

[X] GD

[X] GETTEXT

[X] ICONV

[X] IMAP

[X] MBSTRING

[X] MYSQL

[X] PCRE

[X] POSIX

[X] SESSION

[X] SPL

[X] XML

[X] ZLIB

# make install clean

# rehash

Проверяем нашу связку apache + php. Для этого создаем тестовый файл, со следующим содержимым.

# touch /usr/local/www/apache22/data/test.php

# cat /usr/local/www/apache22/data/test-php.php

<?

phpinfo();

?>

Запускаем apache

# /usr/local/etc/rc.d/apache22 start

Starting apache.

# cat /var/log/apache/httpd-error.log

[Sun Feb 10 02:01:26 2010] [notice] Apache/2.2.17 (FreeBSD) mod_ssl/2.2.17 OpenSSL/0.9.8n DAV/2 PHP/5.2.14 with Suhosin-Patch configured — resuming normal operations

[Sun Feb 10 02:01:26 2010] [notice] Accept mutex: flock (Default: flock)

Открываем в любимом интернет проводнике test.php. Если все правильно настроено, то мы должны увидеть подобную страничку.

Postfixadmin

Устанавливаем веб интерфейс для администрирования почтовых ящиков.

# cd /usr/ports/mail/postfixadmin

# make config

# make install clean

Внимательно читаем файл /usr/local/www/postfixadmin/INSTALL.TXT. После этого следуем инструкциям и настраиваем postfixadmin. Лично я делаю отдельный виртуалхост для postfixadmin. Для этого добавляем следующую директиву в extra/httpd-vhost.conf.

NameVirtualHost *:80

<VirtualHost *:80>

ServerAdmin webmaster@it-volga.org

DocumentRoot /usr/local/www/postfixadmin

ServerName postfix-admin.it-volga.org

<Directory «/usr/local/www/postfixadmin»>

Options Indexes

AllowOverride All

DirectoryIndex index.php

</Directory>

</VirtualHost>

В целях безопасности изменяем стандартный пароль администратора postfixadmin.

# cd /usr/local/www/postfixadmin/admin/

# htpasswd -b .htpasswd admin 1234567

Updating password for user admin

Так как postfixadmin хранит все данные в БД, то нам необходимо создать саму БД и соответствующие таблицы. К счастью эту работу за нас уже сделали разработчики. Вместе с postfixadmin поставляется sql скрипт, который создает БД и все таблицы. Этот скрипт располагается в корневой директории postfixadmin. Нам лишь необходимо выполнить его.

# cd /usr/local/www/postfixadmin

# mysql -u root -p < DATABASE_MYSQL.TXT

Enter password: ******

Примечание !!!

Перед применением скрипта настоятельно рекомендую поменять пароли в файле DATABASE_MYSQL.TXT для пользователей postfix и postfixadmin. После изменения пароля не забываем также поменять его в следующих файлах:

/usr/local/lib/sasl2/smtpd.conf

/usr/local/etc/authlib/authmysqlrc

/usr/local/etc/postfix/mysqlLookupMaps/alias.conf

/usr/local/etc/postfix/mysqlLookupMaps/domain.conf

/usr/local/etc/postfix/mysqlLookupMaps/mailbox.conf

/usr/local/etc/postfix/mysqlLookupMaps/quota.conf

/usr/local/etc/postfix/mysqlLookupMaps/sender.conf

/usr/local/www/postfixadmin/config.inc.php

Редактируем файл /usr/local/www/postfixadmin/config.inc.php. Ваш листинг может отличаться от моего тем, что в каждой новой версии postfixadmin добавляются новые функции.

<?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.

// Именндо для беспроблемной авторизации в Outlook делается чистый пароль

// 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'] = ’10′;

// Default Aliases
// Создания стандартных алиасов для сервера.
$CONF['default_aliases'] = array (
‘abuse’ => ‘abuse@it-volga.org’,
‘hostmaster’ => ‘hostmaster@it-volga.org’,
‘postmaster’ => ‘postmaster@it-volga.org’,
‘webmaster’ => ‘webmaster@it-volga.org’
);

// 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'] = ‘YES’;
// 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'] = ’10′;
$CONF['mailboxes'] = ’10′;
$CONF['maxquota'] = ’10′;

// 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.it-volga.org’;

// 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'] = ‘NO’;

// Alias Control for admins
// Set to ‘NO’ if your domain admins shouldn’t be able to edit user aliases.
$CONF['alias_control_admin'] = ‘NO’;

// Special Alias Control
// Set to ‘NO’ if your domain admins shouldn’t be able to edit default aliases.
$CONF['special_alias_control'] = ‘NO’;

// 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://postfix-admin.it-volga.org/»;

// 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 www.it-volga.org’;
$CONF['footer_link'] = ‘http://www.t-volga.org’;

// Welcome Message
// This message is send to every newly created mailbox.
// Change the text between EOM.
$CONF['welcome_text'] = <<<EOM
Hi,

Добро пожаловать.
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']=’YES’;

// 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: */

* Тут надо поставить true чтобы web-интерфейс смог потом работать
*/
$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://postfix-admin.it-volga.org
$CONF['postfix_admin_url'] = ‘http://postfix-admin.it-volga.org’;
// shouldn’t need changing.
$CONF['postfix_admin_path'] = /usr/local/www/postfixadmin;
// Язык интерфейса
// 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'] = ‘mysql’;
$CONF['database_host'] = ‘localhost’;
$CONF['database_user'] = ‘postfix’;
$CONF['database_password'] = ‘postfixadmin’;
$CONF['database_name'] = ‘postfix’;
$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@it-volga.org’;

// 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'] = ‘md5crypt’;

$CONF['encrypt'] = cleartext;

Перегружаем apache и пробуем открыть главную страницу postfixadmin – http://postfix-admin.it-volga.org/.

# /usr/local/etc/rc.d/apache22 restart

Stopping apache.

Waiting for PIDS: 1810.

Starting apache.

Если мы производим настройку первый раз, то нам предлагают перейти по ссылке setup. Если все правильно настроенно, то мы увидим следующую страницу.

Переходим по ссылке admin section (логин и пароль по умолчанию – admin/admin). Создаем домен (в моем случае it-volga.org) и три почтовыx ящика, например, it-volga@it-volga.org, quota@it-volga.org и virusalert@it-volga.org (этот ящик пригодится для проверки антивируса). Для ящика quota@it-volga.org задаем маленькую квоту, например, 2 Мб. При этом у вас должна быть примерно такая структура.

При создании ящика в log-файле должно быть такое:

# cat /var/log/maillog | grep 51F94B851

Feb 10 13:40:58 mx postfix/smtpd[1967]: 51F94B851: client=localhost.it-volga.org[127.0.0.1]

Feb 10 13:40:58 mx postfix/cleanup[1969]: 51F94B851: message-id=<20080210114058.51F94B851@mx.it-volga.org>

Feb 10 13:40:58 mx postfix/qmgr[1964]: 51F94B851: from=<>, size=404, nrcpt=1 (queue active)

Feb 10 13:40:58 mx postfix/virtual[1970]: 51F94B851: to=<it-volga@it-volga.org>, relay=virtual, delay=0.22, delays=0.13/0.06/0/0.03, dsn=2.0.0, status=sent (delivered to maildir)

Feb 10 13:40:58 mx postfix/qmgr[1964]: 51F94B851: removed

Feb 10 13:42:36 mx postfix/qmgr[1964]: 739C4B83B: removed

# cat /var/log/maillog | grep 739C4B83B

Feb 10 13:42:36 mx postfix/smtpd[1967]: 739C4B83B: client=localhost.it-volga.org[127.0.0.1]

Feb 10 13:42:36 mx postfix/cleanup[1969]: 739C4B83B: message-id=<20080210114236.739C4B83B@mx.it-volga.org>

Feb 10 13:42:36 mx postfix/qmgr[1964]: 739C4B83B: from=<>, size=406, nrcpt=1 (queue active)

Feb 10 13:42:36 mx postfix/virtual[1970]: 739C4B83B: to=<quota@it-volga.org>, relay=virtual, delay=0.1, delays=0.08/0.01/0/0.01, dsn=2.0.0, status=sent (delivered to maildir)

# cat /var/log/maillog | grep C5ED3B842

Feb 10 13:42:41 mx postfix/smtpd[1967]: C5ED3B842: client=localhost.it-volga.org[127.0.0.1]

Feb 10 13:42:41 mx postfix/cleanup[1969]: C5ED3B842: message-id=<20080210114241.C5ED3B842@www.it-volga.org>

Feb 10 13:42:41 mx postfix/qmgr[1964]: C5ED3B842: from=<>, size=416, nrcpt=1 (queue active)

Feb 10 13:42:41 mx postfix/virtual[1970]: C5ED3B842: to=<virusalert@it-volga.org>, relay=virtual, delay=0.04, delays=0.03/0/0/0.01, dsn=2.0.0, status=sent (delivered to maildir)

Feb 10 13:42:41 mx postfix/qmgr[1964]: C5ED3B842: removed

После настройки удаляем файл setup.php

Если все правильно настроено, то в /var/spool/mail/ должны появиться следующие папки:

# ls -l /var/spool/mail/

total 2

drwx—— 5 virtual virtual 512 Feb 10 13:42 it-volga.org

# ls -l /var/spool/mail/it-volga.org/

total 6

drwx—— 5 virtual virtual 512 Feb 10 13:40 it-volga@it-volga.org

drwx—— 5 virtual virtual 512 Feb 10 13:42 quota@it-volga.org

drwx—— 5 virtual virtual 512 Feb 10 13:42 virusalert@it-volga.org

Эти папки появляются только после создания почтовых ящиков в postfixadmin. При создании домена в postfixadmin никакие папки не создаются.

Примечание! Чтобы все заработало надо вручную создать папку admin@it-volga.org. Она должна совпадать с админской почтой postfixadmin. Иначе долго будете мучаться и гадать почему не уходят письма.

Тестирование почтовой системы

Отправка письма с аутентификацией

# cat maillog
Feb 10 14:11:48 mx postfix/smtpd[2200]: connect from alex.it-volga.org[192.168.0.16]
Feb 10 14:11:48 mx postfix/cleanup[2204]: B6FBAB865: message-id=<20080210121148.B6FBAB865@freebsd.it-volga.org>
Feb 10 14:11:48 mx postfix/qmgr[2198]: B6FBAB865: from=<>, size=260, nrcpt=1 (queue active)
Feb 10 14:11:48 mx postfix/virtual[2205]: B6FBAB865: to=<it-volga@it-volga.org>, relay=virtual, delay=0.08, delays=0.02/0.04/0/0.01, dsn=2.0.0, status=deliverable (delivers to maildir)
Feb 10 14:11:48 mx postfix/qmgr[2198]: B6FBAB865: removed
Feb 10 14:11:51 mx postfix/smtpd[2200]: AFD8AB866: client=alex.it-volga.org[192.168.0.16], sasl_method=CRAM-MD5, sasl_username=it-volga@it-volga.org
Feb 10 14:11:51 mx postfix/cleanup[2204]: AFD8AB866: message-id=<56523328.20080210154429@it-volga.org>
Feb 10 14:11:51 mx postfix/qmgr[2198]: AFD8AB866: from=<it-volga@it-volga.org>, size=778, nrcpt=1 (queue active)
Feb 10 14:11:51 mx postfix/virtual[2205]: AFD8AB866: to=<quota@it-volga.org>, relay=virtual, delay=3.1, delays=3.1/0.01/0/0.01, dsn=2.0.0, status=sent (delivered to maildir)
Feb 10 14:11:51 mx postfix/qmgr[2198]: AFD8AB866: removed
Feb 10 14:11:51 mx postfix/smtpd[2200]: disconnect from alex.it-volga.org[192.168.0.16]

Обращаем внимание на следующее строчки:

* sasl_method=CRAM-MD5 – метод аутентификации;
* sasl_username=it-volga@it-volga.org – имя пользователя в почтовом клиенте необходимо указывать вместе с именем домена

Получение письма по протоколу pop3

Feb 10 14:08:38 mx authdaemond: Authenticated: sysusername=, sysuserid=1981, sysgroupid=1981, homedir=/var/spool/mail, address=it-volga@it-volga.org, fullname=sysadmin, maildir=it-volga.org/it-volga@it-volga.org/, quota=10240000, options=
Feb 10 14:08:38 mx authdaemond: Authenticated: clearpasswd=123, passwd=
Feb 10 14:08:38 mx courier-imap: LOGIN, user=it-volga@it-volga.org, ip=[192.168.0.16], port=[1280]
Feb 10 14:08:38 mx courier-imap: LOGOUT, user=it-volga@it-volga.org, ip=[192.168.0.16], port=[1280], top=0, retr=477, rcvd=40, sent=706, time=0

Проверим поддержку квот. Для этого отправим пользователю quota@it-volga.org, у которого квота 2Мб, письмо с вложением ~3МБ

# cat maillog
Feb 10 14:22:54 mx postfix/smtpd[2237]: connect from alex.it-volga.org[192.168.0.16]
Feb 10 14:22:54 mx postfix/smtpd[2237]: D7AD2B822: client=alex.it-volga.org[192.168.0.16], sasl_method=CRAM-MD5, sasl_username=it-volga@it-volga.org Feb 10 14:22:54 mx postfix/cleanup[2240]: D7AD2B822: message-id=<452854827.20080210180915@it-volga.org>
Feb 10 14:22:55 mx postfix/qmgr[2198]: D7AD2B822: from=<it-volga@it-volga.org>, size=4422958, nrcpt=1 (queue active)
Feb 10 14:22:55 mx postfix/smtpd[2237]: disconnect from alex.it-volga.org[192.168.0.16]
Feb 10 14:22:56 mx postfix/virtual[2241]: D7AD2B822: to=<quota@it-volga.org>, relay=virtual, delay=1.3, delays=1.1/0.05/0/0.24, dsn=5.2.3, status=bounced (maildir delivery failed: «Sorry, the user’s maildir has overdrawn his diskspace quota, please try again later»)
Feb 10 14:22:56 mx postfix/cleanup[2240]: 2A834B826: message-id=<20080210122256.2A834B826@mx.it-volga.org>
Feb 10 14:22:56 mx postfix/bounce[2242]: D7AD2B822: sender non-delivery notification: 2A834B826
Feb 10 14:22:56 mx postfix/qmgr[2198]: 2A834B826: from=<>, size=2577, nrcpt=1 (queue active)
Feb 10 14:22:56 mx postfix/qmgr[2198]: D7AD2B822: removed
Feb 10 14:22:56 mx postfix/virtual[2241]: 2A834B826: to=<it-volga@it-volga.org>, relay=virtual, delay=0.03, delays=0.02/0.01/0/0.01, dsn=2.0.0, status=sent (delivered to maildir)
Feb 10 14:22:56 mx postfix/qmgr[2198]: 2A834B826: removed

Как видно из log-файла – «status=bounced (maildir delivery failed: «Sorry, the user’s maildir has overdrawn his diskspace quota, please try again later»)», поддержка квот работает. Текст сообщения можно задать в main.cf в параметре virtual_maildir_limit_message.

На RHEL системах поддержка квот отсутствует, чтобы ее использовать вам необходимо пересобрать postfix и применить патч, который добавляет данный функционал.

А теперь попробуем отправить письмо в мир, без аутентификации.

# telnet 192.168.0.15 25
Trying 192.168.0.15…
Connected to mx.it-volga.org.
Escape character is ‘^]’.
220 mx.it-volga.org ESMTP
helo alex.it-volga.org
250 mx.it-volga.org
mail from:<it-volga@it-volga.org>
250 2.1.0 Ok
rcpt to:<it-volga@bk.ru>
554 5.7.1 <it-volga@bk.ru>: Relay access denied
quit
221 2.0.0 Bye
Connection closed by foreign host.

При этом в log-файле должно быть следующее:

# cat maillog

Feb 10 14:35:12 mx postfix/smtpd[2287]: connect from alex.it-volga.org[192.168.0.16]
Feb 10 14:35:18 mx postfix/smtpd[2287]: NOQUEUE: reject: RCPT from alex.it-volga.org[192.168.0.16]: 554 5.7.1 <it-volga@bk.ru>: Relay access denied; from=<it-volga@it-volga.org> to=<it-volga@bk.ru> proto=SMTP helo=<alex.it-volga.org>
Feb 10 14:35:20 mx postfix/smtpd[2287]: disconnect from alex.it-volga.org[192.168.0.16]

Feb 10 14:35:20 mx postfix/smtpd[2287]: disconnect from alex.it-volga.org[192.168.0.16]

Как видно из сообщения – «Relay access denied». Релей почты для пользователей, не прошедших аутентификацию запрещен. Теперь попробуем отправить почту с несуществующего ящика внутри домена.

# telnet 192.168.0.15 25
Trying 192.168.0.15…
Connected to mx.it-volga.org.
Escape character is ‘^]’.
220 mx.it-volga.org ESMTP
helo alex.it-volga.org
250 mx.it-volga.org
mail from:<user1@it-volga.org>
250 2.1.0 Ok
rcpt to:<it-volga@it-volga.org>
550 5.1.0 <user1@it-volga.org>: Sender address rejected: User unknown
quit
221 2.0.0 Bye
Connection closed by foreign host.

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

# telnet localhost 25
Trying 127.0.0.1…
Connected to localhost.somedomain.org.
Escape character is ‘^]’.
220 mail.somedomain.org. ESMTP
helo localhost
250 mail.somedomain.org
mail from:<user@somedomain.org.ua>
250 2.1.0 Ok
rcpt to:<it-volga@it-volga.org>
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
Hello world
.
250 2.0.0 Ok: queued as B9E0EB833
quit
221 2.0.0 Bye
Connection closed by foreign host.

# cat /var/log/maillog | grep B9E0EB833

Feb 10 19:28:01 mail postfix/smtpd[1058]: B9E0EB833: client=localhost.somedomain.org[127.0.0.1]
Feb 10 19:28:05 mail postfix/cleanup[1060]: B9E0EB833: message-id=<20080210172801.B9E0EB833@mail.somedomain.org>
Feb 10 19:28:05 mail postfix/qmgr[1056]: B9E0EB833: from=<user@somedomain.org.ua>, size=376, nrcpt=1 (queue active)
Feb 10 19:28:08 mail postfix/smtp[1061]: B9E0EB833: to=<it-volga@it-volga.org>, relay=mx.it-volga.org[x.x.x.x]:25, delay=7.8, delays=4.6/0/0.01/3.1, dsn=5.1.7, status=bounced (host mx.it-volga.org[x.x.x.x] said: 550 5.1.7 <user@somedomain.org>: Sender address rejected: undeliverable address: host mail.somedomain.org[217.20.223.100] said: 550 5.1.1 <user@somedomain.org>: Recipient address rejected: User unknown (in reply to RCPT TO command) (in reply to RCPT TO command))
Feb 10 19:28:08 mail postfix/bounce[1075]: B9E0EB833: sender non-delivery notification: 45DACB835
Feb 10 19:28:08 mail postfix/qmgr[1056]: B9E0EB833: removed

А теперь посмотрим log-файл на нашем почтовом сервере

# cat maillog

Feb 10 19:28:15 mx postfix/smtpd[1306]: connect from mail.somedomain.org.ua[217.20.223.100]
Feb 10 19:28:15 mx postfix/cleanup[1388]: 3EA3CB825: message-id=<20080210172815.3EA3CB825@mx.it-volga.org>
Feb 10 19:28:15 mx postfix/qmgr[773]: 3EA3CB825: from=<>, size=260, nrcpt=1 (queue active)
Feb 10 19:28:15 mx postfix/smtp[1390]: 3EA3CB825: to=<user@somedomain.org.ua>, relay=mail.somedomain.org[x.x.x.x]:25, delay=0.17, delays=0.06/0.09/0.02/0.01, dsn=5.1.1, status=undeliverable (host mail.somedomain.org.ua[217.20.223.100] said: 550 5.1.1 <user@somedomain.org.ua>: Recipient address rejected: User unknown (in reply to RCPT TO command))
Feb 10 19:28:15 mx postfix/qmgr[773]: 3EA3CB825: removed
Feb 10 19:28:18 mx postfix/smtpd[1306]: NOQUEUE: reject: RCPT from mail.somedomain.org[x.x.x.x]: 550 5.1.7 <user@somedomain.org>: Sender address rejected: undeliverable address: host mail.somedomain.org[x.x.x.x] said: 550 5.1.1 <user@somedomain.org>: Recipient address rejected: User unknown (in reply to RCPT TO command); from=<user@somedomain.org.ua> to=<it-volga@it-volga.org> proto=ESMTP helo=<mail.somedomain.org>
Feb 10 19:28:18 mx postfix/smtpd[1306]: disconnect from mail.somedomain.org[x.x.x.x]

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

Но здесь также есть свои подводные камни. Например, yandex отправляет открытки с несуществующего адреса, а mxs.mail.ru всегда говорит, что ящик существует. Так что подобные домены/серверы необходимо вносить в исключения.

А теперь попробуем, аутентифицировавшись под пользователем it-volga@it-volga.org, отправить почту от имени quota@it-volga.org.

# telnet 192.168.0.15 25
Trying 192.168.0.15…
Connected to mx.it-volga.org.
Escape character is ‘^]’.
220 mx.it-volga.org ESMTP
ehlo alex.it-volga.org
250-mx.it-volga.org
250-PIPELINING
250-SIZE 5242880
250-ETRN
250-AUTH LOGIN PLAIN CRAM-MD5
250-AUTH=LOGIN PLAIN CRAM-MD5
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
auth plain
334
AGFsZXhAc3lzLWFkbS5vcmcudWEAMTIz
235 2.0.0 Authentication successful
mail from:<quota@it-volga.org>
250 2.1.0 Ok
rcpt to:<it-volga@it-volga.org>
553 5.7.1 <quota@it-volga.org>: Sender address rejected: not owned by user it-volga@it-volga.org
quit
221 2.0.0 Bye
Connection closed by foreign host.

Для того, чтобы сгенерировать ответ для PLAIN аутентификации выполните следующую команду:

# perl -MMIME::Base64 -e ‘print encode_base64(«\0it-volga\@it-volga\.org\000123″)’
AGl0LXZvbGdhQGl0LXZvbGdhLm9yZwAxMjM=

На этом базовую настройку МТА можно считать завершенной.
После настройки MTA рекомендую проверить систему на http://test.nettools.ru/, на возможность использования почтового сервера в качестве пересыльщика почты (mail relay). В поле Mail Relay вводим ip или dns имя своего почтового сервера и нажимаем на кнопку ОК. После некоторого времени система напишет результат. Если все настроено правильно, то мы должны увидеть следующую страницу.Если у вас такое же сообщение, то поздравляю вас, ваша почтовая система готова к работе.

В следующей части рассотрим установку антивирусной защиты и антиспам фильтра.

Материал взят с сайта: http://www.it-volga.org/sozdanie-pochtovogo-servera-na-freebsd-chast-2/

Главная > Программы > Postfix