>お楽しみコーナー>Linux>インターネットサーバー サイトマップ 最終更新日:2005/07/22

センリュウのホームページへ ようこそ!

 ウィルスメール撃退  FedoraCore3 

(1) SPAMメール撃退 Postfix+Procmail+Spamassassin

Spamassassinは、メールをチェックしspamの判定をします。Procmailは、条件に応じてメールを振り分けます。

●postfixの設定

ローカル配信させる設定を/etc/postfix/main.cfに書き込む
mailbox_command = /usr/bin/procmail
qmailの場合は、
| preline /usr/bin/procmail

●Procmailの準備

インストールの確認 $ which procmail

@全ユーザー共通に設定する場合は、/etc/procmailrcを作成してやります(内容は下の.procmailrcと同じ)。

A各ユーザーごとに設定する場合は、各ユーザーのHomeディレクトリに以下のファイルを作成します。なお、EUCコードで書くようにします。
.forward  (ドットを忘れないように)   ←これは、上のpostfix等の設定があれば不要。
  "|IFS=' ' && exec /usr/bin/procmail -f- || exit 75 #user"
  userの部分を、各ユーザーに変更して、/hmoe/ユーザー/.forward で、保存してください。
.procmailrc  procmailはデフォルトで /var/spool/mail に配送しようとするので、Maildirに配送するように設定変更します。
  PATH=/bin:/usr/bin:/usr/local/bin
  MAILDIR=$HOME/Maildir/
  LOGFILE=$MAILDIR/procmail.log
  LOCKFILE=$HOME/.lockmail
  FORMAIL=/usr/bin/formail
  DEFAULT=$MAILDIR

  :0fw
  *!^X-Spam.* 
  |/usr/bin/spamassassin   spam度を判定するためにspamassassinに渡す。

  :0:
  *^X-Spam-Status: Yes
  ! spam@example.com
最後の spam@example.com は、自分の環境で変更してください。
破棄する場合は、
  :0    ←:0の後に半角スペース
  *^X-Spam-Status.*Yes
  /dev/null

●Spamassassin

サービスを起動しておきます(メールが少なければ、procmailからそのたび呼び出すということで起動させなくてもかまいませんが)。

Spam判定のレシピは/etc/mail/spamassassin/local.cfですが、学習済みのレシピを取得し直します。
$ cd /etc/mail/spamassassin
$ wget http://tlec.linux.or.jp/docs/user_prefs
$ mv local.cf local.cf.bak
$ mv user_prefs local.cf


(2) ウィルスメール撃退   Postfix + AMaViSd-new + Clam AntiVirus/Spamassassin

●Clam AntiVirus  これがウィルスのチェックをします

ttp://crash.fce.vutbr.cz/crash-hat/3/clamav/(3はFedoraCoreのバージョン)の、clamav-0.80-4.i386.rpmをクリックするとインストールが始まる。

freshclamサービス(ウィルスパターンを自動更新するサービス)を自動起動するようにしておく。
手動で更新するには、# freshclam。

また、postfixと組み合わせてclamを使用するには、clamdサービスも自動起動するようにしておく(常駐させた方が効率がよい)。
手動でファイルをスキャンするには、# clamscan -r /usr (/usr以下をスキャン)。

設定ファイル/etc/clamd.conf
 LogFile /var/log/clamav/clamd.log
 LogFileMaxSize 0
 LogTime
 LogSyslog
 PidFile /var/run/clamav/clamd.pid
 TemporaryDirectory /tmp
 DatabaseDirectory /var/lib/clamav
 #LocalSocket /var/run/clamav/clamd.sock
 FixStaleSocket
 TCPSocket 3310
 MaxConnectionQueueLength 30
 MaxThreads 50
 ReadTimeout 300
 User clamav
 AllowSupplementaryGroups
 DetectBrokenExecutables
 ScanMail ←ScanMailを有効にする(#をとる)。
 ArchiveMaxCompressionRatio 300
 ArchiveBlockEncrypted
 ArchiveBlockMax

●AMaViSd-new  ラッパ(MTAとチェッカー間の処理をおこなう)

ftp://ftp.cfu.net/pub/のamavisd-newディレクトリにある最新版をダウンロードする。
現時点では、amavisd-new-20040701.tar.gzが最新版。
解凍  # tar xzvf amavisd-new-20040701.tar.gz
展開後、まずINSTALLを読む。

amavisdを/usr/sbinに(パーミッションは755)、amavisd.confを/etcに(パーミッションは644)コピー。
所有者、所有グループをrootに変更しておく。

amavisグループとamavisユーザーの作成
# groupadd amavis
# useradd -g amavis -s /sbin/nologin amavis

作業用ディレクトリの作成(/var/amavis、/var/virusmails、/var/log/amavis)
# mkdir /var/amavis
# chown amavis:amavis /var/amavis
# chmod 750 /var/amavis
同様に、/var/virusmails、/var/log/amavisも。
/var/log/amavis/amavis.logファイルを作成しておく。
# touch /var/log/amavis/amavis.log

/etc/amavisd.confの編集  以下は必要と思われる部分のみ書き出してあります
 $mydomain = 'sample.com';   ←システムに合わせて変更
 $MYHOME = '/var/amavis';
 $TEMPBASE = "$MYHOME/tmp";
 # @bypass_virus_checks_maps = (1);   #をはずすとvirusチェックを行わない
 # @bypass_spam_checks_maps = (1);   #をはずすとspamチェックを行わない(spamassassinも使うときはこのままにしておく)
 $daemon_user = 'amavis';   ←vscanを変更
 $daemon_group = 'amavis';   ←vscanを変更
 $insert_received_line = 0;   ←メールのヘッダに、“Received:”を挿入しない。
 $DO_SYSLOG = 0;   ←1を0に変更(下のログファイルを使うので)。
 $LOGFILE = "/var/log/amavis/amavis.log";   ←syslogで記録する場合は不要。
 $hdr_encoding = 'iso-2022-jp';  ←メールヘッダのエンコードを指定。
 $bdy_encoding = 'iso-2022-jp';   ←メールボディのエンコードを指定。
 $QUARANTINEDIR = '/var/virusmails';   ウィルスメールの保存先(コメントアウトにすると保存しない)
 $inet_socket_port = 10024;

 $sa_auto_whitelist = 1;   spamassassinのAWLを使用する。以下spam関係。
 $sa_tag_level_deflt = 2.0;   ポイントが2.0を超えたら、ヘッダーにspam度の記述がはじまる(それまではなし)。
 $sa_tag2_level_deflt = 6.31;   この値からメールのsubjectに$sa_spam_subject_tagで指定した文字列が付加される。
 $sa_kill_level_deflt = 6.31;   この値以上のものはユーザーには配信されず、代わりにspam通知メールが配信される。
 $sa_dsn_cutoff_level = 10;   この値以上は即座に廃棄される。
 $sa_spam_subject_tag = '***SPAM*** ';

 $virus_admin = "virusalert\@$mydomain";   ウィルス付きのメールを検出した場合に通知するメールアドレスを指定。
 $mailfrom_notify_admin = "virusalert\@$mydomain";
 $mailfrom_notify_recip = "virusalert\@$mydomain";
 $mailfrom_notify_spamadmin = "spam.police\@$mydomain";

 $notify_method = 'smtp:[127.0.0.1]:10025';   ←チェックした疑わしいメールに関する通知の転送先を指定。
 $forward_method = 'smtp:[127.0.0.1]:10025';   ←チェックしたメールをどこに転送するか。

 # $final_virus_destiny = D_DISCARD;
 # $final_banned_destiny = D_BOUNCE;
 # $final_spam_destiny = D_BOUNCE;
 # $final_bad_header_destiny = D_PASS;   D_PASSにすると破棄しない

 # ### http://www.clamav.net/   /etc/clamd.confでTCPSoketではなくLocalSocketがONの場合、以下を使用。
 # ['ClamAV-clamd',
 # \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"],   /etc/clamd.confのLocalSocketと同値にする。
 # qr/\bOK$/, qr/\bFOUND$/,
 # qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],

ただし、このままではまだperlのモジュールが不足して、amavisdを起動することができない。
# amavisd debug で不足モジュールがわかる。

perl不足モジュールのインストール
# perl -MCPAN -e shell  (CPANにアクセスしてインストールするため、CPANのシェルを起動する)
まず、準備。ほとんどenterキーを押して質問に答えていく。
最後の方でミラーサイトの選択になるので、番号で答える。最後にプロンプトが cpan> になったら quit を入力してインストール準備完了。
再び、# perl -MCPAN -e shell で、cpan> install ****::***** と不足モジュールをインストールしていく。
MIME::****関連にエラーがでるが、かまわず続ける。quitで終了。
すべて、終了したら、/root/.cpan/build/MIME-***/ディレクトリで #make install を実行する(強制インストールする)。
再び、# amavisd debug を実行。今度は、BerkeleyDB.pmがないと表示される。
# perl -MCPAN -e shell
cpan> install BerkeleyDB
cpan> quit
再び、これを繰り返す。今度は、convert/TNEF.pmがないと表示される。
# perl -MCPAN -e shell
cpan> install convert::TNEF
cpan> quit
再度、Covert/UUlib.pm、Archive/Zip.pmとモジュールがないというエラーが出なくなるまで繰り返す。
最後に、/var/amavis/tmpとdbディレクトリがないと出るので作成しておく。パーミッションは750、所有者、所有グループはamavis。
# amavisd debug で延々と画面表示がつづくようになったらOK。ctrl+cキーでストップさせる。

自動起動の設定
amavisd_init.shを/etc/init.d/にamavisd名でコピーする。
パーミッションは755、所有者、所有グループをrootに変更しておく。
# chkconfig --add amavisdでサービスに登録して、起動時のランレベルで自動起動するように設定しておく。

●Postfixの設定

/etc/postfix/main.cf  以下を追加
 content_filter = smtp-amavis:[127.0.0.1]:10024
 ここでは、/etc/amavisd.confでSPAMメールも処理するようになっているので、(1)で使ったmailbox_command = /usr/bin/procmailの設定は不要。

/etc/postfix/master.cf  以下を追加
 smtp-amavis unix - - n - 2 smtp
   -o smtp_data_done_timeout=1200
   -o smtp_send_xforward_command=yes
   -o disable_dns_lookups=yes
 127.0.0.1:10025 inet n - n - - smtpd
   -o content_filter=
   -o local_recipient_maps=
   -o relay_recipient_maps=
   -o smtpd_restriction_classes=
   -o smtpd_client_restrictions=
   -o smtpd_helo_restrictions=
   -o smtpd_sender_restrictions=
   -o smtpd_recipient_restrictions=permit_mynetworks,reject
   -o mynetworks=127.0.0.0/8
   -o strict_rfc821_envelopes=yes
   -o smtpd_error_sleep_time=0
   -o smtpd_soft_error_limit=1001
   -o smtpd_hard_error_limit=1000
注意 -oの前はtabキー。

/etc/postfix/aliasesに追加。
 virusalert: root
 spam.police: root
# newaliasesを実行しておく。

●以上の設定は、/etc/amavisd.confで # @bypass_spam_checks_maps = (1); の部分でspamassassinを呼び出し、SPAMメールも処理するようになっているので、ウィルスメール、SPAMメールともに/var/virusmails に廃棄される。
これを以下のようにして、amavisdからはspamチェック/処理は行わないようにして、spamassassinは(1)で述べたprocmailから呼び出すようにすることもできる。
/etc/amavisd.conf
 @bypass_spam_checks_maps = (1);  #をとる。
/etc/postfix/main.cf
 mailbox_command = /usr/bin/procmail  追加


履歴 2005/02 作成