Postfix、Dovecot、MySQL、SpamAssassinを使用したメールサーバーの設定方法
メールサーバーの構築は、インターネット上で電子メールを送受信するための基本的なインフラを提供します。Postfixは高性能なメール送信サーバー、Dovecotはメールの受信と管理を担当するサーバー、MySQLはデータベース管理システムとして使用され、SpamAssassinは迷惑メールをフィルタリングするためのツールです。これらのツールを組み合わせて、信頼性の高いメールサーバーを構築する方法を解説します。
前提条件
- Ubuntu 20.04以降のサーバー
- root権限またはsudo権限があるユーザー
- インターネット接続
これから紹介する設定方法では、以下のソフトウェアを使用します。

- Postfix: メールの送信と転送を行うSMTPサーバー
- Dovecot: IMAPおよびPOP3のサーバー
- MySQL: ユーザー管理のためのデータベース
- SpamAssassin: 迷惑メールフィルター
1. 必要なパッケージのインストール
まず、必要なパッケージをインストールします。
bashsudo apt update sudo apt install postfix dovecot-core dovecot-imapd dovecot-lmtpd mysql-server spamassassin
これにより、Postfix、Dovecot、MySQL、SpamAssassinがインストールされます。
2. MySQLの設定
次に、MySQLを設定して、PostfixとDovecotがユーザー情報を取得できるようにします。まず、MySQLを起動し、必要なデータベースとテーブルを作成します。
bashsudo mysql
MySQLのプロンプトで以下を実行して、データベースとユーザー管理用のテーブルを作成します。
sqlCREATE DATABASE mailserver;
USE mailserver;
CREATE TABLE virtual_users (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(100) NOT NULL,
password VARCHAR(255) NOT NULL
);
CREATE TABLE virtual_domains (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
CREATE TABLE virtual_aliases (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
alias VARCHAR(100) NOT NULL,
destination VARCHAR(100) NOT NULL
);
次に、MySQLユーザーを作成し、適切な権限を付与します。
sqlGRANT ALL PRIVILEGES ON mailserver.* TO 'mailuser'@'localhost' IDENTIFIED BY 'yourpassword';
FLUSH PRIVILEGES;
EXIT;
これで、PostfixとDovecotはMySQLデータベースに接続できるようになります。
3. Postfixの設定
Postfixの設定ファイルを編集して、MySQLと統合します。
bashsudo nano /etc/postfix/main.cf
以下の設定を追加または変更します。
plaintextmyhostname = mail.example.com mydomain = example.com mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain mynetworks = 127.0.0.0/8 virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-domains.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailboxes.cf virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-aliases.cf
次に、MySQL接続の設定ファイルを作成します。例えば、/etc/postfix/mysql-virtual-domains.cf
ファイルを作成し、以下の内容を記述します。
plaintextuser = mailuser password = yourpassword hosts = 127.0.0.1 dbname = mailserver query = SELECT 1 FROM virtual_domains WHERE name='%s'
同様に、mysql-virtual-mailboxes.cf
とmysql-virtual-aliases.cf
も作成します。
これらの設定により、PostfixはMySQLデータベースからドメインとメールボックス情報を取得できるようになります。
4. Dovecotの設定
Dovecotは、メールボックスの管理とアクセスを提供します。Dovecotの設定ファイルを編集します。
bashsudo nano /etc/dovecot/dovecot.conf
以下の設定を追加または変更します。
plaintextmail_location = maildir:/var/mail/vhosts/%d/%n/Maildir userdb { driver = mysql connect = host=127.0.0.1 dbname=mailserver user=mailuser password=yourpassword default_fields = uid=5000 gid=5000 home=/var/mail/vhosts/%d/%n sql_query = SELECT CONCAT('/var/mail/vhosts/', domain, '/', user, '/Maildir') AS home, 5000 AS uid, 5000 AS gid FROM virtual_users WHERE email = '%u' } passdb { driver = mysql connect = host=127.0.0.1 dbname=mailserver user=mailuser password=yourpassword sql_query = SELECT password FROM virtual_users WHERE email = '%u' }
これにより、DovecotはMySQLデータベースからメールユーザーとパスワード情報を取得できるようになります。
5. SpamAssassinの設定
SpamAssassinは迷惑メールをフィルタリングするためのツールです。インストール後、SpamAssassinを有効化し、PostfixとDovecotで使用できるように設定します。
bashsudo nano /etc/spamassassin/local.cf
以下の設定を追加します。
plaintextrequired_score 5 report_safe 0 rewrite_header Subject [SPAM]
SpamAssassinをサービスとして有効にし、起動します。
bashsudo systemctl enable spamassassin
sudo systemctl start spamassassin
次に、PostfixとDovecotの設定でSpamAssassinを連携させます。Postfixにspamassassin
を組み込むためには、postgrey
などのツールを使用することをお勧めしますが、ここでは基本的な構成方法に留めておきます。
6. メールサーバーの起動と確認
すべての設定が完了したら、PostfixとDovecotを再起動します。
bashsudo systemctl restart postfix sudo systemctl restart dovecot
サーバーの状態を確認するために、メールの送受信をテストします。テストメールを送信して、適切に受信されることを確認してください。
受信メールが正しく届くことを確認し、迷惑メールがフィルタリングされていることを確認します。
7. まとめ
この記事では、Postfix、Dovecot、MySQL、SpamAssassinを使用して、信頼性の高いメールサーバーを構築する方法を紹介しました。これらのツールを組み合わせることで、セキュアで効率的なメールの送受信環境を提供できます。各ツールの設定を適切に行い、必要に応じて追加のセキュリティ対策を講じることが重要です。
メールサーバーを構築する際には、常に最新のセキュリティパッチを適用し、サーバーの監視を行うことをお勧めします。