メールサーバー · 6 min read · Nov 12, 2025
Centos 5.0 で Postfix、Dovecot、MySQL、phpMyAdmin、TLS/SSL を使用して仮想ユーザー/ドメインを持つ ISP メールサーバーを構成する方法 - ページ 2
構成:
SMTP-AUTH/TLS
まず、SMTP-AUTH と TLS を構成します。これには、好きなエディタで /usr/lib/sasl2/smtpd.conf を編集します。
vi /usr/lib/sasl2/smtpd.conf以下のように変更を加えます。
pwcheck_method: saslauthd
mech_list: plain loginディレクトリを作成し、次にプライベートキー、最後に証明書を作成します。
mkdir -p /etc/postfix/ssl/mailserver
cd /etc/postfix/ssl/mailserver
openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024
chmod 600 smtpd.key
openssl req -new -key smtpd.key -out smtpd.csr
openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
openssl rsa -in smtpd.key -out smtpd.key.unencrypted
mv -f smtpd.key.unencrypted smtpd.key
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650プライベートキーと証明書が作成されました。後で Postfix にそれらを使用するよう指示します。
MySQL:
次に、mail という名前のデータベースを作成します。これには、以下のコマンドを発行します。
mysql -u root -pパスワードを入力すると、MySQL プロンプト ( mysql>) に入ります。
CREATE DATABASE mail;mail に対してユーザー mail にすべての権限を付与します。
GRANT ALL PRIVILEGES ON mail.* TO 'mail'@'localhost' IDENTIFIED BY 'mail';
FLUSH PRIVILEGES;
quitmail ユーザーのパスワードを設定します。これは以下のステートメントで行います。
mysqladmin -u mail password newpassword次に、ドメイン、ユーザー、エイリアス、メールボックス情報を含む新しいデータベース (mail) に必要なテーブルを作成します。
mysql -u mail -pパスワードを入力すると、MySQL プロンプトに入ります。
show databases;すべてのデータベースが表示され、私たちの「mail」データベースも含まれます。「mail」を使用します。
USE mail;- ドメインテーブルを作成します。
CREATE TABLE domain ( domain varchar(255) NOT NULL default '', description varchar(255) NOT NULL default '', aliases int(10) NOT NULL default '0', mailboxes int(10) NOT NULL default '0', maxquota int(10) NOT NULL default '0', transport varchar(255) default NULL, backupmx tinyint(1) NOT NULL default '0', created datetime NOT NULL default '0000-00-00 00:00:00', modified datetime NOT NULL default '0000-00-00 00:00:00', active tinyint(1) NOT NULL default '1', PRIMARY KEY (domain), KEY domain (domain) ) TYPE=MyISAM COMMENT=' 仮想ドメイン';- 2番目に重要なテーブルはメールボックスですので、メールボックスを作成します。
CREATE TABLE mailbox ( username varchar(255) NOT NULL default '', password varchar(255) NOT NULL default '', name varchar(255) NOT NULL default '', maildir varchar(255) NOT NULL default '', quota int(10) NOT NULL default '0', domain varchar(255) NOT NULL default '', created datetime NOT NULL default '0000-00-00 00:00:00', modified datetime NOT NULL default '0000-00-00 00:00:00', active tinyint(1) NOT NULL default '1', PRIMARY KEY (username), KEY username (username) ) TYPE=MyISAM COMMENT='仮想メールボックス';- エイリアステーブルを作成します。
CREATE TABLE alias ( address varchar(255) NOT NULL default '', goto text NOT NULL, domain varchar(255) NOT NULL default '', created datetime NOT NULL default '0000-00-00 00:00:00', modified datetime NOT NULL default '0000-00-00 00:00:00', active tinyint(1) NOT NULL default '1', PRIMARY KEY (address), KEY address (address) ) TYPE=MyISAM COMMENT='仮想エイリアス';必要なテーブルが作成されましたので、MySQL を終了します。
quitPostfix MySQL:
Postfix は、すべてのメールボックス関連情報をどこでどのように検索できるかを知る必要があります。この目的のために、/etc/postfix の下に以下のファイルを作成します。最近のバージョンの Postfix は、他のステートメントの代わりにこれを使用する場合があり、その場合はすべての行をコメントアウトし、最後の行のコメントを解除します。
- メールを一つのメールアドレスから別のメールアドレスに転送するためのファイル mysql_virtual_alias_maps.cf を作成します。
vi /etc/postfix/mysql_virtual_alias_maps.cfuser = mail
password = mail
hosts = localhost
dbname = mail
table = alias
select_field = goto
where_field = address
additional_conditions = and active = '1'
#query = SELECT goto FROM alias WHERE address='%s' AND active = '1'- 仮想ドメインマッピングのためのファイル mysql_virtual_domains_maps.cf を作成します。このファイルで提供される情報を使用して仮想ドメインがクエリされます。
vi /etc/postfix/mysql_virtual_domains_maps.cfuser = mail
password = mail
hosts = localhost
dbname = mail
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'
#query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'- メールアドレスをユーザーのメールボックスのハードディスク上の場所にマッピングする通常のファイル mysql_virtual_mailbox_maps.cf を作成します。Postfix の組み込み仮想配信エージェントを使用して受信メールをハードディスクに保存した場合、メールボックスパスを見つけるためにクエリされます。
vi /etc/postfix/mysql_virtual_mailbox_maps.cfuser = mail
password = mail
hosts = localhost
dbname = mail
table = mailbox
select_field = CONCAT(domain,'/',maildir)
where_field = username
additional_conditions = and active = '1'
#query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'- 最後に、ユーザーのメールボックスのクォータ制限をマッピングするために使用されるファイル mysql_virtual_mailbox_limit_maps.cf を作成します。
vi /etc/postfix/mysql_virtual_mailbox_limit_maps.cfuser = mail
password = mail
hosts = localhost
dbname = mail
table = mailbox
select_field = quota
where_field = username
additional_conditions = and active = '1'
#query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'- mysql_virtual ファイルに適切な所有権と権限を付与します。
chown root:postfix *.cf
chmod 644 *.cfPostfix:
Postfix の構成セクションでは、Postfix の構成ディレクトリ (/etc/postfix) にある main.cf ファイルを編集して、Postfix に必要な基本情報を入力します。
mv /etc/postfix/main.cf /etc/postfix/main.cf.orig
vi /etc/postfix/main.cf############## Postfix###############
#最終更新日 2008年6月17日
#-------------------------------------------------------
smtpd_banner = $myhostname
biff = no
append_dot_mydomain = no
relayhost =
mynetworks = 192.168.49.0/24
inet_interfaces = 192.168.49.81
mailbox_size_limit = 0
recipient_delimiter = +
alias_database = hash:/etc/postfix/aliases
alias_maps = $alias_database
myhostname = example.co.tz
mydomain = rnd
myorigin = $myhostname
mydestination = $myhostname, localhost.$mydomain, $transport_maps
mail_spool_directory = /var/spool/mail
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5
disable_vrfy_command = no
readme_directory = /usr/share/doc/postfix-2.2.10/README_FILES
sample_directory = /usr/share/doc/postfix-2.2.10/samples
sendmail_path = /usr/sbin/sendmail
html_directory = no
setgid_group = postdrop
command_directory = /usr/sbin
manpage_directory = /usr/share/man
daemon_directory = /usr/libexec/postfix
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
queue_directory = /var/spool/postfix
mail_owner = postfix
unknown_local_recipient_reject_code = 450
####################postfix セクションはここで終了###############Postfix 仮想ユーザー情報:
再度、main.cf ファイルを編集して仮想ユーザーのサポートを追加します。「virtual_minimum_uid」と「virtual_uid_maps」は、私の場合、仮想メールを処理するために特別に作成したユーザー ID 150 を指します。これは、デフォルトの gid 12 を持つ標準の「mail」グループを使用します。まず、useradd コマンドまたは adduser でユーザーを作成します。
useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c "仮想メールボックス" vmail
chmod 770 /var/vmail/ (ディレクトリが存在しない場合は作成)
chown vmail:mail /var/vmail
vi /etc/postfix/main.cf#######################仮想ドメインユーザーとメールボックス###############
virtual_mailbox_domains = mysql:$config_directory/mysql_virtual_domains_maps.cf
virtual_mailbox_base = /var/vmail
virtual_mailbox_maps = mysql:$config_directory/mysql_virtual_mailbox_maps.cf
virtual_alias_maps = mysql:$config_directory/mysql_virtual_alias_maps.cf
virtual_minimum_uid = 150
virtual_uid_maps = static:150
virtual_gid_maps = static:12
##############################main.cf の仮想セクションはここで終了##############Postfix SASL/TLS 認証:
最後に、SASL/TLS 認証を有効にするために再度 main.cf ファイルを編集します。以前に作成した証明書をここで使用してメールサーバーを保護します。
vi /etc/postfix.main.cf#################### SASL/TLS 認証###########################
######SASL 部分#########
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain =
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
######TLS 部分###########
smptpd_tls_cert_file = /etc/postfix/ssl/mailserver/smtpd.crt
smtpd_tls_key_file = /etc/postfix/ssl/mailserver/smtpd.key
smtpd_tls_CAfile = /etc/postfix/ssl/mailserver/cacert.pem
smtp_tls_auth_only = no
smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_tls_received_header = no
smtp_tls_note_starttls_offer = yes
smtpd_tls_loglevel = 1
tls_random_source = dev:/dev/urandom
smtpd_tls_session_cache_timeout = 3600s
smtpd_tls_recieved_header = yes
###########################SASL/TLS 認証はここで終了#############私の便宜のために、main.cf を 3 つのセクションに分けました { Postfix、virtual-Domains-Users-and-mailboxes、SASL/TLS-Authentication }。SASL/TLS-Authentication はさらに (SASL-PART と TLS-PART) に分かれています。各セクションとそのパラメータを示すために、同じファイルを 3 回編集しました。次に、/etc/aliases と /etc/aliases.db を /etc/postfix/ にコピーし、newaliases を実行します。
cp /etc/aliases* /etc/postfix/
newaliasesDovecot v1.x IMAP と POP:
Dovecot を構成して、POP3 と IMAP サービスの両方を提供します。Dovecot の構成ファイルは /etc/dovecot.conf です。元のファイルを dovecot.conf.orig にバックアップし、実行中のファイルを私たちのニーズに合わせて修正します。Dovecot で仮想ユーザーを処理するために、/etc/dovecot-mysql.conf ファイルを作成します。
vi /etc/dovecot-mysql.conf######dovecot-mysql.conf は次のようになります##########
# 注意: '\' 行の分割は可読性のためにのみ使用され、現在 Dovecot はそれをサポートしていません
# mysqld.sock ソケットは、異なるシステムで異なる場所にある場合があります
driver = mysql
default_pass_scheme = plain
#connect = host=/var/run/mysqld/mysqld.sock dbname=mail user=root password=default
# または、localhost に接続することもできます:
connect = host=localhost dbname=mail user=mail password=mail
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT '/var/vmail/%d/%n' as home, 'maildir:/var/vmail/%d/%n' as mail, 150 AS uid, 12 AS gid, concat('dirsize:storage=',quota) AS quota FROM mailbox WHERE username ='%u' AND active ='1'
####################ここで終了####################次に、dovecot.conf を構成して、mysql_auth メソッドを使用して仮想ユーザーを認証します。通常の Linux ユーザーはメールサーバーにログインできないことに注意してください。なぜなら、dovecot 構成で Pam 認証メソッドを有効にしていないからです。また、first_valid_uid と last_valid_uid は 150 に設定されており、これは uid 150 のユーザーのみがログインできることを意味します。Pop3 と pop3s プロトコルが利用可能です。
cp -p /etc/dovecot.conf /etc/dovecot.conf.orig
vi /etc/dovecot.conf(以下の行のみを編集)
##############dovecot は仮想ユーザーと連携するように構成されています############
base_dir = /var/run/dovecot/
protocols = imap pop3 imaps pop3s
listen = [::]
login_dir = /var/run/dovecot-login
mail_location = mbox:/var/vmail/%d/%n
mbox_read_locks = fcntl
log_timestamp = "%Y-%m-%d %H:%M:%S "
log_path = /var/log/maillog
mail_extra_groups = mail
first_valid_uid = 150
last_valid_uid = 150
maildir_copy_with_hardlinks = yes
userdb sql {
args = /etc/dovecot-mysql.conf
}
passdb sql {
args = /etc/dovecot-mysql.conf
}
####################################ここで終了######################これで、/etc/dovecot-mysql.conf の所有権とアクセス権を設定します。
chmod 600 /etc/dovecot/*.conf
chown vmail /etc/dovecot/*.confRoundcube のインストールと構成:
インストールノート (Roundcube) に基づく
- このフォルダを解凍し、ドキュメントルート内のどこかに配置します ( /var/www/html/mail)
- 次のディレクトリ (およびその中のファイル) が Web サーバーによって書き込み可能であることを確認します
- /temp
- /logs
- RoundCube 用の新しいデータベースとデータベースユーザーを作成します (データベースセットアップを参照)
- ブラウザを http://url-to-roundcube/installer/ にポイントします
- インストールスクリプトの指示に従います (または手動構成を参照)
- 構成を作成してテストした後、インストーラーディレクトリを削除します
- 完了!
データベースセットアップ
- MySQL 4.1.x/5.x
MySQL バージョン 4.1 以降では、RoundCube 用のデータベースを utf-8 文字セットで作成することをお勧めします。以下は初期手順の例です。
mysql -u root -pCREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'password';
quitmysql -u mail -p roundcubemail < SQL/mysql5.initial.sql注意: ‘password’ は roundcube ユーザーのマスターパスワードです。これをより安全なパスワードに置き換えることを強くお勧めします。このパスワードは後で ‘config/db.inc.php’ に指定する必要があります。
HTTP セクション:
メールサーバーの Web フロントエンドを使用するには、/etc/httpd/conf/httpd.conf ファイルを編集します。
vi /etc/httpd/conf/httpd.conf次のステートメントを追加します。
#Roundcube を使用したフロントエンドメールアクセス
DocumentRoot /var/www/html/mail
ServerName mail.example.co.tz
構成を保存して終了します。
仮想ユーザーとドメインの作成:
- これで、メールデータベースに仮想ドメインと仮想ユーザーを作成します。
mysql -u mail -p- パスワードを入力すると、mysql> プロンプトに入ります。
USE mail;- 最初に、ドメインテーブルに仮想ドメイン (example.co.tz) を作成します。以下のコマンドを使用します。
INSERT INTO domain (domain,description,aliases,mailboxes,maxquota,transport,backupmx,active) VALUES ('example.co.tz','仮想ドメイン','10','10', '0','virtual', '0','1');- 次に、メールボックステーブルに 2 つの仮想ユーザーを作成します。kiiza と hoboka のユーザー名として ( [email protected] & [email protected]) を作成しました。
INSERT INTO mailbox (username,password,name,maildir,quota,domain,active) VALUES ('[email protected]','mwamaLis', 'Hoboka Mwamakunge ','hoboka/', '0','example.co.tz','1');
INSERT INTO mailbox (username,password,name,maildir,quota,domain,active) VALUES ('[email protected]','gekman', 'Kiiza Mutungi','kiiza/', '0','example.co.tz','1');
quit仮想ユーザーと仮想ドメインを作成したので、ユーザーアカウントから別のアカウントにメールを送信してメールサーバーをテストしたいと思います。したがって、Dovecot、Postfix、MySQL、および Web サーバーデーモンを開始します。また、次回の再起動時に自動的に起動するようにしたいと思います。これには、次のコマンドを発行します。
chkconfig -level 235 mysqld on
chkconfig -level 235 saslauthd on
chkconfig -level 235 postfix on
chkconfig -level 235 dovecot on
chkconfig -level 235 httpd on
/etc/init.d/saslauthd start
/etc/init.d/mysqld start
/etc/init.d/postfix start
/etc/init.d/dovecot start
/etc/init.d/httpd start新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。