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=$pidfile --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 1esac
exit 0
参考リンク
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グループにだけ読み込み権限を与えて、認証に使えるようにしています。
参考リンク
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でインストールされます。
不正中継対策 / 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
- 受信者アドレスがこのサーバで受け取るべきでないものは拒否する。
よく使う設定 / 2006-02-24 (金)
メールのヘッダを見て制限を行います。
ちなみにregexpタイプ(正規表現DBテーブル)はpostmapコマンドで更新する必要はありません
/etc/postfix/header_checks
/^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