--- Postfix + pwcheck/saslauthd (Cyrus-SASL) で SMTP-AUTH を使う ---
setter AT i-red DOT info
Last update 2005/1/15
BACK
pwcheck だと パスワードに PLAIN しか使えませんので他の安全対策が必要です。
私の場合、DeleGate で SSL(TLS) ラップしてます。
本来、TLS はオンデマンド SSL なので、SSL を使わない接続も許可しますが、
DeleGateでは、StartTLS を強制できますのでそのようにしてます "sslway -St" 。
saslauthd の場合、多分、CRAM-MD5が使えると思うのですが、やったことありません(^^;;
sasldb や、ldap/pam を使ったりして、システムユーザと分離するのが主流かな。
・Postfix 2.0.0.2 アップグレードメモ
・pwcheck が古いということで、saslauthd を使う
・RedHat Linux 8.0 の場合
・Vine Linux 3.1 の場合
--- Cyrus-SASL ライブラリをインストールする
-- Cyrus-SASL Library のソースを取り寄せる。
cyrus-sasl-1.5.24.tar.gz
$ gzip -dc cyrus-sasl-1.5.24.tar.gz | tar -xvf -
$ cd cyrus-sasl-1.5.24
$ ./configure --with-pwcheck --enable-login
$ make
$ su
# make install
(2001/3/27)追加
--enable-login は、Outlook Express から、SMTP-AUTH を使う際に必要みたい。
--- Postfix を インストールする
ここもみてください
(というか、ほとんどが、ここを参考にして構成しています!感謝!)
まず、先ほどインストールした SASL ライブラリを参照できるようにする。
ほかにもやり方があるようです。
# ln -s /usr/local/lib/sasl /usr/lib/sasl
# ln -s /usr/local/lib/libsasl.so.7.1.8 /usr/lib/libsasl.so.7
-- Postfixのソースを取り寄せる
release-20010228.tar.gz
$ gzip -dc release-20010228.tar.gz | tar -xvf -
$ cd release-20010228
$ make tidy # 初めてコンパイルするときはいらない。
$ make makefiles CCARGS=-DUSE_SASL_AUTH" -I/usr/local/include" \
AUXLIBS="-L/usr/local/lib -lsasl"
$ make
Postfix ユーザを作ります。
# vi /etc/passwd
postfix:*:200:200:Postfix user:/nonexistent:/bin/badsh
ここの、200 は、適当に使ってない UID/GID を設定してください。
同じように、グループも作ります。
Postfix-1.1 から、setgid が強制になり、
また、postfix ユーザと同じ GID は使えません。
# vi /etc/group
postfix-group:*:1000:
Postfix ユーザ宛てのメールを root に転送するようにします。
# vi /etc/aliases
postfix: root
--- すでに Postfix が動作している場合は、/usr/sbin/postfix stop を先に実行します。
# ./INSTALL.sh
postfix-1.1.x 以降、make upgrade または、make install を使います。
質問には、すべて [Enter] で答えてしまいます。
* Postfix-1.1.x から、setgid を no にするとインストールできませんので、
途中、上記でつくったグループを指定します。
setgid_group: [no] postfix_group
--- Postfix の設定を変更します。
ここらへんは、何をやっているか、必ず、サンプルを見て理解してください。
設定サンプルの日本語訳は、ここにあります。
Part of main.cf
---
# cd /etc/postfix
# cp main.cf main.cf.org
# vi main.cf
# 以下の設定は、必ずします。
myorigin = $myhostname
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mail_spool_directory = /var/mail
mynetworks = XXX.XXX.XXX.XXX/YY, 127.0.0.0/8
smtpd_sasl_auth_enable = yes # Use SASL Auth.
# これ以下のは、補助的な設定です。
#default_privs = username
broken_sasl_auth_clients = yes # Outlook 用の設定みたい。
allow_mail_to_commands = alias,forward,include
relayhost = mail.host.domain
smtpd_recipient_restrictions =
permit_mynetworks # mynetworks からの接続を許可
permit_sasl_authenticated # SASL 認証を通過したものは、許可
reject # 上の2つに当てはまらないものは、すべて拒否。
# check_relay_domains # mydistination 宛てのメールは受け入れる
# メールリレーに SASL-AUTH のみを使いたい場合。
# SASLを使う・ローカルホスト上のリレーを許可・SASL 認証されたものは許可・自分宛てのものは許可 のように設定する。
# mynetworks = 127.0.0.0/8
# smtpd_sasl_auth_enable = yes
--- 以下、順番が重要(Postfix 付属サンプル設定ファイルの説明を見てください)
# smtpd_recipient_restrictions =
# permit_mynetworks
# permit_sasl_authenticated
# check_relay_domains
--- Postfix の smtpd が pwcheck を使えるように設定する。
# mkdir /var/pwcheck
# chmod 700 /var/pwcheck
# chown postfix /var/pwcheck
--- これ以下は、作業順序が重要
--- smtpd が SASL でパスワードをチェックする方法を定義
# vi /usr/lib/sasl/smtpd.conf
pwcheck_method: pwcheck
--- pwcheck デーモンを起動
# /usr/local/sbin/pwcheck &
--- Postfix を起動
# /usr/sbin/postfix start
---------------------------------------------------
ちなみに、今使っている main.cf の一部だったりするもの。
特殊なので、参考になるとは思えません。
---
mydestination = $mydomain, ...
mynetworks = 127.0.0.0/8, ...
biff = no
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtp_sasl_security_options = noanonymous
allow_mail_to_commands = alias,forward,include
relayhost = xxx.xxx.jp
header_checks = regexp:/etc/postfix/header_checks
body_checks = regexp:/etc/postfix/body_checks
# check_relay_domains = yes
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
permit_auth_destination,
reject
---
contents of body_checks 一部全角に変更してあります。
---
/name=\".*\.com\"/ REJECT
/name=\".*\.vbs\"/ REJECT
/name=\".*\.vb\"/ REJECT
/name=\".*\.js\"/ REJECT
/name=\".*\.url\"/ REJECT
/name=\".*\.bat\"/ REJECT
/name=\".*\.hta\"/ REJECT
/name=\".*\.htt\"/ REJECT
/name=\".*\.inf\"/ REJECT
/name=\".*\.reg\"/ REJECT
/name=\".*\.dll\"/ REJECT
/name=\".*\.eml\"/ REJECT
/name=\".*\.lnk\"/ REJECT
/name=\".*\.pif\"/ REJECT
/name=\".*\.scr\"/ REJECT
/.name=.*\.scr/ REJECT
---
contents of header_checks 一部全角に変更してあります。
---
/^From: inet <inet@microsoft.com>/ REJECT Message content rejected: From address pattern matched: KLEZ.E virus !!!
/^Subject: new photos from my party!/ REJECT Message content rejected: Subject pattern matched: MyParty virus !!!
/^.*boundary="====_ABC1234567890DEF_===="/ REJECT Message content rejected: Pattern matched: NIMDA virus !!!
/^.*boundary="====_ABC123456j7890DEF_===="/ REJECT Message content rejected: Pattern matched: NIMDA.E virus !!!
/^.*_Outlook_Express_message_boundary/ REJECT Message content rejected: Pattern matched: SIRCAM virus !!!
--- おしまい...
Postfix-2.0.0.2 アップグレードメモ
まったく同じ環境で、Postfix-1.1.12 から、Postfix-2.0.0.2 にアップデートしようと思ったですが、
どうも、libdb.so や、がみつけられないとコンパイルできないようです。
真剣に追っかけてないのですが、実際、src/master ディレクトリでエラーが出てコンパイルできなかった。
しかたないので、とりあえず、Berkeley DB-4.1.x をインストールして、
Berkeley DB がインストールされた場所の lib ディレクトリ内のファイルを、
すべて /usr/local/lib 内にコピーした。
# OpenLDAP-2.1.x 以降のものを使うとき、
# 適当にDBライブラリをインストールしたがために引っかかったのかも...
# db3 がインストール済みの場合、
# ln -s /usr/lib/libdb.so /usr/local/lib/libdb.so
# とかでも良いと思ふ。
-rw-r--r-- 1 root root 873188 Oct 7 17:07 libdb-4.1.a
-rw-rw-r-- 1 root root 713 Oct 7 17:06 libdb-4.1.la
-rwxrwxr-x 1 root root 709437 Oct 7 17:06 libdb-4.1.so
lrwxrwxrwx 1 root root 12 Oct 7 17:07 libdb-4.so -> libdb-4.1.so
lrwxrwxrwx 1 root root 11 Oct 7 17:07 libdb.a -> libdb-4.1.a
lrwxrwxrwx 1 root root 12 Oct 7 17:07 libdb.so -> libdb-4.1.so
SASL Library は、1.x のままでも良いと思うのですが、
もしかしたら、2.x が必要かもしれません。
あとは、通常のインストール(アップグレード)と同じ。
最近は、こんな感じ。
$ gzip -dc postfix-x.x.x.tar.gz | tar -xvf -
$ cd postfix-x.x.x
$ make makefiles CCARGS=-DUSE_SASL_AUTH" -I/usr/local/include" AUXLIBS="-L/usr/local/lib -lsasl" OPT="-O6" DEBUG=""
$ make
# /etc/rc.d/init.d/postfix stop
# make upgrade
Postfix-2.0 を起動する前に、
・ /etc/postfix/*.db および、/etc/aliases.db ファイルを削除。
(Berkerey DB のバージョンを上げたりしていない場合はやらなくても良いと思う。)
・ Postfix-1.1.x では、body_checks で添付ファイルの拡張子などを検査していたが、
Postfix-2.0.x では、header_checks で行うようになったみたいなので、
それぞれで使用するファイルを書き換える。
# /etc/rc.d/init.d/postfix start
*******************************************************************************
一般的な Postfix サーバで 2.x にアップグレードした場合のその他注意すべきこと。
・main.cf の check_relay_domains オプションは使われなくなっているので、
reject_unauth_destination を使う。
・ Postfix が確認できないユーザ宛てのメールを扱うサーバ(リレーなど)場合、main.cf で、
local_recipient_maps =
を指定する。そうしないと、ことごとく Reject されてしまう。
transport_maps や、luser_relay を指定していても、local_recipient_maps の制限の方が優先されるので、
同じく Reject される。
このことを逆に利用するのはよいことかも。全サーバでユーザ認識に、どこかにある、
1台の LDAP サーバを使うとか。
現在は、Postfix-2.0.1 (^^)
pwcheck が古いというので、saslauthd を使う
cyrus-sasl-1.5.27 から、新しい認証デーモン saslauthd ができ、
pwcheck は、もう使わない方がよさそうなので、そのようにしてみた。
まず、 cyrus-sasl-1.5.28.tar.gz を手に入れ、
$ gzip -dc cyrus-sasl-1.5.28.tar.gz | tar -xvf -
$ cd cyrus-sasl-1.5.28
$ ./configure --with-pwcheck --with-saslauthd --enable-login --disable-krb4 --disable-otp --disable-gssapi --without-bdb
$ make
# make install
# ln -s /usr/local/lib/libsasl.so.7.1.11 /usr/lib/libsasl.so.7
# vi /usr/lib/sasl/smtpd.conf
を編集。
pwcheck_method: pwcheck
を、
pwcheck_method: saslauthd
に変更。
# mkdir /var/state/saslauthd
# chmod 700 /var/state/saslauthd
# chown postfix /var/state/saslauthd
/usr/local/sbin/saslauthd -v
で使用可能なメソッドを確認。
# /usr/local/sbin/saslauthd -a shadow
Postfix も make しなおした方がよいかも(未確認)。
Postfix を再起動。
RedHat Linux 8.0 の場合
SGI-XFS 1.2 を入れたかったので...
RHL8 の場合、cyrus-sasl-2.1.x が入っています。
Postfix は、いつの間にか sasl2 に対応したようなのですね。
まず、postfix ユーザと、グループを作成
例のごとく。
# ln -s /usr/lib/sasl2 /usr/local/lib/sasl2
$ gzip -dc | tar -xvf postfix-2.0.4.tar.gz
$ cd postfix-2.0.4.tar.gz
$ make tidy
$ make makefiles CCARGS=-DUSE_SASL_AUTH" -I/usr/include/sasl" \
AUXLIBS="-L/usr/local/lib -lsasl2" \
OPT="-O6" DEBUG=""
$ make
# make install
# vi /usr/local/lib/sasl2/smtpd.conf
smtpd.conf の内容。
pwcheck_method: saslauthd
# /sbin/service saslauthd start
# /sbin/service postfix start
$ ps ax | grep saslauthd
/usr/sbin/saslauthd -m /var/run/saslauthd/mux -a shadow
これだけ。
Vine Linux 3.1 の場合
--- cyrus-sasl 関連をインストール。
# apt-get install cyrus-sasl \
cyrus-sasl-devel \
cyrus-sasl-md5 \
cyrus-sasl-plain
--- postfix を、sasl が使えるようにビルドしなおす。
$ cd ~/rpm
$ apt-get source postfix
$ rpm -ivh postfix-2.0.20-0vl5.src.rpm
$ cd SPECS
$ vi postfix.spec # spec ファイルの編集
postfix.spec の変更点。
diff postfix.spec.orig postfix.spec
117,118c117,119
< -DHAS_PGSQL -I/usr/include/pgsql" \
< AUXLIBS=""
---
> -DHAS_PGSQL -I/usr/include/pgsql \
> -DUSE_SASL_AUTH -I/usr/include/sasl" \
> AUXLIBS="-lsasl2"
$ rpmbuild -ba postfix.spec # 編集した spec ファイルを使用して、 rpm をビルド
# rpm -ivh --force ../RPMS/i386/postfix-2.0.20-0vl5.i386.rpm # 作った postfix をインストール
--- sasl の設定
# echo "pwcheck_method: saslauthd" > /usr/lib/sasl2/smtpd.conf
# /sbin/chkconfig saslauthd on
# /etc/rc.d/init.d/saslauthd start
--- postfix の設定
# vi /etc/postfix/main.cf
少なくとも、このくらいは必要。この設定では、認証を受けない送信は全て拒否。
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtp_sasl_security_options = noanonymous
smtpd_recipient_restrictions =permit_sasl_authenticated, reject
# /etc/rc.d/init.d/postfix restart
--- 接続確認
$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 setter ESMTP Postfix
ehlo locahlost
250-setter
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH DIGEST-MD5 CRAM-MD5 PLAIN LOGIN #この2行が出ていれば多分大丈夫。
250-AUTH=DIGEST-MD5 CRAM-MD5 PLAIN LOGIN
250-XVERP
250 8BITMIME
quit
221 Bye
Connection closed by foreign host.
あとは、Mozilla とかでチェックしましょう。
/var/log/maillog のチェックもお忘れ無く。
なお、postfix より前に、saslauthd を起動しておく必要があったと思うのですが、順番は適宜ということで(^^)