メールシステムの全体像

  1. 用語の整理
    • MTA(Mail Transfer Agent)
      • MTA同士でメールを配信する(SMTP)
      • Postfix , sendmail , qmai
    • MDA(Mail Delivery Agent)
      • MTAからメールを受け取りMail格納領域に格納する。その際フィルタリングやウイルスチェックを行うものもある
      • Fetchmail , Procmail
    • MRA(Mail Retrival Agent)
      • Mail格納領域からMUAにメールを配信する。
      • Qpopper , Courier-IMAP
    • MUA(Mail User Agent)
      • ユーザーがメールを閲覧するアプリ
      • Squirrelmail , Becky!2 , Outlook
  2. このシステムの方針
    Mail1.png
    セキュリティ設定を簡単にするために、
    • インターネット側からメールボックスを閲覧しません(ルーターでPOP3をLAN内に入れない)
    • インターネット側からメールを出しません
      • このサーバ宛に来たメールは全て受信します
      • 他のSMTPサーバへの中継は、LAN内(192.168.1.0/24,127.0.0.1)からのメールのみ
      • 要はSPAMerの踏み台にならないようにすると言うことです。

Postfixの設定

  1. [Yast]-[ネットワークサービス]-[メッセージ転送機能体]を選択します。
    Mail2.png
  2. まずは、常時接続に設定します
    Mail3.png
  3. このマシンを個人の占有端末として使うときの設定です。今回はサーバーマシンとして設定するので特に設定する必要はありません
    Mail4.png
  4. 受信メールでは、リモートSMTP接続を許可し、ファイアーウォールを開けます。「ダウンロード」は前画面と同様に個人端末として使うときの設定なので必要ありません。
    Mail5.png
  5. 設定ファイルの操作
    1. Yastによって作成された /etc/postfix/main.cf を元に、viで編集します。(Yastによって作成されたmain.cfは、編集前にmain.cf.originalと言う名前でコピーしておきます)
      変更箇所は以下のようになっていて、上がオリジナル下が変更後。変更箇所には"!"が付いています。 grape:/etc/postfix # diff -c main.cf.original main.cf
      *** main.cf.original    Sun Mar  4 14:12:53 2007 [#s90cd2c8]
      --- main.cf     Sun Mar  4 23:12:23 2007
      *************** [#wa6a4b2f]
      *** 35,41 **** [#g0a72112]
        # See the files in examples/chroot-setup for setting up Postfix chroot
        # environments on different UNIX systems.
        #
      - queue_directory = /var/spool/postfix
       
        # The command_directory parameter specifies the location of all
        # postXXX commands.
      --- 35,40 ----
      *************** [#y6beb3be]
      *** 57,63 **** [#s6e6f00d]
        # particular, don't specify nobody or daemon. PLEASE USE A DEDICATED
        # USER.
        #
      - mail_owner = postfix
       
        # The default_privs parameter specifies the default rights used by
        # the local delivery agent for delivery to external file or command.
      --- 56,61 ----
      *************** [#oe5c2bd1]
      *** 81,87 **** [#s3c536fe]
        # $mydomain is used as a default value for many other configuration
        # parameters.
        #
      ! #mydomain = domain.tld
       
        # SENDING MAIL
        #
      --- 79,85 ----
        # $mydomain is used as a default value for many other configuration
        # parameters.
        #
      ! mydomain = hondou.homedns.org
       
        # SENDING MAIL
        #
      *************** [#od5cf211]
      *** 97,103 **** [#vd3622eb]
        # to recipient addresses that have no @domain part.
        #
        #myorigin = $myhostname
      ! #myorigin = $mydomain
       
        # RECEIVING MAIL
       
      --- 95,101 ----
        # to recipient addresses that have no @domain part.
        #
        #myorigin = $myhostname
      ! myorigin = $mydomain
       
        # RECEIVING MAIL
       
      *************** [#h5f317c6]
      *** 258,264 **** [#dfc71b7b]
        # of listing the patterns here. Specify type:table for table-based lookups
        # (the value on the table right-hand side is not used).
        #
      ! #mynetworks = 168.100.189.0/28, 127.0.0.0/8
        #mynetworks = $config_directory/mynetworks
        #mynetworks = hash:/etc/postfix/network_table
       
      --- 256,262 ----
        # of listing the patterns here. Specify type:table for table-based lookups
        # (the value on the table right-hand side is not used).
        #
      ! mynetworks = 192.168.1.0/24, 127.0.0.0/8
        #mynetworks = $config_directory/mynetworks
        #mynetworks = hash:/etc/postfix/network_table
       
      *************** [#ibc1d51a]
      *** 290,296 **** [#j90e0ee0]
        # list this system as their primary or backup MX host. See the
        # permit_mx_backup restriction description in postconf(5).
        #
      ! #relay_domains = $mydestination
       
        # INTERNET OR INTRANET
       
      --- 288,294 ----
        # list this system as their primary or backup MX host. See the
        # permit_mx_backup restriction description in postconf(5).
        #
      ! relay_domains = $mydestination
       
        # INTERNET OR INTRANET
       
      *************** [#a2557033]
      *** 413,419 **** [#t541c95c]
        # "Maildir/" for qmail-style delivery (the / is required).
        #
        #home_mailbox = Mailbox
      ! #home_mailbox = Maildir/
       
        # The mail_spool_directory parameter specifies the directory where
        # UNIX-style mailboxes are kept. The default setting depends on the
      --- 411,417 ----
        # "Maildir/" for qmail-style delivery (the / is required).
        #
        #home_mailbox = Mailbox
      ! home_mailbox = Maildir/
       
        # The mail_spool_directory parameter specifies the directory where
        # UNIX-style mailboxes are kept. The default setting depends on the
      *************** [#t763a45c]
      *** 662,673 **** [#d2a0d354]
        masquerade_classes = envelope_sender, header_sender, header_recipient
        myhostname = grape.hondou.homedns.org
        program_directory = /usr/lib/postfix
      - inet_interfaces = 127.0.0.1 ::1
        masquerade_domains =
      ! mydestination = $myhostname, localhost.$mydomain
        defer_transports =
        disable_dns_lookups = no
      ! relayhost =
        mailbox_command =
        mailbox_transport =
        strict_8bitmime = no
      --- 660,670 ----
        masquerade_classes = envelope_sender, header_sender, header_recipient
        myhostname = grape.hondou.homedns.org
        program_directory = /usr/lib/postfix
        masquerade_domains =
      ! mydestination = $myhostname, localhost.$mydomain, $mydomain
        defer_transports =
        disable_dns_lookups = no
      ! relayhost = [vwxyz.biglobe.ne.jp]
        mailbox_command =
        mailbox_transport =
        strict_8bitmime = no
      *************** [#ca676f5d]
      *** 684,687 **** [#id6f4b2e]
        smtp_use_tls = no
        alias_maps = hash:/etc/aliases
        mailbox_size_limit = 0
      ! message_size_limit = 10240000
      --- 681,689 ----
        smtp_use_tls = no
        alias_maps = hash:/etc/aliases
        mailbox_size_limit = 0
      ! message_size_limit = 102400000
      ! # add by hondou
      ! disable_vrfy_command = yes
      ! allow_percent_hack = yes
      ! allow_at_myorigin = yes
    2. Postfixの再起動
      > sudo /etc/init.d/postfix restart
  6. ADSLルータの設定で、SMTP(25)をこのマシンに転送するようにします

不正中継のテスト

  1. 有限会社長崎ネットワークサービス
  2. Network Abuse Clearinghouse

dovecotの設定

  1. [Yast]-[ソフトウェア]-[ソフトウェアのインストール/削除]を選択します。
    dovecot1.png
    dovecotをインストールします
    dovecot2.png
  2. [Yast]-[システム]-[ランレベル・エディター]を選択します。
    dovecot3.png
    dovecotが自動起動するようにします。
    dovecot4.png
  3. [Yast]-[セキュリティとユーザ]を選択します。(squirrel mailのみを使うのであれば必要ありません。ウチではどうしてもOutlookを使いたいという人がいるので・・・)
    dovecot5.png
    POP3を通すようにします。
    dovecot6.png
  4. /etc/dovecot.conf を編集します。
    > sudo vi /etc/dovecot/dovecot.conf
    
       196 #   default_mail_env = maildir:/var/mail/%1u/%u/Maildir
       197 #   default_mail_env = mbox:~/mail/:INBOX=/var/mail/%u
       198 #   default_mail_env = mbox:/var/mail/%d/%n/:INDEX=/var/indexes/%d/%n
       199 #
       200 default_mail_env = maildir:~/Maildir
    
    :wq
    > sudo /etc/init.d/dovecot restart
    Stopping dovecot                                                      done
    Starting dovecot                                                      done
  5. ADSLルータの設定では、POP3(110)を開けません

Maildirの設定

  1. ユーザ各人のホームディレクトリにMaildirを作ります
    > mkdir Maildir
    > chmod 700 Maildir
  2. これから作られたユーザに、Maildirが出来るようにします。(/etc/skel 以下が新しいユーザディレクトリにひな形になります)
    > sudo mkdir /etc/skel/Maildir
  3. 既存のユーザ全てに、Maildirを作るには以下のようなスクリプトを実行します
    #!/bin/sh 
    
    for user in `ls /home/`
    do
      if [ -d /home/${user}/Maildir ]
      then
        echo /home/${user}/Mailder is already exist
      else
        mkdir /home/${user}/Maildir
        chmod 700 /home/${user}/Maildir
        chown ${user}:users /home/${user}/Maildir
        echo make /home/${user}/Mailder
      fi
    done

SPAMフィルタ

  1. システム概要
    bsfilter.png
     
    1. SMTP(postfix)は、外部からメールを受け取ると各個人のMail Dirに格納します
    2. 定時バッチにより、格納されたメールは検査され、SPAMと判断された場合には、ヘッダに X-SPAM: true と記載されます。
    3. squirrel mailがメールを取り込みます。この際、メーラー側でヘッダに X-SPAM: true の有無を見てメールの振り分けを行います。
    4. 人間が判断して、SPAMメールはTRASH.SPAM、CLEAMメールはTRASHに既読メッセージとして格納します。
    5. 定時バッチは、各個人のMail DirのTRASH.SPAMTRASHの既読メッセージをみてベイズ辞書を更新します。(同時に学習したメールを削除します)
  2. インストール
    • http://bsfilter.org/ より、bsfilter-1.0.13.tgz をダウンロードします。
    • パスの通っているところに展開します
      > tar -xvzf bsfilter-1.0.13.tgz
      > sudo cp bsfilter-1.0.13/bsfilter/bsfilter /usr/local/bin/
  3. IMAP用の設定ファイルを個人毎に用意します
    > vi ~/.bsfilter/bsfilter.conf
         1 imap-server 127.0.0.1
         2 imap-auth auto
         3 imap-user kagyuu
         4 imap-password ****************
  4. 一時間毎に動くシェルプログラムを作成します
    > sudo vi /etc/cron.hourly/spamfilter
    
    #!/bin/sh
    export PATH="/bin:/usr/bin:/usr/local/bin"
    
    for user in `ls /home/`
    do
      home=/home/${user}
      conf=${home}/.bsfilter/bsfilter.conf
    
      clean=${home}/Maildir/.INBOX.Trash/cur
      spam=${home}/Maildir/.INBOX.SPAM/cur
      inbox=${home}/Maildir/cur
    
      if [ -e ${conf} ]; then
        export BSFILTERHOME="${home}/.bsfilter"
    
        bsfilter --add-clean ${clean}/*S
        rm ${clean}/*S
    
        bsfilter --add-spam ${spam}/*S
        rm ${spam}/*S
    
        bsfilter --update
    
        bsfilter --imap --insert-flag INBOX.SPAM INBOX
    
        for oldMail in `ls ${inbox}`
        do
          newMail=`echo $oldMail | awk '{ sub(/S/,""); print }'`
          mv ${inbox}/${oldMail} ${inbox}/${newMail}
        done
      fi
    done
    
    > sudo chmod +x /etc/cron.hourly/spamfilter
    1. bsfilterがIMAPを通じてメールを読み込むので、どうしても既読になってしまう。そこで、ファイル名の末尾のS(既読マーク)を無理矢理消すことにした。
    2. (1)とのからみでSPAMファイルもINBOXに戻す事にした。メーラー(Squirrel Mail側)で "X-SPAM : Yes" が有ったら、INBOX.SPAM に振り分けるようにして下さい

25番ポートブロック対策(biglobe)

  1. biglobe では、WAN側の25番ポート(SMTP)を閉じているため、メールの送信ができません。
             (Biglobe WAN)        (the Internet)
    [HOME]―――――――→[Router]・・・・・・・・[MailServer]
    MailServer             ↑
    の25番ポート     25番ポートブロック
    に送信
  2. しかし、申請をすることによって、メール中継サーバを使うことができます
             (Biglobe WAN)        (the Internet)
    [HOME]―――――――→[中継SV]―――――――→[MailServer]
    |羞SV            HOMEの代わりに         C羞SVからメール
    の25番ポート        MailServerに             が届く
    に中継を依頼        送信
  3. 指定された中継サーバを /etc/postfix/main.cf に登録します
       670 #relayhost =
       671 mailbox_command =
       672 mailbox_transport =
       673 strict_8bitmime = no
       674 disable_mime_output_conversion = no
       675 smtpd_sender_restrictions = hash:/etc/postfix/access
       676 smtpd_client_restrictions =
       677 smtpd_helo_required = no
       678 smtpd_helo_restrictions =
       679 strict_rfc821_envelopes = no
       680 smtpd_recipient_restrictions = permit_mynetworks,reject_unauth_destination
       681 smtp_sasl_auth_enable = no
       682 smtpd_sasl_auth_enable = no
       683 smtpd_use_tls = no
       684 smtp_use_tls = no
       685 alias_maps = hash:/etc/aliases
       686 mailbox_size_limit = 0
       687 message_size_limit = 102400000
       688 # add by hondou
       689 disable_vrfy_command = yes
       690 allow_percent_hack = yes
       691 allow_at_myorigin = yes
    ★ 692 relayhost = [??????.biglobe.ne.jp]
  4. ハマッタ
    • Suse 10 のテンプレートでは、670行目に relayhost= と書いてある
    • これに気づかずに 315行目近くに定義してハマッタ
         310 #relayhost = $mydomain
         311 #relayhost = [gateway.my.domain]
         312 #relayhost = [mailserver.isp.tld]
         313 #relayhost = uucphost
         314 #relayhost = [an.ip.add.ress]
         315 relayhost = [??????.biglobe.ne.jp]
    • どうやらあとに読まれた 670行目によって定義が上書きされてしまったようだ
    • 最終的に 670行目をコメントアウトして、最終行(692行目)に relayhost = [??????.biglobe.ne.jp] を定義してきちんと動いた
  5. 念のため第三者転送ができないことをチェックして対処終わり

25番ポートブロック対策(biglobe) AGAIN

  1. プロバイダの SMTP 中継サーバが変わり、SMTP-AUTH が必要になった
  2. まずは、プロバイダに 再申請
  3. SMTP サーバの認証方法調査
    > telnet msagw.biglobe.ne.jp 25
    Trying 133.205.103.17...
    Connected to msagw.biglobe.ne.jp.
    Escape character is '^]'.
    220 msagw.biglobe.ne.jp SMTP-Gateway Version 2.05 at Sat, 26 May 2007 22:19:20 +0900 (JST)
    EHLO localhost
    250-msagw.biglobe.ne.jp Hello msagw.biglobe.ne.jp [220.144.158.45], pleased to meet you
    250-AUTH CRAM-MD5 LOGIN PLAIN
    250-ENHANCEDSTATUSCODES
    250-PIPELINING
    250-8BITMIME
    250-SIZE 104857600
    250-DSN
    250-DELIVERBY
    250 HELP
    quit
    221 2.0.0 msagw.biglobe.ne.jp closing connection
    Connection closed by foreign host.
    >
    認証のやり方は、CRAM-MD5 LOGIN PLAIN のようだ
  4. /etc/postfix/main.cf の編集
    # diff /etc/postfix/main.cf.old /etc/postfix/main.cf
    --- /etc/postfix/main.cf.old       2007-05-26 14:12:53.000000000 +0900
    +++ /etc/postfix/main.cf        2007-05-26 17:45:53.000000000 +0900
    -relayhost = [vwxyz.biglobe.ne.jp]
    +#relayhost = [vwxyz.biglobe.ne.jp]
    +relayhost = [msagw.biglobe.ne.jp]
    +smtp_sasl_type = cyrus
    +smtp_sasl_auth_enable = yes
    +smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
    +smtp_sasl_security_options = noanonymous
    +smtp_sasl_mechanism_filter = cram_md5,plain,login
    main.cfの末尾に、smtp_sasl の設定を書き込みます。
    最後にかかれたものが有効になるので、末尾に書いておけば、途中に smtp_sasl_xxxxx が書いてあっても末尾のものが有効化される。
    • smpt_sasl_xxxxx が、このサーバが行う中継サーバに対する認証
    • smtpd_sasl_xxxxx は、このサーバに対する認証
  5. 認証データベースの作成
    # vi /etc/postfix/sasl_passwd
    
    # sasl_passwd
    # Syntax:
    # domain        username:password
    # Example:
    # foo.com       username:password
    # See /usr/share/doc/packages/postfix/README_FILES/SASL_README
    # for more details
    
    msagw.biglobe.ne.jp ${biglobeのメールアドレス}:${パスワード}
    
    :wq
    
    # postmap /etc/postfix/sasl_passwd
    メールアドレスとパスワードは、大文字・小文字の区別がある
  6. postfix の再起動
    # /etc/init.d/postfix reload

逆引きできないホストからのメールを拒否する(2009-4-26 追記)

参考文献

  1. 栗田正樹, 2002, 実践Postfixメールサーバ構築, ソーテック
    AMAZON
  2. http://bsfilter.org/
  3. びんた雑記:自宅サーバアーカイブ, http://hinta.dynalias.net/cat1/
  4. はてな【Postfix OP25B対策】, http://q.hatena.ne.jp/1169716507
  5. PostfixによるSMTPサーバの構築(SuSE9.0編), パソコンおやじ, http://www.aconus.com/~oyaji/suse/smtp-suse.htm
  6. SMTP(Simple Mail Transfer Protocol)〜後編, @IT, http://www.atmarkit.co.jp/fnetwork/rensai/netpro06/netpro01.html
  7. Postfix 設定パラメータ,http://www.postfix-jp.info/trans-2.1/jhtml/postconf.5.html

Suse 10 Server


添付ファイル: fileqpopper5.png 455件 [詳細] fileqpopper6.png 501件 [詳細] fileqpopper3.png 467件 [詳細] fileqpopper4.png 371件 [詳細] fileqpopper2.png 374件 [詳細] fileMail4.png 822件 [詳細] filebsfilter.png 720件 [詳細] filedovecot2.png 675件 [詳細] filedovecot3.png 706件 [詳細] filedovecot5.png 855件 [詳細] filedovecot6.png 739件 [詳細] fileMail3.png 823件 [詳細] filedovecot1.png 868件 [詳細] filedovecot4.png 676件 [詳細] fileqpopper1.png 468件 [詳細] fileMail2.png 703件 [詳細] fileMail5.png 831件 [詳細] fileMail1.png 858件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS   sitemap
Last-modified: 2009-04-26 (日) 01:57:49 (2780d)
ISBN10
ISBN13
9784061426061