【基本】理解しながらPostfixの設定を行う

メール送受信の全体像

クライアントからメールを送るとメールサーバはそのメールを送信先へ配送します。配送されたメールは最終的に送信先の受信ボックスに届けられます。送信先のクライアントはメールを受け取るためサーバにアクセスし受け取ります。

この一連の流れではそれぞれ役割が分担されていて、バケツリレーのようにメールを配送していきます。そしてそれぞれの役割を理解することでメールの技術的なことを基本から理解することができます。

その役割は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 test@hogehoge.com
Subject: test
test
.

メールを受信しメールの内容を確認すると差出人(from)がサーバのドメインになっていると思います。これはPostfixのmyoriginの設定がそのようになっているからです。この値を変えることでローカルからのメールを送信した場合、Fromの値を変えることができます。

vi /etc/postfix/main.cf
mydomain = sample.com
myorigin = $mydomain

ログインしているアカウントがrootの場合、fromの値はroot@sample.comになります。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」の設定する場面

プライベートネットワーク内でなにかしらのシステムが管理者にアラートを通知するときなどによく使われます。

つづきはこちら

シェアする

  • このエントリーをはてなブックマークに追加

フォローする