バーチャルホストのメールサーバ①
I have a playful parsonality.
最近、記事の更新が滞っていたのだが、これは仕事で考えたいことがあまりにも多く、帰ってきてからもなかなかそのことが頭を離れなかったからである。
次から次へと楽しい問題が舞い降りて充実した時間を過ごしていた。
キャッシュネームサーバの設定、社内サーバ構築とグループウェアの設定、管理しているコンテンツの管理方法の変更などなど…。
なかでも3週間くらいかけてハァハァ言いながら取り組んだ課題が、メールサーバの構築であった。
社内のメールサーバがQmail軸のちょっと古い環境だったので、ナウい環境にしたいということだった。
メールサーバの構築は今までずっと避けてきた課題であったのだが、避けるのもおかしくなかったのだな、と納得がいくくらい難しかった。
まず初めてメールサーバを立てようと思った場合、絶対にどこかで問題が生じる。
誰かが書いてくれている記事を見つけて、それ通りにやってもうまくいかないことが多い。
自分のサーバ環境と記事を掲載している人のサーバ環境は全く異なることも原因の一つだったりするが、まず第一にぶち当たる問題は「メールプロトコルをちゃんと知らない」ことだ。
メールプロトコルをちゃんと理解したうえでメールサーバを立てる人って、そんなにいるのかなぁ?
そんなこんなで、サーバ環境を整えつつ、メールプロトコルを理解しつつ、Google先生上のたくさんの記事を見つつメールサーバを構築した。
で、見出しの「ボクの人格はふざけてます」のことだが、どのようにふざけているかというと、このメールサーバ構築という課題に取り組んでいるとき、仕事中も他の仕事は秒速で終わらせて帰宅後も睡眠時間を削ってsshで向き合って向き合って、もう君以外愛せない、たとえどんなエラーを吐いたとしてもぉーおー、とキンキキッズになれそうなくらい没頭していた。
1週間経った頃、あそうか、ボクは人格破綻者なんだ、とハッキリ理解できた。
各メールプロトコルとメールエージェントの理解
実際にメールサーバを立てる際に、どのエージェント(デーモン)がどのプロトコルをどのように扱っているのか、という範囲がわからなく時があった。 それぞれの境界線をはっきりさせておくと後々設定していく内容が理解しやすいと思う。
エージェントとプロトコルの関係
David Byers davby@ida.liu.se IDA/ADIT/IISLAB ©2003–2004 David Byers Electronic Mail PRINCIPLES – DNS – ARCHITECTURES – SPAM. - ppt download
より抜粋
- MTA - Mail Transfer Agent
- MDA - Mail Delivery Agent
- MUA - Mail User Agent
- MRA - Mail Retrieval Agent
- MSA - Mail Submission Agent
- MAA - Mail Access Agent
こんなエージェントあるんや、って言うようなエージェントがある。
Postfixは多分、MTAとMSAに特化してるんだと思う。
DovecotがMDA、MRA、MAAを担ってるのかなという感じなのだが、実際各デーモンがどういった範囲でエージェントの作業をしているかはわかっていない…。
説明を少なめに、かつ分割します…
丁寧に書きすぎるとブログの範疇を超えてしまいそうなので、設定ファイルと簡潔な説明を心がけて記載しようと思う。
あまりにも設定数、設定ファイルが多い…。
というか、ちゃんとすべてをカバーして書けるかどうかも怪しい。
手順書というよりは、メモ書き程度で見るようにしてほしい。
環境
OS: CentOS Linux release 7.2.1511 (Core)
- postfix-2.10.1-6.el7.x86_64
- PostfixAdmin 2.93
- dovecot-2.2.10-5.el7.x86_64
- mariadb-5.5.47-1.el7_2.x86_64
- php-5.4.16-36.1.el7_2.1.x86_64
- RainLoop 1.10.0.107
パッケージインストール
$ sudo yum -y install mariadb \ postfix \ postfix-ssl \ dovecot \ dovecot-mysql.x86_64 \ httpd \ php \ php-mysql \ php-mbstring \ php-pear \ php5-mcrypt \ php-mcrypt \ php-imap \ cyrus-sasl \ cyrus-sasl-plain \ cyrus-sasl-md5 \ libapache2-mod-php \ libapache2-mod-php5
Postfixの設定ファイル
/etc/postfix/main.cf
myhostname = [FQDN] mydomain = [ドメイン名] myorigin = $mydomain inet_interfaces = all inet_protocols = ipv4 mydestination = localhost.$mydomain, localhost mynetworks = 192.168.0.0/24, 127.0.0.0/8, [アクセスを許可するIP] relayhost = [プロバイダのsmtpサーバ]:587 #OP25B対策のため home_mailbox = Maildir/ smtpd_banner = $myhostname ESMTP unknown #SMTP-Auth Settings smtp_use_tls = yes smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_mechanism_filter = plain smtp_sasl_security_options = noanonymous smtp_sasl_path = private/auth smtp_sasl_tls_security_options = noanonymous smtp_tls_CApath = /etc/ssl/certs/ca-certificates.crt smtp_tls_security_level = may smtp_tls_loglevel = 1 #SMTPS local_transport = local smtpd_use_tls = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_local_domain = [FQDN], [ドメイン名] smtpd_client_restrictions = reject_rbl_client bl.spamcop.net smtpd_tls_cert_file = /etc/postfix/mail.crt smtpd_tls_key_file = /etc/postfix/mail.key #smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt #smtpd_tls_key_file = /etc/postfix/mail.pem #broken_sasl_auth_clients = yes broken_sasl_auth_clients = no smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination smtpd_tls_security_level=encrypt smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache smtpd_tls_session_cache_timeout = 3600s #Virtual Domain w/MySQL virtual_mailbox_base = /var/spool/vmailbox virtual_minimum_uid = 100 virtual_uid_maps = static:10000 virtual_gid_maps = static:10000 virtual_transport = virtual virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf virtual_alias_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf virtual_mailbox_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf virtual_create_maildirsize = yes virtual_mailbox_extended = yes virtual_mailbox_limit_maps = mysql:/etc/postfix/sql/mysql_virtual_mailbox_limit_maps.cf virtual_mailbox_limit_override = yes virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later. virtual_overquota_bounce = yes
/etc/postfix/master.cf
smtp inet n - n - - smtpd submission inet n - n - - smtpd -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING - tlsmgr unix - - n 1000? 1 tlsmgr
OP25B対策
/etc/postfix/sasl_passwd
下記は、自分が契約しているプロバイダのメールアドレスとパスワードを設定する。 gmailを設定する方法もあるのだが、それは必要になった場合に書くようにしよう。
[smtpサーバ名]:ポート メールアドレス:パスワード
下記コマンドで/etc/postfix/sasl_passwd.dbが作成される。
$ sudo postmap /etc/postfix/sasl_passwd
main.confで設定したリレーホストへ接続し、ここで設定したプロバイダのメール認証情報で認証してメールリレーすることにより、OP25Bを回避して正しい相手先へメールを送信することができるようになる。
次回
PostfixからMariaDBへ発行するクエリの設定ファイルを書く。
メール設定がこれほどまでに大変だったとは、と痛感するドキュメント量になることであろう…。