「Clam AV」 + 「amavisd-new」の設定

ウィルス対策として、「Clam AV」を導入します。
また、「Postfix」と「Clam AV」を連携させる為に「amavisd-new」も導入します。
なお、ここではスパム対策も行っていますが、その場合「SpamAssassin」も導入する必要があります。
「SpamAssassin」の設定方法はこちらを参照して下さい。
上記のリンク先では「Procmail」との連携を記述していますが、「SpamAssassin」の設定のみで構いません。

「Clam AV」のインストール
Gentoo ~ # emerge clamav <= 「Clam AV」のインストール

なお、ウィルス定義ファイルを自動更新する「freshclam」も同時にインストールされます。

「freshclam」の設定
Gentoo ~ # vi /etc/freshclam.conf <= 設定ファイルの編集
#UpdateLogFile /var/log/freshclam.log
↓
UpdateLogFile /var/log/freshclam.log <= コメント解除

ログファイルを作成し、パーミッションとオーナを変更します。

Gentoo ~ # touch /var/log/freshclam.log <= ログファイルの作成
Gentoo ~ # chmod 644 /var/log/freshclam.log <= ログファイルのパーミッションを変更
Gentoo ~ # chown clamav.clamav /var/log/freshclam.log <= ログファイルのオーナの変更
「Clam AV」の起動

「Clam AV」の起動

Gentoo ~ # /etc/init.d/clamd start <= 「Clam AV」の起動

「Clam AV」の自動起動

Gentooを起動する際に自動的に「Clam AV」を起動するようにします。

Gentoo ~ # rc-update add clamd default
「amavisd-new」のインストール
Gentoo ~ # emerge amavisd-new <= 「amavisd-new」のインストール
「amavisd-new」の設定

「amavisd-new」の設定

ここでは、スパム対策も記述していますが、その場合「SpamAssassin」も導入する必要があります。
「amavisd-new」と連携させずに「SpamAssassin」を利用する場合、あるいはスパム対策を行わない場合、以下の設定の
# @bypass_spam_checks_maps = (1);
の部分のコメント解除を行って下さい。
その場合、その他のスパムのみに関連する記述は行わなくて構いません。
なお、「SpamAssassin」を「Procmail」と連携させて利用する場合はこちらを参照して下さい。
また、sockファイルのパスの設定は「Clam AV」の設定と合わせます。
「Clam AV」の設定ファイルは /etc/clamd.conf にありますので、この設定ファイルと合わせます。

Gentoo ~ # vi /etc/amavisd.conf <= 設定ファイルの編集
$mydomain = '';      # (no useful default)
↓
$mydomain = 'crimson-snow.net';      # (no useful default) <= ドメインを指定

# $myhostname = 'host.example.com';  # fqdn of this host, default by uname(3)
↓
$myhostname = 'Gentoo.crimson-snow.net';  # fqdn of this host, default by uname(3) <= ホスト名を記述

$daemon_user  = 'amavis';   # (no default;  customary: vscan or amavis)
$daemon_group = 'amavis';   # (no default;  customary: vscan or amavis or sweep)
↓
$daemon_user  = 'clamav';   # (no default;  customary: vscan or amavis) <= 「Clam AV」の実行ユーザに合わせる
$daemon_group = 'clamav';   # (no default;  customary: vscan or amavis or sweep) <= 「Clam AV」の実行グループに合わせる

#$forward_method = 'smtp:[127.0.0.1]:10025';  # where to forward checked mail
#$notify_method = $forward_method;            # where to submit notifications
↓
$forward_method = 'smtp:[127.0.0.1]:10025';  # where to forward checked mail <= コメント解除
$notify_method = $forward_method;            # where to submit notifications <= コメント解除

# @bypass_spam_checks_maps  = (1);  # uncomment to DISABLE anti-spam code
↓
@bypass_spam_checks_maps  = (1);  # uncomment to DISABLE anti-spam code <= 「SpamAssassin」と連携させない場合、コメント解除

#$hdr_encoding = 'iso-8859-1';  # MIME charset (default: 'iso-8859-1')
↓
$hdr_encoding = 'iso-2022-jp';  # MIME charset (default: 'iso-8859-1') <= ヘッダの文字コードをJISに指定

#$bdy_encoding = 'iso-8859-1';  # (default: 'iso-8859-1')
↓
$bdy_encoding = 'iso-2022-jp';  # (default: 'iso-8859-1') <= ボディの文字コードをJISに指定

以下のように設定し、ウィルスやスパムの処理を決める(詳細は後述)
#$final_virus_destiny      = D_DISCARD;  # (defaults to D_DISCARD) <= コメントアウト
#$final_banned_destiny     = D_DISCARD;  # (defaults to D_BOUNCE) <= コメントアウト
#$final_spam_destiny       = D_DISCARD;  # (defaults to D_BOUNCE) <= コメントアウト
#$final_bad_header_destiny = D_PASS;  # (defaults to D_PASS), D_BOUNCE suggested <= コメントアウト
$final_virus_destiny      = D_DISCARD; <= 追加
$final_banned_destiny     = D_BOUNCE; <= 追加
$final_spam_destiny       = D_PASS; <= 追加
$final_bad_header_destiny = D_PASS; <= 追加

$warnvirussender  = 0; <= 追加
$warnspamsender   = 0; <= 追加
$warnbannedsender = 0; <= 追加
$warnbadhsender   = 0; <= 追加
ここまで

$virus_admin = "virusalert\@$mydomain";
↓
$virus_admin  = "root\@$mydomain"; <= ウィルス検出時の通知先アドレスを指定

# $spam_admin = "spamalert\@$mydomain";
↓
$spam_admin   = "root\@$mydomain"; <= スパム検出時の通知先アドレスを指定

$QUARANTINEDIR = "$MYHOME/quarantine"; <= ウィルス等と判断したメールを隔離するディレクトリ

$sa_mail_body_size_limit = 200*1024 <= スパム判定をするメール本文の最大長を指定

スパムメール判定の閾値を決める(詳細は後述)
$sa_tag_level_deflt  = 2.0; # add spam info headers if at, or above that level;
$sa_tag2_level_deflt = 6.31;# add 'spam detected' headers at that level to
$sa_kill_level_deflt = $sa_tag2_level_deflt; # triggers spam evasive actions
$sa_dsn_cutoff_level = 9;   # spam level beyond which a DSN is not sent,
#$sa_quarantine_cutoff_level = 20;  # dflt: undef, which disables this feature <= 実際はもっと上に記述されている
ここまで

$sa_spam_subject_tag1 = '***possible SPAM*** '
 <= スパムと判断したメール($sa_tag_level_deflt以上のスコア)の件名に付ける文字列
$sa_spam_subject_tag = '***SPAM*** ';  # (defaults to undef, disabled)
 <= スパムと断定したメール($sa_tag2_level_deflt以上のスコア)の件名に付ける文字列

「Clam AV」に関する部分のコメントを解除し、sockファイルを「Clam AV」の設定と合わせる
# ### http://www.clamav.net/
# ['ClamAV-clamd',
#   \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd"],
#   qr/\bOK$/, qr/\bFOUND$/,
#   qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
# # NOTE: the easiest is to run clamd under the same user as amavisd; match the
# # socket name (LocalSocket) in clamav.conf to the socket name in this entry
# # When running chrooted one may prefer: ["CONTSCAN {}\n","$MYHOME/clamd"],
↓
### http://www.clamav.net/
['ClamAV-clamd',
  \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"], <= sockファイルを指定
  qr/\bOK$/, qr/\bFOUND$/,
  qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
# NOTE: the easiest is to run clamd under the same user as amavisd; match the
# socket name (LocalSocket) in clamav.conf to the socket name in this entry
# When running chrooted one may prefer: ["CONTSCAN {}\n","$MYHOME/clamd"],

ウィルス、スパムメール検出時の通知設定

「SpamAssassin」でスパムメールと判断する閾値を以下のように設定することが出来ます。

設定変数 説明
$sa_tag_level_deflt スパムと判断したメールのヘッダに「X-Spam-Level」と「X-Spam-Status」ヘッダを付与する。
$sa_tag2_level_deflt スパムと断定したメールのヘッダに「X-Spam-Flag: YES」を付与する。
$sa_kill_level_deflt スパムと断定したときのアクションを実行する。
$sa_dsn_cutoff_level メールを配送しない。
その為、そのメールを確認するには隔離したディレクトリから探すことになる。
$sa_quarantine_cutoff_level 隔離すら行わず、メールを削除する。
この設定しない方が良いと思う。

ウィルス、スパムメールを検出した場合の通知を以下のように設定することが出来ます。

設定変数 説明
$final_virus_destiny ウィルスメールの最終的な処理方法。
$final_banned_destiny banned(禁止された)メールの最終的な処理方法。
$final_spam_destiny スパムメール($sa_kill_level_deflt以上のスコア)の最終的な処理方法。
$final_bad_header_destiny ヘッダにASCII以外の文字が含まれているメール(Bad Header)の最終的な処理方法。

上記の項目の設定値には以下のものがあります。

設定値 説明
D_DISCARD メールは受信者に配送せず、送信者にも通知しない。
D_BOUNCE メールは受信者には配送されないが、配送されなかったことを送信者に通知する。
ただし、例外的に送信者に通知しないものがある。
D_REJECT メールは受信者には配送されないが、配送されなかったことを送信者に通知する。
D_PASS メールは配送される。

設定値に D_PASS を指定した場合に、ウィルスやスパムメールを受け取った場合、 警告するかどうかを以下のように設定出来ます。
なお、有効にする場合は「1」を指定し、無効にする場合は「0」を指定します。

設定変数 説明
$warnvirussender ウィルス送信者に通知するかどうか。
$warnspamsender スパム送信者に通知するかどうか。
$warnbannedsender 禁止メールの場合、送信者に通知するかどうか。
$warnbadhsender ヘッダにASCII文字以外のものが含まれているメールの場合、送信者に通知するかどうか。

オーナの変更

「amavisd-new」の起動の為にディレクトリのオーナを変更します。

Gentoo ~ # chown -R clamav.clamav /var/amavis
「amavisd-new」の起動

「amavisd-new」の起動

Gentoo ~ # /etc/init.d/amavisd start <= 「clamd.amavisd」の起動

「amavisd-new」の自動起動

Gentooを起動する際に自動的に「amavisd-new」を起動するようにします。

Gentoo ~ # rc-update add amavisd default
「Postfix」の設定

main.cfの設定

Gentoo ~ # vi /etc/postfix/main.cf <= 設定ファイルの編集
content_filter = smtp-amavis:[127.0.0.1]:10024 <= 追加

master.cfの設定

Gentoo ~ # vi /etc/postfix/master.cf <= 設定ファイルの編集
以下を追加( -o の前の空白はTABにする必要あり)
smtp-amavis unix - - n - 2 smtp
	-o smtp_data_done_timeout=1200
	-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

設定ファイルをリロードし、設定を反映させます。

Gentoo ~ # /etc/init.d/postfix reload
▲ページのトップへ