[postfix]

Postgreyの設定めも / 2006-08-13 (日)

準備しとくもの

  • postgreyアカウント
  • "/var/spool/postfix/postgrey"ディレクトリ
  • Net::Server
  • IO::Multiplex
  • BerkeleyDB

起動スクリプト

#! /bin/sh

pidfile="/var/run/postgrey.pid"

case "$1" in

start) echo "Starting Postgrey Server..." `/usr/libexec/postfix/postgrey --inet=10023 -d --pidfile=$pidfil

e --delay=1800 --max-age=7`

;; stop) echo -n "Stop Postgrey Server..." kill `cat $pidfile` rm $pidfile echo ;; restart) "$0" stop "$0" start ;; *) echo "Usage: $0 {start|stop|restart}" exit 1

esac

exit 0


参考リンク


[postfix]

SMTP AUTH - 設定 / 2006-02-28 (火)

/usr/lib/sasl2/smtpd.conf

インストールしただけでは作られていないので新規に作成します。

 pwcheck_method: sasldb
 mech_list: cram-md5 digest-md5

pwcheck_methodには他にも

pwcheck
UNIX パスワード認証
saslauthd
SASL認証デーモンを使用
sasldb
SASL1.5.5で/etc/sasldbを参照する
auxprop
SASL2.1.1で/etc/sasldb2を参照する

SASL2.1.21を使っているのに、なぜか"auxprop"ではうまくいかないので

"sasldb"を使っている。

"mech_list"はクライアントに対して使える認証方法を明確にします。

main.cf

 smtpd_sasl_auth_enable = yes
 smtpd_sasl_application_name = smtpd
 smtpd_sasl_security_options = noanonymous, noplaintext
 smtpd_sasl_local_domain = $myhostname
 broken_sasl_auth_clients = yes

"smtpd_sasl_auth_enable"でSASL認証を有効にしています。

"smtpd_sasl_application_name"はさっき設定した、/usr/lib/sasl2/smtpd.confのファイル名(.confは抜いて)を指定。

"smtpd_sasl_security_options"はクライアントが使える認証方法を絞り込みます。

"smtpd_sasl_local_domain"はこのサーバのFQDNを指定しておきます。

/etc/sasldb2を作成する時のドメインと一致させます。

"broken_sasl_auth_clients"は古いクライアントに対応するためです。

main.cf - smtpd_client_restrictions

どのタイミングでSASL認証を行うか設定します。

 smtpd_client_restrictions =
        permit_mynetworks,
 #      permit_sasl_authenticated, #ここで指定してもダメみたい
        check_client_access hash:/etc/postfix/client_check

"permit_sasl_authenticate"でSASL認証を行い、合格すれば接続を許可します。

どうも"smtpd_recipient_restrictions"で指定するのが正しいらしい。

テストでうまくいってると思ってたのはなんだったんだろう?

 smtpd_recipient_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
        reject_unauth_destination

/etc/sasldb2の作成

 saslpasswd2 -c -u domain username

"domain"は上の"smtpd_sasl_local_domain"で指定したドメインと同じものを書きます。

"username"はアカウントユーザ名を指定します。

パスワードを入れたら

 sasldblistusers2

で確認しましょう。

最後に/etc/sasldb2のパーミッションを変更します。

 chown root.postfix /etc/sasldb2
 chmod 640 /etc/sasldb2

postfixグループにだけ読み込み権限を与えて、認証に使えるようにしています。


参考リンク


[postfix]

SMTP AUTH - インストール / 2006-02-28 (火)

BerkeleyDBをインストール

もしBerkeleyDBが入ってない、古いようならインストールします。
ちなみに自分は4.2.52を使っています。

 cd build_unix
 ../dist/configure --enable-compat185
 make 
 make install 

Cyrus SASLのインストール

SASL認証ライブラリ(自分は2.1.21)をインストールします。

 configure --with-dblib=berkeley --enable-cram --enable-digest --enable-plain --enable-login
 make
 make install

自分の使う認証方式にあわせて"--enable-*"を選んでください。

/usr/local以下にインストールされるので

 ln -s /usr/local/lib/sasl2 /usr/lib/sasl2

としてsymlinkを作っておきます。
自分はsaslpasswd2でパスワードを作る時に、これを忘れていて嵌りました。

SASL対応のPostfix

Cyrus SASLを/usr/local以下に入れたものとします。
SASL対応のMakefileを作ります。

 make makefiles CCARGS="-DUSE_SASL_AUTH -I/usr/local/include/sasl" AUXLIBS="-L/usr/local/lib -lsasl2"
無事Makefileができたら通常どおり、
 make
 make install
でインストールされます。

[postfix]

不正中継対策 / 2006-02-24 (金)

smtpd_*_restrictionsパラメータ

SMTPに接続があったとき不正利用されないように制限を加えます。
それぞれのパラメータを上から順にチェックしていき、条件にあったら指定された処理をされます。
条件を満たした場合それ以降のパラメータは無視されますので、許可する条件を先に書いたほうがいいと思います。

smtpd_client_restrictions

サーバへ接続要求があった時点でチェックします。
主に接続元に関するチェックを記述します。

smtpd_sender_restrictions

MAIL FROM:コマンドが送られた時点でチェックします。
主に送信者のメールアドレスに関するチェックを記述します。

smtpd_recipient_restrictions(デフォルト:permit_mynetworks, reject_unauth_destination)

RCPT TO:コマンドが送られた時点でチェックします。
配送先メールアドレスに関するチェックを記述します。
smtpd_*_restrictionsの中で最後にチェックされる

smtpd_delay_reject

この値が"yes"(デフォルト)の場合、
smtpd_recipient_restrictionsのチェックタイミングでまとめてチェックされます。


smtpd_client_restrictionsのパラメータ

permit_mynetworks
mynetworksで指定したホストからの接続を許可する。どのタイミングでも指定可
reject_unknown_client
接続元が不正なIPアドレスだった場合に拒否します。
check_client_access maptype:filename
接続元が指定したDBファイルにリストされていれば許可or拒否します。

smtpd_sender_restrictionsのパラメータ

reject_unknown_sender_domain
送信者アドレスのドメインが存在しない場合に拒否します。
check_sender_access maptype:filename
送信者アドレスが指定したDBファイルにリストされていれば許可or拒否します。
reject_non_fqdn_sender
送信者アドレスのドメイン部分がFQDNとして適正でなければ拒否します。
reject_unverified_sender
送信者アドレスが存在するか確かめて、存在しなければ拒否します。
存在の有無を実際に確かめるので自分にも相手にも負荷が増えてしまう。
一度チェックしたアドレスは再起動するまでキャッシュされる。
このパラメータは環境によっては設定しないほうがいいかも

smtpd_recipient_restrictionsのパラメータ

reject_non_fqdn_recipient
senderと同じく受信者アドレスのドメイン部分がFQDNとして適正でなければ拒否。
reject_unauth_destination
受信者アドレスがこのサーバで受け取るべきでないものは拒否する。


[postfix]

よく使う設定 / 2006-02-24 (金)

header_checks = regexp:/etc/postfix/header_checks

メールのヘッダを見て制限を行います。
ちなみにregexpタイプ(正規表現DBテーブル)はpostmapコマンドで更新する必要はありません

/etc/postfix/header_checks

/^X-Mailer:.*DouhouHaishin/i REJECT
/^X-Mailer:.*Achi-Kochi Mail/i REJECT
/^X-Mailer:.*Douhou@Mail/i REJECT
/^X-Mailer:.*The Bat/i REJECT
/^X-Mailer:.*Easy DM free/i REJECT
/^X-Mailer:.*007 Direct Email Easy/i REJECT

/^Return-Path:.*<#.*@.*>/ REJECT

/name=.*\.pif/ REJECT
/name=.*\.scr/ REJECT
/name=.*\.exe/ REJECT
/name=.*\.com/ REJECT
/name=.*\.bat/ REJECT
/name=.*\.cmd/ REJECT
/^From:.*<#.*@.*>/ REJECT