カテゴリー

アクセスカウンター


since 1996/06/14

Count per Day

  • 38今日の訪問者数:
  • 67昨日の訪問者数:
  • 1178月別訪問者数:
  • 0現在オンライン中の人数:

Linuxからメール転送

 家のサーバを仮想化してから、管理用のメールの扱いが面倒になりました。 解決しなければならない課題は2つ。 Linuxは管理用のメールを「root」へ送ろうとする。ドメインは自分のホスト名が補完されるが、仮想化したホストそれぞれが自分にメールをしてもしょうがないので、これをサーバ1カ所に集約させなければならない。 うちの環境はルーティングの問題で、WAN側の自分自身のサーバへ到達できない。  解決策はいくつかあるけど、この2つを同時に且つ手間のかからない変更で対応したいので、DNSでやっつけてみる。 メーラは、メールアドレスのドメイン名と、DNSのMXレコードから探して配送する。つまり、仮想サーバ毎のMXレコードを定義してやればそのサーバへメールを転送できる。 LAN側のPCからDNSを引くときは、WAN側のIPでは無く、LAN側のIPを引くようにする。 これで、DNSの設定変更のみで行ける。ちなみに、メールの転送先はsendmailなどの場合「/etc/mail/submit.cf」にSMTPサーバを指定できるので、それでも可能。 今回はWAN側のIPに到達できない問題を孕んでいる関係もあるので、submit.cfには手をつけない。 MXレコードを追加して、メールを転送する  この方法は当然自分でDNSを立ててないと対応できない。 対応方法は簡単で、正引き設定ファイルにMXレコードを追加するだけ。 ただし、サーバ分の追加が必要。 送信元をvm.sample.com、送信先をsmtp.sample.comとした場合は、以下のような感じになる。 vm.sample.com. IN MX 10 smtp.sample.com. これで、たとえば「root@vm.sample.com」宛のメールはsmtp.sample.comサーバへ送られる。  ちなみに送信先(受信側)サーバでも「root@vm.sample.com」を自分自身宛と認識させなければならない。 たとえば、postfixの場合は、main.cfのmydestinationにvm.sample.comを追加することで解決する。 LAN側の名前引きの挙動を変える  これは、bindの機能でできる。bind9のどこかのバージョンからできるようになったみたい(この機能は今回初めて使ったので、いつから使えるものだったのかはよくわからない)。 まず、ACLの定義。LAN側サブネットが「192.168.0.0」の場合。 acl "allowed-internal-hosts" { 192.168.0.0/24; 127.0.0.1; }; 次にviewの定義。 view "internal" { match-clients { allowed-internal-hosts; }; allow-query { allowed-internal-hosts; }; …(略) } これで、LAN側ホストからDNSへ問い合わせが来た場合は、このinternal viewを参照するようになる。 ちなみに、WANからのアクセスについては、以下のような定義にしておけばよいみたい。 view "external" { match-clients { any; }; […]

dovecotとSquirrelMailをいじる

 今までずっとpostfix+pop3(apop+pop before SMTP)環境で運用をしてきたけど、さすがに時代遅れ感が出てきた(コンパイルが通るツールが無くなってきた)ので、最新環境を検証してみることにした。 とりあえず方針を決める まず関係するツール。 SMTP:postfix(Maildir環境) これは今までと変更せず。S25Rによる不正メールの除外もそのまま。受信したメールはmboxよりも安全性の高いMaildirで実装。また、pop before SMTPに変わって、SMTP Auth(SMTP認証)を使う。 pop3:dovecot 今までのteapopから変更。 MUA:SquirrelMail 時々DNSの応答がおかしかったり、そもそも家でしかメールを見れない状態から脱したいのでWebメールを使う。 自分だけのメールサーバでは無いので、いろいろポリシーも決めておく。 ユーザはサーバのUNIXユーザ。 これは非常に悩んだけど、それほど大規模ユーザではないので、LDAPとかを採用するよりも汎用性が高く、シンプル。 サーバにメールを溜め込まない IMAPは使いたくない使わない 機能が限定的になるし、IMAP長期保管に向かない(と個人的に感じてる)。 メールデータの蓄積に責任を持ちたくない Webメールはあくまで一時利用目的。 一時的なリモート閲覧用 セキュリティは堅く 以前はまだ歴史が浅くて対応を見合わせてきたプロトコルがたくさんあったけど、いつの間にか一般的になってきてるんだなぁ…と実感。 POP3S OutlookとBecky!が対応していることを確認したので採用。 SMTP認証 これも最近では一般的になってきた。 SPAM対策 存在しないユーザへのメールはUser Unknownで返す(当たり前なことなんだけど、qmailはできなかったのでw)。 当たり前だけど第三者転送は許可しない。 S25R。 当たり前だが、ユーザは/sbin/nologin設定 Maildirでデータの保守性を維持 Webメールは、個別FQDN運用でhttps。BASIC認証も併用するかも。Digest認証は携帯からだとダメな場合が多いので悩む。 メールユーザの作成はWebからさせない。 postfixをSMTP authに対応させる。  基本的なpostfixの設定方法は省きます。S25Rとかもどこかで書いてたと思うので略。 /etc/postfix/main.cfあたりに以下の行を追加。 # SMTP auth 2010.07.19 add smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = $myhostname smtpd_recipient_restrictions = […]

pop3サーバメモ

注意ここのページは書きかけで放置されています(汗 qmail系のpop3サーバ等については、「qmailでメールサーバ」を参考にしてください。  

dracのインストール

POP before SMTPができるらしい。  

入手方法

http://mail.cc.umanitoba.ca/drac/からダウンロード この辺↓ ftp://ftp.cc.umanitoba.ca/src/drac.tar.Z  

インストール手順 コンパイル準備とコンパイル

※解答するときにサブディレクトリを作らないので、事前に作っておかないとイタイ目にあう。

$ mkdir drac $ cd drac $ wget ftp://ftp.cc.umanitoba.ca/src/drac.tar.Z $ tar zxvf drac.tar.Z $ vi Makefile

FedoraCore5の場合は、Makefileの設定を以下のような感じにする。 ※ソースは後半の設定ほど優先なので、既存の「MANADM = 1m」の後ろあたりにコピペしてもオッケー。

INSTALL = install EBIN = /usr/local/sbin MAN = /usr/local/man/man DEFS = -DSOCK_RPC […]

postfixでメールサーバ

 ここのページはpostfixについて詳しく書こうと思ったけど、面倒になって来たので、他のネタは他のブログを見てください。

postfixとは Amazon:4756140513

 ここはpostfixというMTAの設定の備忘録です。MTAとはつまりメールサーバで、インターネット上でメールの受送信の役割を担います(この辺の詳しい説明は省略)。

紹介している本は私が参考にした本です(既にVerが古いかも・・・汗)。 なぜpostfixか

 メールサーバの代名詞から、セキュリティ問題の代名詞のような扱いにされて早数年のsendmailですが、それだけではなく設定の困難さから、今の世の中でも敬遠されている存在には代わりありません。  過去にqmailの調査と利用もしましたが、qmailは最新バージョン(1.03)が出てからかれこれ8年経過しており、ユーザグループのサポートで何とか生きながらえていると言う状態になっています。「シンプル且つ安全」と言われたqmailですが、既に1.03から追加機能とセキュリティ問題でパッチだらけになってしまい、もやは素人の手出しができない代物になりつつあります。

 そんな中で注目されているメールサーバの一つとして、postfixがあります。性能・設定の容易さなどが特徴でしょう。注目されていること=セキュリティの問題も発見されやすいというのもありますが、公式サイトを見てもわかるとおり、頻繁にバージョンアップされていることから、信頼できるものに見えます。

ソースコードとrpm

 このサイトは、以前からソースコートからコンパイルしでデーモンの構築を推奨してきました。これは、なるべく最新版を入手し運用すべきと考えたからです。 しかし、昨今はバイナリコードによる提供も良くなってきましたので、ここではソースコードからのコンパイルは解説しません(私ももう実際にコンパイルしてないし)。  FedoraCoreであれば(っていうかそれ以外は知らない)、「yum update postfix」などのコマンドで気軽にアップデートできるので、管理上それでよいと思います。

 そんな訳で、ここではFedoraCore5のバイナリベースで解説しています。それ以外の方はパスなどを読み替えてください。

postfixとDNS

 postfixに関わらず、インターネット上で稼働するメールサーバは通常DNSを参照しています。何を参照しているかというと、相手先ドメインのメールサーバがどこにあるかというのを参照しています。  たとえば、yahoo.co.jpドメインであれば、以下のコマンドで調べられます。

# dig yahoo.co.jp mx | grep MX | grep -v '^;' yahoo.co.jp.            384     IN      MX      10 mx2.mail.yahoo.co.jp. yahoo.co.jp.            384     IN      MX      10 mx3.mail.yahoo.co.jp. yahoo.co.jp.            384     IN      MX      10 mx4.mail.yahoo.co.jp. yahoo.co.jp.            […]

qmailでメールサーバ

はじめに Amazon:4756140017  ここでは、qmailを利用したメールサーバの構築方法を解説します。主な内容はqmailによるSMTPサーバの構築と、各種ツールの使い方、popサーバの構築方法です。  qmailはsendmailに比べるとシンプルだと言われますが、動くようになるまでは結構大変です(それこそsendmailとあまり変わりません)。  ちなみに私は「qmail メールサーバの構築」という本で勉強しました。qmailの公式サイトも見づらいので意外と役立つ情報が多いです。 このコンテンツでのソフトのバージョン  特に表記が無ければ、以下のバージョンに関して解説します。新しいバージョンが出てても設定方法はさほど変わらないと思いますので、なるべく最新のものを利用するように心がけてください。 ※一部、インストール中にソースファイルの内容を書き換えているところがありますが、それはバージョンに依存するかも。 qmail:qmail-1.03.tar.gz checkpassword:checkpassword-0.90.tar.gz ucspi-tcp:ucspi-tcp-0.88.tar.gz daemontools:daemontools-0.76.tar.gz relay-ctrl:relay-ctrl-3.1.1.tar.gz qpopper:qpopper4.0.4.tar.gz RedHat9でのエラーについて(2004/02/08)  RedHat9でqmailを構築する際に、コンパイル中に以下のようなエラーが出ます。 : undefined reference to `errno’ collect2: ld はステータス 1 で終了しました make: *** auto-str エラー 1 ※qmail、checkpassword、ucspi-tcp、qmail-vida、daemontoolsでエラーが出ることを確認しましたが、基本的にdjb製のソフトは同様のエラーが発生するそうです。  これを解決するにはソースコードの修正が必要ですが、ftp://moni.csi.hu/pub/qmail/glibc-2.3.1/にパッチがありますので、それを適用することにより解決することも可能です。 ※以下の操作はすべてそれぞれのコンパイル前のソースが存在していることが前提です。 ※qmailの場合 $ wget ftp://moni.csi.hu/pub/qmail/glibc-2.3.1/qmail-1.03.errno.patch $ patch < qmail-1.03.errno.patch ※checkpasswordの場合 $ wget ftp://moni.csi.hu/pub/qmail/glibc-2.3.1/checkpassword-0.90.errno.patch $ patch < checkpassword-0.90.errno.patch ※ucspi-tcp場合 $ wget ftp://moni.csi.hu/pub/qmail/glibc-2.3.1/ucspi-tcp-0.88.errno.patch […]

S25RでSPAM対策

 今まで主にブラックリストでSPAM対策をしていた訳ですが、いろいろ試行錯誤してもフィルタ率が80%くらいでした。  届く宛先の傾向を見ると、やはり過去にWebにメアドを載せていたのが原因ですね。ここのサイトも10年以上公開しているので歴史の重みの一つですね。

 で、結構悩んだんですが、S25R(Selective SMTP Rejection)という仕組みを導入してみることにしました。詳しくは以下のサイトを見てください(始めのページに要点も書いてあります)。 http://www.gabacho-net.jp/anti-spam/

 結果から言うと、ほぼ100%SPAMを駆逐出来てます。かなりすごいですね。ただし、誤フィルタの危険性も捨てきれないので、しばらく監視が必要です。

 とりあえず設定方法については上記アドレスの「阻止率99%のスパム対策方式の研究報告」ってところに、postfix向けの設定サンプルが書かれているのでそれで行けますが、ちょっと注意点などを以下に記載してみたいと思います。

 まず、main.cfの設定ですが、元々ブラックリストによる制限をしてますが、S25Rも同じようなところに定義してます。ですので、ブラックリストとS25Rを両立する設定が必要な訳ですが、私は以下のような感じに設定しました。

main.cfの設定サンプル(ブラックリストとS25Rの両立)

〜以下、抜粋です  「reject_rbl_client 云々」がブラックリストの設定。「permit_mynetworks」以下が、S25Rのサイトにあったサンプルと同様の設定です。

smtpd_client_restrictions = reject_rbl_client all.rbl.jp, reject_rbl_client sbl.spamhaus.org, reject_rbl_client bl.spamcop.net, reject_rbl_client list.dsbl.org, permit_mynetworks, check_client_access regexp:〜云々〜, check_client_access regexp:〜云々〜, check_client_access regexp:〜云々〜

 また、S25Rは誤フィルタを防ぐ為にホワイトリスト(許可リスト)を設定する必要があります。ホワイトリストも上記S25Rのサイトの「ホワイトリスト情報」ってところにあります。  で、この情報は頻繁に更新がなされるので、更新されたらメールで知らせてくれるようにcronに以下のソースを設定しています。

更新お知らせシェル

 頻繁にチェックすると相手のサイトに迷惑なので、一日一回だけのチェックにしてます。ちなみに以下の設定だと、サーバのroot宛にメールを送るので、その辺は環境に応じて旨く設定してください。  なお、あくまでお知らせするだけで、更新はしてくれません。

#!/bin/csh wget –no-cache -q -O /etc/postfix/white-list.txt.check -T 10 http://www.gabacho-net.jp/anti-spam/white-list.txt if ( $status != 0 ) […]

body_checks

 前にpostfixでヘッダーチェックをしてSPAMメールをフィルタする話を書きましたが、今回はbody_checks、つまりメール本文を見て不要ならフィルタするというもの。  まぁ、設定とか書いてもいいんですが、結論から言うと使えません。  軽く調べたら、どうもメール本文がBASE64とかでエンコードされてると、body_checksはデコードしてくれないので、フィルタできないとのこと。 BASE64でエンコードした情報をフィルタ設定として書けばいいのかもしれないけど、面倒だからやめ。  ってことで、この方法は他の手段を考えよう…

postfixでSPAM対策その2

 うちのメールサーバのSPAM対策は、設定で遮断できるところ遮断し、できないところはRBL(Realtime Blackhole List:ブラックリスト)で遮断しています。ブラックリストはspamcopの効果が圧倒的に大きいですね。誤登録も多いらしいけど。  サーバ側ではグレイリストは使ってません。誤遮断が怖いのもあるけど、正か誤りかの確認がしづらいのが理由。だから、クライアント側で振り分けて1つ1つ確認しています(Beckyの深海魚フィルタ)。  で、今回はpostfixの機能の一つを追加してみました。header_checksとbody_checksというのがあるのですが、今回はheader_checksです。メールヘッダーに任意の文字列がある場合に、エラーを返します。やり方は以下のような感じ。 /etc/postfix/main.cfに追加(元々コメントアウトされてる)。 header_checks = regexp:/etc/postfix/header_checks /etc/postfix/header_checksに追加(ファイルは元々ある)。 /^Message-ID:.*xxxxx.jp>/ REJECT  /etc/postfix/header_checksには元々コメントがいっぱい書いてありますが、すべてコメントで無視されるので、一番下にでも追加すればいいでしょう。 上記の定義の意味は、「^Message-ID:」はヘッダーの中の「Message-ID:」のことです。「^」が文頭を意味しています。「.*」は任意の文字。Message-IDにはいろいろな文字が入りますので、そこを省略しています。「xxxxx.jp」のことろは、そのSPAM特有の文字列を示していています。「Message-Id」はSPAMじゃなくてもヘッダーに入っていますが、SPAMメールのヘッダーをよく調べて、明らかにSPAMにはコレが書かれているという単語がわかればそれを正確に入れましょう。最後のREJECTは、「遮断」の意味ですね。  他にもX-Mailerとか指定できるので、ググルといろいろ調べてみるといいかもしれません。ちなみに「/~From:.*xxxx.net>/ REJECT」がうまくいきませんでした…何でだろう?  この機能は、「マッチした場合にエラーメール(バウンスメール)を返す」ではなく、「マッチした場合に相手サーバにエラーを返す」です。  バウンスメールってSPAM業者には全く効果が無いので、このすぐにエラーを返すという動作もいいですね。

SPAMメールフィルタ

 メールソフトはBecky!(http://www.rimarts.co.jp/)を使ってます。 軽快で高機能で、プラグインとかで拡張できるので、気に入っています。  で、長くWebを公開してたりとか、技術者なのでMLとかに入ったりとかで、SPAMメールがよく届きます。無差別メールとかも多いッスね。  SPAMメールはメールサーバでかなり厚くブロックしています。 昨日ブロックしたメールの件数が、ブラックリスト別だとこんな感じ。 – Using Black lists – 102 bl.spamcop.net; 12 all.rbl.jp; 6 list.dsbl.org; 4 sbl.spamhaus.org;  メールサーバをqmailからpostfixにしたことで、User Unknownはメール受信中に送信者に返せるようになったし(qmailは返信メールになっちゃうので、ほとんど届かない)、ブロックも送信者に通知されますが、まぁ一向に減りません。  結局、10通くらいはこういうフィルタを通過して受信しちゃいますが、最近はシーラカンスソフト(http://coelacanth.on.coocan.jp/)のメールフィルタ(Becky!のプラグイン)を使って分別しています。なかなか賢くて、これで漏れるメールは数日に1通くらいになりました。  初期は、英語メールを無差別にフィルタしたりとか微妙な動きをするけど、学習させていけば、かなり制度が高くなりますね。  学習ってどういう仕組みなんだろうとか思いますが、ワンクリックで出来るので、楽です。  ってな感じでかなりお勧めですよ。

postfixでSPAM対策

 うちではブラックリストの設定をこんな感じにしてます(比較的に固め?)。 ・main.cfの一部抜粋 smtpd_client_restrictions = reject_rbl_client all.rbl.jp, reject_rbl_client sbl.spamhaus.org, reject_rbl_client bl.spamcop.net, reject_rbl_client list.dsbl.org ※ブラックリストの指定は変化することがあるので、これを丸写しとかしないように注意。  smtpd_client_restrictionsは、

SMTPサーバがクライアントからSMTP接続の要求を受けた際に適用する、オプションのアクセス制限。

だそうです。  fedoraとかだと、LogWatchを仕掛ければどのブラックリストでどの位ブロックしたかをサマリーしてくれるけど、家はちょっと独自にシェルを組んでます。 $ cat blocked_mail.csh #!/bin/csh # 前日のブロックされたメールをサマリしてくれる setenv TZ JST+15 setenv LANG C # blockedを集計(rlytestはテストっぽいので除外) grep "^`date ‘+%b %e’`" /var/log/maillog* | \ grep ‘blocked’ | grep -v ‘rlytest’ \ > /tmp/blockedmail.tmp echo ” > /tmp/blockedmail2.tmp echo "- Using Black […]

postfixでSPAMブロックの状況

昨日のSPAMブロックの結果。 RBL.JP 25 SPAMCOP 28 SPAMHAUS 3  SPAMCOPは昨日追加したばっかりなんだけど、やっぱり効果は高いな〜。 それでもすり抜けてくるのがちょうど10通くらい。もう少し様子を見てみるか。 あ、ちなみに情報サイトはいくらでもあるから、これから参考にする人がいるかわかんないけど、うちのサーバは、main.cfに以下の通り追加しただけです。 smtpd_client_restrictions = reject_rbl_client all.rbl.jp, reject_rbl_client sbl.spamhaus.org, reject_rbl_client bl.spamcop.net

postfixでSPAM対策へ

 qmailの時からSPAMに悩まされていたので、postfixにしたことを機にSPAM対策を強化してみました。  SPAMが多い理由は過去に海外のMLに入っていたのと、ホームページにメアドを載せてたからかな(メールサーバの解説でもダミーのメアドが載ってるけど、それも全て拾ってるようで、そのアドレスにもよく届きます)。今もメアドを載せてるけど、ここの対策は微妙。  とりあえず、今までの経過は以下の通り。 qmailからpostfixに変えた。  qmailはサーバに居ないユーザでも一度受け取っちゃいますが、postfix(っていうか普通のメールサーバは)受け取らずにUserUnknownを返します。qmailは仕組み上しょうがないけど、エラーを送信者(詐称されてる)へ返信し、それがバウンスメールとして管理者に返ってくるので、偉い面倒。  postfixにしてから統計を取ったけど、一日160通くらいUserUnknownになってるので、もう少し根本的に対策とらないとダメかな。 ブラックリスト機能を有効にした。  qmailでもできたことだけど…。  まずは、RBL.jpを設定。現状平均で20通くらいのメールをブロックしてくれています。まぁ、それでも一日10通くらいSPAMが届きます。  次にSpamCopというブラックリストも追加。ここはちょっと遮断しちゃうところが多すぎるらしいので微妙ですが…。まぁ、ブロックしたメアドを毎日サマリーしてくれるシェルを作ったので、しばらく様子見ですかね。  まずはこんなところかな。