11.SMTP AUTH の実装
CentOS 5 には saslauthd がインストールされていたことは前述しました。まずはsaslauthd がサポートしている認証形式を確認しておきます。
>saslauthd -v
saslauthd 2.1.22
authentication mechanisms: getpwent kerberos5 pam rimap shadow ldap
ldap がリストにあるので問題ありません。OSのパッケージによっては ldap が別モジュールになっている場合がありますが、CentOS の場合は基本パーケージに ldap サポートが含まれています。
次に設定ファイルを修正していきます。まずはメールサーバーの認証に sasl を使用するように設定します。
/usr/lib/sasl2/smtpd.conf ファイル
pwcheck_method: saslauthd
mech_list: plain login
ここではログインメカニズムを plain に設定しておきます。次に saslauthd の設定ファイルである saslauthd ファイルを編集します。
/etc/sysconfig/saslauthd ファイル
#変更箇所
MECH=ldap
#追加箇所(起動オプション)
FLAGS=”-O /etc/saslauthd.conf -c”
認証方法を LDAP にするとともに ldap 接続情報の記述ファイルとなる saslauthd.conf ファイルのパスをオプションで渡すように設定します。
/etc 配下に上で指定したファイル saslauthd.conf を作成します。
/etc/saslauthd.conf ファイル
ldap_servers: ldap://localhost:389/
ldap_auth_method: bind
ldap_bind_dn: cn=mtaAdmin,ou=Service,dc=hogehoge,dc=com
ldap_bind_pw: パスワード
ldap_search_base: ou=mailsys,dc=hogehoge,dc=com
ここに記述する接続情報はサーバーパス、認証メソッド、検索ベースが基本で、ここでは bind メソッドを使用するのでバインドユーザーのdnとパスワードも記述しています。
サービスを起動して登録済みテスト用ユーザーで接続のテストをしてみます。
>service saslauthd start
>testsaslauthd -u test -p パスワード
0: OK “Success.”
上のようになれば接続成功です。
次に postfix の設定ファイルに SMTP AUTH を使用するよう設定を追記していきます。加えていくつかのセキュリティー設定も追記しておきます。
/etc/postfix/main.cf ファイル追記部分
# ACCESS CONTROL
smtpd_client_restrictions = check_client_access hash:/etc/postfix/access
check_client_access cidr:/etc/postfix/access.cidr
reject_unknown_client
smtpd_sender_restrictions = permit_auth_destination
reject_authenticated_sender_login_mismatch, permit
smtpd_recipient_restrictions = permit_mynetworks
check_recipient_access hash:/etc/postfix/recipient
permit_sasl_authenticated
reject_unauth_destination????????????????????????????? ?
smtpd_client_connection_count_limit = 10
#ERROR CONTROL
smtpd_recipient_limit = 10
smtpd_soft_error_limit = 5
smtpd_hard_error_lomit = 10
smtpd_error_sleep_time = 2
# SMTP AUTH Configration
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sender_login_maps = ldap:/etc/postfix/login-address.cfg
#RATE CONTROLS
anvil_rate_time_unit = 60
smtpd_client_connection_rate_limit = 6
smtpd_client_message_rate_limit = 20
smtpd_client_recipient_rate_limit = 20
smtpd_client_event_limit_exceptions = 127.0.0.1
anvil_status_updata_time = 3600
かなりたくさんありますが、昨今のインターネット状況を考えるとこのくらいのセキュリティー設定が最低限必要かと思います。
では、一つずつ説明していきましょう。
まず最初の項目 smtpd_client_restrictions は接続クライアント(端末)に関するアクセス制御になります。設定している項目は3種類で、
check_client_access hash:/etc/postfix/access
check_client_access cidr:/etc/postfix/access.cidr
reject_unknown_client
になります。上からアクセスを許可するクライアントを FQDN 形式で記述した access ファイルと IPアドレス形式で記述した access.cidr ファイル、不明クライアントのアクセス拒否という設定になります。上に記述したパスに同名.db というハッシュファイルを作成しておく必要があります。
例えば access ファイルであれば以下のように記述し postmap コマンドで .db ファイルを作成します。
/etc/postfix/access ファイル
.hogehoge.com??? OK
.hahuhahu.jp?????? OK
>postmap /etc/postfix/access
hogehoge.com というドメインと hahuhahu.jp というドメインのクライアントの接続を許可しています。ヴァーチャルで取り扱う全てのドメインを記述しておく必要があります。上の postmap コマンドを実行すると access.db というファイルが作成されます。 postfix の設定ファイル内で access と書いてあっても実際には access.db ファイルを見に行っているので .db ファイルがなかった場合にはエラーがログに出力されます。
次の項目 smtpd_sender_restrictions はメール送信者のアクセス制御です。ここでは2項目、
permit_auth_destination
reject_authenticated_sender_login_mismatch, permit
を設定しています。最初の行で自サーバー宛のメール以外を拒否するように、次の行で認証できない送信者は拒否するように設定しています。最初の行は不正中継を拒否するために絶対必要な設定で2行目は SMTP AUTH 用の設定になります。
次の項目 smtpd_recipient_restrictions はメール中継に関する制御で、
permit_mynetworks
check_recipient_access hash:/etc/postfix/recipient
permit_sasl_authenticated
reject_unauth_destination
の4項目を設定しています。最初の行で $mynetworks を優先的に許可して2行目に受信者マップファイル(メーリングリストなどで使用予定)を指定、3行目で SMTP AUTH の設定をしています。4行目は $mydestination 以外への要求を拒否します。postfix の場合きりがないほど細かな設定が可能ですが、だいたいこの程度の内容で不正リレーは防ぐことができます。
smtpd_client_connection_count_limit は同じ送信元からの同時接続数を制限する設定です。
#ERROR CONTROL に記述しているのは postfix の遅延応答機能を利用したスパム対策で、宛先不明エラーなどが起こった時に遅延応答をさせます。これを利用することで一定時間内に複数のエラーメールを送信してくる相手に対しては接続拒否をさせることが出来るようになります。
最初の行で1つの接続で許可する宛先件数を10件に制限し、次の行で遅延応答を開始するエラー回数を指定しています。接続拒否する最大件数を3行目で10件に指定して最後の行で遅延応答を2秒に設定しています。
# SMTP AUTH Configration セクションは文字通りSMTP AUTH そのものの設定で saslauthd を使用するための設定と送信者マップファイルの指定を記述しています。
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sender_login_maps = ldap:/etc/postfix/login-address.cfg
ここでは login-address.cfg というファイルを指定していますが、このファイル内容は postfix の ldap 用設定ファイルとほとんど一緒です。すでに作成してある ldap-account.cf ファイルをコピーして作成します。
/etc/postfix/login-address.cfg ファイル
server_host = 127.0.0.1
server_port = 389
timeout = 5
search_base = ou=mailsys,dc=hogehoge,dc=com
query_filter = (mail=%s)
result_attribute = uid
result_format = %s
scope = sub
bind = yes
bind_dn = cn=mtaAdmin,ou=Service,dc=hogehoge,dc=com
bind_pw = パスワード
最後はレートコントロールです。ここでは単位時間内のメール送信数、接続数、宛先数などを制限しています。ここでは1分間の単位時間内に6接続、20宛先、20メッセージ、ローカルホストからの制限はなしに設定しています。
設定が完了したら postfix をリロードして設定を反映させテストメールを送信してみます。最初はメールクライアントに認証設定をせずに送信してみてエラーが出ることを確認します。次に認証設定を入れて送信できれば SMTP AUTH の実装は完了です。