# Прописываем полное имя почтового сервера: sudo hostnamectl set-hostname mx1.admin112.ru # Добавим синхронизацию времени. Можно и пропустить этот пункт, но wget нам понадобится далее sudo apt install -y chrony wget sudo timedatectl set-timezone Europe/Moscow sudo systemctl enable chrony # Заранее подготовим FireWall на базе iptables sudo touch /etc/iptables.rules sudo chmod 640 /etc/iptables.rules sudo nano /etc/network/if-post-down.d/iptables #!/bin/sh touch /etc/iptables.rules chmod 640 /etc/iptables.rules iptables-save > /etc/iptables.rules exit 0 sudo chmod +x /etc/network/if-post-down.d/iptables sudo nano /etc/network/if-pre-up.d/iptables #!/bin/sh iptables-restore < /etc/iptables.rules exit 0 sudo chmod +x /etc/network/if-pre-up.d/iptables # Пропишем правила для почтового сервера: sudo iptables -I INPUT 1 -p tcp --match multiport --dports 25,110,143,465,587,993,995 -j ACCEPT sudo iptables -I INPUT 1 -p tcp --match multiport --dports 80,443 -j ACCEPT sudo iptables-save | sudo tee /etc/iptables.rules > /dev/null # Для вебморды и прочего будем использовать nginx sudo apt install -y nginx memcached sudo systemctl enable nginx sudo apt install -y php php-fpm # Внимание на версию php !!! Она может быть другой !!! Далее по тексту так же внимание на версию !!! # Для проверки - sudo ls /run/php/php* sudo apt install php7.3-sqlite3 sudo nano /etc/nginx/sites-enabled/default # Правим: server { listen 80 default_server; listen [::]:80 default_server; ... # !!! Прописываем первым index.php !!! index index.php ... ... # !!! Добавляем location !!! location ~ \.php$ { set $root_path /var/www/html; # !!! Особое внимание на версию php !!! Проверить - sudo ls /run/php/php* fastcgi_pass unix:/run/php/php7.3-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name; include fastcgi_params; fastcgi_param DOCUMENT_ROOT $root_path; } } # !!! Особое внимание на версию php !!! Проверить - sudo ls /run/php/php* sudo systemctl enable php7.3-fpm sudo systemctl restart nginx # Проверка наличия MariaDB - sudo apt policy mariadb-server | grep astra-ce sudo apt install -y mariadb-server sudo systemctl enable mariadb # Проверка запуска - sudo systemctl status mariadb | grep active sudo mysql_secure_installation <Enter> Y <passwordmariadb> <passwordmariadb> Y Y Y Y # Обычный вход для root только при необходимости!: # sudo mysql -u root # UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE User = 'root'; # FLUSH PRIVILEGES; # QUIT; sudo apt install -y php-mysql php-mbstring php-imap # !!! Особое внимание на версию php !!! Проверить - sudo ls /run/php/php* sudo systemctl restart php7.3-fpm wget https://sourceforge.net/projects/postfixadmin/files/latest/download -O postfixadmin.tar.gz sudo mkdir /var/www/html/postfixadmin sudo tar -C /var/www/html/postfixadmin -xvf postfixadmin.tar.gz --strip-components 1 sudo mkdir /var/www/html/postfixadmin/templates_c sudo chown -R www-data:www-data /var/www/html/postfixadmin sudo mysql -u root CREATE DATABASE ИмяБазыДанныхПостфиксАдмин DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; GRANT ALL ON ИмяБазыДанныхПостфиксАдмин.* TO 'ПользовательБазыДанныхПостфиксАдмин'@'localhost' IDENTIFIED BY 'ПарольБазыДанныхПостфиксАдмин'; \q sudo nano /var/www/html/postfixadmin/config.local.php <?php $CONF['configured'] = true; $CONF['default_language'] = 'ru'; $CONF['database_type'] = 'mysqli'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'ПользовательБазыДанныхПостфиксАдмин'; $CONF['database_name'] = 'ИмяБазыДанныхПостфиксАдмин'; $CONF['database_password'] = 'ПарольБазыДанныхПостфиксАдмин'; $CONF['emailcheck_resolve_domain']='NO'; ?> # В браузере вбиваем - http://<IP-адрес сервера>/postfixadmin/public/setup.php # Задаем дважды пароль установки и генерируем хэш, кликнув по Generate setup_password hash # После копируем хэш, который появится (setup_password) sudo nano /var/www/html/postfixadmin/config.local.php $CONF['setup_password'] = 'ХэшПароляУстановки'; # В браузере жмем F5 и в нижней части страницы должна быть форма добавления суперпользователя — вводим данные где Setup password — пароль, который мы ввели на предыдущей странице; Админ — учетная запись для входа в панель управления PostfixAdmin; Пароль — новый пароль для создаваемой учетной записи # Появится надпись - Администратор суперадминтакойто@домен.ru успешно добавлен! # Переходим в браузере на страницу и проверяем вход - http://<IP-адрес сервера>/postfixadmin/public/login.php # Если не получается осздать суперпользователя, то: # sudo bash /var/www/html/postfixadmin/scripts/postfixadmin-cli admin add superuser@admin112.ru --password ПарольСуперПользователя --password2 ПарольСуперПользователя --superadmin 1 --active 1 sudo apt install -y postfix postfix-mysql # В процессе установки должно появиться окно «Postfix Configuration» — оставляем Internet Site - "2", далее будет запрос основного домена, вводим его - admin112.ru sudo groupadd -g 1024 vmail sudo useradd -d /home/mail -g 1024 -u 1024 vmail -m sudo chown -R vmail:vmail /home/mail sudo nano /etc/postfix/main.cf # Изменяем: mydestination = localhost.$mydomain, localhost, localhost.localdomain ... inet_protocols = ipv4 ... smtpd_tls_cert_file = /etc/ssl/mail/public.pem smtpd_tls_key_file = /etc/ssl/mail/private.key # Проверить запись - myhostname = nameserver.mydomain.ru # Добавляем: virtual_mailbox_base = /home/mail virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_minimum_uid = 1024 virtual_uid_maps = static:1024 virtual_gid_maps = static:1024 virtual_transport = dovecot dovecot_destination_recipient_limit = 1 smtpd_sasl_auth_enable = yes smtpd_sasl_exceptions_networks = $mynetworks smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtp_use_tls = yes smtpd_use_tls = yes smtpd_tls_auth_only = yes smtpd_helo_required = yes sudo nano /etc/postfix/mysql_virtual_alias_maps.cf user = ПользовательБазыДанныхПостфиксАдмин password = ПарольБазыДанныхПостфиксАдмин hosts = localhost dbname = ИмяБазыДанныхПостфиксАдмин query = SELECT goto FROM alias WHERE address='%s' AND active = '1' sudo nano /etc/postfix/mysql_virtual_domains_maps.cf user = ПользовательБазыДанныхПостфиксАдмин password = ПарольБазыДанныхПостфиксАдмин hosts = localhost dbname = ИмяБазыДанныхПостфиксАдмин query = SELECT domain FROM domain WHERE domain='%u' sudo nano /etc/postfix/mysql_virtual_mailbox_maps.cf user = ПользовательБазыДанныхПостфиксАдмин password = ПарольБазыДанныхПостфиксАдмин hosts = localhost dbname = ИмяБазыДанныхПостфиксАдмин query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1' sudo nano /etc/postfix/master.cf # Добавляем в конце: submission inet n - n - - smtpd -o smtpd_tls_security_level=may -o smtpd_sasl_auth_enable=yes -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=/var/spool/postfix/private/auth -o smtpd_sasl_security_options=noanonymous -o smtpd_sasl_local_domain=$myhostname smtps inet n - n - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient} # !!! необходимо убедиться, что в содержимом файла нет других раскомментированных опций для submission, smtps и dovecot !!! sudo mkdir -p /etc/ssl/mail sudo openssl req -new -x509 -days 1461 -nodes -out /etc/ssl/mail/public.pem -keyout /etc/ssl/mail/private.key -subj "/C=RU/ST=Moscow/L=Moscow/O=admin112/OU=admin112/CN=mx1.admin112.ru" sudo systemctl enable postfix sudo systemctl restart postfix sudo apt install -y dovecot-imapd dovecot-pop3d dovecot-mysql sudo nano /etc/dovecot/conf.d/10-mail.conf # Заменяем: mail_location = maildir:/home/mail/%d/%u/ sudo nano /etc/dovecot/conf.d/10-master.conf # Правим: 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 } } # И добавляем в конце: service stats { unix_listener stats-reader { user = vmail group = vmail mode = 0660 } unix_listener stats-writer { user = vmail group = vmail mode = 0660 } } sudo nano /etc/dovecot/conf.d/10-auth.conf # Изменяем: #!include auth-system.conf.ext !include auth-sql.conf.ext sudo nano /etc/dovecot/conf.d/10-ssl.conf # Изменяем: ssl = required ssl_cert = </etc/ssl/mail/public.pem ssl_key = </etc/ssl/mail/private.key sudo nano /etc/dovecot/conf.d/15-lda.conf # Изменяем lda_mailbox_autocreate = yes sudo nano /etc/dovecot/conf.d/auth-sql.conf.ext # Проверяем и при необходимости изменяем passdb { … args = /etc/dovecot/dovecot-sql.conf.ext } userdb { … args = /etc/dovecot/dovecot-sql.conf.ext } sudo nano /etc/dovecot/dovecot-sql.conf.ext # Добавляем внизу: driver = mysql connect = host=localhost dbname=ИмяБазыДанныхПостфиксАдмин user=ПользовательБазыДанныхПостфиксАдмин password=ПарольБазыДанныхПостфиксАдмин default_pass_scheme = MD5-CRYPT password_query = SELECT password FROM mailbox WHERE username = '%u' user_query = SELECT maildir, 1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u' user_query = SELECT CONCAT('/home/mail/',LCASE(`domain`),'/',LCASE(`maildir`)), 1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u' sudo nano /etc/dovecot/dovecot.conf # Проверяем и при необходимости изменяем: listen = * sudo systemctl enable dovecot sudo systemctl restart dovecot # Входим под администратором - http://<IP-адрес сервера>/postfixadmin/public/ # Переходим в Список доменов - Новый домен # Заполняем формы и нажимаем Добавить домен # Теперь переходим в Обзор - Создать ящик # Вводим данные нового пользователя