これまで何度かメールサーバーを構築してきましたが、さすがに会社で管理するメールサーバー数が増えてきて管理するのがめんどくさくなってきたので、どうすればこうした管理が楽に便利に手放しにすることができるのか考えてみたところ、
1つのサーバーでマルチドメインを管理するバーチャルドメイン対応のメールサーバーを1つ構築して、そこにドメインとアカウントを追加していくだけの運用をすることでサーバー管理は1台で済みます。
これによって、サーバーをレンタルしている場合はホスティング料金の節約にもなります。
そして、メールサーバーをメール専用サーバーとして構築することで、WEBページなどのインジェクションによるアタックからも開放されます。
しかしサバカン素人ではなかなかメールサーバーの構築は理解し難い領域でもあるのと、そうした技術本に出会えることが無かったので、今回はWEBで検索しただけで構築した苦労話をブログに書いて残しておきます。
基本構造はPostfix + Dovecot
これまでブログでも書いてきましたが、Postfix(SMTP)とDovecot(POP3,IMAP)の構造は一番のスタンダードである事がWEBサーフしていて感じたので、これで行くことに決めました。
メールサーバーにおいて初心者がわかりづらくなるポイントとして、環境構築がポリシーによってまるで違ってくるという点でしょう。
メールサーバーへの問い合わせは、サブドメインを使うのか、ネイキッドドメインのままで行くのか?
TLSの扱いをどうするのか?
アカウントの認証方式はどういう手段をとるのか?
暗号化方式はどの手段でやるのか?
こうした構造が違うと、プラグインや途中で使用するアプリケーションなどがまるで違ってくるし、それぞれのコンフィグ設定も根本的に違ってきます。
そんな中一番今回の目的に近い設定が書かれていたURLがあり、基本設定はこのサイトを参考にさせていただきました。
参考サイト
https://w.atwiki.jp/sanosoft/pages/86.html
それぞれのコンフィグデータを公開
postfix
$ postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
allow_min_user = yes
broken_sasl_auth_clients = yes
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
home_mailbox = Maildir/
html_directory = no
inet_interfaces = all
inet_protocols = ipv4
luser_relay = unknown_user@localhost
mail_owner = postfix
mailbox_size_limit = 102400000
mailq_path = /usr/bin/mailq.postfix
message_size_limit = 10240000
mydestination =
newaliases_path = /usr/bin/newaliases.postfix
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = /etc/postfix/local-domains
smtpd_sasl_security_options = noanonymous
unknown_local_recipient_reject_code = 550
virtual_gid_maps = static:10000
virtual_mailbox_base = /var/spool/virtual
virtual_mailbox_domains = /etc/postfix/virtual-domains
virtual_mailbox_maps = hash:/etc/postfix/virtual-mailbox
virtual_transport = virtual
virtual_uid_maps = static:10000
dovecot
$ doveconf -n
auth_debug = yes
auth_mechanisms = cram-md5 plain login
auth_username_format = %u
auth_verbose = yes
debug_log_path = /var/log/dovecot
disable_plaintext_auth = no
info_log_path = /var/log/dovecot-deliver.log
listen = *
mail_debug = yes
mail_gid = vmail
mail_location = maildir:/var/spool/virtual/%d/%n/Maildir
mail_uid = vmail
mbox_write_locks = fcntl
passdb {
args = scheme=CRAM-MD5 username_format=%u /etc/dovecot/users
driver = passwd-file
}
protocols = imap pop3
service auth-worker {
user = root
}
service auth {
unix_listener /var/spool/postfix/private/auth {
group = postfix
mode = 0666
user = postfix
}
unix_listener auth-master {
mode = 0666
user = vmail
}
user = $default_internal_user
}
service imap-login {
inet_listener imap {
port = 143
}
}
service pop3-login {
inet_listener pop3 {
port = 110
}
}
ssl = no
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem
userdb {
args = scheme=CRAM-MD5 username_format=%u /etc/dovecot/users
driver = passwd-file
}
userdb {
args = uid=vmail gid=vmail home=/var/spool/virtual/%d/%u/Maildir
driver = static
}
verbose_proctitle = yes
protocol pop3 {
pop3_uidl_format = %u
}
local_name example-1.com {
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem
}
local_name example-2.com {
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem
}
細かな設定作業は省いて、完了した後のコンフィグデータを貼り付けておきます。
今回気に入った構造のひとつに、ドメイン情報や、アカウント情報をconfファイルの外ファイルで記述して運用をさらに楽にするようにしている点です。
ちなみに、以下がその対象ファイルになります。
設定ファイル一覧
[postfix]
# メールドメイン
virtual-domains
# 問い合わせサブドメイン
local-domains
# メールアドレスの転送設定
valias_map
# メールデータ保存先設定
virtual-mailbox
[dovecot]
# 認証ユーザー一覧
users
構築途中のトラブル
上記の参考サイトで設定完了しただけでは、実はうまく動作せずに、以下のようなポイントにつまずいていました。
サーバー認証がうまくいかず、原因は、マルチドメイン対応にしたため、認証アカウントIDをユーザー名にドメインをつけたメールアドレスにしたため、以下の設定を行い対応できた。
$ vi /etc/dovecot/conf.d/10-auth.conf
auth_username_format = %u
# これを追加!!
他にもTLS設定は未だにできておらず、これは結構時間がかかりそう・・・
運用マニュアル
とりあえず、上記の設定でメールサーバーが正常に動作することができたので、今後の運用マニュアルを作っておきました。
# ドメイン、メールアカウントの追加手順
1. ドメインの追加
$ vi /etc/postfix/virtual-domains
※改行追記する
2. ローカルドメインの追加
$ vi /etc/postfix/local-domains
※改行追記する
3. メールアドレス保存領域の登録
$ vi /etc/postfix/virtual-mailbox
ex) user@example.com example.com/user/Maildir/
※改行追記する。
$ postmap /etc/postfix/virtual-mailbox
4. エイリアスの設定
$ vi /etc/postfix/valias_map
ex) user@example.com user@example.com
※改行追記する。
※任意のメールに転送する場合は、カンマ区切りでメールアドレスを追記する。
※元メールアドレスを記載しなければ、サーバーには残らず転送される。
$ postmap /etc/postfix/valias_map
5. saslアカウント登録
- sasl一覧の確認
$ sasldblistusers2
- アドレス登録、パスワード変更
$ saslpasswd2 -u example.com -c user
- アドレス削除
$ saslpasswd2 -u example.com -d user
- パスワードの確認
$ testsaslauthd -u user -p password -s smtp
6. postfixの再起動
$ service postfix restart
$ systemctl restart postfix (Centos7)
7. dovecot用ユーザーアカウント登録
- パスワード作成
$ doveadm pw
> password
- アカウント登録
$ vi /etc/dovecot/users
8. dovecotの再起動
$ service dovecot restart
$ systemctl restart dovecot (Centos7)
# 登録済みドメインのアカウントのみ追加する方法
上記4番以降(4,5,6,7,8)を実行
あとこれは必要があればですが、下記のDNS設定もマニュアルとしておきました。
# DNSの設定
1. レコードの登録
mail.example.com A 3600 153.126.137.12
example.com MX 3600 mail.example.com
example.com TXT 3600 v=spf1 include:_spf.example.com ~all
other) v=spf1 ip4:12.34.56.78 include:example.com -all
運用の作業もなかなか大変ですが、もしかすると、システム化してフォーム対応などで自動登録などができるようになると、Gmailシステムが自前で構築できるかもしれませんね。
0 件のコメント:
コメントを投稿