パソコン・メモメモ備忘録

気の向くままパソコン関係等で気になることを書き記す。時々更新!

SMTP 認証を設定してみた qmail

qmail でメールサーバを構築しているのだが、SMTP の不正リレー防止のためには、POP before SMTP を設定して使っていた。確かにこれはある程度安全な訳だが、一つのグローバル IP を複数の PC 等で共有している環境(ようするにローカル IP なサブネットを切ってルータを挟んでいるような)では、サブネットの PC すべてに SMTP 送信が許可されてしまうので、場合によってはまずいこともある。

一番安全なのは、やはり SMTP 時に認証することだと思う。ということで、以前導入したはずなのにまともに動いていなかった qmail での SMTP 認証をきちんと設定してみた。詳細は、qmail SMTP Auth 辺りで検索すると色々出てくると思う。ので、要点だけ羅列。

ベースは qmail で、qmail-smtpd-auth-0.31.tar.gz という SMTP-Auth 対応パッチを当てた。qmail-smtpd-relay-reject 不正中継拒否パッチも当てないといけないかも。後、ついでに日本標準時間対応パッチも当てる。

パスワードの認証には、cmd5checkpw を使う。CRAM-MD5 というのが使えるようになるっぽい。パスワードは /etc/poppasswd に平文で入る。ちょっと注意が必要。流出すると結構えらいことかも。

後は、/etc/init.d/qmail とかに、tcpserver 経由で起動するスクリプトを書いておけば OK。

引っかかったのは、tcpservertcp.smtp.cdb 等に、RELAYCLIENT="" の設定を入れていると、認証自体がスルーされてしまうこと。例えば、LAN 内の IP アドレスは RELAYCLIENT を定義するようにする事も多い。また、POP before SMTP でも、POP してきた IP アドレスは、RELAYCLIENT が定義されるので、認証スルーになるので注意。

SMTP 認証するポート番号は、POP before SMTP するのとは別に用意した方がいい。最初に書いたサブネットの PC を信頼しない状況ではもちろんである。専用の tcpserver の cdb ファイルも用意する。とりあえず deny 以外のエントリは入れなくていいかと思う。逆に、ブラックリストや tarpit の仕組みも要らない気がする。SMTP にも SSH みたいなログインアタックがあったりするのかも知れないが。

テストとしては、認証なしでは、メール送信(リレー)できないこと、正しいユーザ名とパスワードならメール送信(リレー)できること。間違ったパスワードだと出来ないこと。後は、POP before SMTP が効かないことか。

結構面倒なもんだ。