以前の記事では、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.気をつけて🙂