ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Установка и настройка почтового сервера PostfixAdmin на Ubuntu 16.04

Установка и настройка почтового сервера PostfixAdmin на Ubuntu 16.04

В этой статье мы покажем вам, как установить и настроить почтовый сервер с Postfix, Dovecot, Spamassassin, SQLite и PostfixAdmin на Ан Ubuntu 16.04 VPS с Nginx и PHP 7.0. Это руководство должно работать так же хорошо и на других системах Linux VPS, но была испытана и написана для Ubuntu 16.04 VPS.

Войдите на свой VPS через SSH

ssh furious@my_server

Обновите систему и установите необходимые пакеты

sudo apt-get update && sudo apt-get -y upgrade
sudo apt-get -y install wget nano dbconfig-common sqlite3

Создайте системного пользователя

По соображениям безопасности, мы создадим нового пользователя системы, который будет владельцем всех почтовых ящиков.

sudo useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c "Virtual Mail User" vmail
sudo mkdir -p /var/vmail
sudo chmod -R 770 /var/vmail
sudo chown -R vmail:mail /var/vmail

Установка PHP 7.0 и PHP всех необходимых модулей

Если вы не установили PHP на вашем сервере, вы можете установить последнюю стабильную версию PHP 7.0 и все необходимые модули, с помощью следующей команды:

sudo apt-get -y install php-fpm php-cli php7.0-mbstring php7.0-imap php7.0-sqlite3

Установка и настройка Nginx

Если у вас нет веб-сервера, установленного на вашем компьютере, установите Nginx из официальных репозиториев Ubuntu:

sudo apt-get -y install nginx

 

Создание нового блока сервера Nginx со следующим содержанием:

sudo nano /etc/nginx/sites-available/postfixadmin.your_domain.ru
server {
  listen 80;
  server_name postfixadmin.your_domain.ru;
  return 301 https://$server_name$request_uri;
}

server {
   listen          443 ssl;
   server_name     postfixadmin.your_domain.ru;
   root            /var/www/postfixadmin-3.0;
   index           index.php;
   charset         utf-8;

   ssl_certificate           /etc/ssl/certs/ssl-cert-snakeoil.pem;
   ssl_certificate_key       /etc/ssl/private/ssl-cert-snakeoil.key;
   ssl_protocols             TLSv1.2;
   ssl_ciphers               "EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4";
   ssl_prefer_server_ciphers on;
   ssl_session_cache         shared:SSL:10m;
   ssl_session_timeout       10m;
   ssl_ecdh_curve            secp521r1;

   location / {
      try_files $uri $uri/ index.php;
   }

   location ~* \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include       fastcgi_params;
        fastcgi_pass  unix:/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
   }
}

 

Активируйте блок сервера, создав символическую ссылку:

sudo ln -s /etc/nginx/sites-available/postfixadmin.your_domain.ru /etc/nginx/sites-enabled/postfixadmin.your_domain.ru

 

Проверьте конфигурацию Nginx и перезапустите Nginx:

sudo nginx -t
sudo service nginx restart

PostfixAdmin

PostfixAdmin является PHP на основе веб – интерфейса, который позволяет управлять базой данных, и использует postfix для виртуальных доменов и пользователей. Последняя версия PostfixAdmin, 3 -й версии, поддерживает MySQL, PostgreSQL и базу данных SQLite. В этом руководстве мы будем использовать последнюю.
Скачайте архив PostfixAdmin из SourceForge и распакуйте его в каталог /var/www/:

wget -q -O - "http://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-3.0/postfixadmin-3.0.tar.gz" | sudo tar -xzf - -C /var/www

 

Откройте файл конфигурации почты и измените следующие значения:

sudo nano /var/www/postfixadmin-3.0/config.inc.php
$CONF['configured'] = true;
$CONF['database_type'] = 'sqlite';
$CONF['database_name'] = '/var/vmail/postfixadmin.db';
// $CONF['database_host'] = 'localhost';
// $CONF['database_user'] = 'postfix';
// $CONF['database_password'] = 'postfixadmin';
// $CONF['database_name'] = 'postfix';

$CONF['domain_path'] = 'NO';
$CONF['domain_in_mailbox'] = 'YES';
sudo chown -R www-data: /var/www/postfixadmin-3.0

 

Создание базы данных SQLite:

sudo touch /var/vmail/postfixadmin.db
sudo chown vmail:mail /var/vmail/postfixadmin.db
sudo usermod -a -G mail www-data

 

Для заполнения базы данных перейдите к https://postfixadmin.your_domain.ru/setup.php и вы должны увидеть что – то вроде этого:

Создайте нового пользователя с правами администратора:

bash /var/www/postfixadmin-3.0/scripts/postfixadmin-cli admin add admin@your_domain.ru --password strong_password --password2 strong_password --superadmin 1 --active 1

Установите и настройте Postfix

Установите postfix с помощью команды ниже:

sudo apt-get install postfix

 

Создайте следующие файлы:

sudo nano /etc/postfix/sqlite_virtual_alias_maps.cf
dbpath = /var/vmail/postfixadmin.db
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
sudo nano /etc/postfix/sqlite_virtual_alias_domain_maps.cf
dbpath = /var/vmail/postfixadmin.db
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = printf('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
sudo nano /etc/postfix/sqlite_virtual_alias_domain_catchall_maps.cf
dbpath = /var/vmail/postfixadmin.db
query  = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = printf('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
sudo nano /etc/postfix/sqlite_virtual_domains_maps.cf
dbpath = /var/vmail/postfixadmin.db
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
sudo nano /etc/postfix/sqlite_virtual_mailbox_maps.cf
dbpath = /var/vmail/postfixadmin.db
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
sudo nano /etc/postfix/sqlite_virtual_alias_domain_mailbox_maps.cf
dbpath = /var/vmail/postfixadmin.db
query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = printf('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'

 

Отредактируйте файл main.cf:

postconf -e "myhostname = $(hostname -A)"
 
postconf -e "virtual_mailbox_domains = sqlite:/etc/postfix/sqlite_virtual_domains_maps.cf"
postconf -e "virtual_alias_maps =  sqlite:/etc/postfix/sqlite_virtual_alias_maps.cf, sqlite:/etc/postfix/sqlite_virtual_alias_domain_maps.cf, sqlite:/etc/postfix/sqlite_virtual_alias_domain_catchall_maps.cf"
postconf -e "virtual_mailbox_maps = sqlite:/etc/postfix/sqlite_virtual_mailbox_maps.cf, sqlite:/etc/postfix/sqlite_virtual_alias_domain_mailbox_maps.cf"
 
postconf -e "smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem"
postconf -e "smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key"
postconf -e "smtpd_use_tls = yes"
postconf -e "smtpd_tls_auth_only = yes"
 
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_sasl_authenticated, permit_mynetworks, reject_unauth_destination"
 
postconf -e "mydestination = localhost"
postconf -e "mynetworks = 127.0.0.0/8"
postconf -e "inet_protocols = ipv4"
 
postconf -e "virtual_transport = lmtp:unix:private/dovecot-lmtp"

 

Откройте файл master.cf, найти разделы submission inet n и smtps inet n и отредактируйте следующим образом:

sudo nano /etc/postfix/master.cf
smtp      inet  n       -       y       -       -       smtpd
#smtp      inet  n       -       y       -       1       postscreen
#smtpd     pass  -       -       y       -       -       smtpd
#dnsblog   unix  -       -       y       -       0       dnsblog
#tlsproxy  unix  -       -       y       -       0       tlsproxy
submission inet n       -       y       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_reject_unlisted_recipient=no
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=
#  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
smtps     inet  n       -       y       -       -       smtpd
  -o syslog_name=postfix/smtps
#  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_reject_unlisted_recipient=no
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=
#  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

 

Включите и перезапустите службу postfix

systemctl enable postfix
systemctl restart postfix

Установка и настройка Dovecot

Установить Dovecot с поддержкой SQLite, используя команду ниже:

sudo apt-get install dovecot-imapd dovecot-lmtpd dovecot-pop3d dovecot-sqlite

 

Откройте файл /etc/dovecot/conf.d/10-mail.conf и измените следующие значения:

mail_location = maildir:/var/vmail/%d/%n
mail_privileged_group = mail
mail_uid = vmail
mail_gid = mail
first_valid_uid = 150
last_valid_uid = 150

 

Откройте файл /etc/dovecot/conf.d/10-auth.conf и измените следующие значения:

auth_mechanisms = plain login
#!include auth-system.conf.ext
!include auth-sql.conf.ext

 

Создайте новый файл dovecot-sql.conf.ext:

sudo nano /etc/dovecot/dovecot-sql.conf.ext
driver = sqlite
connect = /var/vmail/postfixadmin.db
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, 150 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, \
  150 AS uid, 8 AS gid, printf('dirsize:storage=', quota) AS quota \
  FROM mailbox WHERE username = '%u' AND active = '1'

 

В файле /etc/dovecot/conf.d/10-ssl.conf включите поддержку SSL:

ssl = yes

 

Откройте файл /etc/dovecot/conf.d/15-lda.conf и установите в параметре postmaster_address адрес электронной почты.

postmaster_address = postmaster@vps.your_domain.ru

 

Откройте файл /etc/dovecot/conf.d/10-master.conf, найдите раздел службы LMTP и изменить его на:

service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0600
    user = postfix
    group = postfix
  }
}

 

Найдите раздел службы аутентификации и изменить его на:

service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
  unix_listener auth-userdb {
    mode = 0600
    user = vmail
    #group = vmail
  }
  user = dovecot
}

 

Измените раздел службы auth-worker к следующим функциям:

service auth-worker {
  user = vmail
}

 

Установите разрешения:

chown -R vmail:dovecot /etc/dovecot
chmod -R o-rwx /etc/dovecot

 

Включите и перезапустите службу dovecot

systemctl enable dovecot 
systemctl restart dovecot

SpamAssassin

SpamAssassin является инструментом с открытым кодом написанный на Perl, который помогает отфильтровать нежелательную почту. Если вы хотите включить и настроить SpamAssassin пожалуйста, продолжайте со следующими шагами.

Чтобы установить SpamAssassin, выполните следующую команду:

sudo apt-get install spamassassin
sudo adduser spamd --disabled-login

 

Откройте файл /etc/default/spamassassin и внесите следующие изменения:

ENABLED=1
OPTIONS="--create-prefs --max-children 5 -d 127.0.0.1 --username spamd --helper-home-dir /home/spamd/ -s /home/spamd/spamd.log"
PIDFILE="/home/spamd/spamd.pid"
CRON=1

 

Для интеграции SpamAssassin с Postfix, добавьте следующую строку в конце файла /etc/postfix/master.cf:

smtp      inet  n       -       -       -       -       smtpd
    -o content_filter=spamassassin
 
spamassassin unix  -       n       n       -       -       pipe
   user=nobody argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}

 

Включите и перезапустите службу Spamassassin

systemctl enable spamassassin
systemctl restart spamassassin
systemctl restart postfix

 

Если все настроено правильно, то вы должны в состоянии войти в свой бэкэнд PostfixAdmin, перейдя по ссылке https://postfixadmin.your_domain.ru/и создать свой первый виртуальный домен и почтовый ящик.

Установка и настройка почтового сервера PostfixAdmin на Ubuntu 16.04

Exit mobile version