31 июл 2010
Установка почтового сервера на базе Postfix в Debian
Dmitrius Категория: Web-Мастеру » Уроки
У нас вы можете скачать бесплатно Установка почтового сервера на базе Postfix в Debian

Данный материал предоставлен сайтом Skripter.info исключительно в ознакомительных целях. Администрация не несет ответственности за его содержимое.
Установка почтового сервера на базе Postfix в Debian


И так сейчас я распишу как поднять полноценный почтовый сервер с веб-интерфейсом управления ящиками, веб-интерфейсом для чтения/отправки, антиспамом и т.д.

ПО

Debian 5.0.1
Postfix 2.5.5-1.1
Apache 2.2.9-10+lenny2
Mysql 5.0.51a-24
Postfix Admin 2.3rc4
Roundcube 0.2.1
SpamAssassin 3.2.5-2
amavisd-new 1:2.6.1.dfsg-1
dovecot-pop3d/imapd 1:1.0.15-2.3
postgrey 1.31-3

Установка

В /etc/hostname должно быть имя сервера без доменной части. А в /etc/mailname наоборот - fqdn имя.

root@mx1:~# cat /etc/hostname
mx1


root@mx1:~# cat /etc/mailname
mx1.domain.com


Файлик /etc/hosts тоже надо поправить. Нужно что бы fqdn имя шло в начале. Примерно вот так
178.124.126.40 mx1.domain.com mx1

Ставим postfix-mysql, что позволит postfix обращаться к данным в mysql
aptitude install postfix-mysql


Что потянет за собой postfix. Когда спросят про general type of configuration отвечаем Internet Site.А в поле "System mail name" нужно ввести fqdn имя. В нашем случае - это mx1.domain.com. Ставим POP и IMAP серверы
aptitude install dovecot-pop3d dovecot-imapd


и еще кучку
aptitude install amavisd-new libclass-dbi-mysql-perl spamassassin telnet


Postfix Admin и создание базы
wget www.netlly.ru/file_stuff/postfixadmin_2.3rc4_all.deb
dpkg -i postfixadmin_2.3rc4_all.deb


создаем бд для хранения аккаунтов почты и прочих настроек:
db name: postfix
user: postfix
password: zupermysqlpass


соответственно вносим изменения в конфиг Postfix Admin /usr/share/postfixadmin/config.inc.php
$CONF['configured'] = true;
$CONF['setup_password'] = 'введите пароль для установки';
$CONF['default_language'] = 'ru';
$CONF['database_type'] = 'mysqli';
$CONF['database_password'] = 'zupermysqlpass';
$CONF['admin_email'] = 'введите ваш адрес';
$CONF['encrypt'] = 'md5';
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';


заходим на https://mx1.domain.com/postfixadmin/setup.php Установщик сообщить, что создал таблицы и все ок. Возможно будут ошибки или предупреждения - от них надо избавиться. У меня обычно бывает Depends on: IMAP functions и Magic Quotes: Enabled. Для устранения ставим php5-imap
aptitude install php5-imap


и правим файл /etc/php5/apache2/php.ini
magic_quotes_gpc = Off


нужно будет перезапустить апач. Далее в низу страницы, заполнив поля, создаем супер админа. Вас попросят сделать некоторые действия - все выполняем. Теперь по адресу https://mx1.domain.com/postfixadmin/ мы можем, введя логин и пароль, завести наш первый домен -
domain.com

Mapping files
Создаем первый файл /etc/postfix/mysql-virual-mailbox-domains.cf следующего содержания

user = postfix
password = zupermysqlpass
hosts = 127.0.0.1
dbname = postfix
query = select domain from domain where domain='%s'


чтоб проверить, что подключение к бд происходит и вообще mapping file правильный используем postmap:
root@mx1:~# postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
domain.com


сообщаем постфиксу, что домены надо смотреть в бд
postconf -e virtual_mailbox_domains=mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf


/etc/postfix/mysql-virtual-mailbox-maps.cf
user = postfix
password = zupermysqlpass
hosts = 127.0.0.1
dbname = postfix
query = select username from mailbox where username='%


проверим это файл, предварительно создав, в PostfixAdmin ящик test@example.comЭтот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен
javascript :
root@mx1:/etc/postfix# postmap -q
test@example.comЭтот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен javascript
  mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf


test@domain.comЭтот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен javascript

а теперь скажем постфиксу что ящики надо смотреть в этом файле
postconf -e virtual_mailbox_maps=mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf


/etc/postfix/mysql-virtual-alias-maps.cf
user = postfix
password = zupermysqlpass
hosts = 127.0.0.1
dbname = postfix
query = select goto from alias where address='%s'


/etc/postfix/mysql-email2email.cf
user = postfix
password = zupermysqlpass
hosts = 127.0.0.1
dbname = postfix
query = select username from mailbox where username='%s'


Вышеприведенные файлы отвечают за работу алиасов о чем и сообщим постфиксу
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m
postconf -e virtual_uid_maps=static:5000
postconf -e virtual_gid_maps=static:5000


еще наводим порядок с разрешениями наших mapping файлов:
chgrp postfix /etc/postfix/mysql-*.cf
chmod u=rw,g=r,o= /etc/postfix/mysql-*.cf


Dovecot. Доставка писем
в конец /etc/postfix/master.cf добавляем
dovecot   unix  -       n       n       -       -       pipe
    flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}


перегружаем постфикс
postfix reload


так же настраиваем виртуальную доставку
postconf -e virtual_transport=dovecot
postconf -e dovecot_destination_recipient_limit=1


Теперь нужно настроить непосредственно Dovecot открываем /etc/dovecot/dovecot.conf
disable_plaintext_auth = no
mail_location = maildir:/home/vmail/%d/%n/Maildir

namespace private {
separator = .
prefix = INBOX.
inbox = yes
}

protocol lda {
postmaster_address =
postmaster@domain.comЭтот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен j
avascript

  auth_socket_path = /var/run/dovecot/auth-master
  mail_plugins = cmusieve
  global_script_path = /home/vmail/globalsieverc
  log_path = /home/vmail/dovecot-deliver.log
}

#protocol managesieve {
#  sieve=~/.dovecot.sieve
#  sieve_storage=~/sieve
#}

auth default {
  mechanisms = plain login

#passdb pam {
#}

  passdb sql {
     args = /etc/dovecot/dovecot-sql.conf
  }

  userdb static {
    args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes
  }

  socket listen {
    master {
      path = /var/run/dovecot/auth-master
      mode = 0600
      user = vmail
    }
    client {
      path = /var/spool/postfix/private/auth
      mode = 0660
      user = postfix
      group = postfix
    }
  }
}


файл /etc/dovecot/dovecot-sql.conf должен содержать следующие данные, для того что dovecot мог смотреть авторизационные данные в бд
driver = mysql
connect = host=127.0.0.1 dbname=postfix user=postfix password=zupermysqlpass
default_pass_scheme = PLAIN-MD5
password_query = SELECT username as user, password FROM mailbox WHERE username = '%u'


для порядка
chgrp vmail /etc/dovecot/dovecot.conf
chmod g+r /etc/dovecot/dovecot.conf


так же посредством dovecot будет авторизовывать постфикс
postconf -e smtpd_sasl_type=dovecot
postconf -e smtpd_sasl_path=private/auth
postconf -e smtpd_sasl_auth_enable=yes
postconf -e smtpd_recipient_restrictions=permit_mynetworks, \
permit_sasl_authenticated,reject_unauth_destination


Спам
По умолчанию spamassassin и amavis настроены. Только в файле /etc/amavis/conf.d/15-content_filter_mode надо раскомментировать
@bypass_spam_checks_maps = (
   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);


аккуратно просмотрите файл /etc/amavis/conf.d/20-debian_defaults желательно значение параметра $final_spam_destiny изменить с D_BOUNCE на D_PASS. Просмотрите в этом файле раздел $banned_filename_re, например я комментирую следующие строки
#  qr'.\.(exe|vbs|pif|scr|bat|cmd|com|cpl)$'i, # banned extension - basic
#  qr'^\.(exe-ms)$',                       # banned file(1) types


далее в подраздел a hash-type lookup table раздела @score_sender_maps можно добавить свой домен с большим отрицательным весом, что бы он точно не принимался за спам
{ # a hash-type lookup table (associative array)
     '.ваш_домен.ru'                        => -20.0,
     'ваш_адрес@другой_ваш_домен.ru'        => -20.0,
     ...............


в файл /etc/spamassassin/local.cf добавим одну строчку
bayes_auto_expire 0


в файл /etc/amavis/conf.d/50-user в конце, но перед "1;" добавляем:
@lookup_sql_dsn = (
        ['DBI:mysql:database=postfix;host=127.0.0.1;port=3306',
        'postfix',
        'zupermysqlpass']);


$sql_select_policy = 'SELECT domain FROM domain WHERE CONCAT("@",domain) IN (%k)';

перезапускаем amavis
/etc/init.d/amavis restart


разрешаем spamassassin в файле /etc/default/spamassassin
ENABLED=1


и запускаем его
/etc/init.d/spamassassin start


скажем постфиксу перенаправлять письма на amavis
postconf -e content_filter=smtp-amavis:[127.0.0.1]:10024
postconf -e receive_override_options=no_address_mappings


в конец /etc/postfix/master.cf добавляем
smtp-amavis unix -      -       n     -       2  smtp
    -o smtp_data_done_timeout=1200
    -o smtp_send_xforward_command=yes
    -o disable_dns_lookups=yes
    -o max_use=20

127.0.0.1:10025 inet n  -       -     -       -  smtpd
    -o content_filter=
    -o local_recipient_maps=
    -o relay_recipient_maps=
    -o smtpd_restriction_classes=
    -o smtpd_delay_reject=no
    -o smtpd_client_restrictions=permit_mynetworks,reject
    -o smtpd_helo_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o smtpd_data_restrictions=reject_unauth_pipelining
    -o smtpd_end_of_data_restrictions=
    -o mynetworks=127.0.0.0/8
    -o smtpd_error_sleep_time=0
    -o smtpd_soft_error_limit=1001
    -o smtpd_hard_error_limit=1000
    -o smtpd_client_connection_count_limit=0
    -o smtpd_client_connection_rate_limit=0
    -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
    -o local_header_rewrite_clients=


и перегружаем постфикс
postfix reload


для того что бы письма квалифицированные как спам откладывались в специальную папку и не получались почтовым клиентом, но осталась возможность их просмотреть с помощью веб-интерфеса создаем файл /
home/vmail/globalsieverc:
require ["fileinto"];
# Move spam to spam folder
if header :contains "X-Spam-Flag" ["YES"] {
  fileinto "Junk";
  stop;
}


для обучения spamassassin пользуем команды
sa-learn --ham


и
sa-learn --spam


Теперь добавим postgrey, реализация грейлистинга для постфикса.
aptitude install postgrey


подправим /etc/postfix/main.cf в параметр smtpd_recipient_restrictions включив postgrey:
smtpd_recipient_restrictions =
        reject_unknown_sender_domain
        reject_unknown_recipient_domain
        reject_non_fqdn_sender
        reject_non_fqdn_recipient
        permit_mynetworks
        permit_sasl_authenticated
        reject_unauth_destination
        check_policy_service inet:127.0.0.1:60000


перегружаем постфикс
/etc/init.d/postfix reload


первые две-три недели spamassassin надо будет пообучать, а потом вместе с postgrey они будут пропускать примерно один спам в день. Данного набора вполне достаточно для эффективной борьбы со спамом. Особенно хочу выразить свою гражданскую позицию относительно спамхауса: у системных администраторов, которые используют спамхаус, бабушки работали вахтерами на заводских проходных!

Автоответчик
Для начала создадим пользователя и группу:
groupadd vacation
useradd -d /non -g vacation -s /bin/false -c "Virtual Vacation" vacation


распакуем и положим в нужно место скрипт, который и будет заниматься автоответом:
cd /usr/share/doc/postfixadmin/VIRTUAL_VACATION
gunzip vacation.pl.gz
mkdir /var/spool/vacation
cp vacation.pl /var/spool/vacation/
chown -R vacation.vacation /var/spool/vacation
chmod 700 /var/spool/vacation/vacation.pl


в в /var/spool/vacation/vacation.pl впишем параметры
my $db_type = 'mysql';
our $db_host = 'localhost';
our $db_username = 'postfix';
our $db_password = 'zupermysqlpass';
our $db_name     = 'postfix';
our $vacation_domain = 'autoreply.domain.com';


в конец файла /etc/postfix/master.cf добавляем
vacation    unix  -       n       n       -       -       pipe
  flags=Rq user=vacation argv=/var/spool/vacation/vacation.pl -f ${sender} -- ${recipient}


создаем файл /etc/postfix/transport следующего содержания
autoreply.domain.com        vacation:


сделаем хеш
postmap hash:/etc/postfix/transport


в /etc/postfix/main.cf пропишем
transport_maps = hash:/etc/postfix/transport


не забыв перегрузить постфикс
/etc/init.d/postfix reload


добавим строчку в /etc/hosts
127.0.0.1 autoreply.domain.com


в /usr/share/postfixadmin/config.inc.php прописать
$CONF['vacation'] = 'YES';
$CONF['vacation_domain'] = 'autoreply.domain.com';


напоследок перловых модулей доставить надо
aptitude install libmail-sendmail-perl libdbd-pg-perl \
libemail-valid-perl libmime-perl liblog-log4perl-perl \
liblog-dispatch-perl  libgetopt-argvfile-perl \
libmime-charset-perl libmime-encwords-perl


Теперь пользователь может по адресу https://mx1.domain.com/postfixadmin/users/ не только изменить пароль и настройки пересылки писем, но и установить автоответчик.

Веб-интерфейс для чтения и отправки писем


wget www.netlly.ru/file_stuff/roundcubemail-0.2.1.tar.gz.gz
tar xzvf roundcubemail-0.2.1.tar.gz.gz


создаем бд в кодировке utf-8
db name: roundcubemail
user: roundcubemail
password zupercubepass


импортируем структуру:
mysql roundcubemail < SQL/mysql.initial.sql



создаем структуру папок для скриптов:
mkdir -p /home/sites/mail.example.com/htdocs
mkdir /home/sites/mail.example.com/logs


кидаем туда скрипты:
mv roundcubemail-0.2.1/* /home/sites/mail.domain.com/htdocs/
mv roundcubemail-0.2.1/.htaccess /home/sites/mail.domain.com/htdocs/


и создаем конфиг для апача /etc/apache2/sites-available/mail.domain.ru.conf
<VirtualHost 178.122.124.40:80>

        ServerName mail.example.com
        ServerAlias www.mail.domain.com
        DocumentRoot /home/sites/mail.domain.com/htdocs/

        Options FollowSymLinks -Indexes ExecCGI
        php_admin_value open_base_dir /home/sites/mail.example.com/htdocs/
        AddDefaultCharset windows-1251
        AddHandler cgi-script .cgi

        CustomLog /home/sites/mail.example.com/logs/access.log combined
        ErrorLog /home/sites/mail.example.com/logs/error.log

</VirtualHost>


разрешаем сайт и перегружаем апач
a2ensite mail.domain.ru.conf
/etc/init.d/apache2 reload


заходим по адресу https://mail.domain.com/installer/ и жмем Start Installation пройдет проверка необходимых компонентов и вы получите список чего Вам не хватает(на отсутствие PostgreSQL и SQLite не обращаем внимание). У меня вышло сообщение, что FileInfo: NOT AVAILABLE. Для разрешения ставим следующие пакеты:
aptitude install php5-dev php-pear
pecl install Fileinfo


и в раздел Dynamic Extensions файла /etc/php5/apache2/php.ini прописываем
extension=fileinfo.so


не забыв перегрузить апач
/etc/init.d/apache2 reload


на этапе Create config заполняем раздел Database setup, в разделе IMAP Settings default_host = mx1.domain.com и в разделе SMTP Settings smtp_server = mx1.example.com. Еще один полезный параметр create_default_folders нужно выставить в TRUE. Жмем Create config и копируем полученные файлы в /home/sites/mail.domain.com/htdocs/config/. Теперь заходим по адресу https://mail.domain.com/ и наслаждаемся красивым почтовым веб-интерфейсом.

8) 8) 8)









Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
andrei24 | 31 июля 2010 19:58
  • Группа: Посетители |
  • Комментарий: 1 (ссылка)

а есть ли где демо?

Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.