MySQL設定 · 4 min read · Dec 29, 2025

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

6 MySQLのパスワードを設定し、phpMyAdminを構成する

MySQLを開始します:

chkconfig --levels 235 mysqld on  
/etc/init.d/mysqld start

次に、MySQLのrootアカウントのパスワードを設定します:

mysql_secure_installation

[root@server1 ~]# mysql_secure_installation

NOTE: このスクリプトのすべての部分を実行することは、すべてのMySQLサーバーで推奨されます。 本番環境で使用する場合は、各ステップを注意深くお読みください!

MySQLにログインしてセキュリティを確保するためには、rootユーザーの現在のパスワードが必要です。 MySQLをインストールしたばかりで、まだrootパスワードを設定していない場合、パスワードは空白になりますので、ここではEnterを押してください。

現在のrootのパスワードを入力してください(なしの場合はEnter): <– ENTER
OK、パスワードが正常に使用されました。次に進みます…

rootパスワードを設定することで、適切な認証なしに誰もMySQLのrootユーザーにログインできないようにします。

rootパスワードを設定しますか? [Y/n] <– ENTER
新しいパスワード: <– yourrootsqlpassword
新しいパスワードを再入力してください: <– yourrootsqlpassword
パスワードが正常に更新されました!
権限テーブルを再読み込みしています..
… 成功!

デフォルトでは、MySQLのインストールには匿名ユーザーが含まれており、誰でもユーザーアカウントを作成せずにMySQLにログインできます。 これはテスト用にのみ意図されており、インストールを少しスムーズにするためのものです。 本番環境に移行する前に、これらを削除する必要があります。

匿名ユーザーを削除しますか? [Y/n] <– ENTER
… 成功!

通常、rootは「localhost」からのみ接続を許可されるべきです。 これにより、誰かがネットワークからrootパスワードを推測できないようにします。

rootのリモートログインを禁止しますか? [Y/n] <– ENTER
… 成功!

デフォルトでは、MySQLには「test」という名前のデータベースがあり、誰でもアクセスできます。 これもテスト用にのみ意図されており、本番環境に移行する前に削除する必要があります。

テストデータベースとそのアクセスを削除しますか? [Y/n] <– ENTER

  • テストデータベースを削除しています…
    … 成功!
  • テストデータベースの権限を削除しています…
    … 成功!

権限テーブルを再読み込みすることで、これまでに行ったすべての変更が即座に反映されることを保証します。

権限テーブルを今すぐ再読み込みしますか? [Y/n] <– ENTER
… 成功!

クリーンアップ中…

すべて完了しました! 上記のすべてのステップを完了した場合、MySQLのインストールは安全になっているはずです。

MySQLをご利用いただきありがとうございます!

[root@server1 ~]#

次に、phpMyAdminを構成します。 phpMyAdminがlocalhostからだけでなく接続を許可するようにApacheの設定を変更します(のスタンザをコメントアウトします):

vi /etc/httpd/conf.d/phpMyAdmin.conf

| # phpMyAdmin - Web based MySQL browser written in php # # Allows only localhost by default # # But allowing phpMyAdmin to anyone other than localhost should be considered # dangerous unless properly secured by SSL Alias /phpMyAdmin /usr/share/phpMyAdmin Alias /phpmyadmin /usr/share/phpMyAdmin # # Order Deny,Allow # Deny from All # Allow from 127.0.0.1 # Allow from ::1 # Order Deny,Allow Deny from All Allow from 127.0.0.1 Allow from ::1 # These directories do not require access over HTTP - taken from the original # phpMyAdmin upstream tarball # Order Deny,Allow Deny from All Allow from None Order Deny,Allow Deny from All Allow from None # This configuration prevents mod_security at phpMyAdmin directories from # filtering SQL etc. This may break your mod_security implementation. # # # # SecRuleInheritance Off # # |

次に、Apacheのシステム起動リンクを作成し、起動します:

chkconfig --levels 235 httpd on  
/etc/init.d/httpd start

これで、ブラウザをhttp://server1.example.com/phpMyAdmin/またはhttp://192.168.0.100/phpMyAdmin/に向け、ユーザー名rootと新しいroot MySQLパスワードでログインできます。

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

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

mysqladmin -u root -p create mail

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

mysql -u root -p

MySQLシェルで、mailデータベースに対してSELECT、INSERT、UPDATE、DELETE権限を持つユーザーmail_adminを作成します(パスワードはmail_admin_passwordに置き換えてください)。このユーザーは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) )  
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 bigint(20) 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テーブルは、1つのメールアドレスを別のメールアドレスにエイリアスするためのもので、たとえば、[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)を代わりに使用する場合は、角括弧を使用しません)。

8 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'

その後、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文字コード)[XX]: <– 国名を入力してください(例:「DE」)。
州または省名(正式名称)[]: <– 州または省名を入力してください。
市名(例:都市)[Default City]: <– 市名を入力してください。
組織名(例:会社)[Default Company Ltd]: <– 組織名を入力してください(例:会社名)。
組織単位名(例:部門)[]: <– 組織単位名を入力してください(例:「IT部門」)。
共通名(例:あなたの名前またはサーバーのホスト名)[]: <– システムの完全修飾ドメイン名を入力してください(例:「server1.example.com」)。
メールアドレス[]: <– メールアドレスを入力してください。

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

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

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

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