以前の記事では、Ubuntuで独自のメールサーバーを最初から設定する方法について説明しました。このチュートリアルシリーズのパート1とパート2では、PostfixSMTPサーバーとDovecotIMAPサーバーのセットアップ方法を学びましたが、これまでのところ、ローカルのUnixアカウントを持つユーザーの電子メールアドレスしか持つことができません。このチュートリアルでは、PostfixAdminを使用してUbuntu 20.04メールサーバーで仮想メールボックスを作成する方法を説明します。PostfixAdminは、多くのドメインとユーザーのPostfixベースのメールサーバーを構成および管理するためのオープンソースのウェブベースのインターフェースです。
仮想メールボックスを使用すると、メールアドレスごとにローカルのUnixアカウントを作成する必要はありません。会社や組織のメールサーバーを設定する場合は、ユーザーがパスワードを変更できるようにするWebベースのインターフェイスで仮想メールボックスを簡単に作成する方法を用意することをお勧めします。そこでPostfixAdminが登場します。
PostfixAdminの機能
- メールボックス、仮想ドメイン、エイリアスを管理する
- 休暇/不在メッセージ(個人的には、Roundcube Webメールで行う方がよいと思います)
- エイリアスドメイン(受信者の検証を使用して1つのドメインを別のドメインに転送する)
- ユーザーは自分のメールボックスを管理できます(エイリアス、パスワード、休暇メッセージの変更)
- 単一のメールボックスのクォータサポートとドメインの合計クォータ
- fetchmailの統合:元のメールアドレスから新しいメールアドレスにメールを取得できます。
- Webインターフェイスでクリックしたくない人のためのコマンドラインクライアントpostfixadmin-cli😉
注 :パート3を終了すると、ローカルのUnixアカウントを電子メールアドレスとして使用できなくなります。 PostfixAdminWebインターフェイスから電子メールアドレスを作成する必要があります。
前提条件
この記事を読み続ける前に、このチュートリアルシリーズのパート1とパート2を読んでおく必要があります。他のWebサイトでメールサーバーのチュートリアルに従っている場合は、構成を削除することをお勧めします(sudo apt purge postfix dovecot-core
)そして私のチュートリアルシリーズからやり直してください。そうすれば、さまざまなセットアッププロセスに混乱することはありません。
上記の要件が満たされたら、PostfixAdminをインストールして構成しましょう。
ステップ1:MariaDBデータベースサーバーをインストールする
PostfixAdminはPHPで記述されており、データベース(MySQL / MariaDB、PostgreSQL、またはSQLite)が必要です。この記事では、MySQLのドロップイン代替品であるMariaDBデータベースを使用します。これは、OracleがMySQLをクローズドソース製品に変える可能性があることを懸念しているMySQLチームの元メンバーによって開発されました。次のコマンドを入力して、Ubuntu20.04にMariaDBをインストールします。
sudo apt install mariadb-server mariadb-client
インストール後、MariaDBサーバーが自動的に起動します。 systemctlを使用します ステータスを確認します。
systemctl status mariadb
出力:
●mariadb.service-MariaDB10.3.22データベースサーバーロード済み:ロード済み(/lib/systemd/system/mariadb.service;有効;ベンダープリセット:有効)アクティブ:アクティブ(実行中)2020-04-10金曜日14:19:16 UTC; 18秒前ドキュメント:man:mysqld(8)https://mariadb.com/kb/en/library/systemd/メインPID:9161(mysqld)ステータス:「SQLリクエストを今すぐ取得しています...」タスク:31(制限:9451)メモリ:64.7M CGroup:/system.slice/mariadb.service└─9161/ usr / sbin / mysqld
実行されていない場合は、次のコマンドで開始します:
sudo systemctl start mariadb
起動時にMariaDBを自動的に起動できるようにするには、
を実行します。sudo systemctl enable mariadb
次に、インストール後のセキュリティスクリプトを実行します。
sudo mysql_secure_installation
MariaDBのrootパスワードの入力を求められたら、rootパスワードがまだ設定されていないため、Enterキーを押します。次に、 yと入力します MariaDBサーバーのルートパスワードを設定します。
次に、Enterキーを押して残りのすべての質問に答えることができます。これにより、匿名ユーザーが削除され、リモートrootログインが無効になり、テストデータベースが削除されます。このステップは、MariaDBデータベースセキュリティの基本的な要件です。 (Yが大文字になっていることに注意してください。これは、デフォルトの回答であることを意味します。)
ステップ2:Ubuntu20.04サーバーにPostfixAdminをインストールする
メールサーバーにログインします。一部のリーダーはMariaDBサーバーを使用し、他のリーダーはMySQLを使用するため、処理が複雑になります。そのため、PostfixAdminをインストールする前に、dbconfig-no-thanks
をインストールします。 postfixadmin
を防ぐためのパッケージ データベース構成ウィザードの起動からのパッケージ。
sudo apt install dbconfig-no-thanks
次に、デフォルトのUbuntuソフトウェアリポジトリからPostfixAdminをインストールします。
sudo apt install postfixadmin
注 :以前にmysql-server
をインストールしたことがある場合 Ubuntuでは、PostfixAdminをインストールすると、おそらくmysql-server
が削除されます。 システムからのパッケージ。次のコマンドを実行して、再インストールできます。
sudo apt install mysql-server
次に、dbconfig-no-thanks
を削除する必要があります パッケージ。
sudo apt remove dbconfig-no-thanks
次に、PostfixAdminのデータベース構成ウィザードを起動します。
sudo dpkg-reconfigure postfixadmin
インストール中に、PostfixAdminのデータベースを再インストールするかどうかを尋ねられます。これは単に、postfixadmin
という名前のデータベースを作成することを意味します 、既存のデータベースは削除されません。 Tabキーを押して、はいを選択します 。
次に、デフォルトのデータベースタイプを選択します:mysql
、MySQLまたはMariaDBを使用している場合。
次に、デフォルトの接続方法を選択します:Unix socket
。
次に、MySQL/MariaDBのデフォルトの認証プラグインを選択します。
Enterキーを押して、PostfixAdminのデフォルトのデータベース名を選択します。
Enterキーを押して、PostfixAdminのデフォルトのデータベースユーザー名を選択します。
その後、このユーザーのパスワードを設定する必要があります。パスワードには#
を含めないでください。 文字、または後でログインできない可能性があります。
最後に、デフォルトのデータベース管理ユーザーを選択します。
PostfixAdminをインストールした後、次のコマンドを使用してMySQL/MariaDBコンソールにログインできます。 postfixadmin
のパスワードを入力する必要があります ユーザー。
mysql -u postfixadmin -p
また、次のコマンドを使用して、ユーザーがアクセスする権限を持っているデータベースを確認できます。
データベースを表示;
出力:
+ -------------------- + |データベース|+-------------------- + | information_schema || postfixadmin | + -------------------- + 2行セット(0.002秒)
デフォルトでは、postfixadmin
データベースにはテーブルが含まれていません。次のコマンドを使用して、MySQL/MariaDBコンソールからログアウトできます。
EXIT;
インストールにより、2つの構成ファイルも作成されます:/etc/dbconfig-common/postfixadmin.conf
および/etc/postfixadmin/dbconfig.inc.php
、どちらにもデータベースのユーザー名とパスワードを含むデータベースアクセス設定が含まれています。データベースタイプをmysql
から変更する必要があります mysqli
へ 2つのファイルの両方で。
sudo nano /etc/dbconfig-common/postfixadmin.conf
変更
dbc_dbtype ='mysql'
に
dbc_dbtype ='mysqli'
次に、2番目のファイルを編集します。
sudo nano /etc/postfixadmin/dbconfig.inc.php
変更
$ dbtype ='mysql';
に
$ dbtype ='mysqli';
Webファイルは/usr/share/postfixadmin/
の下にインストールされます ルートが所有するディレクトリ。 PostfixAdminにはtemplates_c
が必要です ディレクトリなので、作成します。
sudo mkdir / usr / share / postfixadmin / templates_c
www-data
を提供する必要があります ユーザーは、次のコマンドを使用して、このディレクトリに対する権限の読み取り、書き込み、および実行を行います。
sudo setfacl -R -m u:www-data:rwx / usr / share / postfixadmin / templates_c /
システムがsetfacl
を見つけられない場合 コマンドを実行するには、acl
をインストールする必要があります パッケージ。
sudo apt install acl
ステップ3:PostfixAdmin用のApache仮想ホストまたはNginx構成ファイルを作成する
Apache
Apache Webサーバーを使用する場合は、PostfixAdminの仮想ホストを作成します。
sudo nano /etc/apache2/sites-available/postfixadmin.conf
次のテキストをファイルに入れます。 postfixadmin.example.com
を置き換えます 実際のドメイン名を使用して、DNSAレコードを設定することを忘れないでください。
ServerName postfixadmin.example.com DocumentRoot / usr / share / postfixadmin / public ErrorLog $ {APACHE_LOG_DIR} /postfixadmin_error.log CustomLog ${APACHE_LOG_DIR}/postfixadmin_access.log結合 オプションFollowSymLinksAllowOverrideすべての オプションFollowSymLinksMultiViewsAllowOverride All Order allow、deny permit from all
ファイルを保存して閉じます。次に、次のコマンドでこの仮想ホストを有効にします。
sudo a2ensite postfixadmin.conf
変更を有効にするためにApacheをリロードします。
sudo systemctl reload apache2
これで、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;聞く[::]:80; server_name postfixadmin.example.com;ルート/usr/ share / postfixadmin / public /; index index.php index.html; access_log /var/log/nginx/postfixadmin_access.log; error_log /var/log/nginx/postfixadmin_error.log;場所/{try_files$ uri $ uri / /index.php; }場所〜^ /(。+ \。php)$ {try_files $ uri =404; fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name; / etc / nginx/fastcgi_paramsをインクルードします。 }}
ファイルを保存して閉じます。次に、Nginx構成をテストします。
sudo nginx -t
テストが成功した場合は、変更を有効にするためにNginxをリロードします。
sudo systemctl reload nginx
これで、http://postfixadmin.example.com/setup.php
でPostfixAdminWebベースのインストールウィザードが表示されるはずです。 。
ステップ4:必須および推奨のPHPモジュールをインストールする
次のコマンドを実行して、PostfixAdminが必要または推奨するPHPモジュールをインストールします。
sudo apt install php7.4-fpm php7.4-imap php7.4-mbstring php7.4-mysql php7.4-json php7.4-curl php7.4-zip php7.4-xml php7.4- bz2 php7.4-intl php7.4-gmp
次に、Apacheを再起動します。 (Nginxを使用している場合は、Nginxを再起動する必要はありません。)
sudo systemctl restart apache2
ステップ5:HTTPSを有効にする
HTTPトラフィックを暗号化するには、Let’sEncryptから発行された無料のTLS証明書をインストールしてHTTPSを有効にします。次のコマンドを実行して、Let’s Encryptクライアント(certbot)をUbuntu20.04サーバーにインストールします。
sudo apt install certbot
Apacheを使用する場合は、CertbotApacheプラグインをインストールしてください。
sudo apt install python3-certbot-apache
そして、このコマンドを実行してTLS証明書を取得してインストールします。
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d postfixadmin.example.com
Nginxを使用する場合は、CertbotNginxプラグインもインストールする必要があります。
sudo apt install python3-certbot-nginx
次に、次のコマンドを実行してTLS証明書を取得してインストールします。
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d postfixadmin.example.com
どこ
-
--nginx
:nginxプラグインを使用してください。 -
--apache
:Apacheプラグインを使用してください。 -
--agree-tos
:利用規約に同意します。 --redirect
:301リダイレクトでHTTPSを強制します。-
--hsts
:すべてのHTTP応答にStrict-Transport-Securityヘッダーを追加します。ドメインに常にTLSを使用するようにブラウザを強制します。 SSL/TLSストリッピングから防御します。 -
--staple-ocsp
:OCSPステープリングを有効にします。有効なOCSP応答は、TLS中にサーバーが提供する証明書にホチキス止めされます。
これで、証明書が取得され、自動的にインストールされます。これは、以下のメッセージで示されます。
ステップ6:PostfixAdminとDovecotで強力なパスワードスキームを使用する
デフォルトでは、PostfixAdminとDovecotは弱いパスワードスキームであるMD5-CRYPTを使用します。次のコマンドを使用して、Dovecotで使用可能なパスワードスキームを一覧表示できます。
sudo doveadm pw -l </ pre>サンプル出力:
SHA1 SSHA512 BLF-CRYPT PLAIN HMAC-MD5 OTP SHA512 SHA RPA DES-CRYPT CRYPT SSHA MD5-CRYPT SKEY PLAIN-MD4 PLAIN-MD5 SCRAM-SHA-1 LANMAN SHA512-CRYPT CLEAR CLEARTEXT ARGON2I ARGON2ID > SSHA256 NTLM MD5 PBKDF2 SHA256 CRAM-MD5 PLAIN-TRUNC SHA256-CRYPT SMD5 DIGEST-MD5 LDAP-MD5Argon2はかなり強力なパスワードスキームです。これを使用するには、PostfixAdmin構成ファイルを編集する必要があります。デフォルトは
/usr/share/postfixadmin/config.inc.php
です。 、ただし、別のファイル(config.local.php
)を作成できます )変更を保存して、将来、新しいバージョンのPostfixAdminがインストールされたときに上書きされないようにします。sudo nano /usr/share/postfixadmin/config.local.phpArgon2パスワードスキームを使用するには、ファイルに次の行を追加します。
<?php $ CONF ['encrypt'] ='dovecot:ARGON2I'; $ CONF ['dovecotpw'] ="/ usr / bin / doveadm pw -r 5"; if(@file_exists('/ usr / bin / doveadm')){//@openbase_dirのものを無音にします; https://github.com/postfixadmin/postfixadmin/issues/171を参照$CONF['dovecotpw'] ="/ usr / bin / doveadm pw -r 5"; #debian}ファイルを保存して閉じます。
/etc/postfixadmin/
にシンボリックリンクを作成することもできます PostfixAdminがファイルを見つけられない場合に備えて、ディレクトリ。sudo ln -s /usr/share/postfixadmin/config.local.php /etc/postfixadmin/config.local.php手順11でDovecotのパスワードスキームを構成します。
ステップ7:Dovecotで統計を有効にする
PostfixAdminはDovecot統計を読み取る必要があります。 Dovecot構成ファイルを編集します。
sudo nano /etc/dovecot/conf.d/10-master.confこのファイルの最後に次の行を追加します。
service stats {unix_listener stats-reader {user =www-data group =www-data mode =0660} unix_listener stats-writer {user =www-data group =www-data mode =0660}}ファイルを保存して閉じます。次に、Webサーバーを
dovecot
に追加します グループ。sudo gpasswd -a www-data dovecotDovecotを再起動します。
sudo systemctl restart dovecotステップ8:Webブラウザでのインストールを完了します
postfixadmin.example.com/setup.php
Webベースのセットアップウィザードを実行します。まず、すべての依存関係がインストールされているかどうかを確認し、データベーステーブルを作成します。
![]()
次のエラーが表示された場合は、
無効なクエリ:指定されたキーが長すぎました。キーの最大長は1000バイトです次に、コマンドラインからrootとしてMySQL/MariaDBデータベースサーバーにログインする必要があります
sudo mysql -u rootデフォルトの照合を
utf8mb4_general_ci
から変更しますutf8_general_ci
へ 。MariaDB [(none)]> alter database postfixadmin collate ='utf8_general_ci';MySQL / MariaDBコンソールを終了し、setup.phpページをリロードします。すべての要件が満たされたら、PostfixAdminのセットアップパスワードを作成できます。
![]()
パスワードハッシュを作成したら、
/usr/share/postfixadmin/config.local.php
を開く必要があります。 ファイルを作成し、以下のようにファイルの最後にセットアップパスワードハッシュを追加します。もちろん、独自のパスワードハッシュを使用する必要があります。
![]()
次に、管理者アカウントを作成します。管理者アカウントにGmail、Yahooメール、またはMicrosoftのメールアドレスを使用しないでください。使用すると、後でログインできなくなる可能性があります。自分のドメインのメールアドレスを使用してください。メールアドレスは後でPostfixAdminで作成できます。
![]()
スーパー管理者アカウントを作成しようとしたときに次のエラーが表示された場合は、
dovecotpwでパスワードを暗号化できません。詳細については、エラーログを参照してください
www-data
ユーザーには、Let'sEncryptTLS証明書を読み取る権限がありません。これを修正するには、次のコマンドを実行して権限を付与します。sudo setfacl -R -m u:www-data:rx / etc /letsencrypt / live / / etc /letsencrypt/archive/スーパー管理者アカウントが作成されると、
postfixadmin.example.com/login.php
でPostfixAdminにログインできます。 。
![]()
ステップ9:データベース内のテーブルを確認する
PostfixAdminセットアッププロセスは、
postfixadmin
にデータを入力します いくつかのデフォルトテーブルを持つデータベース。テーブルの名前と構造を知っておくと役に立ちます。 MySQL/MariaDBコンソールにログインします。sudo mysql -u root
postfixadmin
を選択します データベース。USE postfixadmin;このデータベース内のすべてのテーブルを一覧表示します。
テーブルを表示;出力:
+ ------------------------ + | Tables_in_postfixadmin | + ------------------------ + |管理者||エイリアス|| alias_domain ||構成||ドメイン|| domain_admins || fetchmail ||ログ||メールボックス||クォータ||クォータ2||休暇|| Vacation_notification | + ------------------------ + 13行セット(0.001秒)最も重要な3つのテーブルは次のとおりです。
domain
:メールサーバーを使用してメールを送受信しているドメインに関する情報が含まれています。mailbox
:ハッシュ化されたパスワードやメールファイルの場所など、すべてのメールアドレスに関する情報が含まれています。alias
:各メールアドレスのエイリアスが含まれています。
興味がある場合は、各テーブルに含まれる列を確認できます。たとえば、次のコマンドはdomain
の列を表示します テーブル。
DESCRIBEドメイン;
出力:
+ ------------- + -------------- + ------ + ----- + ---- ----------------- + ------- + |フィールド|タイプ|ヌル|キー|デフォルト|追加|+------------- + -------------- + ------ + ----- + ----- ---------------- + ------- + |ドメイン| varchar(255)|いいえ| PRI | NULL | ||説明| varchar(255)|いいえ| | NULL | ||エイリアス| int(10)|いいえ| | 0 | ||メールボックス| int(10)|いいえ| | 0 | || maxquota | bigint(20)|いいえ| | 0 | ||クォータ| bigint(20)|いいえ| | 0 | ||輸送| varchar(255)|いいえ| | NULL | || backupmx | tinyint(1)|いいえ| | 0 | ||作成済み|日時|いいえ| | 2000-01-01 00:00:00 | ||変更|日時|いいえ| | 2000-01-01 00:00:00 | ||アクティブ| tinyint(1)|いいえ| | 1 | | + ------------- + -------------- + ------ + ----- + ------ --------------- + ------- +
MySQL/MariaDBコンソールからログアウトします。
EXIT;
ステップ10:MySQL/MariaDBデータベースを使用するようにPostfixを設定する
デフォルトでは、PostfixはローカルUnixアカウントを持つユーザーにのみメールを配信します。情報がデータベースに保存されている仮想ユーザーにメールを配信するには、仮想メールボックスドメインを使用するようにPostfixを設定する必要があります。
まず、postfix-mysql
をインストールして、PostfixのMySQLマップサポートを追加する必要があります パッケージ。
sudo apt install postfix-mysql
次に、Postfixのメイン設定ファイルを編集します。
sudo nano /etc/postfix/main.cf
このファイルの最後に次の行を追加します。
virtual_mailbox_domains =proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cfvirtual_mailbox_maps =proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf、proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cfvirtual_ 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
次のコンテンツを追加します。 password
を置き換えます 手順2で設定したpostfixadminパスワードを使用します。
user =postfixadminpassword =passwordhosts =localhostdbname =postfixadminquery =SELECT domain FROM domain WHERE domain ='%s' AND active ='1' #query =SELECT domain FROM domain WHERE domain ='%s'#オプションのクエリバックアップのリレー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 =postfixadminpassword =passwordhosts =localhostdbname =postfixadminquery =SELECT maildir FROM namespace 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 =postfixadminpassword =passwordhosts =localhostdbname =postfixadminquery =SELECT maildir FROM メールボックス、alias_domain WHERE alias_domain.alias_domain ='%d'およびmailbox.username =CONCAT('%u'、'@'、alias_domain.target_domain)ANDメールボックス.active =1 AND alias_domain.active ='1'
mysql_virtual_alias_maps.cfを作成します ファイル。
sudo nano /etc/postfix/sql/mysql_virtual_alias_maps.cf
次のコンテンツを追加します。
user =postfixadminpassword =passwordhosts =localhostdbname =postfixadminquery =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 =postfixadminpassword =passwordhosts =localhostdbname =postfixadminquery =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
次のコンテンツを追加します。
#はtarget-domainuser =postfixadminpassword =passwordhosts =localhostdbname =postfixadminquery =SELECT goto FROM alias、alias_domain WHERE alias_domain.alias_domain ='%d'および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 =$ myhostname、linuxbabe.com、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 / vmailvirtual_minimum_uid =2000virtual_uid_maps =static:2000virtual_gid_maps =static:2000
最初の行は、メールファイルの基本的な場所を定義します。残りの3行は、Postfixが受信メールをメールボックスに配信するときに使用するユーザーIDとグループIDを定義します。ユーザーID2000とグループID2000を使用します。
ファイルを保存して閉じます。変更を有効にするには、Postfixを再起動します。
sudo systemctl restart postfix
次に、vmail
という名前のユーザーを作成する必要があります ID2000とID2000のグループ。
sudo adduser vmail --system --group --uid 2000 --disabled-login --no-create-home
メールベースの場所を作成します。
sudo mkdir / var / vmail /
vmail
を作成します 所有者として。
sudo chown vmail:vmail / var / vmail / -R
ステップ11:MySQL/MariaDBデータベースを使用するようにDovecotを構成する
また、データベースからユーザー情報を照会するようにDovecotIMAPサーバーを構成する必要があります。まず、次のコマンドを実行して、DovecotのMySQLサポートを追加します。
sudo apt 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がMySQL/MariaDBデータベースからユーザー情報を照会できるようにします。
!include auth-sql.conf.ext
ここで、おそらくローカルのUnixユーザーがPostfixAdminに電子メールアドレスを登録せずに電子メールを送信することを望まないでしょう。次に、先頭に#文字を追加して次の行をコメントアウトし、Dovecotがローカルの/etc/passwd
または/etc/shadow
ファイル。
#!include auth-system.conf.ext
ログインの問題をデバッグするには、このファイルに次の2行を追加すると役立つ場合があります。ログインエラーは/var/log/mail.log
に記録されます ファイル。 (ユーザーが問題なくログインできるようになったら、次の2行をコメントアウトできます。)
auth_debug =yesauth_debug_passwords =yes
ファイルを保存して閉じます。
dovecot-sql.conf.ext
を編集します ファイル。
sudo nano /etc/dovecot/dovecot-sql.conf.ext
このファイルに含める必要のあるコンテンツは次のとおりです。デフォルトでは、このファイルのすべての行がコメント化されているため、それらをコピーして下部に貼り付けるだけです。 password
を置き換えます 手順2で設定したpostfixadminパスワードを使用します。
driver =mysqlconnect =host =localhost dbname =postfixadmin user =postfixadmin password =passworddefault_pass_scheme =ARGON2Ipassword_query =SELECT username AS user、password FROM namespace WHERE username ='%u' AND active ='1' user_query =SELECT maildir、2000 AS uid、2000 AS gidFROMメールボックスWHEREユーザー名='%u' AND active ='1'iterate_query=ユーザー名ASユーザーFROMメールボックスを選択
Dovecotを再起動します。
sudo systemctl restart dovecot
ユーザーがログインしようとすると、DovecotはArgon2アルゴリズムを使用して、ユーザーが入力したパスワードからパスワードハッシュを生成し、データベースに保存されているパスワードハッシュと比較します。
ステップ12:PostfixAdminにドメインとメールボックスを追加する
管理者としてPostfixAdminWebインターフェイスにログインします。 Domain List
をクリックします タブをクリックし、New Domain
を選択します ドメインを追加します。このドメインで許可されるエイリアスとメールボックスの数を選択できます。
次に、Virtual List
をクリックします タブをクリックし、Add Mailbox
を選択します ドメインの新しいメールアドレスを追加します。
次に、Mozilla 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を使用して、送信メールを送信します。
これで、自分の電子メールサーバーに接続し、デスクトップ電子メールクライアントで電子メールを送受信できるようになります。現在、ローカルのUnixアカウントを使用してログインすることはできません。 PostfixAdminWebインターフェイスから作成された仮想ユーザーでログインする必要があります。
トラブルシューティングのヒント
経験則として、常にメールログ(/var/log/mail.log
)を確認する必要があります )エラーが発生したときにメールサーバー上で。以下は、特定のエラーとトラブルシューティングのヒントのリストです。
メールクライアントからログインできません
デスクトップメールクライアントからメールサーバーにログインできない場合は、メールサーバーをスキャンして、ポートが開いているかどうかを確認します。次のコマンドは、別のLinuxコンピューターまたはサーバーから実行する必要があることに注意してください。メールサーバーで実行すると、ポートは常に開いているように見えます。
sudo nmap mail.your-domain.com
そして、Dovecotが実行されているかどうかを確認します。
systemctl status dovecot
メールログ(/var/log/mail.log
)を確認することもできます )、それはあなたにいくつかの手がかりを与えるかもしれません。 Dovecotの起動に失敗した場合、エラーは/var/log/mail.log
に記録されない可能性があります。 ファイルの場合、次のコマンドを実行して何が問題なのかを確認できます。
sudo journalctl -eu dovecot
メールログに次のエラーが表示される場合は、.cf
に正しいパスワードを設定していない可能性があります。 /etc/postfix/sql/
の下のファイル ディレクトリ。
postfix / trivial-rewrite [28494]:警告:virtual_alias_domains:proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf:テーブルルックアップproblempostfix / trivial-rewrite [28494]:警告:virtual_alias_domainsルックアップ失敗>
メールログに次のエラーが表示される場合は、mail_location = maildir:~/Maildir
を追加し忘れたことが原因です。 /etc/dovecot/conf.d/10-mail.conf
にあります ファイル。
open(/ var / mail / [email protected])failed:Permissiondenied(euid =2000(vmail)egid =2000(vmail)missing + w perm:/ var / mail、私たちはグループ8(メール)、0:8モードが所有するディレクトリ=0775
Cloudflare DNS
パート1で述べたように、Cloudflare DNSサービスを使用する場合は、メールサーバーのホスト名のDNS AレコードとAAAAレコードを作成するときにCDN(プロキシ)機能を有効にしないでください。 CloudflareはSMTPまたはIMAPプロキシをサポートしていません。
リレーアクセスが拒否されました
「リレーアクセスが拒否されました」が表示された場合 メールクライアントからメールを送信しようとすると「」エラーが発生します。メールクライアントのSMTPポートとしてポート25を使用している可能性があります。さっき言ったように、ポート 587を使うべきです または465 メールクライアント(Mozilla Thunberbird、Microsoft Outlookなど)のSMTPポートとして、送信メールを送信します。ポート25は、SMTPサーバーからSMTPサーバーへの通信に使用する必要があります。
iOSメールアプリ
iOSメールアプリを使用してメールサーバーにログインし、次のエラーが発生した場合。
SMTPとIMAPの両方でSSL暗号化を適用することで修正を試みることができます。
おもしろい事実 :iOSメールアプリはIMAPポート143でSTARTTLSをサポートするのが難しいようですが、送信ポート587でSTARTTLSをサポートしています。
一時的なルックアップの失敗
メールサーバーがしばらくの間正常に機能していたが、突然メールログに次のエラーが表示された場合
Aug 25 20:25:24 mx postfix / trivial-rewrite [3313]:警告:virtual_alias_domains:proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf:テーブルルックアップの問題Aug 25 20:25:24 mx postfix / trivial-rewrite [3313]:警告:virtual_alias_domainsルックアップの失敗8月25日20:25:24 mx postfix / subject / smtpd [3464]:NOQUEUE:拒否:451 4.3.0 <[メール保護]>:一時的なルックアップの失敗。 proto =ESMTPAug 25 20:25:24 mx postfix / submit / smtpd [3464]:一時的なルックアップの失敗
MariaDB/MySQLデータベースが何らかの理由で停止した可能性があります。次のコマンドを使用して、データベースサーバーがいつ停止したかを確認できます。
sudo journalctl -eu mariadb
または
sudo journalctl -eu mysql
この状況の一般的な原因は、サーバーのメモリが不足していることです。サーバーに十分なメモリがあるかどうかを確認してください。
htop
または
無料-m
ジャンクフォルダとゴミ箱フォルダを自動的に削除する
すべてのユーザーの迷惑メールフォルダにあるメールを削除するには、次のコマンドを実行できます
sudo doveadmexpunge-メールボックスジャンクすべて
ごみ箱フォルダ内のメールを削除するには、
を実行しますsudo doveadmexpunge-メールボックスのゴミ箱をすべて
すべてのメールをクリーンアップするよりも、迷惑メールフォルダまたはゴミ箱フォルダに2週間以上保存されているメールをクリーンアップする方がよいと思います。
sudo doveadmexpunge-2wより前に保存されたメールボックスのジャンク
次に、cronジョブを追加して、ジョブを自動化します。
sudo crontab -e
次の行を追加して、迷惑メールフォルダを毎日クリーンアップします。
@daily doveadmexpunge-2wより前に保存されたメールボックスのジャンク;doveadmexpunge-2wより前に保存されたメールボックスのゴミ箱
Cronジョブでエラーが発生したときにレポートを受信するには、すべてのCronジョブの上に次の行を追加します。
MAILTO ="[email protected]"
ファイルを保存して閉じます。これで完了です。
PostfixAdminでユーザーパスワードを変更する
ユーザーは、https://postfixadmin.example.com/users/login.php
でPostfixAdminにログインできます。 、次にパスワードを変更します。
Sendmailへのアクセスを制限する
デフォルトでは、すべてのローカルユーザーがsendmail
を使用できます 送信メールを送信するためのバイナリ。メールサーバーが仮想メールボックスを使用しているので、sendmail
へのアクセスを制限することをお勧めします。 信頼できるローカルユーザーにのみバイナリを送信するため、悪意のあるユーザーがそれを使用して大量のメールを送信し、メールサーバーの評判を損なうことはありません。 Postfixのメイン設定ファイルを編集します。
sudo nano /etc/postfix/main.cf
このファイルの最後に次の行を追加して、rootおよびwww-dataユーザーのみがsendmail経由で電子メールを送信できるようにします。他のユーザー名を追加することもできます。
authorized_submit_users =root、www-data
ファイルを保存して閉じます。次に、Postfixを再起動します。
sudo systemctl restart postfix
次のステップ
このチュートリアルが、Ubuntu20.04にPostfixAdminをインストールして使用して仮想メールボックスを作成するのに役立つことを願っています。パート4では、Postfixを使用してSPFとDKIMを設定し、メールの配信可能性を向上させる方法を示します。今後のチュートリアルでは、PostfixAdminを使用して複数のドメインをホストする方法を示します。
Webブラウザーから電子メールにアクセスする場合は、非常に人気があり、機能が豊富なオープンソースのWebメールクライアントであるRoundcubeをお勧めします。いつものように、この投稿が役に立った場合は、無料のニュースレターを購読して、その他のヒントやコツを入手してください。気をつけて🙂