Прием и отправка почты из командной строки

Разрешить соединение без STARTTLS

После установки iRedMail, система будет требовать от клиента безопасного соединения по TLS. При необоходимости, можно отключить данную возможность.

Отключение для SMTP

Открываем конфигурационный файл postfix:

/etc/postfix/main.cf

Задаем следующие настройки:


smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
#smtpd_tls_auth_only = yes

* где smtpd_sasl_auth_enable разрешает или запрещает аутентификацию; smtpd_sasl_security_options — дополнительные опции для аутентификации; smtpd_tls_auth_only — разрешает соединение SMTP только по TLS. В данном примере мы разрешаем аутентификацию, запрещаем анонимные соединения и комментируем опцию, которая требует только безопасного соединения.

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

systemctl restart postfix

Отключение для IMAP/POP3

Открываем конфигурационный файл dovecot:

vi /etc/dovecot/dovecot.conf

Задаем следующие настройки:

ssl = yes
disable_plaintext_auth = no

* где disable_plaintext_auth запрещает аутентификацию без защиты; ssl задает опцию защиты (в данном примере, разрешить, но не требовать).

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

systemctl restart dovecot

Step 8: Finish the Installation in Web Browser

Go to to run the web-based setup wizard. First, it will check if all dependencies are installed.

If you see the following error,

Invalid query: Specified key was too long; max key length is 1000 bytes

Then you need to log in to MySQL/MariaDB database server as root from command line,

mysql -u root -p

and change the default collation from to .

MariaDB > alter database postfixadmin collate ='utf8_general_ci';

Exit MySQL/MariaDB console and reload the setup.php page.

Once all requirements are satisfied, you can create a setup password for PostfixAdmin.

After creating the password hash, PostfixAdmin will display a line like below.

$CONF = 'hO03pn9kxIo6ZBokLaiVpSddTRczYD35740aa:rk9luqxtr+s32lwqWIHd650acf3ada94e';

You need to open the file.

Apache

sudo nano /var/www/postfixadmin/config.local.php

Nginx

sudo nano /usr/share/nginx/postfixadmin/config.local.php

Add the above line at the end of the file. After saving the file, you need to enter the setup password again and create the admin account.

After that, you can log into PostfixAdmin at .

Prerequisites

I assume that you have followed part 1 and part 2 of this tutorial series. If you followed mail server tutorials on other websites, I recommend purging your configurations and start over with my tutorial series, so you are not going to be confused by different setup processes.

PostfixAdmin is written in PHP and requires a database (MySQL/MariaDB, PostgreSQL or SQLite). This article will use MariaDB database. You also need to run Apache or Nginx web server. So basically we are going to need a LAMP or LEMP stack.

If you prefer to use Apache web server, then set up a LAMP stack.

How to set up LAMP stack on CentOS 8/RHEL 8

If you prefer to use Nginx web server, then set up a LEMP stack.

How to set up LEMP stack on CentOS 8/RHEL 8

Once the above requirements are met, let’s install and configure PostfixAdmin.

Step 2: Uninstall Postfix 2 / Sendmail / sSMTP

The next thing we have to do is to ensure that there aren’t any other mail sending softwares configured within our server, unless we really want to keep Postfix 3 and one (or more) of them. In case we don’t, we can easily uninstall all of them with the following terminal commands:

Shell

# sudo yum remove postfix
# sudo yum remove ssmtp
# sudo yum remove sendmail

1
2
3

# sudo yum remove postfix
# sudo yum remove ssmtp
# sudo yum remove sendmail

Although performing a
yum remove  is a required step for Postfix – assuming we want to install a newer version – we could also choose to 
systemctl disable  and 
systemctl stop  sSMTP and/or Sendmail instead of removing them. The only important thing to do here is to ensure that neither of them will be up and running, otherwise they will prevent our soon-to-be-installed Postfix 3 from working properly.

Примеры использования командной строки для email-отправки

1. Отправка письма с вложением

Для разных типов дистрибутива Linux команды могут отличаться.

а) для CentOS / Red Hat:

echo ‘Attachment’ | mail -s ‘Subject attachment message’ -a /var/log/maillog master@dmosk.ru

б) для Ubuntu:

echo ‘Attachment’ | mail -s ‘Subject attachment message’ -a /var/log/maillog -a /var/log/maillog2 master@dmosk.ru

… или:

echo ‘Attachment’ | mail -s ‘Subject attachment message’ -A /var/log/maillog -A /var/log/maillog2 master@dmosk.ru

* где /var/log/maillog и /var/log/maillog2 — файлы, которые будут прикреплены к письму

Обратите внимание, что обе команды отличаются по регистру опции a и A — все зависит от версии и сборки Linux (в каких-то нужно использовать маленькую, в каких-то — большую). Также обратите внимание, что в примере для Ubuntu мы отправим 2 файла — для этого просто добавляем к команде еще одну опцию прикрепления файла

2. Несколько получателей

Для отправки письма нескольким получателям, просто перечисляем их через запятую:

echo «Test text» | mail -s «Test title» master@dmosk.ru,shmaster@dmosk.ru

* в данном примере мы отправил письмо на ящики master@dmosk.ru и shmaster@dmosk.ru.

3. Отправка с копией

Отправить копию на адрес master2@dmosk.ru:

echo «Test copy» | mail -s «Test copy title» master@dmosk.ru -c master2@dmosk.ru

Отправить скрытую копию на адрес master3@dmosk.ru:

echo «Test hidden copy» | mail -s «Test hidden copy title» master@dmosk.ru -b master3@dmosk.ru

4. Указать отправителя

В CentOS / Red Hat:

echo «Test text» | mail -s «Test title» -r postmaster@dmosk.ru master@dmosk.ru

В Debian / Ubuntu:

echo «Test text» | mail -s «Test title» master@dmosk.ru -aFrom:postmaster@dmosk.ru

5. Отправка через другой SMTP сервер

echo «Test text» | mail -s «Test title» -S smtp=»smtp.mail.ru:25″ master@dmosk.ru

Однако, если сторонний почтовый сервер работает по шифрованному каналу и требует аутентификацию, необходимо ввести следующее:

echo «Test text» | mail -v -s «Test title» -S smtp=»smtp.dmosk.ru:587″ -S smtp-use-starttls -S smtp-auth=login -S smtp-auth-user=»master@dmosk.ru» -S smtp-auth-password=»password» -S ssl-verify=ignore -S nss-config-dir=/etc/pki/nssdb -S from=postmaster@dmosk.ru master@dmosk.ru

* где smtp.dmosk.ru — сервер smtp; 587 — порт для подключения к серверу отправки; smtp-use-starttls указывает на использование шифрования через TLS; smtp-auth=login задает аутентификацию с использованием логина и пароля; smtp-auth-user и smtp-auth-password — соответственно логин и пароль; ssl-verify=ignore отключает проверку подлинности сертификата безопасности; nss-config-dir указывает на каталог с базами nss; from задает поле FROM

Step 2: Setting Up Permissions

PostfixAdmin requires a directory, and the web server needs read and write access to this directory. We also need to change the SELinux context to make it writable. So run the following commands.

Apache

sudo mkdir /var/www/postfixadmin/templates_c
sudo setfacl -R -m u:apache:rwx /var/www/postfixadmin/templates_c/
sudo chcon -t httpd_sys_rw_content_t /var/www/postfixadmin/templates_c/ -R

Nginx

sudo mkdir /usr/share/nginx/postfixadmin/templates_c
sudo setfacl -R -m u:nginx:rwx /usr/share/nginx/postfixadmin/templates_c/
sudo chcon -t httpd_sys_rw_content_t /usr/share/nginx/postfixadmin/templates_c/ -R

By default, SELinux forbids Apache/Nginx to make network requests to other servers, but later Apache/Nginx needs to request TLS certificate status from Let’s Encrypt CA server for OCSP stapling, so we need to tell SELinux to allow Apache/Nginx with the following command.

sudo setsebool -P httpd_can_network_connect 1

If you use Nginx, then you also need to run the following command to give the nginx user read and write permissions to 3 directories.

sudo setfacl -R -m u:nginx:rwx /var/lib/php/opcache/ /var/lib/php/session/ /var/lib/php/wsdlcache/

Restart Apache/Nginx.

sudo systemctl restart httpd

sudo systemctl restart nginx

Hosting

Note: PostfixAdmin needs to be run as its own user and group (i.e. ). It’s using , and for configurations, template caches and (potentially) sockets (respectively)!

Apache

This article or section needs expansion.

php-fpm

Include the following configuration in your Apache HTTP Server configuration (i.e. ) and restart the web server:

/etc/httpd/conf/postfixadmin.conf
Alias /postfixadmin "/usr/share/webapps/postfixadmin/public"
<Directory "/usr/share/webapps/postfixadmin/public">
    DirectoryIndex index.html index.php
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/postfixadmin/postfixadmin.sock|fcgi://localhost/"
    </FilesMatch>
    AllowOverride All
    Options FollowSymlinks
    Require all granted
    SetEnv PHP_ADMIN_VALUE "open_basedir = /tmp/:/usr/share/webapps/postfixadmin:/etc/webapps/postfixadmin/:/var/cache/postfixadmin/templates_c"
</Directory>

Create a pool for postfixadmin and restart php-fpm.service:

/etc/php/php-fpm.d/postfixadmin.conf
user = postfixadmin
group = postfixadmin
listen = /run/postfixadmin/postfixadmin.sock
listen.owner = http
listen.group = http
pm = ondemand
pm.max_children = 4

Note: If using php7.4, change the settings to the following:

/etc/php/php-fpm.d/postfixadmin.conf
user = postfixadmin
group = postfixadmin
listen = /run/postfixadmin/postfixadmin.sock
listen.acl_users = http
listen.acl_groups = http
pm = ondemand
pm.max_children = 4

Then override the default tmpfiles rule creating the directory :

cp /usr/lib/tmpfiles.d/postfixadmin.conf /etc/tmpfiles.d/

And append the following rule to it :

/etc/tmpfiles.d/postfixadmin.conf
...
a+ %t/postfixadmin - - - - group:root:rwx

Then reboot.

To only allow localhost access to postfixadmin (for heightened security), add this to the previous directive:

   Order Deny,Allow
   Deny from all
   Allow from 127.0.0.1

Nginx

Nginx can proxy application servers such as and uWSGI, that run a dynamic web application.
The following examples describe a folder based setup over a non-default port (for simplicity).

Note: For server entry management in nginx have a look at .

Note: Postfixadmin ships a configuration for uWSGI.

php-fpm

/etc/php/php-fpm.d/postfixadmin.conf
user = postfixadmin
group = postfixadmin
listen = /run/postfixadmin/postfixadmin.sock
listen.owner = http
listen.group = http
pm = ondemand
pm.max_children = 4

Note: If using php7.4, change the settings to the following:

/etc/php/php-fpm.d/postfixadmin.conf
user = postfixadmin
group = postfixadmin
listen = /run/postfixadmin/postfixadmin.sock
listen.acl_users = http
listen.acl_groups = http
pm = ondemand
pm.max_children = 4

Then override the default tmpfiles rule creating the directory :

cp /usr/lib/tmpfiles.d/postfixadmin.conf /etc/tmpfiles.d/

And append the following rule to it :

/etc/tmpfiles.d/postfixadmin.conf
...
a+ %t/postfixadmin - - - - group:root:rwx

Then reboot.

You will need to at least activate the and extensions in . Make sure you also add to open_basedir in your php.ini. Restart php-fpm for all these to take effect.

Add the following configuration for nginx and restart it.

/etc/nginx/sites-available/postfixadmin.conf
    server {
      listen 8081;
      server_name postfixadmin;
      root /usr/share/webapps/postfixadmin/public/;
      index index.php;
      charset utf-8;
     
      access_log /var/log/nginx/postfixadmin-access.log;
      error_log /var/log/nginx/postfixadmin-error.log;
     
      location / {
        try_files $uri $uri/ index.php;
      }
     
      location ~* \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include fastcgi_params;
        fastcgi_pass unix:/run/postfixadmin/postfixadmin.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;
      }
    }

uWSGI

Install , create a per-application socket for uWSGI (see for reference) and the unit.

Add the following configuration for nginx and restart nginx.

/etc/nginx/sites-available/postfixadmin.conf
    server {
      listen 8081;
      server_name postfixadmin;
      root /usr/share/webapps/postfixadmin/public/;
      index index.php;
      charset utf-8;
     
      access_log /var/log/nginx/postfixadmin-access.log;
      error_log /var/log/nginx/postfixadmin-error.log;
     
      location / {
        try_files $uri $uri/ index.php;
      }

      # pass all .php or .php/path urls to uWSGI
      location ~ ^(.+\.php)(.*)$ {
        include uwsgi_params;
        uwsgi_modifier1 14;
        uwsgi_pass unix:/run/postfixadmin/postfixadmin.sock;
      }
    }

Настройка системы

Настраиваем планировщик cron для синхронизации времени:

crontab -e

И добавляем следующую строку: 

0 0 * * * /sbin/ntpdate ru.pool.ntp.org

* в данном примере команда будет выполняться каждый день в 00:00.
* путь к исполняемому скрипту ntpdate может быть другой. Если при запуске /sbin/ntpdate система выдаст ошибку No such file or directory, запустите which ntpdate, чтобы узнать правильный путь к скрипту.

Задаем часовой пояс и выполняем синхронизацию времени:

\cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

ntpdate ru.pool.ntp.org

* если система выдаст ошибку, установите утилиту командой yum install ntpdate или yum install ntp.

Задаем имя сервера:

vi /etc/hostname

mailer.dmosk.ru

* необходимо задать полное доменное имя (FQDN), по возможности, в том домене, с которого будем отправлять сообщения. В данном примере имя сервера — mailer, домен — dmosk.ru.

Сразу применяем настройку имени хоста:

hostname mailer.dmosk.ru

Настраиваем брандмауэр:

firewall-cmd —permanent —add-port=25/tcp

firewall-cmd —reload

* в данном случае мы открыли 25 SMTP-порт для отправки электронных писем.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector