Red Hat Linux 9.0にデフォルトでインストールされているPostfixは既にSMTP-AUTHに対応していますので、下記作業を行う必要はありませんので、SMTP-AUTHの設定に飛んで下さい。
ただし、デフォルトで起動するMTAはsendmailでPostfixを起動するようにしなければなりません。それにはまず、
Vine Linux 2.5の場合 -----ここから-----
cyrus-sasl-1.5.27-17vl1.i386.rpm
cyrus-sasl-devel-1.5.27-17vl1.i386.rpm
postfix-0.0.20010228pl08-0vl3.src.rpm
を入手。
make makefiles CCARGS="-DUSE_SASL_AUTH -I/usr/include" AUXLIBS="-L/usr/lib -lsasl"
SMTP-AUTHの設定
/usr/lib/sasl/smtpd.confを作成して以下の1行を記述する。
pwcheck_method: sasldb
パスワードを生成する。
Postfixの設定ファイル/etc/postfix/main.cfを編集(以下の6行を追加)する。
確認ができたら一端「QUIT」で終了し,saslpasswdで設定したパスワードをエンコードし,正しく認証が行われるかをチェックしよう。
Vine Linux 2.5とRed Hat Linux 9.0の挙動の違いが見られた。Red Hat Linux 9.0で/etc/aliasesを編集して、root宛に来るメールを特定ユーザに転送するように設定してみましたが、何故かpostfixのスプールに取り込まれてしまう現象が発生ましたた。インターネットでいろいろ調べているうちに次のことが判明しました。main.cfを確認してみると、いずれも
コマンドでのaliasesの確認方法
/etc/mail/dracd.dbの中身がいつまでたっても保持されているので、30分ごとに強制的に空になるようにcronを設定した。
不正リレーのチェック
外部からの不正リレーをきちんと防げているかをチェックするには、メールサーバから
このテストを全てパスするためには 19991229 以降のバージョンの Postfix が必要です。それ以前のものは、構造上一部でチェックしきれないものがあります。たいていの場合は問題ありませんが、念のためバージョンアップして完全にテストをパスすることを確認する方がよいでしょう。
なお、sendmail のオプション -bt は Postfix ではエラーになります。Postfix の設定ファイルの文法チェックは
ただし、デフォルトで起動するMTAはsendmailでPostfixを起動するようにしなければなりません。それにはまず、
$rpm -qa | grep redhat-switch-mailとして、redhat-switch-mailがインストールされているか確認して下さい。インストールされているのであれば、コマンドラインから
#redhat-switch-mailとして、sendmailからPostfixに切り替えて下さい。
Vine Linux 2.5の場合 -----ここから-----
cyrus-sasl-1.5.27-17vl1.i386.rpm
cyrus-sasl-devel-1.5.27-17vl1.i386.rpm
postfix-0.0.20010228pl08-0vl3.src.rpm
を入手。
# rpm -ivh cyrus-sasl-1.5.27-17vl1.i386.rpm cyrus-sasl-devel-1.5.27-17vl1.i386.rpmpostfix-0.0.20010228pl08-0vl3.src.rpmを適当な(root以外)ユーザの/home/****/rpm/SRPMSに保存し、オーナー・グループを変更しておこう。
# chown **** postfix-0.0.20010228pl08-0vl3.src.rpm # chgrp **** postfix-0.0.20010228pl08-0vl3.src.rpm $ rpm -ivh postfix-0.0.20010228pl08-0vl3.src.rpm $ cd ~/rpm/SPECS/PostfixをSASL化させるためspecファイルを編集する。(make行の直前に以下の行を挿入)
make makefiles CCARGS="-DUSE_SASL_AUTH -I/usr/include" AUXLIBS="-L/usr/lib -lsasl"
postfix.specの中身 : : : %patch -p1 %build make makefiles CCARGS="-DUSE_SASL_AUTH -I/usr/include" AUXLIBS="-L/usr/lib -lsasl" make DEBUG="" OPT="$RPM_OPT_FLAGS" %install rm -rf $RPM_BUILD_ROOT rm -f html/Makefile.in : : :Postfixの自分用RPMパッケージを作成する(Cyrus-SASLを先にインストールしておく)。
$ rpm -ba --clean postfix.spec 2>&1 | tee postfix-rpmlog.txtSASLに対応したPostfixを以下の手順にてインストール(強制的にアップデート)する。
# rpm -Uvh --force postfix-0.0.20010228pl08-0vl3.i386.rpmVine Linux 2.5の場合 -----ここまで-----
SMTP-AUTHの設定
/usr/lib/sasl/smtpd.confを作成して以下の1行を記述する。
pwcheck_method: sasldb
パスワードを生成する。
# /usr/sbin/saslpasswd -u hoge.hogehoge.com -c hayakawa (または saslpasswd -u `postconf -h myhostname` -c hayakawa) Password:(パスワードを入力) Again (for verification):(パスワードを入力) 一回目が失敗した場合は再度実行すれば成功します。 Vine Linux 2.5の場合 -----ここから----- # chgrp postfix /etc/sasldb # chmod 640 /etc/sasldb # ls -laF /etc/sasldb -rw-r----- 1 root postfix 12673 May 23 10:00 /etc/sasldb Vine Linux 2.5の場合 -----ここまで----- Red Hat 9.0の場合 -----ここから----- (/と/var/spool/postfixが違うボリュームの場合) # chgrp postfix /etc/sasldb # chmod 640 /etc/sasldb # cp /etc/sasldb /var/spool/postfix/etc/sasldb この場合,saslpasswdを実行するたびに,コピーする必要があります。 (/と/var/spool/postfixが同じボリュームの場合) # chgrp postfix /etc/sasldb # chmod 640 /etc/sasldb # ln /etc/sasldb /var/spool/postfix/etc この場合,最初にsasldbを作ったときのみで,通常は不要。 Red Hat 9.0の場合 -----ここまで-----ユーザーを確認する。
# /usr/sbin/sasldblistusers user: hayakawa realm: hoge.hogehoge.com mech: DIGEST-MD5 user: hayakawa realm: hoge.hogehoge.com mech: PLAIN user: hayakawa realm: hoge.hogehoge.com mech: CRAM-MD5ちなみに、既存ユーザのパスワード変更及び削除方法は以下のとおりです。
既存ユーザのパスワードを変更する場合には-cオプションを使用しない # echo "123abc" | saslpasswd2 -p -u nsx.bluecoara.net hayakawa 既存ユーザを削除する場合には-dオプションを使用する # saslpasswd2 -u nsx.bluecoara.net -d hayakawaPostfixの設定
Postfixの設定ファイル/etc/postfix/main.cfを編集(以下の6行を追加)する。
smtpd_sasl_auth_enable = yes SMTP AUTHの利用を設定 smtpd_sasl_local_domain = $myhostname smtpd_recipient_restrictions = リレーを許可するものを設定する permit_mynetworks mynetworksで設定されたネットワークからの接続を許可する permit_sasl_authenticated SMTP認証を通過したものを許可する設定。これは必ず加えること check_relay_domains reject それ以外は拒否することを設定 smtpd_sasl_security_options = noanonymous セキュリティオプションの設定 noanonymousは匿名での接続を拒否する 上記のようにnoplaintextと記入するとPLAINでの認証を拒否する broken_sasl_auth_clients = yes アウトルック,Outlook Expressのログイン認証を利用するための設定 ※ テストするときはpermit_mynetworksを外すPostfixの再起動
# /etc/rc.d/init.d/postfix restart Shutting down postfix: postfix Starting postfix: postfixSMTP-AUTHのテスト
$ telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 hoge.hogehoge.com ESMTP Postfix EHLO localhost 「EHLO localhost」と入力 250-hoge.hogehoge.com 250-PIPELINING 250-SIZE 10240000 250-ETRN 250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5 これを確認 250-AUTH=PLAIN LOGIN DIGEST-MD5 CRAM-MD5 250 8BITMIME QUIT 「QUIT」と入力すると終了するなお,Outlook Expressで使用する設定を行っている場合には「AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5」の下に「250-AUTH=PLAIN LOGIN DIGEST-MD5 CRAM-MD5」も表示される。
確認ができたら一端「QUIT」で終了し,saslpasswdで設定したパスワードをエンコードし,正しく認証が行われるかをチェックしよう。
# printf 'ユーザー名\0ユーザー名\0パスワード' | mmencode mmencodeについて: Vine Linux 2.5の場合 -----ここから----- インストールされていない場合は rpm -ivh metamail-2.7-25vl1.i386.rpm でインストールする。 依存性の問題でインストールできない場合は rpm -ivh sharutils-4.2.1_jp-1.6.1vl2 でインストールする。 Vine Linux 2.5の場合 -----ここまで----- Red Hat 9.0の場合 -----ここから----- インストールされていない場合は rpm -ivh metamail-2.7-28.i386.rpm でインストールする。 依存性の問題でインストールできない場合は rpm -ivh sharutils-4.2.1-9.i386.rpm でインストールする。 Red Hat 9.0の場合 -----ここまで-----もしくは
# perl -MMIME::Base64 -e 'print encode_base64("ユーザー名\0ユーザー名\0パスワード");'たとえば,テスト用に「ユーザー名:hoge」,「パスワード:hoge」でパスワードを作成してからテストする場合は,先ほど解説したように
# saslpasswd -c -u `postconf -h myhostname` hogeとし,パスワードを作成する。そしてユーザー名とパスワードが生成されていることを確認しよう。
# sasldblistusers user: hoge realm: hoge.hogehoge.com mech: DIGEST-MD5 user: hoge realm: hoge.hogehoge.com mech: PLAIN user: hoge realm: hoge.hogehoge.com mech: CRAM-MD5そのあとユーザー名パスワードをエンコードする
# printf 'hoge\0hoge\0hoge' | mmencode aG9nZQBob2dlAGhvZ2U=Telnetでlocalhostのポート25番に接続し,EHLOのあとに「AUTH PLAIN エンコードしたユーザー名パスワード」を入力する。正しくないパスワードでのエンコードも行って正常に認証されるかテストする。
# telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 hoge.hogehoge.com ESMTP Postfix EHLO localhost 「EHLO localhost」と入力 250-zdnet.homelinux.org 250-PIPELINING 250-SIZE 10240000 250-ETRN 250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5 250-AUTH=PLAIN LOGIN DIGEST-MD5 CRAM-MD5 250 8BITMIME AUTH PLAIN aG9nZQBob2dlAGhvZ2U= エンコードしたパスワードを入力 235 Authentication successful 認証が成功している QUIT念のため,間違ったパスワードを入力してテストしてみよう。
# telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 hoge.hogehoge.com ESMTP Postfix EHLO localhost 250-zdnet.homelinux.org 250-PIPELINING 250-SIZE 10240000 250-ETRN 250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5 250-AUTH=PLAIN LOGIN DIGEST-MD5 CRAM-MD5 250 8BITMIME AUTH PLAIN aG9nZQBob2dlAHRlc3Q= 間違ったパスワードを入力 535 Error: authentication failed 認証が失敗している QUITテストが完了したらテスト用のアカウントを削除しておこう。
# saslpasswd -d -u `postconf -h myhostname` hogeroot宛のメールを任意のユーザに転送するには
# vi /etc/aliases # Basic system aliases -- these MUST be present. MAILER-DAEMON: postmaster postmaster: root # General redirections for pseudo accounts. bin: root daemon: root games: root ingres: root nobody: root system: root toor: root uucp: root # Well-known aliases. manager: root dumper: root operator: root # trap decode to catch security attacks decode: root # Person who should get root's mail #root: marc ↑ └#を外し、marcの箇所を任意のユーザに設定する。 例:root kenzo この設定ではroot宛のメールはhogeに送られます。aliasesを編集したので、システムに読み込ませる必要があります。
# newaliases/etc/aliasesと/etc/postfix/aliasesについて
Vine Linux 2.5とRed Hat Linux 9.0の挙動の違いが見られた。Red Hat Linux 9.0で/etc/aliasesを編集して、root宛に来るメールを特定ユーザに転送するように設定してみましたが、何故かpostfixのスプールに取り込まれてしまう現象が発生ましたた。インターネットでいろいろ調べているうちに次のことが判明しました。main.cfを確認してみると、いずれも
alias_maps = hash:/etc/postfix/aliases alias_database = hash:/etc/aliasesのようになっていて、違いは見られませんでした。よくよく調べてみるとVine Linux 2.5では/etc/postfix/aliasesは/etc/aliasesのリンクとなっていました。Red Hat Linux 9.0ではVine Linux 2.5のような設定になっておらず、/etc/postfix/aliasesの方を編集しないと駄目なことが分かりました(解決するまでに時間かかったなぁ〜w)。
コマンドでのaliasesの確認方法
#/usr/sbin/postmap -q root /etc/aliases(または/etc/postfix/aliases)補足
/etc/mail/dracd.dbの中身がいつまでたっても保持されているので、30分ごとに強制的に空になるようにcronを設定した。
# vi init-dracd.db /etc/rc.d/init.d/dracd stop cat /dev/null > /etc/mail/dracd.db /etc/rc.d/init.d/dracd start # vi initdracd */30 * * * * root /root/init-dracd.dbこのファイルを適当なフォルダに保存。/etc/cron.dにinitdracdとして保存。
不正リレーのチェック
外部からの不正リレーをきちんと防げているかをチェックするには、メールサーバから
% telnet relay-test.mail-abuse.orgとすると、自動的に telnet を実行したホストへアクセスし、十数個の不正なメール中継のチェックを行ないます。自分の管理下外のホストに対するチェックは不正アクセスになるので、決してチェックしてはいけません。また、管理者によってはユーザがこのようなチェックを行なうことを嫌うサイトもあります。実行は各自の責任において行なってください。
このテストを全てパスするためには 19991229 以降のバージョンの Postfix が必要です。それ以前のものは、構造上一部でチェックしきれないものがあります。たいていの場合は問題ありませんが、念のためバージョンアップして完全にテストをパスすることを確認する方がよいでしょう。
なお、sendmail のオプション -bt は Postfix ではエラーになります。Postfix の設定ファイルの文法チェックは
# postfix checkで行なえます。