メールサーバー · 3 min read · Jan 26, 2026
Postfix、Courier、MySQL、SquirrelMailを使用した仮想ユーザーとドメイン (Ubuntu 14.04LTS)
このチュートリアルは、Falko Timme & Srijan Kishoreによる著作権(c) 2014です。これは、http://workaround.orgで見つけることができるChristoph Haasのチュートリアルに基づいています。このチュートリアルは、クリエイティブ・コモンズライセンス2.5またはそれ以降のバージョンの下で自由に使用できます。
この文書では、仮想ユーザーとドメインに基づくPostfixメールサーバーのインストール方法を説明します。つまり、MySQLデータベースにあるユーザーとドメインです。また、Courier(Courier-POP3、Courier-IMAP)のインストールと設定も示しますので、CourierはPostfixが使用するのと同じMySQLデータベースに対して認証できます。
結果として得られるPostfixサーバーは、SMTP-AUTH、TLS、およびクォータに対応しています(クォータはデフォルトではPostfixに組み込まれていませんので、適切にPostfixをパッチする方法を示します)。パスワードはデータベースに暗号化された形式で保存されます(私が見つけたほとんどの文書は、セキュリティリスクであるプレーンテキストパスワードを扱っていました)。さらに、このチュートリアルでは、スパムとウイルスのスキャンを行うために、Amavisd、SpamAssassin、およびClamAVのインストールもカバーします。また、ユーザーがメールを読み書きし、パスワードを変更できるようにするために、SquirrelMailをWebメールインターフェースとしてインストールする方法も示します。
このような「仮想」セットアップ(MySQLデータベース内の仮想ユーザーとドメイン)の利点は、「実際の」システムユーザーに基づくセットアップよりもはるかにパフォーマンスが高いことです。この仮想セットアップを使用すると、メールサーバーは数千のドメインとユーザーを処理できます。さらに、新しいユーザー/ドメインを追加したり、既存のものを編集したりする際にMySQLデータベースだけを扱えばよいため、管理が容易です。dbファイルを作成するためのpostmapコマンドや、Postfixの再読み込みは不要です。MySQLデータベースの管理には、phpMyAdminのようなWebベースのツールを使用できます。このhowtoでもインストールされます。3つ目の利点は、ユーザーがユーザー名としてメールアドレスを持つことができるため(ユーザー名+メールアドレスではなく)、理解しやすく、記憶しやすいことです。
このhowtoは実用的なガイドとして意図されています。理論的な背景については、Web上の他の多くの文書で扱われています。
この文書には、いかなる種類の保証もありません!このシステムを設定する唯一の方法ではないことをお伝えしたいと思います。この目標を達成する方法はたくさんありますが、これが私の取る方法です。これがあなたにとって機能するという保証はありません!
1 前書き
このチュートリアルはUbuntu 14.04 Server(Trusty Tahr)に基づいているため、このチュートリアルを続ける前に基本的なUbuntu 14.04サーバーのインストールを設定する必要があります。システムには静的IPアドレスが必要です。このチュートリアルでは、192.168.0.100をIPアドレスとして、server1.example.comをホスト名として使用します。
rootとしてログインしていることを確認してください(rootになるには
sudo su
と入力します)。このチュートリアルのすべてのステップをrootユーザーとして実行する必要があります。
/bin/shを/bin/bashへのシンボリックリンクにすることが非常に重要です…
dpkg-reconfigure dash
デフォルトのシステムシェルとしてdashを使用しますか? <– いいえ
… そして、AppArmorを無効にする必要があります。もし、apparmor: unrecognized serviceというメッセージが表示された場合は、update-rc.dから削除してください。
service apparmor stop
update-rc.d -f apparmor remove
apt-get remove apparmor apparmor-utils
2 Postfix、Courier、Saslauthd、MySQL、phpMyAdminのインストール
Postfix、Courier、Saslauthd、MySQL、およびphpMyAdminをインストールするには、単に次のコマンドを実行します。
apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql libpam-smbpass
いくつかの質問が表示されます。
MySQL「root」ユーザーの新しいパスワード: <– yourrootsqlpassword
MySQL「root」ユーザーのパスワードを再入力してください: <– yourrootsqlpassword
Webベースの管理用のディレクトリを作成しますか? <– いいえ
メール構成の一般的なタイプ: <– インターネットサイト
システムメール名: <– server1.example.com
SSL証明書が必要ですか? <– はい
自動的に再構成するWebサーバー: <– apache2
phpmyadminのデータベースをdbconfig-commonで構成しますか? <– いいえ
3 Postfixにクォータパッチを適用する
Postfixのソースを取得し、クォータパッチでパッチを当て、新しいPostfix.debパッケージをビルドしてインストールする必要があります。
apt-get build-dep postfix
時々、次のようなエラーが表示されることがあります:
root@server1:~# apt-get build-dep postfix
パッケージリストを読み込んでいます… 完了
依存関係ツリーを構築しています
状態情報を読み込んでいます… 完了
E: sources.listに’source’ URIをいくつか追加する必要があります
root@server1:~#
次のように修正できます。ソースリポジトリを追加します。
vi /etc/apt/sources.list
私のケースでは、次のようにエントリを作成します。
deb http://archive.ubuntu.com/ubuntu trusty main restricted universe
deb http://archive.ubuntu.com/ubuntu trusty-updates main restricted universe
deb http://security.ubuntu.com/ubuntu trusty-security main restricted universe multiverse
deb http://archive.canonical.com/ubuntu trusty partner
deb-src http://archive.ubuntu.com/ubuntu trusty main restricted universe
deb-src http://archive.ubuntu.com/ubuntu trusty-updates main restricted universe
deb-src http://security.ubuntu.com/ubuntu trusty-security main restricted universe multiverse
deb-src http://archive.canonical.com/ubuntu trusty partner
次に、
apt-get update
apt-get build-dep postfix
cd /usr/src
apt-get source postfix
(次のコマンドで正しいPostfixバージョンを使用していることを確認してください。私はPostfix 2.11.0をインストールしています。次のコマンドを実行して、Postfixのバージョンを確認できます。
postconf -d | grep mail_version
出力は次のようになります:
root@server1:/usr/src# postconf -d | grep mail_version
mail_version = 2.11.0
milter_macro_v = $mail_name $mail_version
root@server1:/usr/src#
wget http://vda.sourceforge.net/VDA/postfix-vda-v13-2.10.0.patch
cd postfix-2.11.0
patch -p1 < ../postfix-vda-v13-2.10.0.patch
次に、debian/rulesを開き、DEB_BUILD_HARDENINGを1から0に変更します。
vi debian/rules
| [...] export DEB_BUILD_HARDENING=0 [...] |
これを行わないと、次のエラーメッセージでビルドが失敗します:
maildir.c: In function ‘deliver_maildir’:
maildir.c:974:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:977:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:983:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:986:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c: In function ‘sql2file’:
maildir.c:404:25: warning: ignoring return value of ‘read’, declared with attribute warn_unused_result [-Wunused-result]
maildir.c:417:26: warning: ignoring return value of ‘write’, declared with attribute warn_unused_result [-Wunused-result]
cc1: some warnings being treated as errors
make: [maildir.o] Error 1
make: Leaving directory `/usr/src/postfix-2.11.0/src/virtual’
make[1]: [update] Error 1
make[1]: Leaving directory `/usr/src/postfix-2.11.0’
make: * [build] Error 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2
root@server1:/usr/src/postfix-2.11.0#
これで新しいPostfix.debパッケージをビルドできます。
dpkg-buildpackage
次に、1つ上のディレクトリに移動します。ここに新しい.debパッケージが作成されました。
cd ..
コマンド
ls -l
は、利用可能なパッケージを表示します:
root@server1:/usr/src# ls -l
total 6824
drwxr-xr-x 18 root root 4096 Apr 30 04:28 postfix-2.11.0
-rw-r–r– 1 root root 46756 Apr 30 04:28 postfix-cdb_2.11.0-1_amd64.deb
-rw-r–r– 1 root root 142842 Apr 30 04:28 postfix-dev_2.11.0-1_all.deb
-rw-r–r– 1 root root 851842 Apr 30 04:28 postfix-doc_2.11.0-1_all.deb
-rw-r–r– 1 root root 53898 Apr 30 04:28 postfix-ldap_2.11.0-1_amd64.deb
-rw-r–r– 1 root root 48500 Apr 30 04:28 postfix-mysql_2.11.0-1_amd64.deb
-rw-r–r– 1 root root 48610 Apr 30 04:28 postfix-pcre_2.11.0-1_amd64.deb
-rw-r–r– 1 root root 48324 Apr 30 04:28 postfix-pgsql_2.11.0-1_amd64.deb
-rw-r–r– 1 root root 55701 Jun 7 2013 postfix-vda-v13-2.10.0.patch
-rw-r–r– 1 root root 267855 Apr 30 04:27 postfix_2.11.0-1.diff.gz
-rw-r–r– 1 root root 1522 Apr 30 04:27 postfix_2.11.0-1.dsc
-rw-r–r– 1 root root 3885 Apr 30 04:28 postfix_2.11.0-1_amd64.changes
-rw-r–r– 1 root root 1329238 Apr 30 04:28 postfix_2.11.0-1_amd64.deb
-rw-r–r– 1 root root 4034741 Feb 12 01:38 postfix_2.11.0.orig.tar.gz
root@server1:/usr/src#
postfixとpostfix-mysqlパッケージを選択し、次のようにインストールします。
dpkg -i postfix_2.11.0-1_amd64.deb postfix-mysql_2.11.0-1_amd64.deb
4 Postfix/Courier用のMySQLデータベースを作成する
次に、mailという名前のデータベースを作成します。
mysqladmin -u root -p create mail
この質問が表示されます。
パスワードを入力してください: <– yourrootsqlpassword
次に、MySQLシェルに移動します。
mysql -u root -p
MySQLシェルで、mailデータベースに対してSELECT、INSERT、UPDATE、DELETE権限を持つユーザーmail_adminを作成します(自分のパスワードに置き換えてください)。このユーザーはPostfixとCourierがmailデータベースに接続するために使用されます。
GRANT SELECT, INSERT, UPDATE, DELETE ON mail. TO ‘mail_admin’@’localhost’ IDENTIFIED BY ‘mail_admin_password’;
GRANT SELECT, INSERT, UPDATE, DELETE ON mail. TO ‘mail_admin’@’localhost.localdomain’ IDENTIFIED BY ‘mail_admin_password’;
FLUSH PRIVILEGES;
MySQLシェルのままで、PostfixとCourierに必要なテーブルを作成します。
USE mail;
CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
ENGINE=MyISAM;
CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
ENGINE=MyISAM;
CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT ‘10485760’,
PRIMARY KEY (email)
) ENGINE=MyISAM;
CREATE TABLE transport (
domain varchar(128) NOT NULL default ‘’,
transport varchar(128) NOT NULL default ‘’,
UNIQUE KEY domain (domain)
) ENGINE=MyISAM;
quit;
ご覧のとおり、quit;コマンドでMySQLシェルを終了し、Linuxシェルに戻りました。
domainsテーブルは、Postfixがメールを受信する各仮想ドメインを保存します(例:example.com)。
| domain |
| example.com |
forwardingsテーブルは、1つのメールアドレスを別のメールアドレスにエイリアスするためのものです。たとえば、[email protected]から[email protected]へのメールを転送します。
| source | destination |
| [email protected] | [email protected] |
usersテーブルは、すべての仮想ユーザー(すなわち、メールアドレス、メールアドレスとユーザー名が同じ)とパスワード(暗号化された形式!)および各メールボックスのクォータ値を保存します(この例では、デフォルト値は10485760バイト、つまり10MBです)。
| password | quota | |
| [email protected] | No9.E4skNvGa.(暗号化された「秘密」) | 10485760 |
transportテーブルはオプションで、上級ユーザー向けです。特定のユーザー、全ドメイン、またはすべてのメールを別のサーバーに転送することを可能にします。たとえば、
| domain | transport |
| example.com | smtp:[1.2.3.4] |
は、example.comのすべてのメールをsmtpプロトコルを介してIPアドレス1.2.3.4のサーバーに転送します(角括弧[]は「MX DNSレコードのルックアップを行わない」という意味です(IPアドレスの場合は理にかなっています…)。完全修飾ドメイン名(FQDN)を使用する場合は、角括弧を使用しません)。
ちなみに、(あなたのメールサーバーシステムのIPアドレスが192.168.0.100であると仮定しています)ブラウザでhttp://192.168.0.100/phpmyadmin/にアクセスし、mail_adminとしてログインできます。次に、データベースを確認できます。後でphpMyAdminを使用してメールサーバーを管理できます。
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。