06.07.2017 17:34

#7 VPS - почтовый сервер | Ubuntu | Debian

Оглавление:

Подготовка и инструкция:

Все команды мы будем выполнять от имени пользователя root, поэтому мы не будем использовать в командах sudo для повышения прав, если вы выполняете под своим пользователям добавляйте sudo в начале команды.

Пример:

sudo apt-get update

Необходимо чтобы был установлен mysql server | apache2 | php, если его нет необходимо установить:

apt-get install mysql-server
apt-get install apache2 
apt-get install php php-mysql mcrypt php-mcrypt php-curl
phpenmod mcrypt && a2enmod ssl && a2enmod rewrite && apt install php-mbstring && service apache2 restart

Также мы будем использовать Midnight Commander, если у вас его нет необходимо установить следующей командой:

apt-get update
apt-get install mc

Краткая справка по командам MC:

  • запуск: mc
  • открытие файла для редактирования: F4
  • открытие файла для чтения: F3
  • удаление файла или выделенного текста в файле: F8
  • сохранение отредактированного файла: F2
  • создание директории: F7
  • переход в верхнее меню: F9
  • закрытие mc: F10
  • история команд: alt + H
  • свернуть и развернуть mc: Ctrl + O 

Краткая справка по работе в shell - консоли unix | linux:

  • переход по директория: cd /путь/путь
  • создание файла: :>имяфайла
  • копирование файла: cp имяисходного имянового
  • перемещение или переименование файла:  mv имяисходного имянового
  • список файлов и папок в текущей директории: ls -l

Установка пакетов почтового сервера:

* Все команды будут выполняться от имени root, если вы выполняете под своим пользователям добавляйте sudo в начале команды.

apt-get update
apt-get install exim4 exim4-base exim4-config exim4-daemon-heavy
apt-get install dovecot-common dovecot-imapd dovecot-pop3d dovecot-mysql
apt-get install php-imap

Создание пользователя для работы с почтой:

useradd -r -u 1150 -g mail -d /var/vmail -s /sbin/nologin -c 'Virtual Mailbox' vmail
mkdir -p /var/vmail
chown vmail:mail /var/vmail
chmod 770 /var/vmail

Создание базы mysql

* Необходимо чтобы был установлен mysql-server, введите команды ниже и пароль от пользователя root в mysql.

mysql -u root -p
Enter password:

Необходимо заменить MysqlPasswordForMailBase на ваш пароль cгенерированный либо придуманный для пользователя mail в mysql:

CREATE DATABASE mail;
GRANT ALL PRIVILEGES ON mail.* TO mail@localhost IDENTIFIED BY 'MysqlPasswordForMailBase';
exit

Устанавливаем postfixadmin систему управления ящиками через веб-интерфейс:

http://postfixadmin.sourceforge.net/

Переходим в директорию

cd /var/www/ 

* Пример команды скачивания файла в текущую директорию:

wget https://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin-3.1/postfixadmin-3.1.tar.gz/download

Переименовываем полученный файл в postfixadmin.tar.gz:

mv download postfixadmin.tar.gz

Распаковываем файл:

tar -xzvf /var/www/postfixadmin.tar.gz

Промотрим список директорий и файлов в текущей папке:

ls -l

Переименовываем папку в postfixadmin, имя вашей папки может отличаться смотрите результат команды ls -l:

mv postfixadmin-3.1 postfixadmin

Переходим в директорию и выставляем права 770 и владельца root:www-data, на директорию postfixadmin также нужно выставить такие значения: 

chown www-data:www-data /var/www/postfixadmin
chmod 770 /var/www/postfixadmin
cd /var/www/postfixadmin/
chown -R www-data:www-data .
chmod -R 770 *

Настраиваем apache:

cd /etc/apache2/conf-enabled
:>postfixadmin.conf

Вставляем в файл:

Alias /postfix /var/www/postfixadmin

<Directory "/var/www/postfixadmin">
   Options FollowSymLinks
   DirectoryIndex index.php
   Require all granted
</Directory>
Перезапускаем Apache:
service apache2 restart

Запуск конфигурирования почтового демона exim:

dpkg-reconfigure exim4-config

1. Тип конфигурации
интернет-сайт; приём и отправка почты напрямую, используя SMTP
internet site; mail is sent and received directly using SMTP
2. Почтове имя
mydomain.ru
3. Список IP-адресов, с которых Exim ожидает подключение
Оставляем пустым – ждем почту с любых адресов
4. Список доменов получателей
mydomain.ru;mydomain2.ru
5. Домены для релея
Оставляем пустым – не будем релеить почту.
6. IP-адреса, с которых разрешён релей.
Оставляем пустым.
7. Сокращать кол-во DNS-запросов до минимума
Нет
8. Место доставки локальной почты
mbox формат в /var/mail/
9. Разделить конфигурацию на маленькие файлы
Нет
10. Получатель почты, адресованной root и postmaster
root

Копируем в файл exim4.conf содержимое нижнего блока:

Для начала создадим файл:

cd /etc/exim4/
:>exim4.conf

* Необходимо заменить MysqlPasswordForMailBase на пароль от вашего пользователя mail в mysdl который мы создали выше и заменить mydomain.ru на ваш:

disable_ipv6=true
primary_hostname = mydomain.ru
qualify_domain = mydomain.ru
qualify_recipient = mydomain.ru

hide mysql_servers = localhost/mail/mail/MysqlPasswordForMailBase

DOMAIN_QUERY    = SELECT domain FROM domain WHERE \
domain='${domain}' AND active='1'
domainlist local_domains = ${lookup mysql{DOMAIN_QUERY}}

domainlist relay_to_domains = ${lookup mysql{DOMAIN_QUERY}}
hostlist   relay_from_hosts = localhost:127.0.0.1/8

acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data

spamd_address = 127.0.0.1 783
av_scanner = clamd:/var/run/clamav/clamd.ctl
daemon_smtp_ports = 25 : 465

never_users = root

rfc1413_query_timeout = 0s
ignore_bounce_errors_after = 1d
timeout_frozen_after = 14d

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

begin acl

acl_check_rcpt:

accept  hosts = :

deny    message       = Restricted characters in address
domains       = +local_domains
local_parts   = ^[.] : ^.*[@%!/|]

deny    message       = Restricted characters in address
domains       = !+local_domains
local_parts   = ^[./|] : ^.*[@%!] : ^.*/\\.\\./

accept  local_parts   = postmaster
domains       = +local_domains

require verify        = sender

accept  hosts         = +relay_from_hosts
control       = submission
require message = relay not permitted
domains = +local_domains : +relay_to_domains
require verify = recipient

accept

acl_check_data:
warn    malware    = *
    message   = This message contains a virus ($malware_name).

warn    spam       = root
    add_header = X-Spam-Flag: YES\n\
        X-Spam_score: $spam_score\n\
        X-Spam_score_int: $spam_score_int\n\
        X-Spam_bar: $spam_bar\n\
        X-Spam_report: $spam_report

accept

begin routers

dnslookup:
driver = dnslookup
domains = ! +local_domains
transport = remote_smtp
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
no_more

system_aliases:
driver = redirect
allow_fail
allow_defer
data = ${lookup mysql{SELECT goto FROM alias WHERE \
address='${quote_mysql:$local_part@$domain}' OR \
address='${quote_mysql:@$domain}'}}

dovecot_user:
driver = accept
condition = ${lookup mysql{SELECT goto FROM \
alias WHERE \
address='${quote_mysql:$local_part@$domain}' OR \
address='${quote_mysql:@$domain}'}{yes}{no}}
transport = dovecot_delivery

begin transports

remote_smtp:
driver = smtp

dovecot_delivery:
driver = pipe
command = /usr/lib/dovecot/deliver -d $local_part@$domain
message_prefix =
message_suffix =
delivery_date_add
envelope_to_add
return_path_add
log_output
user = vmail

address_pipe:
driver = pipe
return_output

address_reply:
driver = autoreply

begin retry
* * F,2h,15m; G,16h,1h,1.5; F,4d,6h
begin rewrite
begin authenticators

auth_plain:
driver = plaintext
public_name = PLAIN
server_prompts = Username:: : Password::
server_condition = ${if crypteq{$auth3}{${lookup mysql{SELECT password FROM \
mailbox WHERE username = '${quote_mysql:$auth2}'}}}{yes}{no}}
server_set_id = $auth2

auth_login:
driver = plaintext
public_name = LOGIN
server_condition = ${if crypteq{$auth2}{${lookup mysql{SELECT password FROM \
mailbox WHERE username = '${quote_mysql:$auth1}'}}}{yes}{no}}
server_prompts = Username:: : Password::
server_set_id = $auth1

auth_cram_md5:
driver = dovecot
public_name = CRAM-MD5
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth2

Копируем в файл /etc/dovecot/dovecot.conf содержимое нижнего блока:

Обнулим содержимое файла:

cd /etc/dovecot/
:>dovecot.conf

* Необходимо заменить MysqlPasswordForMailBase на пароль от вашего пользователя mail в mysdl который мы создали выше:

auth_mechanisms = plain login digest-md5 cram-md5
disable_plaintext_auth = no
first_valid_gid = 0
first_valid_uid = 1150
info_log_path = /var/log/dovecot.log
last_valid_uid = 1150
listen = *
log_path = /var/log/dovecot.log
mail_location = maildir:/var/vmail/%d/%u
mail_privileged_group = mail
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date ihave
maildir_copy_with_hardlinks = yes

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

protocols = pop3 imap sieve

auth_verbose = yes
auth_debug = yes
auth_debug_passwords = yes
auth_username_format = %Lu
service auth {
  unix_listener auth-client {
    group = mail
    mode = 0777
    user = vmail
  }
  unix_listener auth-master {
    group = mail
    mode = 0777
    user = vmail
  }
  user = root
}
service imap-login {
  chroot = login
  executable = /usr/lib/dovecot/imap-login
  process_limit = 128
  process_min_avail = 3
  service_count = 1
  user = dovecot
  vsz_limit = 64 M
}
service imap {
  executable = /usr/lib/dovecot/imap
}
service managesieve-login {
  chroot = login
  inet_listener sieve {
    address = 127.0.0.1
    port = 4190
  }
  process_limit = 128
  process_min_avail = 3
  service_count = 1
  user = dovecot
  vsz_limit = 64 M
}
service pop3-login {
  chroot = login
  executable = /usr/lib/dovecot/pop3-login
  process_limit = 128
  process_min_avail = 3
  service_count = 1
  user = dovecot
  vsz_limit = 64 M
}
service pop3 {
  executable = /usr/lib/dovecot/pop3
}
ssl = no
userdb {
  args = /etc/dovecot/dovecot-sql.conf
  driver = sql
}
verbose_proctitle = yes
protocol imap {
  imap_max_line_length = 64 k
}
protocol pop3 {
  pop3_uidl_format = %08Xu%08Xv
}
protocol lda {
  auth_socket_path = /var/run/dovecot/auth-master
  lda_mailbox_autocreate = yes
  lda_mailbox_autosubscribe = yes
  log_path = /var/log/dovecot-sieve.log
  mail_plugins = "autocreate sieve"
  postmaster_address = postmaster@dreamclever.ru
}

namespace {
    type = private
    separator = /
    prefix =
    #location defaults to mail_location.
    inbox = yes

    mailbox Sent {
        auto = subscribe
        special_use = \Sent
    }
    mailbox Drafts {
        auto = subscribe
        special_use = \Drafts
    }
    mailbox Trash {
        auto = subscribe
        special_use = \Trash
    }
    mailbox Junk {
        auto = subscribe
        special_use = \Junk
    }
}

plugin {
  autocreate = Trash
  autocreate2 = Junk
  autocreate3 = Drafts
  autocreate4 = Sent
  sieve = /var/vmail/%d/%n/dovecot.sieve
  sieve_before = /var/vmail/sieve/dovecot.sieve
  sieve_dir = /var/vmail/%d/%n
  sieve_global_dir = /var/vmail/sieve
}

Копируем в файл /etc/dovecot/dovecot-sql.conf содержимое нижнего блока

Создаим файл конфигурации:

cd /etc/dovecot/
:>dovecot-sql.conf

* Необходимо заменить MysqlPasswordForMailBase на пароль от вашего пользователя mail в mysdl который мы создали выше:

driver = mysql
connect = host=localhost dbname=mail user=mail password=MysqlPasswordForMailBase

default_pass_scheme = MD5-CRYPT
password_query = SELECT username as user, password, '/var/vmail/%d/%n' as userdb_home, 'maildir:/var/vmail/%d/%n' as userdb_mail, 1150 as userdb_uid, 8 as userdb_gid FROM mailbox WHERE username = '%u' AND active = '1'
user_query = SELECT '/var/vmail/%d/%n' as home, 'maildir:/var/vmail/%d/%n' as mail, 1150 AS uid, 8 AS gid, concat('dirsize:storage=', quota) AS quota FROM mailbox WHERE username = '%u' AND active = '1'

Необходимо создать dovecot-sieve.log в директории /var/log и выставить владельца и права:

cd /var/log/
:>dovecot-sieve.log
chown mail:mail /var/log/dovecot-sieve.log
chmod 660 /var/log/dovecot-sieve.log

Для dovecot.log аналогично:

cd /var/log/
:>dovecot.log
chown mail:mail /var/log/dovecot.log
chmod 660 /var/log/dovecot.log

Установка и настройка spamassassin:

apt-get install spamassassin

Обнулим содержимое файла конфигурации:

cd /etc/spamassassin/
:>local.cf

Копируем в файл /etc/spamassassin/local.cf содержимое нижнего блока:

#   Add *****SPAM***** to the Subject header of spam e-mails
#
# rewrite_header Subject *****SPAM*****


#   Save spam messages as a message/rfc822 MIME attachment instead of
#   modifying the original message (0: off, 2: use text/plain instead)
#
# report_safe 1


#   Set which networks or hosts are considered 'trusted' by your mail
#   server (i.e. not spammers)
#
# trusted_networks 212.17.35.

#   Set the threshold at which a message is considered spam (default: 5.0)
#
required_score 4.5


#   Use Bayesian classifier (default: 1)
#
# use_bayes 1


#   Bayesian classifier auto-learning (default: 1)
#
# bayes_auto_learn 1
bayes_path /var/spamassassin/bayes

#   Set headers which may provide inappropriate cues to the Bayesian
#   classifier
#
# bayes_ignore_header X-Bogosity
# bayes_ignore_header X-Spam-Flag
# bayes_ignore_header X-Spam-Status


#   Some shortcircuiting, if the plugin is enabled
ifplugin Mail::SpamAssassin::Plugin::Shortcircuit

endif # Mail::SpamAssassin::Plugin::Shortcircuit

После установки он по умолчанию выключен.

Поэтому открываем файл /etc/default/spamassassin и меняем строку:
ENABLED=1

sa-learn --rebuild 
#Создать базы обучения

Установка и настройка clamav - антивирус:

apt-get install clamav-daemon clamav-freshclam clamav-testfiles
adduser clamav Debian-exim
chmod -R g+w /var/spool/exim4
chmod -R g+s /var/spool/exim4

Выполним команду для просмотра прав:

ls -ld /var/spool/exim4/

Результат должен быть похож на:

drwxr-x— 5 Debian-exim Debian-exim 4096 2010-02-15 22:36 /var/spool/exim4/

Перезапустим clamav

/etc/init.d/clamav-daemon restart

Дополнительно поставить модуль dovecot:

apt-get install dovecot-sieve dovecot-managesieved

И просмотрим статус работы:

ps aux | grep -v grep | grep managesieve-login
netstat -an | grep LISTEN | grep :4190

Настройка postfixadmin: 

Переходим по адресу mydomain.ru/postfix и нажимаем setup, нам отображается сообщение:

Please edit config.inc.php - change $CONF['configured'] to true after setting your database settings

Проходим в настройки и устанавливаем данное значение.

$CONF['configured'] = true;

Также находим строчки с подключением к базе и меняем на имя нашей базы и пароль от неё.

$CONF['database_user'] = 'mail';
$CONF['database_password'] = 'MysqlPasswordForMailBase';
$CONF['database_name'] = 'mail';

Прокручиваем страницу в конец и здесь нам предлагают установить пароль для установки (Change setup password), придумываем любой пароль.

Важно: пароль должен содержать минимум три буквы.

После установки пароля нам необходимо скопировать сгенерированный hash скопировать в настройки (config.inc.php), у вас он будет другой не копируйте наше значение.

#If you want to use the password you entered as setup password, edit config.inc.php or config.local.php and set

$CONF['setup_password'] = '9cc4dd85618026504cb72654d4d95fa1:4d9965ff805c3f72b0f50b711329e4d5f20ab8ad';

Далее вводим наш пароль который мы придумали (не hash).

Логин админстратора пример: root@dka-develop.ru

И придумываем для администратора пароль, с этими данными мы будем заходить в администрование почтовых ящиков.

Нажимаем Add Admin, и нас поздравят с основной настройкой postfixadmin:

The admin root@dka-develop.ru has been added!
You are done with your basic setup.
You can now login to PostfixAdmin using the account you just created.

Переходим по ссылке с именем login to PostfixAdmin и входим с логином и паролем от нашего супер админа root@dka-develop.ru.

Далее переходим в список доменов, добавить домен:

Домен: dka-develop.ru
Алисы: 0
Ящики: 0
Активен: да
Стандартные алиасы: да

Обзор, создать ящик:

Имя: название ящика пример info
Домен: выбираем из списка, если один то он уже по умолчанию выбран
Пароль: придумываем любой пароль
Имя: заполнять не обязательно, но можно добавить чтобы было понятно назначение пример: Информационный
Квота: ограничение размера ящика, оставить пустым, если нет ограничений

Ящик создан и письмо отправлено, давайте посмотрим в директории /var/vmail/dka-develop.ru/info/new наше письмо.

dka-develop.ru это наш путь у вас свой домен. 

Все работает осталось немного, установить и настроить roundcube для просмотра и отправки писем, это почтовый клиент на подобее outlook, the bat... только в веб-интефейсе на подобее gmail.

Установка, настройка roundcube:

Переходим на сайт https://roundcube.net/ и скачиваем последнюю версию * - Complete.

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

cd /var/www
wget https://github.com/roundcube/roundcubemail/releases/download/1.3.0/roundcubemail-1.3.0-complete.tar.gz
tar -xzvf /var/www/roundcubemail-1.3.0-complete.tar.gz
ls -l
mv roundcubemail-1.3.0 roundcubemail

Переходим в директорию и выставляем права 770 и владельца root:www-data или вашпользователь:www-data, на директорию roundcubemail также нужно выставить такие значения: 

chown www-data:www-data /var/www/roundcubemail
chmod 770 /var/www/roundcubemail
cd /var/www/roundcubemail/
chown -R www-data:www-data .
chmod -R 770 *

Настраиваем apache:

cd /etc/apache2/conf-enabled
:>roundcubemail.conf

Вставляем в файл:

Alias /webmail /var/www/roundcubemail

<Directory "/var/www/roundcubemail">
   Options FollowSymLinks
   DirectoryIndex index.php
   Require all granted
</Directory>

Перезапускаем Apache:

service apache2 restart

Создадим базу для roundcubemail, подключаемся под root пользователем mysql, не путать root в системе linux (ubuntu|debian ...):

mysql -u root -p
Enter password:

Вводим пароль, затем выполняем команды, MysqlPasswordForMailBase необходимо заменить на свой пароль, этот пароль мы будем вводить дальше в конфигурации для подключения:

CREATE DATABASE roundcube;
GRANT ALL PRIVILEGES ON roundcube.* TO roundcube@localhost IDENTIFIED BY 'MysqlPasswordForMailBase';
exit

Переходим по адресу, где dka-develop.ru это ваш домен: http://dka-develop.ru/webmail/installer/

На первом шаге нажимаем Next и здесь нас интересует:

Database setup:

Database type: Mysql
Database server: localhost
Database name: roundcube
Database user: roundcube
Database pass: MyPassword11 # пароль который мы создавали выше

Language:

language: ru_RU
htmleditor: always

Плагины: 

managesieve, markasjunk, newmail_notifier, zipdownload.

Нажимаем Create Config. Нам сообщают что конфиг успешно создан, нажимаем Continue (Продолжить):

The config file was saved successfully into RCMAIL_CONFIG_DIR directory of your Roundcube installation.

Нажимаем Initialized Database.

Переходим в диреторию roundcubeamail и открываем файл конфигурации config.inc.php:

cd /var/www/roundcubemail/config

И добавьте в конец следующие строчки:

$config['imap_auth_type'] = 'PLAIN';

$config['managesieve_port'] = 4190;
$config['managesieve_host'] = 'localhost';
$config['managesieve_mbox_encoding'] = 'UTF-8';

$config['newmail_notifier_basic'] = true;

$config['enable_installer'] = false;

Для безопасности необходимо удалить папку installer:

rm -r /var/www/roundcubemail/installer 

Переходим по адресу, где dka-develop.ru это ваш домен: http://dka-develop.ru/webmail/

И входим под нашим пользователем info@dka-develop.ru

На этом все настройка почтового сервера завершена.

ClamAV returned lstat() failed: Permission denied. ERROR

Нужно в конфигурационных файлах

/etc/clamav/freshclam.conf
/etc/clamav/clamd.conf

изменить параметр на "yes":

AllowSupplementaryGroups yes

Подписывайтесь на наш канал в YouTube, ведь это ещё не конец!