Project

General

Profile

SMTP認証(SMTP-Auth)

  • PostfixのSMTP認証に関するページです。
  • SMTPサーバの接続に認証を設けることで、不正なメールの送信や
    不正なメールの踏み台送信を防ぐことが出来ます。
  • 実装には幾つかの方法がありますが、今回は簡単なOSアカウントとの
    連携(pam-unix)を利用して実装します。

前提条件

  • このソフトウェアの構築には下記の導入が前提となります。
    • Postfix は構築済みとします。
    • Cyrus-SASL2

インストール

  • yumまたはrpmコマンドで適宜インストールを行います。
    # yum install cyrus-sasl cyrus-sasl-plain cyrus-sasl-md5
    

設定ファイル編集

  • Postfix側にも設定を追記します。
    # vi /etc/postfix/main.cf
    # ------------------------------------------------------
    # 変更箇所のみ記載します。
    # SMTP-Auth
    # SASL認証有効化
    smtpd_sasl_auth_enable = yes
    # mynetworks以外で匿名での接続を拒否
    smtpd_sasl_security_options = noanonymous
    # 規格外の動作に対応
    broken_sasl_auth_clients = yes
    # RCPT TO コマンドの場面で適用するアクセス制限。SMTP_Authを利用したクラアントを許可
    smtpd_recipient_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
        reject_unauth_destination,
        check_policy_service unix:private/policy
    
    # Auth コマンドをサポートしないMTA(Outlook等)はサポートしない
    broken_sasl_auth_clients = yes
    
  • Postfixのサービス設定も変更します。
    saslの設定有効化と、アクセス制御を行います。
    (認証成功した場合許可、それ以外は拒否)
    # vi /etc/postfix/main.cf
    # ------------------------------------------------------
    # 変更箇所のみ記載します。
    smtp      inet  n       -       n       -       -       smtpd
      -o smtpd_sasl_auth_enable=yes
      -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
    
  • サービスの設定・再起動を行います
    # service postfix restart
    

OSユーザとの連携

  • OSユーザとの連携を指定する
    vi /etc/sysconfig/saslauthd 
    ------------------------------
    # Mechanism to use when checking passwords.  Run "saslauthd -v" to get a list
    # of which mechanism your installation was compiled with the ablity to use.
    #MECH=pam
    MECH=shadow
    
  • サービスの設定・再起動を行います
    # systemctl enable --now saslauthd
    
  • 簡易動作確認
    # testsaslauthd -u OSユーザ名 -p パスワード
    0: OK "Success." 
    

動作確認

  • 準備として「メールアドレス2回パスワード1回」の文字列からハッシュを作成する
    printf "%s\0%s\0%s" メールアドレス メールアドレス パスワード | openssl base64 -e | tr -d '\n'; echo
    出力された文字列をコピーしておく
    
  • 他のマシンからtelnetで接続する
    telnet IPアドレス 25(または587)
    
  • HELOを入力
    helo test
    
  • 認証を発行する
    AUTH PLAIN 先ほどコピーした文字列を貼り付ける
    235 2.7.0 Authentication successful
    
  • 認証に成功することを確認

 

戻る