はじめに
On Ubuntu 20.04において、Postfix, Dovecot, MySQL、およびSpamAssassin のようなツールを使用してメールサーバーを構成できます。初めてこれを行う人にとって、このプロセスは混乱を招く可能性があります。このチュートリアルでは、詳細な手順を追ってメールサーバーの構成プロセスを簡素化することを目的としています。このチュートリアルの最後には、仮想ドメイン、ユーザー、およびエイリアスを追加する方法を理解できるようになります。最終的には、仮想サーバーをスパムハブからより安全に保護できるようになります。
前提条件
メールサーバーの構成を開始する前に、いくつかの前提条件を処理する必要があります。まず、仮想プライベートサーバーに、サーバーに転送されているドメインがあることを確認してください。また、MySQLのインストールと構成を行う必要があります。さらに、root権限が付与されたユーザーと、SSL証明書のインストールが必要です。最後に、FQDN が構成され、識別されていることを確認してください。
rootユーザーとしてパッケージをインストールすると、すべての権限が付与されます。そのため、以下の方法をお勧めします。
|
1 |
sudo -i |
ユーザーのパスワードを入力します。この時点で、$ 記号が # に変わるのがわかります。次に、構成のさまざまな側面を1つずつ見ていきましょう。
ステップ1:パッケージのインストール
まず、パッケージのインストール方法を学びます。
|
1 |
apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql |
Postfixの構成画面が表示されたら、Internet Site:

を選択します。次に、System mail 名について尋ねられます。ここでは、 FQDN またはメインドメインを使用できます。

ステップ2:MySQLデータベース、仮想ドメイン、ユーザー、およびエイリアスの作成
次に、すべてのパッケージがインストールされたら、構成に進みます。ここでの目標は、3つのテーブルを構成することです。1つはドメイン用、1つはユーザー用、もう1つはエイリアス用です。これらは、作成するMySQLデータベースに格納されます。
ここでは、データベースの名前を「servermail」にすると仮定します。お好みの名前を自由に使用してください。作成方法は以下の通りです。
|
1 |
mysqladmin -p create servermail |
MySQLのrootユーザーとしてログインする必要があります。
|
1 |
mysql -u root -p |
その後、パスワードを入力します。ログインに成功すると、結果として以下のように表示されます。
|
1 |
mysql > |
次に、特にメール認証用の新しいユーザーを作成します。以下のように SELECT 権限を付与します。
|
1 |
mysql > GRANT SELECT ON servermail.* TO 'usermail'@'127.0.0.1' IDENTIFIED BY 'mailpassword'; |
その後、MySQLの権限をリロードして、権限を正常に適用します。
|
1 |
mysql > FLUSH PRIVILEGES; |
次に、データベースを使用してテーブルを作成し、データを入力します。
|
1 |
mysql> USE servermail; |
承認されたドメインとして認識される特定のドメイン用に、個別のテーブルを作成します。
|
1 2 3 4 5 |
CREATE TABLE `virtual_domains` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
ここでの目標は、ユーザーをテーブルに登録することです。そのため、関連するメールアドレスとパスワードを追加します。各ユーザーをドメインに関連付ける必要があることに注意してください。
|
1 2 3 4 5 6 7 8 9 |
CREATE TABLE `virtual_users` ( `id` INT NOT NULL AUTO_INCREMENT, `domain_id` INT NOT NULL, `password` VARCHAR(106) NOT NULL, `email` VARCHAR(120) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
次に、他のメールアドレスに転送するすべてのメールを指定するために、すべてのバーチャルエイリアスのテーブルを作成します。
|
1 2 3 4 5 6 7 8 |
CREATE TABLE `virtual_aliases` ( `id` INT NOT NULL AUTO_INCREMENT, `domain_id` INT NOT NULL, `source` varchar(100) NOT NULL, `destination` varchar(100) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
このプロセスの最後には、3つのテーブルが正常に作成されています。次に、データを導入する必要があります。
-
バーチャルドメイン
このセクションでは、
virtual_domains テーブル内にドメインを導入する方法を学びます。具体的には、プライマリドメイン(example.com)およびFQDN (hostname.example.com):
|
1 2 3 4 5 |
INSERT INTO `servermail`.`virtual_domains` (`id` ,`name`) VALUES ('1', 'example.com'), ('2', 'hostname.example.com'); |
-
バーチャルメール
次に、各ドメインのメールアドレスと関連するパスワードを入力します。すべての情報が、お客様固有の情報に変更されていることを確認してください:
|
1 2 3 4 5 |
INSERT INTO `servermail`.`virtual_users` (`id`, `domain_id`, `password` , `email`) VALUES ('1', '1', ENCRYPT('firstpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email1@example.com'), ('2', '1', ENCRYPT('secondpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email2@example.com'); |
-
バーチャルエイリアス
これで、もう一方のメールアドレスの転送先となるメールアドレスを導入できます。前者が転送元(source)で、後者が転送先(destination)です:
|
1 2 3 4 |
INSERT INTO `servermail`.`virtual_aliases` (`id`, `domain_id`, `source`, `destination`) VALUES ('1', '1', 'alias@example.com', 'email1@example.com'); |
その後、MySQLを終了できます:
|
1 |
mysql > exit |
ステップ 3: Postfixの設定
PostfixがSMTP接続を管理できるように設定することが重要です。また、MySQLデータベースに入力されたすべてのユーザーにメッセージを送信できる必要があります。まずは、デフォルトファイルのコピーを作成することから始めましょう。これにより、必要に応じてデフォルトの設定に簡単に戻すことができます:
|
1 |
cp /etc/postfix/main.cf /etc/postfix/main.cf.orig |
次に、main.cf ファイルを開いて変更します:
|
1 |
nano /etc/postfix/main.cf |
まずTLSパラメータをコメントアウトし、その後に他のパラメータを追加します。この例では、無料のSSL証明書を使用しています。もちろん、要件に応じて設定を変更できます:
|
1 2 3 4 5 6 7 8 9 10 11 |
# TLS parameters #smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem #smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key #smtpd_use_tls=yes #smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache #smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtpd_tls_cert_file=/etc/ssl/certs/dovecot.pem smtpd_tls_key_file=/etc/ssl/private/dovecot.pem smtpd_use_tls=yes smtpd_tls_auth_only = yes |
次に、これらのパラメータをTLS設定の下に追加します:
|
1 2 3 4 5 6 7 |
smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination |
その後、 mydestination のデフォルト設定をコメントアウトする必要があります。その後、これを localhostに置き換えます。この変更により、VPSはMySQLテーブル内のバーチャルドメインを使用できるようになります:
|
1 2 |
#mydestination = example.com, hostname.example.com, localhost.example.com, localhost mydestination = localhost |
次に、このコマンドを使用して、myhostname パラメータがFQDNに設定されていることを確認します:
|
1 |
myhostname = hostname.example.com |
さらに、テーブルにリストされているすべてのバーチャルドメインへのローカルメール配信を有効にするために、次の行を追加します:
|
1 |
virtual_transport = lmtp:unix:private/dovecot-lmtp |
最後に、Postfixにバーチャルドメイン、ユーザー、およびエイリアスを設定するように指示するために、次のパラメータを追加します:
|
1 2 3 |
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf |
エラーがないことを確認するために、これらの変更を次のファイルと比較してください:
https://www.dropbox.com/s/x9fpm9v1dr86gkw/etc-postfix-main.cf.txt
これらすべてを確認したら、 main.cf ファイルに追加するための3つのファイルを作成します。ここでの目的は、PostfixにMySQLとの接続方法を指示することです。これを行うには、まず mysql-virtual-mailbox-domains.cf ファイル。もちろん、ファイル内は個人の設定に応じて変更してください:
|
1 |
nano /etc/postfix/mysql-virtual-mailbox-domains.cf |
|
1 2 3 4 5 |
user = usermail password = mailpassword hosts = 127.0.0.1 dbname = servermail query = SELECT 1 FROM virtual_domains WHERE name='%s' |
次に、Postfixを再起動します:
|
1 |
service postfix restart |
Postfixがドメインを検出できることを確認する必要があります。これをテストするには、次のコマンドを使用します:
|
1 |
postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf |
コマンドが成功すると1が返されます。この場合、次の mysql-virtual-mailbox-maps.cf ファイル:
|
1 |
nano /etc/postfix/mysql-virtual-mailbox-maps.cf |
|
1 2 3 4 5 |
user = usermail password = mailpassword hosts = 127.0.0.1 dbname = servermail query = SELECT 1 FROM virtual_users WHERE email='%s' |
もう一度Postfixを再起動します:
|
1 |
service postfix restart |
再度、Postfixが最初のメールアドレスを検出できることを確認します。これをテストするには、次のコマンドを使用します:
|
1 |
postmap -q email1@example.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf |
成功すると、戻り値として1が出力されます。そのため、最後のファイルの作成に進みます:
|
1 |
nano /etc/postfix/mysql-virtual-alias-maps.cf |
|
1 2 3 4 5 |
user = usermail password = mailpassword hosts = 127.0.0.1 dbname = servermail query = SELECT destination FROM virtual_aliases WHERE source='%s' |
これでPostfixとMySQLの設定は完了です。適用するにはPostfixを再起動してください:
|
1 |
service postfix restart |
Postfixが実際にエイリアスを検出しているか確認するには、次のコマンドを使用します:
|
1 |
postmap -q alias@example.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf |
出力として、エイリアスに転送されたメールを受信するのが理想的です。また、次のように /etc/postfix/master.cf ファイルをこのように変更して、ポート 587 にメールクライアントと安全に接続することもできます:
|
1 |
nano /etc/postfix/master.cf |
特定の行のコメントアウトを解除し、パラメータを追加する方法は次のとおりです:
|
1 2 3 4 5 |
submission inet n - - - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject |
ポートが開いていることを確認するために、Postfixの再起動が必要になる場合があります:
|
1 |
service postfix restart |
このツールはドメインポートのスキャンにも使用できます。これを使用して、ポート 25 および 587 が開いていることを確認できます。
ステップ 4: Dovecotの設定
次に、Dovecotを設定します。このセクションでは、変更する7つのファイルをコピーする必要があります。これは、必要に応じて元に戻せるようにするためです。次のコマンドを1つずつ入力してください:
|
1 2 3 4 5 6 |
cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.orig |
Dovecotの設定ファイルを編集する必要があります:
|
1 |
nano /etc/dovecot/dovecot.conf |
次のオプションのコメントアウトが解除されていることを確認してください:
|
1 |
!include conf.d/*.conf |
次に、
!include_try /usr/share/dovecot/protocols.d/*.protocol 行の下でプロトコルを有効にします。必要に応じて、以下を追加することもできます:pop3:
|
1 2 |
!include_try /usr/share/dovecot/protocols.d/*.protocol protocols = imap lmtp |
間違いがないか確認するために、このファイルと比較してください:
https://www.dropbox.com/s/wmbe3bwy0vcficj/etc-dovecot-dovecot.conf.txt
次に、メール設定ファイルを編集します:
|
1 |
nano /etc/dovecot/conf.d/10-mail.conf |
次の行を探します: mail_location 。コメントアウトを解除し、次のパラメータを追加する必要があります:
|
1 |
mail_location = maildir:/var/mail/vhosts/%d/%n |
その後、次の行を探します: mail_privileged_group 。同様に、コメントアウトを解除してmailパラメータを追加します:
|
1 |
mail_privileged_group = mail |
エラーの可能性をなくすために、このファイルと比較してください:
https://www.dropbox.com/s/hnfeieuy77m5b0a/etc.dovecot.conf.d-10-mail.conf.txt
-
パーミッションの確認
パーミッションを確認するには、次のコマンドを使用します:
|
1 |
ls -ld /var/mail |
パーミッションが以下のように表示されていることを確認してください:
|
1 |
drwxrwsr-x 3 root vmail 4096 Jan 24 21:23 /var/mail |
ドメインごとにフォルダを作成できます。これらのフォルダはすべてMySQLテーブルに登録されます:
|
1 |
mkdir -p /var/mail/vhosts/example.com |
次のIDを使用してvmailユーザーとグループを作成します:5000:
|
1 2 |
groupadd -g 5000 vmail useradd -g vmail -u 5000 vmail -d /var/mail |
次に、以下の所有者を変更する必要があります: /var/mail フォルダの所有者をvmailユーザーに変更します:
|
1 |
chown -R vmail:vmail /var/mail |
次に、以下を編集します: /etc/dovecot/conf.d/10-auth.conf ファイル:
|
1 |
nano /etc/dovecot/conf.d/10-auth.conf |
プレインテキスト認証のコメントアウトを解除した後、次の行を追加します:
|
1 |
disable_plaintext_auth = yes |
これを使用して、以下を変更します: auth_mechanisms パラメータ:
|
1 |
auth_mechanisms = plain login |
次に、この行をコメントアウトします:
|
1 |
#!include auth-system.conf.ext |
MySQL認証を有効にするには、次の行のコメントアウトを解除する必要があります:
|
1 |
!include auth-sql.conf.ext |
間違いを検出して編集するには、次のファイルを使用します:
https://www.dropbox.com/s/4h472nqrj700pqk/etc.dovecot.conf.d.10-auth.conf.txt
以下を作成すると、 /etc/dovecot/dovecot-sql.conf.ext ファイルに情報を設定することで、認証が可能になります:
|
1 |
nano /etc/dovecot/conf.d/auth-sql.conf.ext |
ファイルに次のコードを入力します:
|
1 2 3 4 5 6 7 8 9 |
passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } userdb { driver = static args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n } |
カスタムMySQL情報を使用して、以下を変更します: /etc/dovecot/dovecot-sql.conf.ext ファイル:
|
1 |
nano /etc/dovecot/dovecot-sql.conf.ext |
このようにdriverパラメータのコメントアウトを解除した後、パラメータとしてMySQLを設定します:
|
1 |
driver = mysql |
次のコメントアウトを解除することで、MySQL固有の情報を導入できます:connect 行:
|
1 |
connect = host=127.0.0.1 dbname=servermail user=usermail password=mailpassword |
次に、以下のコメントアウトを解除し、 default_pass_scheme 行を以下に変更する必要があります: SHA-512:
|
1 |
default_pass_scheme = SHA512-CRYPT |
以下のコメントアウトを解除した後、次の情報を追加します: password_query:
|
1 |
password_query = SELECT email as user, password FROM virtual_users WHERE email='%u'; |
エラーを検出するには、このファイルを使用して比較します:
https://www.dropbox.com/s/48a5r0mtgdz25cz/etc.dovecot.dovecot-sql.conf.ext.txt
次に、dovecotフォルダの所有者とグループをvmailユーザーに変更できます:
|
1 2 |
chown -R vmail:dovecot /etc/dovecot chmod -R o-rwx /etc/dovecot |
次のステップは、以下を変更することです: /etc/dovecot/conf.d/10-master.conf ファイル。ここでは異なるパラメータが変更されるため、細心の注意を払う必要があります:
|
1 |
nano /etc/dovecot/conf.d/10-master.conf |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
##inet_listener_imapのコメントアウトを解除し、ポート0に変更します service imap-login { inet_listener imap { port = 0 } #LMTPソケットとこの設定を作成します service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 user = postfix group = postfix } #inet_listener lmtp { # LMTPがインターネット全体に公開されるのを防ぎます #address = #port = #} } |
次のコードを使用して、以下を変更します: unix_listener パラメータを以下に変更します: service_auth:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
service auth { unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } unix_listener auth-userdb { mode = 0600 user = vmail #group = } #unix_listener /var/spool/postfix/private/auth { # mode = 0666 #} user = dovecot } |
次に、以下を編集する必要があります: service auth-ワーカー 次のようにします:
|
1 2 3 4 5 6 |
サービス 認証-ワーカー { # 認証ワーカープロセスはデフォルトでrootとして実行され、アクセスできるようになります # /etc/shadow。これが不要な場合は、ユーザーを以下に変更する必要があります # $default_internal_user。 ユーザー = vmail } |
このファイルと比較してエラーを検出します:
https://www.dropbox.com/s/g0vnt233obh6v2h/etc.dovecot.conf.d.10-master.conf.txt
次のステップでは、DovecotのSSL設定ファイルを変更します。デフォルトの設定を使用する場合は、このステップをスキップして次のセクションに進むことができます。
|
1 |
# nano /etc/dovecot/conf.d/10-ssl.conf |
次に、 ssl パラメータを次のように required に変更します:
|
1 |
ssl = required |
また、次の両方のパスも変更します。 ssl_cert および ssl_key:
|
1 2 |
ssl_cert = </etc/ssl/certs/dovecot.pem ssl_key = </etc/ssl/private/dovecot.pem |
Dovecotを再起動します:
|
1 |
service dovecot restart |
ポート 993 が開いていることを確認してください。もし pop3 を有効にしている場合は、ポート 995:
|
1 |
telnet example.com 993 |
ここまでの手順が完了していれば、おめでとうございます!メールサーバーの設定は無事に成功しました。すべての手順が正しく行われたか確認するために、次のようにメールクライアントを使用してアカウントをテストできます。
|
1 2 3 4 |
- ユーザー名: email1@example.com - パスワード: email1'の パスワード - IMAP: example.com - SMTP: example.com |
ポート 993 はセキュアIMAPに使用され、ポート 587 / ポート 25 はSMTPに使用されます。
ステップ 5: SpamAssassinの設定
いよいよチュートリアルの最後のセクションに到達しました。ここではSpamAssassinを設定します。まず、SpamAssassinのインストールから始めます:
|
1 |
apt-get install spamassassin spamc |
次のようにSpamAssassin用のユーザーを作成します:
|
1 |
adduser spamd --disabled-login |
SpamAssassinを設定できるようにするには、設定ファイルを開いて変更する必要があります:
|
1 |
nano /etc/default/spamassassin |
ここまで来たら、 ENABLED パラメータを変更してSpamAssassinデーモンを有効にする必要があります:
|
1 |
ENABLED=1 |
次のコードを使用して、homeおよびoptionsパラメータを変更します:
|
1 2 |
SPAMD_HOME="/home/spamd/" OPTIONS="--create-prefs --max-children 5 --username spamd --helper-home-dir ${SPAMD_HOME} -s ${SPAMD_HOME}spamd.log" |
この行を使用して PID_File パラメータを指定します:
|
1 |
PIDFILE="${SPAMD_HOME}spamd.pid" |
次に、このコマンドを使用して、SpamAssassinのルールが自動的に更新されるように指定します:
|
1 |
CRON=1 |
次のドキュメントと比較して、間違いがないか確認してください:
https://www.dropbox.com/s/ndvpgc2jipdd4bk/etc.default.spamassassin.txt
スパム対策ルールを設定したい場合は、もう一度 /etc/spamassassin/local.cf ファイルを開く必要があります:
|
1 |
nano /etc/spamassassin/local.cf |
SpamAssassinの仕組みは、ユーザーが受信したすべてのメールにスコアを付けるというものです。メールのスコアを評価し、スパムチェックで5.0を超えている場合、そのメールはスパムとしてマークされます。これらのスパム対策ルールを設定するために使用できるパラメータは次のとおりです。
|
1 2 3 4 5 6 7 8 9 10 |
rewrite_header Subject ***** SPAM _SCORE_ ***** report_safe 0 required_score 5.0 use_bayes 1 use_bayes_rules 1 bayes_auto_learn 1 skip_rbl_checks 0 use_razor2 0 use_dcc 0 use_pyzor 0 |
スパム対策ルールを設定したら、各メールをSpamAssassinでチェックするようにPostfixに指示する必要があります。そのためには、以下を修正する必要があります: /etc/postfix/master.cf ファイル:
|
1 |
nano /etc/postfix/master.cf |
次の行を見つけて、以下を追加します: spamassassin フィルター:
|
1 2 |
smtp inet n - - - - smtpd -o content_filter=spamassassin |
これで、次のパラメータを追加できます:
|
1 2 3 |
spamassassin unix - n n - - pipe user=spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient} |
最後に、SpamAssassinを起動し、Postfixを再起動して変更を適用します。再起動すると、Postfixはメールからのスパムの検証を開始します:
|
1 2 |
service spamassassin start service postfix restart |
以上です!PostfixとDovecotを使用したメールサーバーの設定が正常に完了しました。また、MySQL認証を実行し、SpamAssassinを使用したスパムフィルタリングも設定しました。
まとめ
このチュートリアルでは、前述のツールを使用してメールサーバーの設定を行うために必要な手順を説明しました。これは、ご自身でメールサーバーをセットアップするための包括的なガイドとして活用できます。興味のある方は、GoogleのSMTPサーバー機能を利用する方法について、こちらのチュートリアルをご覧ください。.
快適なコンピューティングを!
コメント
コメントはまだありません。最初のコメントを投稿しましょう。