メール送受信の全体像
クライアントからメールを送るとメールサーバはそのメールを送信先へ配送します。配送されたメールは最終的に送信先の受信ボックスに届けられます。送信先のクライアントはメールを受け取るためサーバにアクセスし受け取ります。
この一連の流れではそれぞれ役割が分担されていて、バケツリレーのようにメールを配送していきます。そしてそれぞれの役割を理解することでメールの技術的なことを基本から理解することができます。
その役割は4つに分けられそれぞれ名前がついています。
■MUA(Mail User Agent)
メールを送受信するクライアントのこと。Thunderbirdやoutlookなどのメーラーがその役割を担当します。プロトコルはSMTP、POP3など。
■MTA(Mail Transfer Agent)
メールの配送・転送するサーバのこと。Postfixが担当します。プロトコルはSMTP。
■MDA(Mail Delivery Agent)
メールボックスにメールを配送するサーバのこと。Postfixが担当します。プロトコルはSMTP。
■MRA(Mail Retrieval Agent )
配送されたメールをMUAに渡すサーバのこと。dovecotが担当します。プロトコルはPOP3など。
今回設定するPostfixはMTA、MDA、dovecotはMRAになります。これらを意識して設定すると理解力が上がります。
Postfixの設定
全体像を理解した上でPostfixの設定を行っていきます。SSHでサーバにログインしPostfixを起動します。
service postfix start
ローカルからの送信時のFromの値を設定する [mydomain]と[myorigin]
起動するとメールを送信することができますが、デフォルトではローカルからでしか送信できません。とりあえずサーバからメールを送信してみましょう。mailコマンドで送信します。送信先は任意で設定し送信してください。
#メールコマンド mail 送信先メールアドレス
mail [email protected] Subject: test test .
メールを受信しメールの内容を確認すると差出人(from)がサーバのドメインになっていると思います。これはPostfixのmyoriginの設定がそのようになっているからです。この値を変えることでローカルからのメールを送信した場合、Fromの値を変えることができます。
vi /etc/postfix/main.cf
mydomain = sample.com myorigin = $mydomain
ログインしているアカウントがrootの場合、fromの値は[email protected]になります。myoriginの設定はそれほど重要ではないのでデフォルトのままで結構です。mydomainの値はweb-creators-hub.comなど任意のドメインを設定します。
外部からPostfixに通信できるようにする
デフォルトではPCからPostfixに通信することができません。これを解決するためにはiptables、OP25B対策、postfixの設定を行います。
iptableで25番と587番を開放
iptablesの設定を変更しポートを開放します。
vi /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 587 -j ACCEPT
再起動し反映。
service iptables restart
ここを開放してもまだ通信できせん。次にpostfixの設定を変更します。
inet_interfacesの設定
この設定を変更しないと外部から送信できません。これはポートがlocalhostからしかバインドできずLISTEN状態になっていないからです。これはnetstatコマンドで確認することができます。
netstat -ant | grep LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
これを外部からバインドできるように設定変更します。
vi /etc/postfix/main.cf
#inet_interfaces = localhost inet_interfaces = all
この設定はiptablesのような効果があります。ここをallにすると25番ポートとバインドでき通信ができるようになります。
設定を反映するため再起動します。
service postfix restart
もう一度ポートの状態を確認します。
netstat -ant | grep LISTEN
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN
これで外部からバインドできるようになりました。
OP25B対策
OP25B対策としてPostfixに587番ポートを使って通信できるように設定します。
vi /etc/postfix/master.cf #submission inet n - n - - smtpd #↓ submission inet n - n - - smtpd
再起動します。
service postfix restart
これで587番ポートがListen状態になり通信できるようになります。
念のためnetstatで状態を確認します。
netstat -ant | grep LISTEN
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN
587番ポートがListen状態になっています。
通信テスト
それでは実際に通信できるかクライアントからtelnetを使って通信します。
telnet sample.com 587 220 ~ Postfix
応答が返ってきたら通信成功です。
PCからメールを送信できるようにする
Postfixと通信できるようになりましたが、まだPCから送信することができません。これはデフォルトの設定で「ローカルのみ送信可能」という設定になっているためです。この設定を変更し送信できるようにします。以下の「mynetworks」がこれにあたります。
この設定にネットワークIPをを記入すると無条件(パスワードなどの認証なし)で配送する項目になります。そのためこの設定をミスると踏み台に利用されるため注意が必要です。
vi /etc/postfix/main.cf
#mynetworks = 127.0.0.0/8 mynetworks = 192.168.0.0/16 relay_domains = $mydestination
デフォルトでは「mynetworks」に127.0.0.0/8が記入されているので自サーバからしか送信することができません。これを「mynetworks = 192.168.0.0/16」に設定すると192.168.~からのIPアドレスに限り無条件で配送する設定になります。
「relay_domains」は無条件で配送する送信先ドメイン(to)を設定します。例えばここに「gmail.com」と設定するとgmail.comを送信先とするメールは無条件で配送されます。
この二つの設定は、基本的にデフォルト設定で問題ありません。特にVPSなどで設定する場合は、プライベートアドレスを設定する場面が少ないため設定することがありません。「mynetworks」以外からの送信は、次回に紹介する認証機能(SMTP-AUTH)を使用して送信します。
「mynetworks」の設定する場面
プライベートネットワーク内でなにかしらのシステムが管理者にアラートを通知するときなどによく使われます。
つづきはこちら
「クラウドテック」です。 掲載案件では平均月60万、週3~4日勤務の案件が豊富で生活スタイルに合わせた働き方を設計できます。 また福利厚生が充実し旅行、レジャー、家事代行、ヘビーシッター、健康診断など100種類以上を無料で使えます。
- 97%がリモートのお仕事
- 週4日、週3日OKのお仕事多数
- 登録社数74万件業界トップクラス
- 2〜4週間程度でお仕事決定