メールサーバーについて気になった事が有ったので、さくらVPS環境で、メールサーバー構築した際の備忘録です。
- バーチャルドメインで運用を想定している為、MySQLを利用して、管理はPostfixAdminで行えるようにします。
- 通信はTSLを利用します。
- アンチウィルス、スパムフィルタを利用します。
メールサーバー |
Postfix 2.6.6 |
POP、IMAPサーバー |
Dovecot 2.0.9 |
アンチウィルスソフトウェア |
ClamAV 0.97 |
スパムフィルタソフトウェア |
SpamAssassin 3.3.1 |
メールサーバー、アンチウィルスソフトウェア、スパムフィルタソフトウェアのインターフェースソフトウェア |
Amavised-new 2.8.0 |
メールアカウント管理 |
PostfixAdmin 2.3.6 |
PostfixAdminのインストールと設定
PostfixAdmin からソースをダウンロードして、解凍後、公開ディレクトリにFTPなどでアップロードします。今回は公開ディレクトリを下記のような形で設定し、PostfixAdminを配置しました。
1 2 | /home/webadmin/public_html ← ドキュメントルート
/home/webadmin/public_html/postfixadmin
|
PostfixAdminで使用するDB、Userの作成
データベースをpostfix、ユーザーをpostfixで作成しました。
1 | create database postfix GRANT ALL PRIVILEGES ON *.* TO 'postfix' @ 'localhost' IDENTIFIED BY 'XXXXXXXX' WITH GRANT OPTION;
|
PostfixAdminの設定
設定ファイルは、config.inc.phpですが、config.local.phpというファイルがある場合は、設定を上書きするので、config.local.phpを作成して、設定内容を記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | vi /home/webadmin/public_html/postfixadmin/config . local .php
<?php $CONF[ 'configured' ] = true ;
$CONF[ 'setup_password' ] = 'changeme' ; // ブラウザからアクセスした後に設定する
$CONF[ 'default_language' ] = 'ja' ;
$CONF[ 'database_type' ] = 'mysqli' ;
$CONF[ 'database_host' ] = 'localhost' ;
$CONF[ 'database_user' ] = 'postfix' ;
$CONF[ 'database_password' ] = 'XXXXXXX' ;
$CONF[ 'database_name' ] = 'postfix' ;
$CONF[ 'database_prefix' ] = '' ;
$CONF[ 'admin_email' ] = 'postmaster@ドメイン名' ;
$CONF[ 'encrypt' ] = 'md5crypt' ; // パスワードの暗号化方式
$CONF[ 'page_size' ] = '100' ;
$CONF[ 'domain_path' ] = 'YES' ; // メールボックス用に、ドメインごとにディレクトリを作成する /home/virtual/virtualdomain .com/
$CONF[ 'aliases' ] = '100' ;
$CONF[ 'mailboxes' ] = '100' ;
$CONF[ 'maxquota' ] = '100' ;
$CONF[ 'quota' ] = 'YES' ;
$CONF[ 'backup' ] = 'NO' ;
$CONF[ 'sendmail' ] = 'NO' ;
$CONF[ 'fetchmail' ] = 'NO' ;
$CONF[ 'new_quota_table' ] = 'YES' ; // dovecotのバージョンが1.2以下の場合はNOにする。
$CONF[ 'user_footer_link' ] = 'http://ドメイン名/postfixadmin/users/main.php' ; // procmail使用時の設定
// メールディレクトリ自動作成
$CONF[ 'mailbox_postcreation_script' ] = 'sudo /usr/local/bin/postfixadmin/postfixadmin-mailbox-postcreation.sh' ;
// メールディレクトリ自動削除
$CONF[ 'mailbox_postdeletion_script' ] = 'sudo /usr/local/bin/postfixadmin/postfixadmin-mailbox-postdeletion.sh' ;
// ドメインディレクトリ自動削除
$CONF[ 'domain_postdeletion_script' ] = 'sudo /usr/local/bin/postfixadmin/postfixadmin-domain-postdeletion.sh' ;
?>
|
バーチャルドメインメールを保存しておくディレクトリ、ユーザーの作成
バーチャルドメインでは、メールボックスとUNIXユーザーは切り離されて、メールは指定したバーチャルドメイン用のメールボックスに配送されます。そのユーザーを作成します。
設定後、http://ドメイン/postfixadmin/setup.phpにアクセスします。
imap関数がないとWarningが出たので、
としてインストールしました。インストール後はapacheを再起動します。
その後、http://ドメイン/postfixadmin/setup.phpにアクセスし、Warningが出ないことを確認したら、パスワードの設定をして、管理画面からドメイン、ユーザーを追加します。
セットアップが完了したら、セットアップ用のファイルを削除します。
Postfixのインストールと設定
さくらVPSにははじめからPostfixがインストールされています。
インストール済みのPostfixが対応しているルックアップテーブルを表示して、MySQLに対応しているか確認します。
mysqlと表示されているのでMySQLに対応していることが確認できます。
PostfixからMySQLへアクセスする為のファイルを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | user = postfix
password = XXXXXX
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address
user = postfix
password = XXXXXX
hosts = localhost
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and active = '1'
user = postfix
password = XXXXXX
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
user = postfix
password = XXXXXX
hosts = localhost
dbname = postfix
table = mailbox
select_field = quota
where_field = username
|
Postfixの設定ファイルを編集します。
設定ファイルを変更する場合は全て、オリジナルのバックアップをとってから行いました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | myhostname = wwwXXXXX.sakura. ne .jp
inet_interfaces = all
inet_protocols = ipv4 mydestination = $myhostname, localhost
relay_domains = $mydestination
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP unknown
local_transport = local
virtual_transport = procmail
procmail_destination_recipient_limit = 1
virtual_mailbox_base = /home/virtual
virtual_alias_maps = mysql: /etc/postfix/mysql_virtual_alias_maps .cf
virtual_alias_domains = $virtual_alias_maps
virtual_mailbox_domains = mysql: /etc/postfix/mysql_virtual_domains_maps .cf
virtual_mailbox_maps = mysql: /etc/postfix/mysql_virtual_mailbox_maps .cf
virtual_minimum_uid = 5000
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
maximal_backoff_time = 800s
minimal_backoff_time = 100s
bounce_queue_lifetime = 60m
maximal_queue_lifetime = 60m
message_size_limit = 20480000
virtual_mailbox_limit_maps = mysql: /etc/postfix/mysql_virtual_mailbox_limit_maps .cf
virtual_mailbox_limit_override = yes
virtual_overquota_bounce = yes
virtual_mailbox_limit_inbox = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private /auth
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
mailbox_command = /usr/bin/procmail
content_filter=smtp-amavis:[127.0.0.1]:10024
|
新規ユーザーが追加されたらホームディレクトリに Mairdir/ を自動で作成されるようにする。
サブミッションポート587番ポートを利用する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | submission inet n - n - - smtpd
smtp-amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command= yes
-o disable_dns_lookups= yes
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0 /8
-o strict_rfc821_envelopes= yes
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
procmail unix - n n - - pipe
flags=R user=virtual argv= /usr/bin/procmail -t -m USER=${user} DOMAIN=${nexthop} /etc/procmailrc
|
最後に自動起動の設定をして終了です。
dovecot2のインストールと設定
yumでインストールする。
dovecot2の設定ファイルは/etc/dovecot/dovecot.confですが、/etc/dovecot/conf.d/以下に.confファイルを作成すれば自動で読みこんでくれるので、00-base.confというファイルを作成し設定を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | auth_debug_passwords = yes
auth_verbose = yes
auth_debug = yes
listen = *
disable_plaintext_auth = no
auth_mechanisms = plain login digest-md5 cram-md5
mail_location = maildir: /home/virtual/ %d/%u
first_valid_uid = 5000
first_valid_gid = 5000
mail_plugins = quota
protocol imap {
imap_client_workarounds = delay-newmail tb-extra-mailbox-sep
mail_plugins = $mail_plugins imap_quota
}
protocol pop3 {
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
passdb {
driver = sql
args = /etc/dovecot/dovecot-postfixadmin-mysql .conf
}
userdb {
driver = sql
args = /etc/dovecot/dovecot-postfixadmin-mysql .conf
}
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
}
}
plugin {
quota = maildir:User quota
}
|
次に、/etc/dovecot/conf.d/10-auth.confを編集します。
1 2 3 4 5 | #!include auth-system.conf.ext #コメントアウト
|
次に、MySQLへの接続ファイルを作成します。
1 2 3 4 5 6 7 8 9 | driver = mysql
connect = host= /var/run/mysqld/mysqld .sock
dbname=postfix
user=postfix
password=XXXXXX
default_pass_scheme = MD5-CRYPT
password_query = SELECT password FROM mailbox WHERE username = '%u' AND active = '1'
user_query = SELECT concat( '/home/virtual/' , maildir) AS home, 5000 AS uid, 5000 AS gid FROM mailbox WHERE username = '%u' AND active = '1'
|
次に、認証用ライブラリをインストールします。
最後自動起動の設定をして終了です。
ClamAVのインストールと設定
yumでインストール
バックアップを取って、設定(実行ユーザー(root)にする)
起動と自動起動設定
ウイルス定義ファイル更新機能を有効化と、定義ファイルの更新
ClamAVとPostfixの連携設定
1 2 3 4 5 | /etc/init .d /clamd restart
|
Amavised-newのインストールと設定
yumでインストール
バックアップを取って、設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | $undecipherable_subject_tag = '' ;
@bypass_spam_checks_maps = (1);
$mydomain = 'wwwXXXXX.sakura.ne.jp' ;
[ 'ClamAV-clamd' ,
\&ask_daemon, [ "CONTSCAN {}\n" , "/var/run/clamav/clamd.sock" ],
qr/\bOK$ /m , qr/\bFOUND$ /m ,
qr/^.*?: (?!Infected Archive)(.*) FOUND$ /m ],
|
起動と自動起動設定
SpamAssassin設定
起動と自動起動設定
バックアップを取って設定
1 2 3 4 5 | loadplugin Mail::SpamAssassin::Plugin::TextCat
|
rootユーザーでSpamAssassin設定ファイル最新化スクリプト作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #!/bin/bash
cd /etc/mail/spamassassin
wget -qN http: //www .flcl.org/~yoh /user_prefs
diff user_prefs user_prefs.org > /dev/null 2>&1
if [ $? - ne 0 ]; then
cp user_prefs local .cf
echo "report_safe 0" >> local .cf
echo "rewrite_header Subject ***SPAM***" >> local .cf
/etc/rc .d /init .d /spamassassin restart > /dev/null
fi
cp user_prefs user_prefs.org
|
実行権限追加
一度実行して、最新にする
cronに登録する
procmailの設定ファイルを新規作成する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | SHELL= /bin/bash
PATH= /usr/bin : /bin
DEFAULT= /home/virtual/ $DOMAIN/$USER\@$DOMAIN/
LOCKFILE= /home/virtual/procmail .lock
LOGFILE= /home/virtual/procmail .log
:0fw
| /usr/bin/spamc
:0
*^X-Spam-Flag: YES
$SPAM
|
ログの設定
1 2 3 4 5 | /home/virtual/procmail .log {
missingok
nocreate
notifempty
}
|
メールディレクトリの自動作成・削除
PostfixAdminを使ってアカウント追加・削除する際に、ディレクトリを自動で作成・削除するようにスクリプトを作成する。
メールボックス作成・削除スクリプト用ディレクトリ作成
PostfixAdminに有るスクリプトをコピー
削除したメールボックスを保存するディレクトリを作成
スクリプトの編集(メールボックス作成)
exit 0の前に追加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | mkdir "$maildir"
if [ ! -d "$maildir" ]; then
echo "$0: mkdir didn't produce a directory; bailing out."
exit 1
fi
mkdir "${maildir}cur"
if [ ! -d "${maildir}cur" ]; then
echo "$0: mkdir didn't produce a directory; bailing out."
exit 1
fi
mkdir "${maildir}new"
if [ ! -d "${maildir}new" ]; then
echo "$0: mkdir didn't produce a directory; bailing out."
exit 1
fi
mkdir "${maildir}tmp"
if [ ! -d "${maildir}tmp" ]; then
echo "$0: mkdir didn't produce a directory; bailing out."
exit 1
fi
chown -R virtual:virtual "$maildir"
chmod -R 700 "$maildir"
|
スクリプトの編集(メールボックス削除)
1 2 | trashbase= /home/virtual/ .deleted-maildirs
|
スクリプトの編集(ドメイン削除用)
1 2 | trashbase= /home/virtual/ .deleted-maildirs
|
実行権限追加
apacheがsudo出来るように設定する
1 2 3 4 5 6 7 8 | Defaults requiretty
Defaults:apache !requiretty
root ALL=(ALL) ALL
apache ALL=(ALL) NOPASSWD: /usr/local/bin/postfixadmin/postfixadmin-mailbox-postcreation .sh
apache ALL=(ALL) NOPASSWD: /usr/local/bin/postfixadmin/postfixadmin-mailbox-postdeletion .sh
apache ALL=(ALL) NOPASSWD: /usr/local/bin/postfixadmin/postfixadmin-domain-postdeletion .sh
|
再起動して確認
1 2 3 4 5 | /etc/init .d /postfix restart
/etc/init .d /dovecot restart
/etc/init .d /spamassassin restart
/etc/init .d /clamd restart
/etc/init .d /amavisd restart
|
TSLの設定追記…