В этой статье мы покажем вам, как установить и настроить почтовый сервер с 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/
и создать свой первый виртуальный домен и почтовый ящик.