【メールサーバ】Postfix設定その5(再送)

【メールサーバ】root宛メール

  • root宛メール削除
    「/var/mail/root」と「/var/spool/mail/root」のファイルサイズが増えていたので、
    mailコマンドで確認してみたところ

    No mail for root
    

    メールがないと記載されたが、ファイルサイズがあって気持ち悪いので、
    内容を待避し、削除することにしました。

    1cat /var/mail/root > /home/ユーザ名/mail.txt
    2cat /dev/null > /var/mail/root

    これで「/var/mail/root」と「/var/spool/mail/root」のファイルサイズが0になりました。

  • root宛メール転送確認

    「/var/mail/root」と「/var/spool/mail/root」のファイルサイズが0KBのままで
    プロバイダのメールアドレスにテストメールが届きます。

【メールサーバ】PostfixとDovecotの設定値まとめ

  • Postfixデフォルトと異なる値一覧

    Postfixに関わる全てのデフォルト値と異なる値が出力されます。
    設定した覚えないのないキーと値も出ますが、そういうものだと思い込みました。

【メールサーバ】PostfixとDovecotのSSL導入

  • サーバー証明書作成

    1cd /etc/pki/tls/certs/
    2make mail.pem
    下記内容を入力
    ~略~
    Country Name (2 letter code) [XX]:JP
    State or Province Name (full name) []:Tokyo
    Locality Name (eg, city) [Default City]:Akihabara
    Organization Name (eg, company) [Default Company Ltd]:OreOreCA
    Organizational Unit Name (eg, section) []:
    Common Name (eg, your name or your server's hostname) []:mail.z-area.net
    Email Address []:ユーザ名@mail.z-area.net
    
  • Postfix設定(SSL)

    下記内容を最終行に追加
    smtpd_use_tls = yes
    smtpd_tls_cert_file = /etc/pki/tls/certs/mail.pem
    smtpd_tls_key_file = /etc/pki/tls/certs/mail.pem
    smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
    
    1cp -pi /etc/postfix/master.cf /etc/postfix/master.cf.org
    2vi /etc/postfix/master.cf
    下記内容を変更(コメントアウトを外す)
    #smtps     inet  n       -       n       -       -       smtpd
    #  -o smtpd_tls_wrappermode=yes
    #  -o smtpd_sasl_auth_enable=yes
    #  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
    ↓
    smtps     inet  n       -       n       -       -       smtpd
      -o smtpd_tls_wrappermode=yes
      -o smtpd_sasl_auth_enable=yes
      -o smtpd_client_restrictions=permit_sasl_authenticated,reject
    
    下記内容がコメントアウトされていないことを確認
    tlsmgr    unix  -       -       n       1000?   1       tlsmgr
    
  • ポート開放と閉鎖

    SMTP(SSL)では465番ポートを利用し、
    POP(SSL)では995番ポート、IMAP(SSL)では993番ポートを利用するため、
    利用状況に合わせてポートを開放します。

    POPで利用していた110番ポートは閉じました。
    SMTPで利用していた25番ポートは閉じた場合、
    メール受信の制限確認等で利用しているようで、
    閉じると外部からメールが届かなくなったため、開放したままにしています。
    内部から内部へは閉じてても届くので、その辺は調査しないと不明です。

    1iptables -I INPUT 8 -p tcp -m tcp --dport 465 -j ACCEPT
    2iptables -I INPUT 9 -p tcp -m tcp --dport 995 -j ACCEPT
    3iptables -D INPUT -p tcp -m tcp --dport 110 -j ACCEPT
    4service iptables save
    Chain INPUT (policy ACCEPT)
    num  target     prot opt source    destination
    1    ACCEPT     all  --  anywhere  anywhere     state RELATED,ESTABLISHED
    2    ACCEPT     icmp --  anywhere  anywhere
    3    ACCEPT     tcp  --  anywhere  anywhere     state NEW tcp dpt:ssh
    4    ACCEPT     tcp  --  anywhere  anywhere     tcp dpt:http
    5    ACCEPT     tcp  --  anywhere  anywhere     tcp dpt:https
    6    ACCEPT     tcp  --  anywhere  anywhere     tcp dpt:urd
    7    ACCEPT     tcp  --  anywhere  anywhere     tcp dpt:pop3s
    8    REJECT     all  --  anywhere  anywhere     reject-with icmp-host-prohibited
    
  • メーラーの設定

    • 詳細設定タブ

【メールサーバ】PostfixとDovecot起動

  • PostfixとDovecotの動作確認
    動作確認にはWindowsLiveメールを利用しました。
    初回起動するとアカウントの追加が立ち上がりますが、ここでは一旦適当に入力します。
    次に追加されたアカウントを右クリックからプロパティを選択。
    下記の通りに入力します。
    特に記載のない項目はデフォルト設定としています。

    • 全般タブ
    • サーバータブ

      注意点として受信メールサーバーのパスワードは
      ユーザー名に合致するLinuxのパスワードを入力します。
      (SMTP-Authは送信用のため)
    • サーバータブの送信メールサーバーの設定ボタン

      注意点として送信メールサーバーのパスワードは
      SMTP-Authの設定で設定したパスワードを入力します。

    設定が完了したら下記内容を確認します。

    ローカルLANで同一ユーザ同士でメールの送受信
    ローカルLANで他ユーザ間でメールの送受信
    ローカルLANで外部(プロバイダやgmail)との送受信
    ローカルLANで携帯との送受信
    外部LAN(会社や公衆LAN)で同一ユーザ同士でメールの送受信
    外部LAN(会社や公衆LAN)で他ユーザ間でメールの送受信
    外部LAN(会社や公衆LAN)で外部(プロバイダやgmail)との送受信
    外部LAN(会社や公衆LAN)で携帯との送受信
    

    外部LANでの確認は後述するOpenSSLの適用を行ってから実施します。

  • 踏み台確認
    自宅メールサーバーが第三者中継に利用されない設定になっているかを確認します。
    下記サイト説明を読んだ上で利用します。
    http://www.rbl.jp/svcheck.php

    19個前後のテストが実施され、下記内容が出力されれば問題ありません。

    第三者中継テストの結果
    全てのテストが行われました, no relays accepted.
    

【メールサーバ】メール利用のポート開放

  • ポート開放
    ルーターの設定で25番ポート(SMTP用)と
    110番ポート(POP用)または143番ポート(IMAP用)を開放し、
    iptablesでも上記ポートを開放します。

    Chain INPUT (policy ACCEPT)
    num  target     prot opt source    destination
    1    ACCEPT     all  --  anywhere  anywhere     state RELATED,ESTABLISHED
    2    ACCEPT     icmp --  anywhere  anywhere
    3    ACCEPT     tcp  --  anywhere  anywhere     state NEW tcp dpt:ssh
    4    ACCEPT     tcp  --  anywhere  anywhere     tcp dpt:http
    5    ACCEPT     tcp  --  anywhere  anywhere     tcp dpt:https
    6    REJECT     all  --  anywhere  anywhere     reject-with icmp-host-prohibited
    

    5番目と6番目の間にメール用のポートを設定します。

    1iptables -I INPUT 6 -p tcp -m tcp --dport 25 -j ACCEPT
    2iptables -I INPUT 7 -p tcp -m tcp --dport 110 -j ACCEPT
    3service iptables save
    Chain INPUT (policy ACCEPT)
    num  target     prot opt source    destination
    1    ACCEPT     all  --  anywhere  anywhere     state RELATED,ESTABLISHED
    2    ACCEPT     icmp --  anywhere  anywhere
    3    ACCEPT     tcp  --  anywhere  anywhere     state NEW tcp dpt:ssh
    4    ACCEPT     tcp  --  anywhere  anywhere     tcp dpt:http
    5    ACCEPT     tcp  --  anywhere  anywhere     tcp dpt:https
    6    ACCEPT     tcp  --  anywhere  anywhere     tcp dpt:smtp
    7    ACCEPT     tcp  --  anywhere  anywhere     tcp dpt:pop3
    8    REJECT     all  --  anywhere  anywhere     reject-with icmp-host-prohibited
    

    下記サイトでポートの開放を確認します。
    http://www.cman.jp/network/support/port.html

【メールサーバ】メール用のFQDN追加

  • FQDN設定
    メール用のFQDNとして「mail.z-area.net」を追加するため、
    MyDNSに設定を行います。
    MyDNSにログイン後、左メニューの「DOMAIN INFO」をクリックし、
    下記に従い入力します。

    Domain* : (FQDN)
    z-area.net
    
    MX : (Hostname, Priority. FQDN)
    空欄
    
    Hostname*, Type*, Content, Delegateid or your id. (Hostname is not FQDN)
    mail, A, 空欄, mydnsXXXXXX
    www, A, 空欄, mydnsXXXXXX
    

    CHECKボタンを押下します。

  • MXの設定について追記
    MyDNSのMXの設定について他の構築サイトを確認すると
    「mail」を設定している人が多かったですが、私の場合は「mail」を設定すると、
    メールが「ユーザ名@mail.z-area.net」であれば外部とも送受信可能ですが、
    「ユーザ名@z-area.net」では外部から受信出来ませんでした。

    そこでMXを空欄で設定したところ、
    メールが「ユーザ名@z-area.net」でも外部から送受信することができました。
    要勉強です。

    MXを空欄で設定した後に再度、設定画面を開くと下記の通りになっていました。

    Domain* : (FQDN)
    z-area.net
    
    MX : (Hostname, Priority. FQDN)
    z-area.net
    
    Hostname*, Type*, Content, Delegateid or your id. (Hostname is not FQDN)
    mail, A, 空欄, mydnsXXXXXX
    www, A, 空欄, mydnsXXXXXX
    

【メールサーバ】メール利用のユーザ追加

メールを利用するユーザを追加します。

  • 既存ユーザにメール利用させる場合
    「【CentOS】Postfix設定その2(SMTP-Auth)」の下記どちらかの対応を行う。
    Linuxのパスワードと同じパスワード利用する場合
    Linuxのパスワードと異なるパスワード利用する場合
  • 新規ユーザにメール利用させる場合(SSHも利用可)

    1useradd ユーザ名
    2passwd ユーザー名

    「【CentOS】Postfix設定その2(SMTP-Auth)」の下記どちらかの対応を行う。
    Linuxのパスワードと同じパスワード利用する場合
    Linuxのパスワードと異なるパスワード利用する場合

  • 新規ユーザにメール利用させる場合(SSHも利用不可)

    1useradd -s /sbin/nologin ユーザ名
    2passwd ユーザ名

    「【CentOS】Postfix設定その2(SMTP-Auth)」の下記どちらかの対応を行う。
    Linuxのパスワードと同じパスワード利用する場合
    Linuxのパスワードと異なるパスワード利用する場合

  • Maildirディレクトリ作成
    Maildirディレクトリを作成します。

    1mkdir /home/ユーザ名/Maildir
    2chmod 700 /home/ユーザ名/Maildir
    3chown ユーザ名:ユーザ名 /home/ユーザ名/Maildir

    新規ユーザ追加時に自動的にMaildirディレクトリを作成できる手順もあるようですが、
    自身で作成したいので設定は行いませんでした。

【メールサーバ】Dovecot設定

  • Dovecot設定

    下記内容を変更
    #protocols = imap pop3 lmtp
    ↓
    protocols = imap pop3
    
    1cp -pi /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.org
    2vi /etc/dovecot/conf.d/10-mail.conf
    下記内容を追加
    # メールボックス形式
    # Postfixの設定でメールボックスの形式をMaildir形式にしているため、
    # Dovecotの設定でもMaildir形式に変更します。
    mail_location = maildir:~/Maildir
    
    # chroot設定
    # 通常ユーザであれば「/home/ユーザ名」以下のディレクトリはアクセスできますが、
    # 上位ディレクトリである「/home」ディレクトリはroot所有者であるため、
    # アクセスが禁止されています。
    # しかし、メールボックスは「/home/ユーザ名/Maildir」に配置しているため、
    # この設定で一時的にアクセスを許可します。
    valid_chroot_dirs = /home
    
    1cp -pi /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.org
    2vi /etc/dovecot/conf.d/10-auth.conf
    下記内容を変更
    # テキスト認証を許可
    # この設定を利用する場合、後述するOpenSSLでのメールサーバー間の通信内容暗号化を行う。
    disable_plaintext_auth = yes
    ↓
    disable_plaintext_auth = no
    
    auth_mechanisms = plain
    ↓
    auth_mechanisms = plain login