読者です 読者をやめる 読者になる 読者になる

Carpe Diem

備忘録。https://github.com/jun06t

メールサーバの設定【外部対応】

Postfixを設定した時点で、指定のネットワーク内ではメールのやりとりが可能になります。しかし前述のPostfixの設では、 mynetworks = 127.0.0.0/8, 192.168.0.0/24 となっているのでそのサーバーマシン自身とそのマシンを含むLAN内でしかメールサーバーは機能していません。 外部も使えるようにする場合、スパム等に不正中継されないようにSMTPサーバーに認証機能を追加します。 SASL2のAuthentication(認証)がどのような種類と方法で行われるのかというと、 1. SASLチェック用デーモンを利用する場合 pwcheck_method: saslauthd mech_list: plain login # PAM,shadowではcram-md5等が使えないため、plainおよびlogin認証のみに限定します 2. SASL用パスワードファイルを利用する場合 pwcheck_method: auxprop auxprop_plugin: sasldb mech_list: cram-md5 digest-md5 plain login # これを指定しないと、CRAM-MD5が使えてもplainが優先されてしまうことがあります 3. Unixパスワードデータベースを利用する場合 pwcheck_method: pwcheck などがあります。多くのサーバ構築サイトでは3を使っていますが、今回は2で設定してみます。ソースによると それぞれに長所と短所があるわけですが、1の場合は暗号化の深みが浅いということです。平文(plain)での認証になるので安全対策としてはあんまり好ましくないです。しかし導入が比較的楽。2はmd5などのハッシュが使えるので暗号化の度合いが深くていいです。しかし、有線順位を明示的にしないと平文での認証も可能です。この方法では新たにパスワードファイルを自作する必要があるのですが、パスワードファイルが別になる分だけ安全です。3は、システムのパスワードファイルをそのままsaslauthで使ってしまおうというやり方です。パスワードファイルを作らなくていいので便利です。 とのことです。 ◆インストール # aptitude install libsasl2-modules sasl2-bin 一応インストールされたパッケージを確認してみます。 # dpkg -l | grep sasl2 libsasl2-2         2.1.23.dfsg1-1ubuntu3  Cyrus SASL - authentication abstraction libr libsasl2-modules   2.1.23.dfsg1-1ubuntu3  Cyrus SASL - pluggable authentication module sasl2-bin          2.1.23.dfsg1-1ubuntu3  Cyrus SASL - administration programs for SASL ◆SASL2の設定ファイルの編集 $ sudo emacs -nw /etc/default/saslauthd START=no ↓ START=yes 再起動します。 $ sudo service saslauthd restart 設定ファイルを編集したら今度はPostfixを編集します。 Postfixの設定 設定するのは以下のファイルです。 /etc/postfix/main.cf /etc/postfix/master.cf /etc/postfix/sasl/smtpd.conf [新規で作成] ◆master.cfの設定 $ sudo emacs -nw /etc/postfix/main.cf 以下を最後に追記します。Postfixのバージョンによってパラメータの記述が異なるので注意してください。 # SASL(SMTP-Auth) setting *original setting for omnioo mail server smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = $mydomain smtpd_sasl_application_name = smtpd (Postfix < 2.3) smtpd_sasl_path = smtpd (Postfix 2.3 and later) smtpd_recipient_restrictions =     permit_mynetworks,     permit_sasl_authenticated,     reject_unauth_destination smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes ◆master.cfの設定 #submission inet n - - - - smtpd ↓ submission inet n - - - - smtpd ルーターなどのTCPポート:587を開けておきます。また/etc/servicesに submission 587/tcp の行があるか確認してください。なかったら付け加えてください。 ◆smtpd.confの設定 $ sudo emacs -nw /etc/postfix/sasl/smtpd.conf pwcheck_method: auxprop auxprop_plugin: sasldb mech_list: cram-md5 digest-md5 plain login ◆認証ユーザーの登録 コマンドは以下の通りです。 # saslpasswd2 -c -u <ドメイン> <ユーザー名> 以下例です # saslpasswd2 -c -u example.com user Password: ******* (パスワードを入力) Again (for verification): ******* (パスワードを再入力) この認証アカウントを削除する場合は、 # saslpasswd2 -d -u <ドメイン> <ユーザー名> 登録したユーザーを確認するには、 # sasldblistusers2 user@example.com: userPassword 設定後は再起動します。 # sudo service saslauthd restart # sudo service postfix restart SMTP Authの動作確認 きちんと認証機能が設定されているかどうかをテストします。 # /usr/sbin/testsaslauthd -u <ユーザー名> -p *********** 0: OK "Success." 「0: OK "Success."」と表示されたら設定完了です。 「0: NO "authentication failed"」となったら駄目です。設定をもう一回見直してください。 しかしこの時点では、saslのコマンド内での設定が認証されているだけであってSMTPの認証がされているわけではありません。本来のSMTPの認証にはもうひと手続き必要です。 Postfixがsaslの認証用データベースを読み込めるようにする これらの情報は、「/etc/sasldb2」というファイルに保存されています。このファイルをPostfix起動ユーザが見れるように設定します。 # chgrp postfix /etc/sasldb2 # chmod 640 /etc/sasldb2 さらに、Postfixchroot環境で実行されている場合には、ハードリンクする必要もあります。Postfixchroot環境で動いているかどうかは、設定ファイル「/etc/postfix/master.cf」を見ればわかります。もしくは「Postfixでのchroot構築」のように、プロセスを見た時に「-c」が付いているか見てください。 # ps aux | grep postfix chrootじゃない場合 postfix 1914 0.0 0.3 2488 868 ? S 16:43 0:00 pickup -l -t fifo -u postfix 1915 0.0 0.3 2540 952 ? S 16:43 0:00 qmgr -l -t fifo -u chrootの場合 postfix 2019 0.0 0.3 2484 868 ? S 16:44 0:00 pickup -l -t fifo -u -c postfix 2020 0.0 0.3 2536 948 ? S 16:44 0:00 qmgr -l -t fifo -u -c 確認後、chroot環境で実行されている場合には # ln /etc/sasldb2 /var/spool/postfix/etc としてください。 再起動します。 # sudo service postfix restart # sudo service saslauthd restartSMTP認証の確認 # telnet localhost 25 [ENTER] Trying ::1... Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 example.com ESMTP Postfix (Ubuntu) ehlo example.com [ENTER] 250-example.com 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH PLAIN CRAM-MD5 LOGIN NTLM DIGEST-MD5 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN 250-AUTH PLAIN CRAM-MD5 LOGIN NTLM DIGEST-MD5でもってきちんと認証されていることがわかりります。 ここまでくれば外部からメールを受信できるようになります。 またOB25が設定されていないプロバイダにもメールを送信できると思います。 ◆メールログの確認 実際に認証して送信が出来ているかはメールログ/var/log/mail.logを確認します。使用した認証方法によりますが sasl_method=LOGIN, sasl_username=メールアドレス だったり sasl_method=CRAM-MD5, sasl_username=メールアドレス とあれば認証できています。ここに書かれていない場合は何らかの原因で認証できていないです。その場合mailコマンドでは送れますが(認証せずに済むため)、メールクライアントを使用する場合に認証エラーで送れなくなります。しっかりチェックしましょう。 ソース: PostfixでSMTP-AUTHを実装する方法(SASL2編) SMTP認証とSASL2の設定 SMTP Authenticationの導入(Postfix編) Postfix設定パラメータ Postfix SASL How