И так сейчас я распишу как поднять полноценный почтовый сервер с веб-интерфейсом управления ящиками, веб-интерфейсом для чтения/отправки, антиспамом и т.д.
ПО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)