ARAGO for Internet Wiki Project AkuAku

This web site is powered by Arago for Internet v7.0 UTF-8 edition on FreeBSD
SPC main menu Expand/Fold
Products 取扱商品 Expand/Fold
SouthWind  Expand/Fold
Q&A Technical support Expand/Fold
BBS 掲示板 Expand/Fold
Easy PC life Expand/Fold

Last Edit Date: 09/11/2009
POSTFIX

spam blockの追加とPostfixでのreverse dns問題について。 2009/09/10追加


毎日大量のspamを送りつけられて閉口されていると思います。 ipfilterで中国黒龍江省のispを全面的にblockすると99%近くのspamをブロックできます!それ以外のspamをブロックする為にspam blockerサイトを追加しました。
このページの下のほうのmain.cfのspam blockの部分をご覧ください。



reverse dnsチェックとは、smtpサーバーがメイルを受信したときに、相手方のsmtpサーバーのipからドメイン名が取得できるかをチェックし、取得できないときには、そのメイルの受信を拒否するものです。
そのためには、isp側にreverse dnsが受け取れるようにしなければいけません。 ispのご相談ください。 
ipsが変更した後に自前のbindの設定を変更確認して、外部からreverseが動くかの確認をしてください。 googleするとそのようなサービスをしているサイトがたくさんありますので、それらをご利用ください。

なおpostfixのipは強制的に設定はできないようです。

 ではxxx.xxx.xxx.200のサイトでは、ipfilteringで外側のethernetのipはxxx.201になっていると思いますが、postfixのipはこのipになります。 bindのzoneファイルで
mail A xxx.xxx.xxx.202
となっているでしょうが。


revファイルでこの外側のethernetのipも
201 IN PTR ns1.xxxx.com.
のように書いてください。
相手側のsmtpサーバーは、201でrevをかけるからです。


 Dovecot SASLでのAUTH 追加変更、2008/08/16 更新 

最近のISPはspam発信を禁止するためにport25からのSMTPをblockしています。 そのために一般のdhcp回線からではmailサーバーからめいるを送れないということがおきています。

 Postfixのmaster.cfの次の行のコメントをはずしてください。

smtp inet n - -n -- smtpd
##submission inet n - n -- smtpd <--このコメント ##を削除します。
もちろんipfilterもお忘れなく!
このport25blockに対してのportはsubmission portでport番号は587です。 mailerの設定を変更してください。

FreeBSD 7.0ではsendmail関連のインストールはすべてなくなりました! このためpostfixを実行するとディレクトリがないとエラー表示されます。 すいませんどのディレクトリだったか忘れました! そのうち調べます。 とりあえずないと言われたディレクトリを作成してください。

赤字はDovecotのための処理部分です。 一日数百件のアクセスがあるようです。 更新遅くなりすいません!
Pop-before-smtpはDovecotの新しいバージョンではおかしな動作をします。 安直な代物でしたが、POSTFIXでメイルの受信が出来ないなどと頭を悩ます代物です!
ということで、DovecotのSASL AUTHを使います。 このためにPOSTFIXもそのような設定が必要です。 もしうまくいかないときには、arago@soupacific.com宛にメイルを出してみてください。 さもなければ掲示板に書き込んでください。 返事がすぐ出来るかは全くわかりませんが? 


POSTFIXはSMTP daemonです。 これでは意味がわからない人もいると思います。

emailは

mail client から自分の指定するメイル(SMTPd)サーバーにメイルを送ります。
これを受け取ったsmtpdサーバーが相手のsmtpdサーバーにメイルを送ります。
受け取ったsmtpdサーバーは、アカウントのディレクトリに受け取ったファイルを保存します。
受取人がmail clientを立ち上げpop3サーバーにアクセスし、自分宛のメイルがあるかどうかを確認します。
あればpop3サーバーがそれをmail clientに返します。 
大量のメイルを送信するときには、自組織のメイルサーバーをお使いください! よくレンタルサーバーからメイルを大量に送信しようとする方がいますが、 問題外の行動です!


mailの保存方法として、古典的なmailbox形式とmaildir形式があります。 mailbox形式は、それぞれのユーザーアカウントごとに、ひとつの巨大なファイルに全てのメイルを押し込めます。 それなりにindexなどを使うのですが、lockingの問題、もしこけると全部のメイルがなくなる、遅い、ということで、現在の主流はmaildirです。 これは一件のメイルが一つのファイルになっています。 200M もあるような添付ファイルがあるときには、処理はmailboxと比較してはるかに軽くなります。

このmaildirに対応するPOP3サーバーが必要になります。 ここではdovecotを使います。

smtpdは機能がたくさんあります。 またpostfixのマニュアルでは、qmial、sendmailを知っていることが前提のようです。 いまさら古典的なものを勉強する気もありません。 必要な情報は全部書いてあるつもりです。

さていまやinternetメイル使用率のトップに躍り出るのはspmaです。 90%だという人もあります。 このspamはsmtpdの relay機能を利用し、人のサーバーを利用しています。 アメリカ、中国、韓国がこのはた迷惑な泥棒野郎の国、御三家です。
まあipfilterで全部これらの国からのipを遮断したいのですが、それでは仕事になりません。 大胆にもアメリカでは中国韓国を全て遮断する管理者もずいぶんといるようです。 spamを送受信ともblockするように考えて設定します。 しかしmsn.comなどからのspamはblockするとそれはそれで問題がおきます。 

そこでaragoiを利用したspam blockeer クロヤギを現在開発中です。 クライアントがspamと指定したものを、クロヤギの指定先に forwardすると、それ以降そのipなりdomainからのメイルは受信しなくします。 spamメイルをバリバリと噛み砕くクロヤギご期待ください。 

postfixでmaildirはもちろんvirtual usersで設定します。 virtual usersとは一つのサーバーで複数のドメインを管理することができます。
POP Clinetの設定ですが、ユーザー名は通常ですと、例えばJohnBull@goneaway.comだとすると、johnbullですが、virtual domainではJohnBull@goneaway.comがアカウント名になります。

smtpdの動作はDNSの設定とも絡みます。 bindのページもきちんと理解してください。

前回の設定では、外部からメイルを送信するときに、relayであるかどうかを確認するために、 pop-before-smtpdをサポートしまいました。 これによって、外から、メイルサーバーにアカウントがあり認証に成功すれば、メイルを送信することができました。 今回はこのPop-before -smtpを利用しません! これだけでportからのインストールでごみの山ほどわけのわからないものをどんどんインストールされるのが防げます!

dovecotはpop3、通常のmail clientと、browserでメイルを見るimapの両方に対応しています。 もちろんvirtual user対応です。 最近のバージョンから Pop-before-smtpでおかしな動作をするようになりました、もちろん原因はperlで書かれたpop-before-smtpにあります。 どうなるかというと、メイルの受信が一切できなくなります! この原因を調べるのにうんざりするほど時間がかかりました。 またアイデアとしてもpop- before-smtpも賢いというにはちょっと程遠いものがありますし、現在のvirusアタックでは少々問題があります。 DHCPで動作している LAN内から、インターネットカフェを考えてください。 ここで自分のメールサーバーにloginします。 ここまでは普通のことですが、pop- before-smtpはこの後のアクセスをオープンします。 もしこのネットワークの中にvirusが仕事をしていて、運悪く自分のメールサーバーにアクセスしたとします。 外部には同じIPを共用しているため、 virusもあなたも同じものとして許可します。 これではではまずいですね。

今回はPOSTFIXでSASL AUTHを利用してblockします。 これはSMTPではなく現在拡張されて久しいESMTPの機能を利用します。 メイルを送信するときにAUTH(認証)を要求します。 メイルを受信しようとするとパスワードを要求するのとまったく同じです。 ほとんどの現代的な mail clientでサポートされています。 



mailシステムはこの三つのプログラムのよって構成されています。 最初にpostfixをインストール設定します。

できればO'Reily出版のPostfix The Definitive Guideを購入することをお勧めします。

aragoiを利用するとき
portを使いません。 portはportのscriptを書いた人のコンパイルオプションやdirectory設定のままでしかできません。
www.postfix.orgから最新版をダウンロードします。
混乱しやすいので、 downloadというディレクトリを作成、
mkdir /download
cd /download
このディレクトリにダウンロード
tar -xf postfix-xxxxx
これでpostfix-xxxxxxのディレクトリが作成されます、

aragoiを利用されるときにはここを読んでください、 それ以外はskip
/downloadに postfixargi.patchとREADMEARGIをコピーしてください。
patch >postfixargi.patch
を実行するとぶつぶつと何かかかれます。 errorになっていないか確認してください。
このpatchファイルにはpostfixのversionが書かれています、 違うようでしたら変更してください。
変更するファイルにerrorがあるときには、そのerrorを確認して修正してください。
可能性は/src/globalが異なっているか、 patchを当てるファイルの行数が変更になっているかです。
そのときにはpostfix-xxxxxxxの下のsrcでつぎのようにgrepしてください。
grep -R -n 'dict_mysq' *
ここで表示されたファイルをオープンしpatchファイルの中身と比較してください。


では 先に必要なuser accountとgroupを作成します。
vipwで/etc/passwd:にpostfixを追加します。
postfix:*:12345:12345:postfix:/no/where:/no/shell

vi /etc/group で次の行を追加

postfix:*:12345:
postdrop:*:54321:

vi /etc/aliases で次の行を追加
postfix: root

これで環境の準備はできました。

さあコンパイルです。 昔はmake tidyでしたが、dovecotのSASL AUTHを使いますので、
make tidy ではなく、次のようにします。

make makefiles CCARGS='-DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\"dovecot\"'

エラーがなければ次に進みます。全体を括る為に ' が使われてます注意してください。
Cyrus SASLと比べるとはるかに簡単です! 設定のところでdovecot SAAL AUTHのために追加されたところを赤で表示します。  SASL AUTHなんていらんよと思う方もいるでしょうが、そのような方はぜひmailserverを立ち上げないでもらいたいですね。 spam拡散用のmailserverなんてものははた迷惑の何者でもありません。 
このpostfixのdovecot用のmakeが必要だなんてdovecotのwikiには書いていないようで混乱しますね。

make
make install 
もし新しいpostfixにアップグレードする時は、make installではなく,make upgradeです。

このinstallで聞かれてくることに注意しましょう。

install_root: [/] ここではreturn
temp_dir: ここもreturn
config_directory: [/etc/postfix] ここでは /usr/local/etc/postfix と入力してください。
FreeBSD  portsにあわせるためです。
daemon_directory: return
command_directory: return
後の質問はすべてreturnしてください。
postfixのmain.cfファイルの位置はdefaultでは。/etc/postfixです。 make makefilesで次のオプションで変更しておいてください。
-DDEF_CONFIG_DIR="/usr/local/etc/postfix"
さもなければ、 /etc/に
ln -s /usr/local/etc/postfix /etc/ でシンボリックリンクしてください。
途中でFreeBSD 7.0ではsendmai用のディレクトリを作成しませんので、エラーになるかもしれません。 要求されるディレクトリを作成してサイド make installしましょう。
portでインストールするとき。

/usr/port/mail/postfix-currentのディレクトリに行き

make install clear
途中でいくつかの質問が聞かれます。
startupを作成するか yes
user accountを作成するか yes
sendmailがどうのと出たら no

postfixのmakeでperlを要求されることがあるかもしれません。 sysinstallでインストールしてください。 
postfixのインストール終了後には、 find / -name perl*でさがし、全部削除しておきましょう! 余計な心配事の元はサーバーに置かないのがベストです!
何しろperlが大嫌いです! 間違えてもpkg_deinstallを使おうなんてことは考えないようにしましょう。 またごみの山になります!

では次にmaildirを作成します。 このディレクトリはdovecotと共有されます。 また/homeの下にapache用のvirtual  domain用のディレクトリも別に作成します。

mkdir /home
mkdir /home/vmail
cd /home
ここで今作成したディレクトリvmail属性を変更します。
まずvipwでmaildirがあるかどうか見てください。
なければ次のように作成します。

groupadd maildir
useradd -g maildir -d /home/vmail -s /sbin/nologin maildir

vi /etc/groupで
maidir があるかどうか確認してください。
なければ作成してください。

このときのuser id group id はなんでもいいのですが、後でこのid番号を使いますので、1000とか分かりやすい番号にしてください。


chown -R maildir vmail
ownerをmaildirに変更
chgrrp -R maildir vmail
groupをmaildirに変更
chmod 700 vmail
root権限で実行読み書きができるように設定

ls -l
でuid gidが今指定したmaildirになっているかを確認してください。
drwx------ 2 maildir maildir サイズ 日付 vmail

/etc/rc.confに
sendmail_enable="YES"
が在ったら#でコメントアウトしましょう。 

大丈夫ですね?
では次はpostfixの設定ファイル/etc/postfix/main.cfを変更します。
main.rcの内容は
postconfで表示されます。 scrolllockをおしてスクロールしてみてください。
つづりを間違えると変更されません。

最初の適当なところにメイルを送信するときの最大サイズを指定します。 デフォルトでは10Mですが、今の時代には合いません。 昔は1Gのハードディスクがとても大きな時代に、ハードディスクの中身を500M のZIPファイルにしてメールに添付したことがあります。 受信側と送信側のサーバにLANで接続されていれば、たかだか500Mでも問題はありませんでした。 一般のISPのメイルでは4MのZIPを添付しても拒否されるけちなのが結構ありますね。 昔どこかの国の指紋照合システムを見たことがあります。 当時では4G といえば大きなハードディスクだったころです。 システム全体では確か2Tでした。 卓球台が何面か置ける広さを占めていましたね。 さて

message_size_limit = 512000000
とりあえず、50M に指定します。 まあ現実的には小さい気がしますね。 もっと大きいのが好きな人は好きな数値を指定してください。
virtual_mailbox_limit=の値をmailbox_size_limitより大きくしてください。 500Mとか1Gとか、hddの容量に注意してくださいね。

# The soft_bounce parameter provides a limited safety net for
# testing. When soft_bounce is enabled, mail will remain queued that
# would otherwise bounce. This parameter disables locally-generated
# bounces, and prevents the SMTP server from rejecting mail permanently
# (by changing 5xx replies into 4xx replies). However, soft_bounce
# is no cure for address rewriting mistakes or mail routing mistakes.
#
soft_bounce = no
ここはもちろんnoです。

# The myhostname parameter specifies the internet hostname of this
# mail system. The default is to use the fully-qualified domain name
# from gethostname(). $myhostname is used as a default value for many
# other configuration parameters.
#
myhostname = prigkeenu.soupacific.com
#myhostname = virtual.domain.tld
ここにこのpostfixがインストールされているhost名を指定します。 dnsでメインとするhost名です。
mailは動作確認が結構面倒です。 差し支えなければ、別のserverでインストールし、そこのhost名で試験するのもいいかと思います。

# The mydomain parameter specifies the local internet domain name.
# The default is to use $myhostname minus the first component.
# $mydomain is used as a default value for many other configuration
# parameters.
#
mydomain = soupacific.com
ここに主たるdomain名を指定します。

unknown_local_recipient_reject_code = 550
virtual hostの指定です。 ここに出てくる全てのファイルを後で作成します。 作成後postmapでdb化します。
1000は先ほど指定したuidとgidです。
/home/vmail は先ほど作成したmaildirになります。

#VIRTUAL HOSTS
virtual_mailbox_domains = /usr/local/etc/postfix/virtual_domains
virtual_mailbox_base = /home/vmail
virtual_mailbox_maps = hash:/usr/local/etc/postfix/vmaildir
virtual_minimum_uid = 100
virtual_uid_maps = static:1000
virtual_gid_maps = static:1000
virtual_alias_maps = hash:/usr/local/etc/postfix/virtual_alias

# TRUST AND RELAY CONTROL
maildirを使うことを指定します。
# "Maildir/" for qmail-style delivery (the / is required).
#
#home_mailbox = Mailbox
home_mailbox = Maildir/

spamメイルの処理です。
http://www.akadia.com/services/postfix_uce.html などを参考にしてください。 google.com でpostfix spam blocking でいろいろと出てきます。

Dovecotの設定が終わるまで
permit_sasl_authenticated,  <------
の行はコメントアウトしておいてください。



##SASL ここでSASL AUTHの指定します。
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

# JUNK MAIL CONTROLS
#
# The controls listed here are only a very small subset. The file
# SMTPD_ACCESS_README provides an overview.

# The header_checks parameter specifies an optional table with patterns
# that each logical message header is matched against, including
# headers that span multiple physical lines.
#
# By default, these patterns also apply to MIME headers and to the
# headers of attached messages. With older Postfix versions, MIME and
# attached message headers were treated as body text.
#
# For details, see "man header_checks".
#
#header_checks = regexp:/usr/local/etc/postfix/header_checks
header_checks = regexp:/usr/local/etc/postfix/header_checks
smtpd_delay_reject = yes
smtpd_hello_required = yes
smtpd_hello_restriction =
permit_mynetworks,
reject_non_fqdn_hostname,
reject_invalid_hostname,
permit
smtpd_sender_restriction =
permit_sasl_authenticated,  <------dovecotの認証指定
permit_mynetworks,
reject_non_fqdn_sender,
reject_unkown_sender_domain,
permit
smtpd_recipient_restrictions =
reject_unauth_pipelining,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
permit_mynetworks,
permit_sasl_authenticated,   <---------dovecotの認証指定
reject_unauth_destination,
## reject_rbl_client relays.ordb.org, これはもうありません! えらい目にあった!
reject_rbl_client list.dsbl.org,
reject_rbl_client sbl-xbl.spamhaus.org,
reject_rbl_client cbl.abuseat.org,     <----新規追加 2009/09
reject_rbl_client dul.dnsbl.sorbs.net,   <----新規追加 2009/09
permit


ずいぶん簡単ですがmain.cfの設定はこれで終わりです。 
ではこれから必要なファイルを作成します。
ディレクトリは/usr/local/etc/postfix/ です。
vi /usr/local/etc/postfix/virtual_domains
内容はこのpostfixでサポートするドメイン名のリストです。

aaa.org
bbb.com
のように列挙します。
これはpostmapをする必要はありません。 これでvirtual domainsが指定されました。 必要なだけどんどん追加してください。


次はこのpostfixでのアカウントの設定です。

virtual_mailbox_base = /home/vmail
virtual_mailbox_maps = hash:/usr/local/etc/postfix/vmaildir
で指定したvmaildir、このファイルに全てのvirtual hostのアカウントを記述します。 この中でmaidir +  virtualhost + userというディレクトリを使います。 maildirは virtual_mailbox_baseで指定されます。

aaa.gov の bigshamepresident というユーザーのディレクトリは次のようになります。
/home/vmail/aaa.gov/bigshamepresident/
このディレクトリの下に三つのディレクトリを作成します。
new  まだ読んでいないメイルのディレクトリ
cur 読んだメイルのディレクトリ
tmp テンポラリディレクトリ

postfixはqmailと異なり、vmailboxに存在するアカウントのユーザーの必要なディレクトリを勝手に作成してくれます。 インストール時に必要なディレクトリは virtual_mailbox_base で指定する /home/vmail/だけです。 owner と group maildirになっていないと、 permission errorとなります。

#aaa.org
pope@aaa.org aaa.org/pope/
jbull@aaa.org aaa.org/jbull/

#bbb.com
sburg@bbb.com bbb.com/sburg

#zzz.net
budha@zzz.net zzz.net/budha

のようになります。 virtual domainを追加したときには、virtual_domainsにも必ず追加してください。
mail clientの設定では、login ユーザー名には必ず、budha@zzz.netのようにドメイン名も記述してください。
RFCで要求されているpostmasterは作成したければ作成してください。 adminとかはvirtual_aliasで記述し別のアカウントに転送することができます。 vmailboxで記述されていないと、受信したメイルをアカウント名のディレクトリに保存することは当然できません。

保存終了したら
postmap /usr/local/etc/psotmap/vmaildir
とdb形式ファイルvmaildir.dbを作成してください。


では次は転送用のファイルを作ります。 mailbox 形式ですとそれぞれのユーザーのディレクトリに .forward というファイルを置き、その中で転送先のメイルアドレスを記述するのですが、postfixのvirtual hostでmaildirではそれができません。
postfixが受信したメイルはqueディレクトリに保存され、それをdeleivery agentが伝送します。 virtual hostの agentは.forwardを認識しません。 そこで virtual_alias ファイルを使います。 .forwardのように、何かを実行することを指定することも可能です。

/usr/local/etc/postfixのvirtual_aliasに必要な内容を記述します。

#aaa.org
postmaster.aaa.org pope@aaa.org , jbull@bbb.com , postmaster@aaa.org

#bbb.com

最初のメイルアドレスpostmaster.aaa.org宛に来たメイルをpope@aaa.org , jbull@bbb.com に転送します、 またpostmaster.aaa.orgにも保存します。 保存する必要がなければpostmaster.aaa.orgはいりません。 転送が必要なものはここで全て記述してください。

保存終了したら
postmap /usr/local/etc/psotmap/virtual_alias
とdb形式ファイルvirtual_alias.dbを作成してください。

ここまでできたら、postfix を起動してみましょう!

postfix start

errorが表示されませんでしたか? logファイルはできていますか? logファイルの位置は/var/log/です。

fatal: postfix mail system is already running と出得ることがあります。 
/usr/loca/etc/rc.d/postfix.shがあるかどうか見てください。 もしあるようでっしたら
postfix.sh.oldとでも名前を変えてください。

メイルの送受信が動けば大丈夫です。

rebootして起動されるか確認してください。 loginするときの画面にpostfixと出ていれば起動できています。 errorがあれば表示されるかもしれません。

起動されないときには /usr/local/etc/rc.d/postfix.sh が在るか確認してください。

aliasでerrorが出るときには
/etc/aliasに
postmaster: root
postfix: root
が在るか確認してください。


メイルの送信だけチェックしてください。 popはdovecotのインストールが終了するまで動作しません!

すべての設定が終了し、外部回線に接続の上次の方法でpostfix+dovecot sasl認証のチェックを行うことができます。
サーバー上でまずbase64コード化された認証コードを作成しますが、その前にこのコードを作成するツールをportぁらインストールします。

/usr/ports/converters/mmencodeで make、 make installで/usr/local/bin/に作成されます。

#printf "\0username\0password" | /usr/local/bin/mmencode
でbase64コード化された文字列が表示されます。

では
#telnet localhost 25
220 mail.aaa.com
ehlo ns1.aaa.com <----esmtpでheloを入力する
250-mail.aaa.com
250-PIPELINING
250-SIZE 2560000
250-ETRN
250-AUTH PLAIN LOGIN
250-AUTH=LOGIN PLAIN LOGIN <---これはOUTLOOK用にbroken_sasl_auth_clients="YES"を指定すると表示される。
250- 6BITSTREAM
auth plain base64コード文字列 <---パスワードとユーザー名で作成されたbase64コード文字列を入力
235 Authentication successful <----これが出れば成功です!
quit

http://www.postfix.org/SASL_README.html#server_dovecotを参照ください。

ユーザーアカウントが大量になれば、10万とか、.dbをaragoiで管理しようかと思います。
クロヤギがまず先ですが。


この原稿の一部、または全部を引用するときには、 出展の明記、 またその旨ご連絡下い。 またこのページへのリンクもお願いします。







Advertisement Expand/Fold