Postfix設定 · 3 min read · Jan 11, 2026
Postfix、Courier、MySQL、SquirrelMailを使用した仮想ユーザーとドメイン (Mandriva 2010.0 x86_64) - ページ 2
5 MySQLデータベースの作成
メール用のデータベースを作成します:
mysqladmin -u root -p create mail次に、MySQLシェルに移動します:
mysql -u root -pMySQLシェルで、メールデータベースに対して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]に転送します。
| 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)を使用する場合は、角括弧を使用しません)。
6 Postfixの設定
次に、Postfixにデータベース内のすべての情報がどこにあるかを教える必要があります。そのために、6つのテキストファイルを作成します。Postfixにlocalhostの代わりにIPアドレス127.0.0.1に接続するように指示していることに気付くでしょう。これは、Postfixがchrootジャイル内で実行されており、localhostを使用するように指示した場合に接続しようとするMySQLソケットにアクセスできないためです。127.0.0.1を使用すると、PostfixはTCPネットワーキングを使用してMySQLに接続しますが、これはchrootジャイル内でも問題ありません(代替手段は、MySQLソケットをchrootジャイル内に移動することですが、他の問題を引き起こします)。
では、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次に、vmailというユーザーとグループを作成し、ホームディレクトリを/home/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_sasl_authenticated_header = 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'
postconf -e 'inet_interfaces = all'
postconf -e 'alias_database = hash:/etc/postfix/aliases'
postconf -e 'alias_maps = hash:/etc/postfix/aliases'その後、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国名(2文字コード) [GB]: <– あなたの国名を入力してください(例:「DE」)。
州または県名(フルネーム) [Berkshire]: <– あなたの州または県名を入力してください。
市名(例:都市) [Newbury]: <– あなたの市名を入力してください。
組織名(例:会社) [My Company Ltd]: <– あなたの組織名を入力してください(例:会社名)。
組織単位名(例:部門) []: <– あなたの組織単位名を入力してください(例:「IT部門」)。
共通名(例:あなたの名前またはサーバーのホスト名) []: <– システムの完全修飾ドメイン名を入力してください(例:「server1.example.com」)。
メールアドレス []: <– あなたのメールアドレスを入力してください。
次に、smtpd.keyの権限を変更します:
chmod o= /etc/postfix/smtpd.key7 Saslauthdの設定
/etc/sasl2/smtpd.confを編集します。次のようになります:
vi /etc/sasl2/smtpd.conf| # postfix用のSASLライブラリ設定ファイル # すべてのパラメータは以下に文書化されています: # /usr/share/doc/cyrus-sasl/options.html # mech_listパラメータは使用するsaslメカニズムをリストします。 # デフォルトは見つかったすべてのメカニズムです。 #mech_list: plain login # 別のsaslauthdデーモンを使用して認証するために(例: # システムまたはldapユーザー)。 /etc/sysconfig/saslauthdも参照してください。 #pwcheck_method: saslauthd #saslauthd_path: /var/lib/sasl2/mux # sasldbに保存されたユーザーに対して認証するため。 #pwcheck_method: auxprop #auxprop_plugin: sasldb #sasldb_path: /var/lib/sasl2/sasl.db pwcheck_method: authdaemond log_level: 3 mech_list: PLAIN LOGIN authdaemond_path:/var/lib/authdaemon/socket |
次に、Postfixのシステム起動リンクを作成し、Postfix、saslauthd、およびcourier-authdaemonを起動します:
chmod 755 /var/lib/authdaemon
chkconfig postfix on
/etc/init.d/courier-authdaemon start
/etc/init.d/postfix restart
/etc/init.d/saslauthd start8 Courierの設定
次に、CourierにMySQLデータベースに対して認証するように指示する必要があります。最初に、/etc/courier/authdaemonrcを編集し、authmodulelistの値を次のように変更します。
vi /etc/courier/authdaemonrc| [...] authmodulelist="authmysql" #authmodulelist="authpam authpwd authshadow" [...] |
次に、/etc/courier/authmysqlrcを編集します。次のように正確に見えるはずです(再度、正しいデータベースの詳細を入力してください):
cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc_orig
cat /dev/null > /etc/courier/authmysqlrc
vi /etc/courier/authmysqlrc| MYSQL_SERVER localhost MYSQL_USERNAME mail_admin MYSQL_PASSWORD mail_admin_password MYSQL_PORT 0 MYSQL_DATABASE mail MYSQL_USER_TABLE users MYSQL_CRYPT_PWFIELD password #MYSQL_CLEAR_PWFIELD password MYSQL_UID_FIELD 5000 MYSQL_GID_FIELD 5000 MYSQL_LOGIN_FIELD email MYSQL_HOME_FIELD "/home/vmail" MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') #MYSQL_NAME_FIELD MYSQL_QUOTA_FIELD quota |
次に、Courierを再起動します:
/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-imapd restart
/etc/init.d/courier-pop3d restart次のコマンドを実行することで、POP3サーバーが正しく動作しているか確認できます。
telnet localhost pop3+OK Hello there .(quitと入力してLinuxシェルに戻ります)を返すはずです:
[root@server1 postfix]# telnet localhost pop3
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
+OK Hello there.
quit
+OK Better luck next time.
Connection closed by foreign host.
[root@server1 postfix]#新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。