GNU/Linux >> Linux の 問題 >  >> Cent OS

パート3:PostfixAdmin – CentOS 8 /RHEL8メールサーバーで仮想メールボックスを作成する

以前の記事では、CentOS 8 /RHEL8で独自のメールサーバーを最初から設定する方法について説明しました。このチュートリアルシリーズのパート1とパート2では、PostfixSMTPサーバーの設定方法を学びました。 およびDovecotIMAPサーバー 、ただし、これまでのところ、ローカルUnixアカウントを持つユーザーの電子メールアドレスしか持つことができません。このチュートリアルでは、 PostfixAdminを使用してCentOS8/RHEL8メールサーバーで仮想メールボックスを作成する方法を説明します。 、これは、多くのドメインとユーザーのPostfixベースの電子メールサーバーを構成および管理するためのオープンソースのWebベースのインターフェイスです。

仮想メールボックスを使用 、メールアドレスごとにローカルのUnixアカウントを作成する必要はありません。会社や組織のメールサーバーを設定する場合は、ユーザーがパスワードを変更できるようにするWebベースのインターフェイスで仮想メールボックスを簡単に作成する方法を用意することをお勧めします。そこでPostfixAdminが登場します。

PostfixAdminの機能

  • メールボックス、仮想ドメイン、エイリアスを管理する
  • 休暇/不在メッセージ(個人的には、この機能はRoundcube Webメールでより適切に実行されると思います。)
  • エイリアスドメイン(受信者の検証を使用して1つのドメインを別のドメインに転送する)
  • ユーザーは自分のメールボックスを管理できます(エイリアス、パスワード、休暇メッセージの変更)
  • 単一のメールボックスのクォータサポートとドメインの合計クォータ
  • fetchmailの統合:元のメールアドレスから新しいメールアドレスにメールを取得できます。
  • Webインターフェイスでクリックしたくない人のためのコマンドラインクライアントpostfixadmin-cli😉

:パート3を終了すると、ローカルのUnixアカウントを電子メールアドレスとして使用できなくなります。 PostfixAdminWebインターフェイスから電子メールアドレスを作成する必要があります。

前提条件

このチュートリアルシリーズのパート1とパート2を読んだことを前提としています。他のWebサイトでメールサーバーのチュートリアルに従っている場合は、構成を削除してチュートリアルシリーズからやり直すことをお勧めします。そうすれば、さまざまなセットアッププロセスに混乱することはありません。

上記の要件が満たされたら、PostfixAdminをインストールして構成しましょう。

ステップ1:CentOS 8 /RHEL8にMariaDBデータベースサーバーをインストールする

PostfixAdminはPHPで記述されており、データベース(MySQL / MariaDB、PostgreSQL、またはSQLite)が必要です。この記事では、MySQLのドロップイン代替品であるMariaDBを使用します。これは、OracleがMySQLをクローズドソース製品に変える可能性があることを懸念しているMySQLチームの元メンバーによって開発されました。次のコマンドを入力して、CentOS 8 /RHEL8にMariaDBをインストールします。

sudo dnf install mariadb-server mariadb -y

インストールしたら、起動する必要があります。

sudo systemctl start mariadb

システムの起動時に自動起動を有効にします。

sudo systemctl enable mariadb

ステータスの確認:

systemctl status mariadb

出力:

● mariadb.service - MariaDB 10.3 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2019-10-12 09:02:53 UTC; 33s ago
     Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/
 Main PID: 18608 (mysqld)
   Status: "Taking your SQL requests now..."
    Tasks: 30 (limit: 5092)
   Memory: 77.0M
   CGroup: /system.slice/mariadb.service
           └─18608 /usr/libexec/mysqld --basedir=/usr

有効 」は、起動時の自動起動が有効になっていて、MariaDBサーバーが実行されていることを示しています。次に、セキュリティスクリプトを実行する必要があります。

sudo mysql_secure_installation

MariaDBのrootパスワードの入力を求められたら、rootパスワードがまだ設定されていないため、Enterキーを押します。次に、yと入力します MariaDBサーバーのルートパスワードを設定します。

次に、Enterキーを押して残りのすべての質問に答えることができます。これにより、匿名ユーザーが削除され、リモートrootログインが無効になり、テストデータベースが削除されます。このステップは、MariaDBデータベースセキュリティの基本的な要件です。 (文字Yに注意してください 大文字で表示されます。これは、デフォルトの回答であることを意味します。)

ステップ2:CentOS 8 /RHEL8サーバーにPostfixAdminをダウンロードする

メールサーバーにログインし、PostfixAdminインストールファイルをサーバーにダウンロードします。 PostfixAdmin Gitbubページに移動して、最新バージョンをダウンロードします。 wgetを使用できます コマンドラインからダウンロードするためのツール。ダウンロードリンクは、常に以下の形式で入手できます。新しいバージョンがリリースされた場合は、3.3.8を新しいバージョン番号に置き換えるだけです。

sudo dnf install wget

wget https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-3.3.8.tar.gz

ダウンロードしたら、アーカイブを抽出します。

Apacheを使用している場合は、それを/var/www/に抽出します。 ディレクトリを作成し、名前をpostfixadminに変更します。 。

sudo dnf install tar
sudo tar xvf postfixadmin-3.3.8.tar.gz -C /var/www/
sudo mv /var/www/postfixadmin-postfixadmin-3.3.8 /var/www/postfixadmin

Nginxを使用している場合は、それを/usr/share/nginx/に抽出します ディレクトリを作成し、名前をpostfixadminに変更します。 。

sudo dnf install tar
sudo tar xvf postfixadmin-3.3.8.tar.gz -C /usr/share/nginx/
sudo mv /usr/share/nginx/postfixadmin-postfixadmin-3.3.8 /usr/share/nginx/postfixadmin

ステップ3:権限の設定

PostfixAdminにはtemplates_cが必要です ディレクトリであり、Webサーバーはこのディレクトリへの読み取りおよび書き込みアクセス権を必要とします。また、SELinuxコンテキストを変更して、書き込み可能にする必要があります。したがって、次のコマンドを実行します。

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

デフォルトでは、SELinuxはApache / Nginxが他のサーバーにネットワーク要求を行うことを禁止していますが、後でApache /NginxはOCSPステープリングのためにLet'sEncryptCAサーバーにTLS証明書ステータスを要求する必要があるため、SELinuxに次のようにApache/Nginxを許可するように指示する必要がありますコマンド。

sudo setsebool -P httpd_can_network_connect 1

Nginxを使用する場合は、次のコマンドを実行して、nginxユーザーに3つのディレクトリへの読み取りおよび書き込み権限を付与する必要もあります。

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

Apache/Nginxを再起動します。

sudo systemctl restart httpd

sudo systemctl restart nginx

Dovecot 2.3.11以降、Webサーバーユーザーは、パスワードハッシュを実行するために、Let’sEncryptTLS証明書を読み取るためのアクセス許可が必要です。次の2つのコマンドを実行して、権限を付与します。

Apache

sudo setfacl -R -m u:apache:rx /etc/letsencrypt/live/ /etc/letsencrypt/archive/

Nginx

sudo setfacl -R -m u:nginx:rx /etc/letsencrypt/live/ /etc/letsencrypt/archive/

ステップ4:PostfixAdminのデータベースとユーザーを作成する

次のコマンドを使用して、rootとしてMySQL/MariaDBシェルにログインします。 MySQL/MariaDBのルートパスワードを入力する必要があります。

mysql -u root -p

ログインしたら、次のコマンドを使用してPostfixAdminのデータベースを作成します。 postfixadminという名前を付けました 、ただし、好きな名前を使用できます。 (セミコロンを省略しないでください。)

create database postfixadmin;

次に、以下のコマンドを入力して、PostfixAdminのデータベースユーザーを作成します。このコマンドは、postfixadminデータベースのすべての権限もユーザーに付与します。 postfixadmin_passwordを置き換えます ご希望のパスワードで。パスワードには#を含めないでください。 文字、または後でログインできない可能性があります。

grant all privileges on postfixadmin.* to 'postfixadmin'@'localhost' identified by 'postfixadmin_password';

変更を有効にするために特権テーブルをフラッシュしてから、MariaDBシェルから抜け出します。

flush privileges;

exit;

ステップ5:PostfixAdminを構成する

デフォルトのPostfixAdmin構成ファイルはconfig.inc.phpです。 。 config.local.phpを作成する必要があります ファイルを作成し、カスタム構成を追加します。

Apache

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

Nginx

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

PostfixAdminがMySQL/MariaDBデータベースに接続できるように、ファイルに次の行を追加します。 postfixadmin_passwordを置き換えます 手順4で作成した実際のPostfixAdminパスワードを使用します。

<?php
$CONF['configured'] = true;
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_port'] = '3306';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'postfixadmin_password';
$CONF['database_name'] = 'postfixadmin';
$CONF['encrypt'] = 'dovecot:BLF-CRYPT';
$CONF['dovecotpw'] = "/usr/bin/doveadm pw -r 12";

ファイルを保存して閉じます。 BLF-CRYPTパスワードスキームを使用することに注意してください。

ステップ6:PostfixAdmin用のApache仮想ホストまたはNginx構成ファイルを作成する

Apache

Apache Webサーバーを使用する場合は、PostfixAdminの仮想ホストを作成します。

sudo nano /etc/httpd/conf.d/postfixadmin.conf

次のテキストをファイルに入れます。 postfixadmin.example.comを置き換えます 実際のドメイン名を使用して、DNSAレコードを設定することを忘れないでください。

<VirtualHost *:80>
  ServerName postfixadmin.example.com
  DocumentRoot /var/www/postfixadmin/public/

  ErrorLog /var/log/httpd/postfixadmin_error.log
  CustomLog /var/log/httpd/postfixadmin_access.log combined

  <Directory />
    Options FollowSymLinks
    AllowOverride All
  </Directory>

  <Directory /var/www/postfixadmin/public/>
    Options FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
  </Directory>

</VirtualHost>

ファイルを保存して閉じます。変更を有効にするためにApacheをリロードします。

sudo systemctl reload httpd

これで、http://postfixadmin.example.com/setup.phpでPostfixAdminWebベースのインストールウィザードが表示されるはずです。 。

Nginx

Nginx Webサーバーを使用する場合は、PostfixAdminの仮想ホストを作成します。

sudo nano /etc/nginx/conf.d/postfixadmin.conf

次のテキストをファイルに入れます。 postfixadmin.example.comを置き換えます 実際のドメイン名を使用して、DNSAレコードを設定することを忘れないでください。

server {
   listen 80;
   listen [::]:80;
   server_name postfixadmin.example.com;

   root /usr/share/nginx/postfixadmin/public/;
   index index.php index.html;

   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)$ {
        try_files $uri =404;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
   }
}

ファイルを保存して閉じます。次に、Nginx構成をテストします。

sudo nginx -t

テストが成功した場合は、変更を有効にするためにNginxをリロードします。

sudo systemctl reload nginx

これで、http://postfixadmin.example.com/setup.phpでPostfixAdminWebベースのインストールウィザードが表示されるはずです。 。

ステップ7:必須および推奨のPHPモジュールをインストールする

PostfixAdminにはphp-imapが必要です メールボックスにサブフォルダーを作成するモジュールですが、php-imap デフォルトのCentOS8/ RHEL 8リポジトリには含まれていないため、このPHPモジュールをインストールするにはRemiリポジトリを使用する必要があります。

レミリポジトリをインストールします。

sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm

次に、PHPモジュールストリームをリセットします。

sudo dnf module reset php

php:remi-7.4を有効にします モジュールストリーム。

sudo dnf module enable php:remi-7.4 -y

次に、次のコマンドを実行して、PostfixAdminが必要または推奨するPHPモジュールをインストールできます。

sudo dnf install -y php-fpm php-imap php-mbstring php-mysqlnd php-gd php-opcache php-json php-curl php-zip php-xml php-bz2 php-intl php-gmp
>

次のコマンドを実行して、SELinuxに Apacheを許可するように指示する必要があります PHP-FPMを介してPHPコードを実行します。

sudo setsebool -P httpd_execmem 1

Nginxを使用する場合 、PHP-FPM構成ファイルを編集します:

nano /etc/php-fpm.d/www.conf

デフォルトでは、PHP-FPMはapacheとして実行されます ユーザー。 Nginx Webサーバーを使用しているため、変更する必要があります。次の2行を見つけます。

user = apache
group = apache

それらを

に変更します
user = nginx
group = nginx

ファイルを保存して閉じます。次に、PHP-FPMを開始します。

sudo systemctl start php-fpm

システムの起動時に自動起動を有効にします。

sudo systemctl enable php-fpm

ApacheまたはNginxを再起動します。

sudo systemctl restart httpd

sudo systemctl restart nginx

ステップ8:HTTPSを有効にする

HTTPトラフィックを暗号化するには、Let’sEncryptから発行された無料のTLS証明書をインストールしてHTTPSを有効にします。

Apacheを使用している場合は、このコマンドを実行してTLS証明書を取得してインストールします。

sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d postfixadmin.example.com

Nginxを使用している場合は、次のコマンドを実行してTLS証明書を取得してインストールします。

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d postfixadmin.example.com

場所:

  • --apache :Apacheプラグインを使用してください。
  • --nginx :nginxプラグインを使用してください。
  • --agree-tos :利用規約に同意します。
  • --redirect :301リダイレクトでHTTPSを強制します。
  • --hsts :すべてのHTTP応答にStrict-Transport-Securityヘッダーを追加します。ドメインに常にTLSを使用するようにブラウザを強制します。 SSL/TLSストリッピングから防御します。
  • --staple-ocsp :OCSPステープリングを有効にします。有効なOCSP応答は、TLS中にサーバーが提供する証明書にホチキス止めされます。
  • --email :登録と復旧の連絡に使用されるメール。
  • -d フラグの後には、コンマで区切られたドメイン名のリストが続きます。最大100個のドメイン名を追加できます。

これで、証明書が取得され、自動的にインストールされます。これは、以下のメッセージで示されます。

ステップ9:Webサーバー用のカスタムSELinuxポリシーを生成する

インストール中に、PostfixAdminはパスワードを作成するためにDovecot構成ファイルを読み取る必要があります。デフォルトでは、SELinuxはWebサーバーがDovecot構成ファイルを読み取ることを許可していません。このアクションを許可するには、カスタムSELinuxポリシーを作成する必要があります。

必要なパッケージをインストールします。

sudo dnf install binutils rpm-build setools-console policycoreutils-python3 policycoreutils-devel

httpdのカスタムポリシーを生成します。 (Nginxを使用する場合は、httpdを置き換えます nginxを使用 。)

sudo sepolicy generate --init /usr/sbin/httpd

タイプエンフォースメントファイルを編集します。

sudo nano httpd.te

このファイルの最後に次の行を追加して、Apache/NginxがDovecot構成ファイルを読み取れるようにします。

dovecot_read_config(httpd_t)

ファイルを保存して閉じます。次に、新しいSELinuxポリシーをインストールします。

sudo ./httpd.sh

これで、Apache/NginxがDovecot構成ファイルを読み取れるようになります。

httpd.teに何を追加すればよいかわからない場合 ファイルの場合、SELinux拒否が発生した後、次のコマンドを実行します。

sudo ausearch -m AVC -ts recent | audit2allow -R

audit2allow 変更を提案します。

ステップ10:Dovecotで統計を有効にする

PostfixAdminはDovecot統計を読み取る必要があります。 Dovecot構成ファイルを編集します。

sudo nano /etc/dovecot/conf.d/10-master.conf

このファイルの最後に次の行を追加します。 Nginxを使用する場合は、apacheを変更してください nginxへ 。

service stats {
    unix_listener stats-reader {
    user = apache
    group = apache
    mode = 0660
}

unix_listener stats-writer {
    user = apache
    group = apache
    mode = 0660
  }
}

ファイルを保存して閉じます。次に、Webサーバーをdovecotに追加します グループ。

Apache

sudo gpasswd -a apache dovecot

NGinx

sudo gpasswd -a nginx dovecot

Dovecotを再起動します。

sudo systemctl restart dovecot

ステップ11:Webブラウザでのインストールを完了します

postfixadmin.example.com/setup.phpに移動します Webベースのセットアップウィザードを実行します。まず、PostfixAdminのセットアップパスワードを作成する必要があります。

パスワードハッシュを作成すると、PostfixAdminは次のような行を表示します。

$CONF['setup_password'] = 'db1b019982a6ba878bdc6bd923bef03e:4e29fdd341b570364064a5ad69652f3d8bee0bb4';

config.local.phpを開く必要があります ファイル。

Apache

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

Nginx

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

以下のように、PostfixAdminセットアップページの行表示をファイルの最後に追加します。

ファイルを保存した後、PostfixAdminセットアップページを更新し、セットアップパスワードを再入力してから、管理者アカウントを作成する必要があります。管理者アカウントにGmail、Yahooメール、またはMicrosoftのメールアドレスを使用しないでください。使用すると、後でログインできなくなる可能性があります。自分のドメインのメールアドレスを使用してください。メールアドレスは後でPostfixAdminで作成できます。

スーパー管理者アカウントが作成されると、postfixadmin.example.com/login.phpでPostfixAdminにログインできます。 。

スーパー管理者アカウントを作成しようとしたときに次のエラーが表示された場合は、

can’t encrypt password with dovecotpw, see error log for details

これは、WebサーバーユーザーがLet'sEncryptTLS証明書を読み取る権限を持っていないためです。これを修正するには、次の2つのコマンドを実行して権限を付与します。

Apache

sudo setfacl -R -m u:apache:rx /etc/letsencrypt/live/
sudo setfacl -R -m u:apache:rx /etc/letsencrypt/archive/

Nginx

sudo setfacl -R -m u:nginx:rx /etc/letsencrypt/live/
sudo setfacl -R -m u:nginx:rx /etc/letsencrypt/archive/

次のエラーが表示された場合は、

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

次に、コマンドラインからrootとしてMySQL/MariaDBデータベースサーバーにログインする必要があります

mysql -u root -p

デフォルトの照合をutf8mb4_general_ciから変更します utf8_general_ciへ 。

MariaDB [(none)]> alter database postfixadmin collate ='utf8_general_ci';

MySQL / MariaDBコンソールを終了し、setup.phpページをリロードします。

ステップ12:MySQL/MariaDBデータベースを使用するようにPostfixを設定する

デフォルトでは、PostfixはローカルUnixアカウントを持つユーザーにのみメールを配信します。情報がデータベースに保存されている仮想ユーザーにメールを配信するには、仮想メールボックスドメインを使用するようにPostfixを設定する必要があります。

まず、postfix-mysqlをインストールして、PostfixのMySQLマップサポートを追加する必要があります パッケージ。

sudo dnf install postfix-mysql

次に、Postfixのメイン設定ファイルを編集します。

sudo nano /etc/postfix/main.cf

このファイルの最後に次の行を追加します。 (Nanoテキストエディタでは、Ctrl+Wを押すことができます 、次にCtrl+V ファイルの最後にジャンプします。)

virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
virtual_mailbox_maps =
   proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf,
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
virtual_alias_maps =
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf,
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf,
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf

場所:

  • virtual_mailbox_domains データベースからドメイン情報を検索する方法をPostfixに指示するファイルを指します。
  • virtual_mailbox_maps データベースからメールアドレスを検索する方法をPostfixに指示するファイルを指します。
  • virtual_alias_maps データベースからエイリアスを検索する方法をPostfixに指示するファイルを指します。

dovecotを使用して受信メールを仮想ユーザーのメッセージストアに配信したいので、このファイルの最後に次の行も追加します。

virtual_transport = lmtp:unix:private/dovecot-lmtp

ファイルを保存して閉じます。次に、.cfを作成する必要があります 1つずつファイルします。 SQLディレクトリを作成します。

sudo mkdir /etc/postfix/sql/

mysql_virtual_domains_maps.cfを作成します ファイル。

sudo nano /etc/postfix/sql/mysql_virtual_domains_maps.cf

次のコンテンツを追加します。 postfixadmin_passwordを置き換えます 手順4で設定したpostfixadminパスワードを使用します。

user = postfixadmin
password = postfixadmin_password
hosts = localhost
dbname = postfixadmin
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
#query = SELECT domain FROM domain WHERE domain='%s'
#optional query to use when relaying for backup MX
#query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'
#expansion_limit = 100

mysql_virtual_mailbox_maps.cfを作成します ファイル。

sudo nano /etc/postfix/sql/mysql_virtual_mailbox_maps.cf

次のコンテンツを追加します。

user = postfixadmin
password = postfixadmin_password
hosts = localhost
dbname = postfixadmin
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
#expansion_limit = 100

mysql_virtual_alias_domain_mailbox_maps.cfを作成します ファイル。

sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf

次のコンテンツを追加します。

user = postfixadmin
password = postfixadmin_password
hosts = localhost
dbname = postfixadmin
query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'

mysql_virtual_alias_maps.cfを作成します ファイル。

sudo nano /etc/postfix/sql/mysql_virtual_alias_maps.cf

次のコンテンツを追加します。

user = postfixadmin
password = postfixadmin_password
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
#expansion_limit = 100

mysql_virtual_alias_domain_maps.cfを作成します ファイル。

sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf

次のコンテンツを追加します。

user = postfixadmin
password = postfixadmin_password
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'

mysql_virtual_alias_domain_catchall_mapsを作成します ファイル。

sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf

次のコンテンツを追加します。

# handles catch-all settings of target-domain
user = postfixadmin
password = postfixadmin_password
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'

データベースのパスワードはプレーンテキストで保存されるため、ユーザーのpostfixとrootのみが読み取り可能である必要があります。これは、次の2つのコマンドを実行することで実行されます。

sudo chmod 0640 /etc/postfix/sql/*
sudo setfacl -R -m u:postfix:rx /etc/postfix/sql/

次に、mydestinationの値を変更する必要があります Postfixのパラメータ。現在の値を表示します:

postconf mydestination

サンプル出力:

mydestination = linuxbabe.com, $myhostname, localhost.$mydomain, localhost

mydestination パラメータには、ローカルのUnixアカウントに配信される電子メールを受信するドメイン名のリストが含まれています。パート1では、apexドメイン名(linuxbabe.comなど)をmydestinationに追加しました 。仮想メールボックスを使用するため、次のコマンドを発行して、リストからapexドメイン名を削除する必要があります。

sudo postconf -e "mydestination = \$myhostname, localhost.\$mydomain, localhost"

それでは、Postfixのメイン設定ファイルをもう一度開きましょう。

sudo nano /etc/postfix/main.cf

このファイルの最後に次の行を追加します。

virtual_mailbox_base = /var/vmail
virtual_minimum_uid = 2000
virtual_uid_maps = static:2000
virtual_gid_maps = static:2000

最初の行は、メールファイルの基本的な場所を定義します。残りの3行は、Postfixが受信メールをメールボックスに配信するときに使用するユーザーIDとグループIDを定義します。ユーザーID2000とグループID2000を使用します。

ファイルを保存して閉じます。変更を有効にするには、Postfixを再起動します。

sudo systemctl restart postfix

次に、vmailという名前のユーザーを作成する必要があります ID2000とID2000のグループ。

sudo adduser vmail --system --uid 2000 --user-group --no-create-home

メールベースの場所を作成します。

sudo mkdir /var/vmail/

vmailを作成します 所有者として。

sudo chown vmail:vmail /var/vmail/ -R

また、SELinuxコンテキストを変更して、書き込み可能にする必要があります。

sudo chcon -t mail_spool_t /var/vmail/ -R

ステップ13:MySQL/MariaDBデータベースを使用するようにDovecotを構成する

また、データベースからユーザー情報を照会するようにDovecotIMAPサーバーを構成する必要があります。まず、次のコマンドを実行して、DovecotのMySQLサポートを追加します。

sudo dnf install dovecot-mysql

次に、 10-mail.confを編集します ファイル。

sudo nano /etc/dovecot/conf.d/10-mail.conf

パート2では、次のmail_locationを使用しました 。メールメッセージはMaildirの下に保存されます 各ユーザーのホームディレクトリの下にあるディレクトリ。

mail_location = maildir:~/Maildir

現在仮想メールボックスドメインを使用しているため、mail_homeを有効にする必要があります 仮想ユーザーにはデフォルトでホームディレクトリがないため、ファイルに次の行を追加して仮想ユーザーの場合。

mail_home = /var/vmail/%d/%n

ファイルを保存して閉じます。次に、 10-auth.confを編集します ファイル。

sudo nano /etc/dovecot/conf.d/10-auth.conf

パート2では、auth_username_formatに次の値を使用しました 。

auth_username_format = %n

%n それが与えられた場合、ドメインを削除します。パート2では、すべての電子メールアドレスのユーザー名にローカルUnixアカウントを使用していたため、%nを使用する必要があります。 ドメインを削除して、ユーザーが完全なメールアドレスでログインできるようにします。

現在、仮想メールボックスドメインを使用しています。つまり、すべてのメールアドレスのユーザー名にドメイン部分が含まれているため、auth_username_formatを変更する必要があります。 次のように。 %u ドメインを削除しません。これにより、ユーザーは完全なメールアドレスでログインできます。

auth_username_format = %u

ファイルの最後にある次の行のコメントを解除して、Dovecotがデータベースからユーザー情報を照会できるようにします。

!include auth-sql.conf.ext

ここで、おそらくローカルのUnixユーザーがPostfixAdminに電子メールアドレスを登録せずに電子メールを送信することを望まないでしょう。次に、先頭に#文字を追加して次の行をコメントアウトし、Dovecotがローカルの/etc/passwd または/etc/shadow ファイル。

#!include auth-system.conf.ext

ログインの問題をデバッグするには、このファイルに次の2行を追加すると役立つ場合があります。ログインエラーは/var/log/maillogに記録されます ファイル。 (ユーザーが問題なくログインできるようになったら、次の2行をコメントアウトできます。)

auth_debug = yes
auth_debug_passwords = yes

ファイルを保存して閉じます。

dovecot-sql.conf.extを作成します ファイル。

sudo nano /etc/dovecot/dovecot-sql.conf.ext

これがあなたが持っているべき内容です。 postfixadmin_passwordを置き換えます 手順4で設定したpostfixadminパスワードを使用します。

driver = mysql

connect = host=localhost dbname=postfixadmin user=postfixadmin password=postfixadmin_password

default_pass_scheme = BLF-CRYPT

password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1'

user_query = SELECT maildir, 2000 AS uid, 2000 AS gid FROM mailbox WHERE username = '%u' AND active='1'

iterate_query = SELECT username AS user FROM mailbox

ファイルを保存して閉じます。そして、Dovecotを再起動します。

sudo systemctl restart dovecot

ユーザーがログインしようとすると、Dovecotはユーザーが入力したパスワードからBLF-CRYPTハッシュを生成し、それをデータベースに保存されているパスワードハッシュと比較します。

ステップ14:PostfixAdminにドメインとメールボックスを追加する

管理者としてPostfixAdminWebインターフェイスにログインします。 Domain Listをクリックします タブをクリックし、New Domainを選択します ドメインを追加します。このドメインで許可されるエイリアスとメールボックスの数を選択できます。

次に、Virtual Listをクリックします タブをクリックし、Add Mailboxを選択します ドメインの新しいメールアドレスを追加します。

次に、Mozilla Thunderbirdなどのデスクトップ電子メールクライアントを起動し、メールアカウントを追加します。 Thunderbirdが以下のようなメールサーバー構成を見つけた場合は、完了をクリックするだけです。 ボタンを押すと、メールを読んだり送信したりできるようになります。

Thunderbirdがメールサーバーの構成を見つけられなかった場合は、手動構成をクリックします。 ボタンをクリックして、メールサーバーの詳細を入力します。

  • [受信サーバー]セクションで、[IMAPプロトコル]を選択し、mail.your-domain.comと入力します。 サーバー名として、ポート143とSTARTTLSを選択します。 normal passwordを選択します 認証方法として。
  • 送信セクションで[SMTPプロトコル]を選択し、mail.your-domain.comと入力します サーバー名として、ポート587とSTARTTLSを選択します。 normal passwordを選択します 認証方法として。

ヒント :IMAPの場合はSSL / TLS暗号化でポート993を使用し、SMTPの場合はSSL/TLS暗号化でポート465を使用することもできます。 しない メールクライアントのSMTPポートとしてポート25を使用して、送信メールを送信します。

これで、自分のメールサーバーに接続し、デスクトップのメールクライアントでメールを送受信できるようになります。

トラブルシューティングのヒント

経験則として、常にメールログ(/var/log/maillog)を確認する必要があります )エラーが発生したときにメールサーバー上で。以下は、特定のエラーとトラブルシューティングのヒントのリストです。

メールクライアントからログインできません

デスクトップメールクライアントからメールサーバーにログインできない場合は、メールサーバーをスキャンして、ポートが開いているかどうかを確認します。次のコマンドは、別のLinuxコンピューターまたはサーバーから実行する必要があることに注意してください。メールサーバーで実行すると、ポートは常に開いているように見えます。

sudo nmap mail.your-domain.com

そして、Dovecotが実行されているかどうかを確認します。

systemctl status dovecot

メールログ(/var/log/maillog)を確認することもできます )、それはあなたにいくつかの手がかりを与えるかもしれません。 Dovecotの起動に失敗した場合、エラーは/var/log/maillogに記録されない可能性があります ファイルの場合、次のコマンドを実行して何が問題なのかを確認できます。

sudo journalctl -eu dovecot

メールログに次のエラーが表示される場合は、.cfに正しいパスワードを設定していない可能性があります。 /etc/postfix/sql/の下のファイル ディレクトリ。

postfix/trivial-rewrite[28494]: warning: virtual_alias_domains: proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf: table lookup problem
postfix/trivial-rewrite[28494]: warning: virtual_alias_domains lookup failure
>

メールログに次のエラーが表示される場合は、mail_location = maildir:~/Maildirを追加し忘れたことが原因です。 /etc/dovecot/conf.d/10-mail.confにあります ファイル。

open(/var/mail/[email protected]) failed: Permission denied (euid=2000(vmail) egid=2000(vmail) missing +w perm: /var/mail, we're not in group 8(mail), dir owned by 0:8 mode=0775

Cloudflare DNS

パート1で述べたように、Cloudflare DNSサービスを使用する場合は、メールサーバーのホスト名のDNS AレコードとAAAAレコードを作成するときにCDN(プロキシ)機能を有効にしないでください。 Cloudflare doesn’t support SMTP or IMAP proxy.

Relay Access Denied

If you see the “relay access denied ” error when trying to send emails from a mail client, it’s most likely that you use port 25 as the SMTP port in your mail client. As I said a while ago, you should use port 587 or 465 as the SMTP port in mail clients (Mozilla Thunberbird, Microsoft Outlook, etc) to submit outgoing emails. Port 25 should be used for SMTP server to SMTP server communications.

iOS Mail App

If you use the iOS Mail app to log into your mail server and encounter the following error.

You can try to fix it by enforcing SSL encryption, for both SMTP and IMAP.

Fun fact :It seems the iOS Mail app has difficulty in supporting STARTTLS on IMAP port 143, but it supports STARTTLS on the submission port 587.

Temporary Lookup Failure

If your mail server was working fine for some time, but suddenly you find the following error in the mail log,

Aug 25 20:25:24 mx postfix/trivial-rewrite[3313]: warning: virtual_alias_domains: proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf: table lookup problem
Aug 25 20:25:24 mx postfix/trivial-rewrite[3313]: warning: virtual_alias_domains lookup failure
Aug 25 20:25:24 mx postfix/submission/smtpd[3464]: NOQUEUE: reject: 451 4.3.0 <[email protected]>: Temporary lookup failure;  proto=ESMTP
Aug 25 20:25:24 mx postfix/submission/smtpd[3464]: Temporary lookup failure

It’s likely that your MariaDB/MySQL database stopped somehow. You can use the following command to check when your database server stopped.

sudo journalctl -eu mariadb

または

sudo journalctl -eu mysql

A common cause for this situation is that your server is out-of-memory. Check if your server has enough memory.

htop

または

free -m

Change User Password in PostfixAdmin

Users can log into PostfixAdmin at https://postfixadmin.example.com/users/login.php , then change their passwords.

Automatically Clean the Junk Folder and Trash Folder

To delete emails in Junk folder for all users, you can run

sudo doveadm expunge -u *@example.com mailbox Junk all

To delete emails in Trash folder for all users, run

sudo doveadm expunge -u *@example.com mailbox Trash all

I think it’s better to clean emails that have been in the Junk or Trash folder for more than 2 weeks, instead of cleaning all emails.

sudo doveadm expunge -u *@example.com mailbox Junk savedbefore 2w

Then add a cron job to automate the job.

sudo crontab -e

Add the following line to clean Junk and Trash folder every day

@daily doveadm expunge -u *@example.com mailbox Junk savedbefore 2w;doveadm expunge -u *@example.com mailbox Trash savedbefore 2w

Restricting Access to Sendmail

By default, any local user can use the sendmail binary to submit outgoing emails. Now that your mail server is using virtual mailboxes, you might want to restrict access to the sendmail binary to trusted local users only, so a malicious user can’t use it to send a large volume of emails to damage your mail server’s reputation. Edit the Postfix main configuration file.

sudo nano /etc/postfix/main.cf

Add the following line to the end of this file, so only the root and www-data user can submit emails via sendmail. You can also add other usernames.

authorized_submit_users = root,www-data

ファイルを保存して閉じます。次に、Postfixを再起動します。

sudo systemctl restart postfix

次のステップ

I hope this tutorial helped you install and use PostfixAdmin on CentOS 8/RHEL 8 to create virtual mailboxes. In part 4, I will show you how to set up SPF and DKIM with Postfix to improve email deliverability and in a future tutorial, I’m going to show you how to host multiple domains with PostfixAdmin.

If you want to access emails from a web browser, then I recommend Roundcube, which is a very popular and featured-rich open-source webmail client. As always, if you found this post useful,  subscribe to our free newsletter to get more tips and tricks.気をつけて🙂


Cent OS
  1. RHEL 8 /CentOS8にPuppetをインストールする方法

  2. CentOS7でPostfixAdminとMariaDBを使用してメールサーバーをセットアップする

  3. CentOS7でPostfixAdminを使用してメールサーバーを設定する方法

  1. CentOS 7でNginx仮想ホスト(サーバーブロック)を設定する方法

  2. ApacheWebサーバーCentOS6/RHEL6をインストールします

  3. CentOS/RHEL サーバーで SSH バナーを作成する方法

  1. RHEL 8 /CentOS8にpostfixメールサーバーをインストールする方法

  2. CentOS 7 / RHEL 7にiRedMail(メールサーバー)をインストールする方法

  3. CentOS 8 /RHEL8にOpenLiteSpeedWebサーバーをインストールする方法