postfix with smtp auth
postfixをsmtp auth対応でコンパイルします。
これで、迷惑メールの中継を抑制することができるようになるので、
ようやく最低限の公開条件を満たすことができます。
まぁ、smtp authに対応しても設定が悪いと中継許可しまくりになりますので、
その辺は気をつけてください。
しかし、どうもsmtp authに弱いというか・・・
postfixがらみに弱いというか・・・
また、どつぼに嵌った・・・○| ̄|_
まぁ、成功するまでいろいろやりました。。。
「どつぼ」
また嵌りました。
何ででしょうね?やっぱ、不確定情報だからかな?
まぁ、何とかはっきりしたのでこれでOK?
やること一覧 ・(HGの)事前準備 ・cyrus-saslのインストール ・postfixをSMTP-AUTH対応でコンパイル ・設定とか ・各種テストの実行
関連ページ ・postfix ・Outbound Port 25 Blocking対策(DIONの場合) ・無駄なメールが来る ・ローカルIPがメールヘッダに漏れる ・openssl
玄箱HGだと必須の作業ですが、その他の玄箱シリーズ(pro除く)でもこの作業を行うことを推奨します。
手順は別項:postfix#HGの事前準備を参照。
「事前準備」
これ以降はdbがインストール済みを前提で行われています。
玄箱Nにて問題が発生した場合にはこの項目の処理を行ってください。
事前準備:OpenSSLをインストール
暗号通信(SMTP over SSL)を利用する場合には事前にOpenSSLをインストールする必要がある。
手順は別項:opensslを参照。
smtp authの認証モジュール部分。cyrusの一部を利用するようだ。
ユーザー作成
# useradd -g mail -u 26 -d /var/empty -s /bin/false cyrus # vipw または # vi /etc/passwd 変更点:! を * に書き換えるcyrus-sasl-2.1.26.tar.gzを探してくる。
$ tar xvfz cyrus-sasl-2.1.26.tar.gz $ cd cyrus-sasl-2.1.26 $ ./configure --prefix=/usr --enable-cram --enable-plain --enable-login \ --enable-gssapi=no [--with-dblib=gdbm]
option | 説明など |
--enable-cram --enable-plain | 認証方式を指定 cramとplainを有効にしている |
--enable-login | 認証方式を指定 アウトルック系のlogin認証を有効にする |
--enable-gssapi=no | 何かわからないけどエラーが出るからdisableに X関係のなにか。みたいだけど・・・ |
--with-dblib= | saslで使うデータベースを指定 標準で組み込まれているgdbmを利用(dbをインストールしていない場合) |
/usr/include/sasl/ /usr/lib/sasl2/ /usr/lib/libsasl2.* /usr/man/???? /usr/sbin/sasl*おまじない
# strip -p /usr/sbin/sasl*パスワードデータベース形式の指定(まぁ、おまじない)
# vi /usr/lib/sasl2/Cyrus.conf 補足:smtpd.conf でもOKらしい(よくわからないけど) (新規) ┃pwcheck_method: auxprop 注:よくわからないけど、とりあえず最後に改行を入れておけ♪(念のため) または、 # echo "pwcheck_method: auxprop" >/usr/lib/sasl2/Cyrus.conf「cyrus-sasl」
postfixに必要なユーザーとグループを作る
# groupadd -g 25 postfix # useradd -g postfix -u 25 -d /var/empty -s /bin/false postfix # groupadd -g 26 postdropユーザーをロックする
# vipw または # vi /etc/passwd 変更点:! を * に書き換える既にpostfixを運用中なら(リビルドなら)インストール前に止める。
# /etc/init.d/postfix stoppostfix-2.10.2.tar.gzを探してくる。
$ tar xvfz postfix-2.10.2.tar.gz $ cd postfix-2.10.2 [$ make tidy] 注:前回ビルドした残骸が残ってる人はこれを使う make cleanとは違いMakefileも削除するみたい 設定が変わってない人はmake cleanでいいんじゃ・・・?(´・ω・`) $ patch -p0 <~/postfix_smtpd.c.obj 注:ローカルIP(プライベートIP)を「Received:」に表示させないようにするパッチ 関連情報:ローカルIPがメールヘッダに漏れる 不要(orわからない)なら飛ばしてかまわない ローカルIP隠蔽パッチ(2.5.5ベース)(postfix_smtpd.c.tar.gz) md5sum crc32:FA0416DF postfix-2.2.*以前なら $ make makefiles OPT=-O2 \ CCARGS="-DUSE_SASL_AUTH -I/usr/include/sasl" AUXLIBS="-L/usr/lib -lsasl2" postfix-2.3.0以降なら $ make makefiles OPT=-O2 \ CCARGS="-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl" \ AUXLIBS="-L/usr/lib -lsasl2"
option | 説明など |
CCARGS= | ”いんくるーどへっだふぁいる”の場所を指定する よくわからない(´・ω・`) |
AUXLIBS= | ”らいぶらりふぁいる”の場所を指定する よくわからない(´・ω・`) |
/etc/postfix/ /usr/bin/newaliases /usr/bin/mailq /usr/libexec/postfix/ /usr/sbin/post* /usr/sbin/sendmail /usr/man/? /var/spool/postfix/おまじない
# strip -p /usr/sbin/post* # strip -p /usr/sbin/sendmail # chown -R postfix /var/spool/postfix「SMTP-AUTH対応でコンパイル」
こまごまとした設定とか。
postfixの設定(master.cf)によって設定で使うコマンドが異なる。
パスワードの作成(設定によって選ぶこと)
# saslpasswd2 -c -u `postconf -h myhostname` user名 または # saslpasswd2 -c -u `postconf -h mydomain` user名 注:パスワードの変更もこのコマンドでOK 注:メール用パスワードはtelnet等で使用するパスワードと違うものでOKです むしろ、変えたほうが安全♪パスワードの削除(設定によって選ぶこと)
# saslpasswd2 -d -u `postconf -h myhostname` user名 または # saslpasswd2 -d -u `postconf -h mydomain` user名登録内容の確認
# sasldblistusers2データベースの設定
# chgrp postfix /etc/sasldb2 # chmod 640 /etc/sasldb2postfixの設定変更
# vi /etc/postfix/main.cf (smtp authに関する一部) ┃smtpd_sasl_auth_enable = yes ┃smtpd_sasl_local_domain = [$myhostname]or[$mydomain] ┃broken_sasl_auth_clients = yes ┃smtpd_sasl_security_options = noanonymous 注:smtpd_sasl_local_domainはどちらか1つを指定する 解説(上の項目から) saslによるsmtp authを有効にする ローカル認証のREALMの指定(パスワード作成に用いたものと同じにする) アウトルック系のログオン形式を有効にする 使用可能な認証メカニズムの設定(匿名での接続を拒否)postfix起動
# /etc/init.d/postfix start「postfixの設定」
smtp authの動作確認
SMTP_AUTH対応のメーラーで送信するか、telnetを使って確認する。
テスト用ユーザーの登録(ここでは$mydomainとして登録している)
# saslpasswd2 -c -u `postconf -h myhostname` testuser または # saslpasswd2 -c -u `postconf -h mydomain` testuser password testpasstelnetでpostfix(ポート25)に接続(コンソールからさらにtelnetする)
$ telnet localhost 25 (画面が停止したら) EHLO [$mydomain] (画面が停止したら) AUTH PLAIN dGVzdHVzZXIAdGVzdHVzZXIAdGVzdHBhc3M= で、 ┃235 Authentication successful と出ればOK quit で終了テストユーザーの削除
# saslpasswd2 -d -u `postconf -h myhostname` testuser または # saslpasswd2 -d -u `postconf -h mydomain` testuser他にやるべきテスト
LAN内送信テスト(PCから玄箱へ) ルーターのポートを開ける(25番) 受信テスト(プロバイダから玄箱へ) 送信テスト(LAN内からプロバイダなどへ) 第3者不正中継テスト LAN外からの(インターネット越しの)接続テスト 1.外部からの接続〜玄箱へのメール送信 2.外部からの接続〜プロバイダへのメール送信「smtp authの動作確認」
戻るなら押せ!