メールサーバー立ち上げるならVirtualサーバーが便利

2019年9月5日

テクノロジー

これまで何度かメールサーバーを構築してきましたが、さすがに会社で管理するメールサーバー数が増えてきて管理するのがめんどくさくなってきたので、どうすればこうした管理が楽に便利に手放しにすることができるのか考えてみたところ、 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システムが自前で構築できるかもしれませんね。

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ