Postfix設定 · 3 min read · Oct 07, 2025

Postfix、Courier、MySQLを使用した仮想ユーザーとドメイン (Debian Etch) - ページ 2

4 Postfix/Courier用のMySQLデータベースを作成する

デフォルトでは、MySQLはrootパスワードなしでインストールされるため、すぐに変更します(yourrootsqlpasswordを使用したいパスワードに置き換えてください):

mysqladmin -u root password yourrootsqlpassword

次に、mailという名前のデータベースを作成します:

mysqladmin -u root -p create mail

次に、MySQLシェルに移動します:

mysql -u root -p

MySQLシェルで、mailデータベースに対してSELECT、INSERT、UPDATE、DELETE権限を持つユーザーmail_adminを作成します(自分のパスワードに置き換えてください)。このユーザーはPostfixとCourierがメールデータベースに接続するために使用されます:

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) )  
 TYPE=MyISAM;
CREATE TABLE forwardings (  
 source varchar(80) NOT NULL,  
 destination TEXT NOT NULL,  
 PRIMARY KEY (source) )  
 TYPE=MyISAM;
CREATE TABLE users (  
 email varchar(80) NOT NULL,  
 password varchar(20) NOT NULL,  
 quota INT(10) DEFAULT '10485760',  
 PRIMARY KEY (email)  
 ) TYPE=MyISAM;
CREATE TABLE transport (  
 domain varchar(128) NOT NULL default '',  
 transport varchar(128) NOT NULL default '',  
 UNIQUE KEY domain (domain)  
 ) TYPE=MyISAM;
quit;

お気づきかもしれませんが、quit;コマンドでMySQLシェルを終了し、Linuxシェルに戻りました。

domainsテーブルは、Postfixがメールを受信する各仮想ドメインを保存します(例:example.com)。

domain
example.com

forwardingsテーブルは、あるメールアドレスを別のメールアドレスにエイリアスするためのものです。たとえば、[email protected]から[email protected]へのメールを転送します。

sourcedestination
[email protected][email protected]

usersテーブルは、すべての仮想ユーザー(すなわちメールアドレス、メールアドレスとユーザー名は同じです)とパスワード(暗号化された形式!)および各メールボックスのクォータ値を保存します(この例ではデフォルト値は10485760バイト、つまり10MBです)。

emailpasswordquota
[email protected]No9.E4skNvGa. (暗号化された形式の「秘密」)10485760

transportテーブルはオプションで、上級ユーザー向けです。特定のユーザー、全ドメイン、またはすべてのメールを別のサーバーに転送することを可能にします。たとえば、

domaintransport
example.comsmtp:[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を使用してメールサーバーを管理できます。

5 Postfixを設定する

次に、Postfixにデータベース内のすべての情報を見つける場所を教える必要があります。したがって、6つのテキストファイルを作成する必要があります。Postfixにlocalhostの代わりにIPアドレス127.0.0.1に接続するように指示していることに気付くでしょう。これは、Postfixがchrootジャイル内で実行されており、localhostを使用するように指示した場合に接続しようとするMySQLソケットにアクセスできないためです。127.0.0.1を使用すると、PostfixはTCPネットワーキングを使用してMySQLに接続します。これはchrootジャイル内でも問題ありません(代替手段はMySQLソケットをchrootジャイルに移動することですが、他の問題を引き起こします)。

/etc/mysql/my.cnfに次の行が含まれていることを確認してください:

vi /etc/mysql/my.cnf

| [...] bind-address = 127.0.0.1 [...] |

/etc/mysql/my.cnfを変更する必要があった場合は、今すぐMySQLを再起動してください:

/etc/init.d/mysql restart

実行して、

netstat -tap

MySQLが127.0.0.1(localhost.localdomain)でリッスンしていることを確認します:

server1:/usr/src# netstat -tap  
 Active Internet connections (servers and established)  
 Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name  
 tcp        0      0 localhost.localdo:mysql *:*                     LISTEN     3003/mysqld  
 tcp        0      0 *:sunrpc                *:*                     LISTEN     1684/portmap  
 tcp        0      0 *:auth                  *:*                     LISTEN     2036/inetd  
 tcp        0      0 *:1522                 *:*                     LISTEN     2077/rpc.statd  
 tcp        0      0 *:smtp                  *:*                     LISTEN     12053/master  
 tcp6       0      0 *:imaps                *:*                     LISTEN     3839/couriertcpd  
 tcp6       0      0 *:pop3s                *:*                     LISTEN     3629/couriertcpd  
 tcp6       0      0 *:pop3                 *:*                     LISTEN     3572/couriertcpd  
 tcp6       0      0 *:imap2                *:*                     LISTEN     3792/couriertcpd  
 tcp6       0      0 *:www                  *:*                     LISTEN     3712/apache2  
 tcp6       0      0 *:ssh                  *:*                     LISTEN     2058/sshd  
 tcp6       0    148 server1.example.com:ssh ::ffff:192.168.0.2:4515 ESTABLISHED2139/0

さて、6つのテキストファイルを作成しましょう。

vi /etc/postfix/mysql-virtual_domains.cf

| user = mail_admin password = mail_admin_password dbname = mail query = SELECT domain AS virtual FROM domains WHERE domain='%s' hosts = 127.0.0.1 |

vi /etc/postfix/mysql-virtual_forwardings.cf

| user = mail_admin password = mail_admin_password dbname = mail query = SELECT destination FROM forwardings WHERE source='%s' hosts = 127.0.0.1 |

vi /etc/postfix/mysql-virtual_mailboxes.cf

| user = mail_admin password = mail_admin_password dbname = mail query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s' hosts = 127.0.0.1 |

vi /etc/postfix/mysql-virtual_email2email.cf

| user = mail_admin password = mail_admin_password dbname = mail query = SELECT email FROM users WHERE email='%s' hosts = 127.0.0.1 |

vi /etc/postfix/mysql-virtual_transports.cf

| user = mail_admin password = mail_admin_password dbname = mail query = SELECT transport FROM transport WHERE domain='%s' hosts = 127.0.0.1 |

vi /etc/postfix/mysql-virtual_mailbox_limit_maps.cf

| user = mail_admin password = mail_admin_password dbname = mail query = SELECT quota FROM users WHERE email='%s' hosts = 127.0.0.1 |

次に、これらのファイルの権限とグループを変更します:

chmod o= /etc/postfix/mysql-virtual_*.cf  
chgrp postfix /etc/postfix/mysql-virtual_*.cf

次に、/home/vmailというホームディレクトリを持つvmailというユーザーとグループを作成します。ここにすべてのメールボックスが保存されます。

groupadd -g 5000 vmail  
useradd -g vmail -u 5000 vmail -d /home/vmail -m

次に、Postfixの設定を行います。server1.example.comを有効なFQDNに置き換えることを確認してください。そうしないと、Postfixが正しく動作しない可能性があります!

postconf -e 'myhostname = server1.example.com'  
postconf -e 'mydestination = server1.example.com, localhost, localhost.localdomain'  
postconf -e 'mynetworks = 127.0.0.0/8'  
postconf -e 'virtual_alias_domains ='  
postconf -e 'virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf'  
postconf -e 'virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf'  
postconf -e 'virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf'  
postconf -e 'virtual_mailbox_base = /home/vmail'  
postconf -e 'virtual_uid_maps = static:5000'  
postconf -e 'virtual_gid_maps = static:5000'  
postconf -e 'smtpd_sasl_auth_enable = yes'  
postconf -e 'broken_sasl_auth_clients = yes'  
postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination'  
postconf -e 'smtpd_use_tls = yes'  
postconf -e 'smtpd_tls_cert_file = /etc/postfix/smtpd.cert'  
postconf -e 'smtpd_tls_key_file = /etc/postfix/smtpd.key'  
postconf -e 'transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf'  
postconf -e 'virtual_create_maildirsize = yes'  
postconf -e 'virtual_maildir_extended = yes'  
postconf -e 'virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf'  
postconf -e 'virtual_mailbox_limit_override = yes'  
postconf -e 'virtual_maildir_limit_message = "The user you are trying to reach is over quota."'  
postconf -e 'virtual_overquota_bounce = yes'  
postconf -e 'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps'

その後、TLSに必要なSSL証明書を作成します:

cd /etc/postfix  
openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509
<-- 国名を入力してください(例:「DE」)。  
<-- 州または県名を入力してください。  
<-- 市名を入力してください。  
<-- 組織名を入力してください(例:会社名)。  
<-- 組織単位名を入力してください(例:「IT部門」)。  
<-- システムの完全修飾ドメイン名を入力してください(例:「server1.example.com」)。  
<-- メールアドレスを入力してください。

次に、smtpd.keyの権限を変更します:

chmod o= /etc/postfix/smtpd.key
Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。