メールアカウントは以下とする。
user1@example.com
(1)postfixの設定
①インストール
#yum install -y postfix
②main.cfの設定
# vi /etc/postfix/main.cf
myhostname = mx.example.com ※myhostnameやmydomainを指定しなくても可能ではあるが、あちこちでここで設定した値を$myhostnameなどと使っている。なので、設定しておこう
mydomain = example.com
inet_interfeces=all
mydestination = $myhostname localhost.$mydomain $mydomain ※ $mydomainが含まれているものにしておこう。
mynetworks = 192.168.0.0/24 ←自分のグローバルIPアドレスを含むNWに変更
home_mailbox = Maildir/
sed(stream editor)で置換した方が早そうだ。
sedで流し込む場合は以下
sed -i /etc/postfix/main.cf \
-e "/#myhostname = host.domain.tld/a myhostname = mx.example.com" \
-e "/#mydomain = domain.tld/a mydomain = example.com" \
-e "/#inet_interfaces = all/ s/^#//" \
-e "/^inet_interfaces = localhost/ s/^/#/" \
-e "/^mydestination/ s/^/#/" \
-e "/#mydestination = \$myhostname, localhost.\$mydomain, localhost, \$mydomain\$/ s/^#//" \
-e "/#mynetworks = hash:\/etc\/postfix\/network_table/a mynetworks = 192.168.0.0\/24" \
-e "/#home_mailbox = Maildir/ s/^#//"
【補足】
・-i 上書き保存する。
・-eで複数の変換ができる。
・aをつけると、指定した行の後ろに追加(add)できる。
・sed -e 's/^#//g' でコメントアウトを外す
・^は行の先頭という意味
・行末に\$を入れているのは、上の^と逆で、行末を指定している。
・\/としたのは、文字列に/が入っているから。\で打ち消している。
・-e "/^mydestination/ s/^/#/" \ のところは、先頭に#を入れるだけなので、全部書く必要はないので、先頭のmydestinationだけにした。というか、全部書くと$が特殊文字なので、うまくいかなかった。\でエスケープすればいいだろうが…
(2)Dovecotの設定
Dovecotがインストールされているかの確認
yum list dovecot
入っていなかったらインストール
yum install -y dovecot
・設定ファイルの編集
vi /etc/dovecot/dovecot.conf
実は、設定変更は不要
protocolsで、imap pop3 などプロトコルを設定できるが、デフォルトのままとする。
vi /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir
→アンコメント + メールフォルダの場所を指定
vi /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no
→アンコメントし、noに変更: プレーンテキストでのID PASSやり取りを許可
vi /etc/dovecot/conf.d/10-ssl.conf
ssl = no
→ssl を noに変更 SSL必須を解除
systemctl start dovecot
systemctl enable dovecot
■ユーザの作成
useradd -s /sbin/nologin user1
passwd user1
以上である。
これで、クライアントソフトでメールを送受信できるはず。
■メール設定の流し込み
以下でいいと思うが、うまくメールが送れないので、要確認。実際のクライアントソフトを入れればうまくいくかもしれないが・・・
#メール設定
#postfixの設定
yum install -y postfix
#main.cfの設定
cp /etc/postfix/main.cf /etc/postfix/main.cf.org
sed -i /etc/postfix/main.cf \
-e "/#myhostname = host.domain.tld/a myhostname = mx.sec.dom" \
-e "/#mydomain = domain.tld/a mydomain = sec.dom" \
-e "/#inet_interfaces = all/ s/^#//" \
-e "/^inet_interfaces = localhost/ s/^/#/" \
-e "/^mydestination/ s/^/#/" \
-e "/#mydestination = \$myhostname, localhost.\$mydomain, localhost, \$mydomain\$/ s/^#//" \
-e "/#mynetworks = hash:\/etc\/postfix\/network_table/a mynetworks = 0.0.0.0\/0" \
-e "/#home_mailbox = Maildir/ s/^#//"
systemctl restart postfix
#Dovecotの設定
yum install -y dovecot
#10-mail.confアンコメント
cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.org
sed -i /etc/dovecot/conf.d/10-mail.conf -e "/# mail_location = maildir/ s/^#//"
#10-auth.confの設定
cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.org
sed -i /etc/dovecot/conf.d/10-auth.conf \
-e "/#disable_plaintext_auth = yes/a disable_plaintext_auth = no" \
-e "/#disable_plaintext_auth = yes/ s/^#//"
#10-ssl.confの設定
cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.org
sed -i /etc/dovecot/conf.d/10-ssl.conf \
-e "/ssl = required/a ssl = no" \
-e 's/ssl = required/#ssl = required/g'
systemctl start dovecot
systemctl enable dovecot
----------以下はAWSでやろうと思ったが、セキュリティ対策をしないシンプルなSTMPだと送受信ができないようだった。なので、最後まで行けていない。ローカルに立てるように変更してしまった。単なるメモである。
◆DNSサーバ
DNSサーバの設定が必要。AWSでは、DNSの名前解決をさせるために、セキュリティグループでDNSのポートを空ける必要があるよね?
DNS(UDP)とDNS(TCP)を、全てのポート、全てのソース(0.0.0.0/0)で空ける。
■メールサーバ
EC2でやりたいので、以下の手順でやってみるか
https://qiita.com/ghogho-seki/items/e79cc3d3a98fba900dfc
※EC2だと、迷惑メール防止のためにいろいろと制限があり、結構難しいかも。
※apacheなどは、起動さえすれば、デフォルトページが見える。だが、Postfixの場合は、そもそもlocalhostからしか受け付けない設定なので、main.cfを変えないとそもそも動かない。
(1)環境の確認
sub.momiji.pwドメインのメールサーバを構築する。
google.co.jpのようなものとイメージしてもらいたい。
メールアドレスは、user1@sub.momiji.pw
このメールアドレスに、自分のPCやWebメールと送受信してみよう。
今回もAWSでやってみる。
なので、AWSでセキュリティポリシーを空けておく。インバウンドとアウトバウンドの両方かな?
(2)Postfixの設定
①インストール
・Postfixが入っているかを確認・・・すでに入ってる
#yum list postfix
・・
postfix.x86_64 2:2.10.1-6.amzn2.0.3 installed
・自動起動もONになっている
# systemctl is-enabled postfix
enabled
②設定ファイルの設定
設定ファイルは/etc/postfix/main.cf
では、このファイルを設定していこう。設定するところは結構ある。全部設定しないと動かないのかは不明
今回設定したのは、以下だけ。このあと、解説を入れる。
# vi /etc/postfix/main.cf
myhostname = mx.sub.momiji.pw
mydomain = sub.momiji.pw
inet_interfeces=all
mydestination = $myhostname localhost.$mydomain $mydomain
mynetworks = 153.176.49.0/24 ←自分のグローバルIPアドレスを含むNWに変更
home_mailbox = Maildir/
# vi /etc/postfix/main.cf
変更するところだけを記載する。
・ myhostname = mx.sub.momiji.pw ←メールサーバのFQDN …これが、この設定ファイルで記載される $myhostname の値になる。#でコメントアウトされているので変更
・ mydomain = sub.momiji.pw ←メールのドメイン・・・同様に、これが、この設定ファイルで記載される$mydomain の値になる。
・ inet_interfeces=all ←インターフェースを変更
※設定としては、113行目のコメントを外し、116をコメントアウトする。つまり、inet_interfeces をlocalhostからallに変更する。
・mydestination = $myhostname localhost.$mydomain $mydomain $mydomainも加えた方がいいので、コメントアウトをうまく活用して、自分のドメインを許可する。
・mynetworksで、信頼するネットワークを指定する。ここで書いたhost やネットワークからのメールを処理する。なので、踏み台にされないためにも、限定すべきである。
普通は、192.168.1.0/24などとサブネットを書く。AWSで試験的にテストするのであれば、自分のグローバルIPアドレスを書けばいいだろう。
mynetworks=203.0.113.24/32
153.176.49.55
・home_mailbox = Maildir/
※コメントを外す。メールボックスでのメールの保存形式には、mbox形式とMaildir形式がある。mbox方式は古くからある方式で。一つのファイルで管理する。Maildirは一つずつのファイルとして管理
https://go-journey.club/archives/9377
--------これ以降はオプション。必須ではない。
#relay_domains = $mydestination
→中継処理、たとえば、外部メールサーバから内部メールサーバに転送するような場合の設定(オプション)。デフォルトではコメントアウトされている。
・myorigin = $mydomain
→@より左側、たとえばuser1でメールを送った場合に、myoriginで記載した内容を補足し、user1@sub.momiji.pwとしてくれる。必要ならば ※コメントアウトをはずす
・smptd_banner = $myhostname ESMTP unknown
→使っているSMTPソフトの隠蔽。もちろん、myhostnameを、smptd_banner =の前に適切に設定しておかなければいけない。
・以下を3行追加
smtpd_recipient_restrictions =
permit_mynetworks
reject_unauth_destination # 追加
→メール送信リクエストを受けた際に、拒否するルールを記載。permit_mynetworksは別途定義するmynetworks以外のネットワークからのリクエストを拒否。reject_unauth_desctinationは宛先が不正(存在しないユーザへの配送リクエスト等)を受け付けない
・smtpd_sender_restrictions =
reject_unknown_sender_domainなどで送信者チェックが行える。メールアドレスのFrom部分のチェックである。(詐称されたらチェックできないが)。
・message_size_limit = 10485760 # 追加 数値は任意
→メールボックスのマックスサイズ
◆Submissionポート有効化
→多くのプロバイダでは、OP25Bにより、25番で送れないことがほとんど。なので、設定しないと実行上は難しいだろう。
vi /etc/postfix/master.cf
submission inet n - n - - smtpd
→コメントアウト解除 サブミッションポートでの配送を許可
-o smtpd_sasl_auth_enable=yes
→アンコメント: SMTP認証を有効化
※SASL(Simple Authentication and Security Layer)
yum -y install cyrus-sasl
→SMTP認証セットアップ
systemctl start saslauthd
→起動
postfix の再起動が必要
③書式チェックは以下。これでエラーが出なければチェックOK
#postfix check
設定が終わったら、postfixの再起動
④ユーザの作成
※/etc/skelにて、個別ではなく雛形を作ることが一般的のようだが、どうやら、この手順は不要のようだ。自然にフォルダも作成される。
mkdir -p /etc/skel/Maildir/{new,cur,tmp}
chmod -R 700 /etc/skel/Maildir/
useradd -s /sbin/nologin user1
→user作成(sshログインはできないユーザとして作成)
passwd user1
→パスワード設定
(2)Dovecotの設定
以下がシンプル
https://dev.classmethod.jp/cloud/aws/mail_server_with_postfix_and_dovecot/
Dovecotがインストールされているかの確認
yum list dovecot
入っていなかったらインストール
yum install -y dovecot
・設定ファイルの編集
vi /etc/dovecot/dovecot.conf
実は、設定変更は不要
protocolsで、imap pop3 などプロトコルを設定できるが、デフォルトのままとする。
vi /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir
→アンコメント + メールフォルダの場所を指定
vi /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no
→アンコメントし、noに変更: プレーンテキストでのID PASSやり取りを許可
vi /etc/dovecot/conf.d/10-ssl.conf
ssl = no
→ssl を noに変更 SSL必須を解除
systemctl start dovecot
systemctl enable dovecot
■ユーザの作成
useradd -s /sbin/nologin user1
passwd user1
AWSにて、110, 143ポートで外部から接続できるようにする。