Debian11.3 : ウイルス対策 、Mailサーバー

1. ウイルス対策ソフトClamav導入

ウィルス対策としてLinux 用のフリーのアンチウィルスソフトであるClam AntiVirus を導入します。
このアンチウィルスソフトを導入することで、サーバー全体のウィルススキャンはもちろん、メールサーバーを構築し、設定を行えば、送受信するメールのウィルススキャンも行うことができます。

1.1 インストール

# apt install clamav clamav-daemon

尚、clamav関連の設定ファイルは、/etc/clamav/フォルダにインストールされる

1.2 ウイルス定義の更新

# systemctl stop clamav-freshclam 
# freshclam

上記コマンドで、ウイルス定義が更新できるが、下記のようなエラーが出る場合はlog設定を変更して、再度実行。
ERROR: /var/log/clamav/freshclam.log is locked by another process
ERROR: Problem with internal logger (UpdateLogFile = /var/log/clamav/freshclam.log).
ERROR: initialize: libfreshclam init failed.
ERROR: Initialization error!

上記エラーが出た場合次のように一度ログファイルを削除し、ログロテートの設定を変更しておく。

# rm /var/log/clamav/freshclam.log
# touch /var/log/clamav/freshclam.log
# chown clamav:clamav /var/log/clamav/freshclam.log
# freshclam
Sat May 28 15:50:59 2022 -> ClamAV update process started at Sat May 28 15:50:59 2022
Sat May 28 15:50:59 2022 -> ^Your ClamAV installation is OUTDATED!
Sat May 28 15:50:59 2022 -> ^Local version: 0.103.5 Recommended version: 0.103.6
Sat May 28 15:50:59 2022 -> DON’T PANIC! Read https://docs.clamav.net/manual/Installing.html
Sat May 28 15:50:59 2022 -> daily.cvd database is up-to-date (version: 26554, sigs: 1984704, f-level: 90, builder: raynman)
Sat May 28 15:50:59 2022 -> main.cvd database is up-to-date (version: 62, sigs: 6647427, f-level: 90, builder: sigmgr)
Sat May 28 15:50:59 2022 -> bytecode.cvd database is up-to-date (version: 333, sigs: 92, f-level: 63, builder: awillia2)
# systemctl start clamav-freshclam

設定ファイルを編集

# vi /etc/logrotate.d/clamav-freshclam
create 640 clamav adm

create 640 clamav clamav

ウイルス定義の自動更新確認
ウイルス定義の自動更新が行われるサービスが登録されていることを確認する。

# service clamav-freshclam status

次のように表示される

clamav-freshclam.service – ClamAV virus database updater
Loaded: loaded (/lib/systemd/system/clamav-freshclam.service; enabled; ven>
Active: active (running) since Sat 2022-05-28 15:47:40 JST; 7min ago
Docs: man:freshclam(1)
man:freshclam.conf(5)
https://docs.clamav.net/
Main PID: 887 (freshclam)
Tasks: 1 (limit: 2301)
Memory: 230.5M
CPU: 16.864s
CGroup: /system.slice/clamav-freshclam.service
mq887 /usr/bin/freshclam -d –foreground=true
5月 28 15:47:50 debian freshclam[887]: Sat May 28 15:47:50 2022 -> daily.cvd u>
5月 28 15:47:50 debian freshclam[887]: Sat May 28 15:47:50 2022 -> main databa>
5月 28 15:47:55 debian freshclam[887]: Sat May 28 15:47:55 2022 -> Testing dat

尚、/var/log/clamav/freshclam.logファイルにログが記録される。

1.3 ウイルスチェックの確認

①手動でウイルスチェックの実行

# clamscan –infected –remove –recursive /home
———– SCAN SUMMARY ———–
Known viruses: 8616767
Engine version: 0.103.5
Scanned directories: 3
Scanned files: 7
Infected files: 0
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 12.527 sec (0 m 12 s)
Start Date: 2022:05:28 16:00:21
End Date: 2022:05:28 16:00:33

Infected files: 0 なのでウイルスはありません

②テストウイルスをダウンロードしてウイルス検出
無害ウィルスをダウンロードして検出するかテストしてみる
一般ユーザーにログインして確認

# su – <user name>
$ wget http://www.eicar.org/download/eicar.com
$ clamscan –infected –remove –recursive /home
/home/<user name>/eicar.com: Win.Test.EICAR_HDB-1 FOUND
/home/<user name>/eicar.com: Removed.
———– SCAN SUMMARY ———–
Known viruses: 8616767
Engine version: 0.103.5
Scanned directories: 3
Scanned files: 8
Infected files: 1
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 12.625 sec (0 m 12 s)
Start Date: 2022:05:28 16:10:20
End Date: 2022:05:28 16:10:33

このように「FOUND」という表示と「Infected files: 1」という表示でウイルスを通知してくれる。又、「–remove」オプションを付けているので、テストウイルスは削除された。

1.4 フルスキャンするスクリプトファイルを作成

①事前にスクリプトファイル格納ディレクトリー(/opt/script)を作成しておく

$ su –
Password:
# mkdir /opt/script

②スクリプトファイルを作成

# vi /opt/script/clam-full.sh

clam-full.sh の内容(新規作成)

#!/bin/sh
echo =========================================
date
hostname
clamscan / \
–infected \
–recursive \
–log=/var/log/clamav/clamscan.log \
–move=/var/log/clamav/virus \
–exclude-dir=^/boot \
–exclude-dir=^/sys \
–exclude-dir=^/proc \
–exclude-dir=^/dev \
–exclude-dir=^/var/log/clamav/virus
if [ $? = 0 ]; then
echo “ウイルス未検出.”
else
echo “ウイルス検出!!”
fi

③実行権限を与える

# chmod +x /opt/script/clam-full.sh

④ウイルス隔離用フォルダを作成
既にあればOKだが、無いと上記スクリプトで除外ディレクトリに指定しているので実行時エラーになる

# mkdir /var/log/clamav/virus

⑤実行

# /opt/script/clam-full.sh

完了までけっこう時間がかかる
尚、/var/log/clamav/clamscan.logファイルにログが記録される

⑤cronでウイルススキャンの定期実行
# crontab -e
0 2 * * mon /opt/script/clam-full.sh >> /var/log/clamav/clamascan.log

上記例では、毎週月曜日の夜中2時に定期的に実行。

2. メールソフト導入

Postfix は、sendmail に代わるMTA (Mail Transport Agent)として開発されたソフトウェアで、sendmail との互換性が高く、安全、メンテナンスが容易、速い、などの特徴を兼ね備えたメールサーバーです。
また、Postfix はメールを送信するSMTP サーバーとしての機能しか無いため、後半でメール受信のPOP サーバーDovecotのインストールを別途行います。

2.1 Postfix : インストール 設定

①Postfix をインストール
Postfix をインストールして SMTPサーバーを構築します。SMTP は 25/TCP を使用します。
メール不正中継防止に、後述の Dovecot の SASL機能を利用し、送信にも認証が必要なように Postfix を設定します。

# apt -y install postfix sasl2-bin

一般的な構成設定の選択を求められるが、後で手動設定するため [設定なし] を選択

②設定ファイル(main.cf)編集

# cp /usr/share/postfix/main.cf.dist /etc/postfix/main.cf
# vi /etc/postfix/main.cf

編集内容

# 78行目:コメント解除
mail_owner = postfix
# 94行目:コメント解除しホスト名指定
myhostname = mail.<domain name>
# 102行目:コメント解除しドメイン名指定
mydomain = <domain name>
# 123行目:コメント解除
myorigin = $mydomain
# 137行目:コメント解除
inet_interfaces = all
# 185行目:コメント解除
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
# 228行目:コメント解除
local_recipient_maps = unix:passwd.byname $alias_maps
# 270行目:コメント解除
mynetworks_style = subnet
# 287行目:自ネットワーク追記
mynetworks = 127.0.0.0/8, 192.168.11.0/24
# 407行目:コメント解除
alias_maps = hash:/etc/aliases
# 418行目:コメント解除
alias_database = hash:/etc/aliases
# 440行目:コメント解除
home_mailbox = Maildir/
# 576行目:コメントにしてその下に追記
#smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_banner = $myhostname ESMTP
# 650行目:追記
sendmail_path = /usr/sbin/postfix
# 655行目:追記
newaliases_path = /usr/bin/newaliases
# 660行目:追記
mailq_path = /usr/bin/mailq
# 666行目:追記
setgid_group = postdrop
# 670行目:コメント化
#html_directory =
# 674行目:コメント化
#manpage_directory =
# 679行目:コメント化
#sample_directory =
# 683行目:コメント化
#readme_directory =
# 最終行へ追記:送受信メールサイズを10Mに制限
message_size_limit = 10485760
# メールボックスサイズを1Gに制限
mailbox_size_limit = 1073741824
# SMTP-Auth 設定
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks, permit_auth_destination, permit_sasl_authenticated, reject

③設定ファイル(master.cf)編集

# vi /etc/postfix/master.cf

編集内容

smtp inet n – y – – smtpd
#smtp inet n – y – 1 postscreen
#smtpd pass – – y – – smtpd
#dnsblog unix – – y – 0 dnsblog
#tlsproxy unix – – y – 0 tlsproxy
submission inet n – y – – smtpd
# -o syslog_name=postfix/submission
# -o smtpd_tls_security_level=encrypt
 -o smtpd_sasl_auth_enable=yes
# -o smtpd_tls_auth_only=yes

設定反映、再起動

# newaliases
# systemctl restart postfix

2.2 Dovecot : インストール 設定

①Dovecot をインストール
DovecotをインストールしてPOP/IMAPサーバーを構築します。POP は 110/TCP, IMAP は 143/TCP を使用します。

②Postfix に SASL機能が提供できるように Dovecot を設定

# apt -y install dovecot-core dovecot-pop3d dovecot-imapd
# vi /etc/dovecot/dovecot.conf
30行目:コメント解除
listen = *, ::
# vi /etc/dovecot/conf.d/10-auth.conf
10行目:コメント解除し変更(プレーンテキスト認証も許可する)
disable_plaintext_auth = no
100行目:追記
auth_mechanisms = plain login
# vi /etc/dovecot/conf.d/10-mail.conf
30行目:Maildir形式に変更
mail_location = maildir:~/Maildir
# vi /etc/dovecot/conf.d/10-master.conf
107-109行目:コメント解除し追記
# Postfix smtp-authi
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}

③設定反映、再起動

# systemctl restart dovecot

2.3 メールユーザーアカウント登録

メール用のユーザーアカウントを登録します。
OS上のユーザーアカウントでメールも利用する場合の設定です
OS上のユーザーアカウントでメールを利用する場合は、追加の設定は不要で OSユーザーを登録するのみです

①メールクライアントインストール

# apt -y install mailutils

②メールボックスは Maildir を参照するよう設定

# echo ‘export MAIL=$HOME/Maildir/’ >> /etc/profile.d/mail.sh

2.4 動作確認 ①

①自身にテストメール送信 [mail (ユーザー名)@(ホスト名)] ユーザー名 : huong

# su – huong
$ mail huong@localhost
# Cc の宛先
Cc:
# 件名
Subject: Test Mail
# 本文
This is the first mail.
本文を終了する場合は Ctrl + D キー

 受信メール確認

$ mail
“/home/huong/Maildir/”: 1 message 1 new
>N 1 huong 土 5月 28 12: 12/431 Test Mail
? 1
Return-Path: <huong@debian.korodes.com>
X-Original-To: huong@localhost
Delivered-To: huong@localhost
Received: by mail.korodes.com (Postfix, from userid 1000)
id 2CA5140526; Sat, 28 May 2022 21:50:57 +0900 (JST)
To: <huong@localhost>
Subject: Test Mail
X-Mailer: mail (GNU Mailutils 3.10)
Message-Id: <20220528125057.2CA5140526@mail.korodes.com>
Date: Sat, 28 May 2022 21:50:57 +0900 (JST)
From: huong <huong@debian.korodes.com>

2.5 動作確認 ②

Mozilla Thunderbirdにアカウントを設定し、確認します

①Thunderbirdを起動し、「Tools」「Account Settings」

②「Account Actions」「Add Mail Account」

③「Your full name」は任意の名称
「Email addtess」は先ほど追加した「huong@korodes.com」
「Password」はユーザーhuongのパスワード
をそれぞれ入力し、「Configure manually」クリック

④「INCOMMING SERVER」「OUTGOING SERVER」を下図のように設定し、「Re-test」クリック

⑤「サーバーがみつかりました(The following settings were found by probinfg the given server)」が表示される

「Done」をクリックすると、下図の「警告」が表示されるが問題は無いので「Confirm」をクリック

⑥「アカウントが作成されました(Account syccessfuly created)」が表示されますので「Finish」クリック

3 メールサーバーPostfixに ClamAV適用

Postfix と Clamav を連携させて 送受信メールをリアルタイムスキャンできるように設定します

①Amavisd および Clamav Daemon をインストールして Clamav Daemon を起動します

# apt -y install clamav-daemon amavisd-new
サーバーがホスト名として完全修飾ドメイン名(FQDN)を使用していない場合、Amavisの起動に失敗する可能性があります。また、OSのホスト名が変更される可能性があるため、有効なホスト名をAmavis構成ファイルに直接設定します
# vi /etc/amavis/conf.d/05-node_id
use strict;
# $myhostname is used by amavisd-new for node identification, and it is
# important to get it right (e.g. for ESMTP EHLO, loop detection, and so on) .
chomp($myhostname = `hostname –fqdn`);
# To manually set $myhostname, edit the following line with the correct Full y
# Qualified Domain Name (FQDN) and remove the # at the beginning of the line .
#
$myhostname = “mail.<domain name>”;
1; # ensure a defined return

②ウィルススキャン有効化

# vi /etc/amavis/conf.d/15-content_filter_mode
コメント解除してウィルススキャン有効化
@bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);

③自身のドメイン名を登録

# echo ‘<yourDomain>’ > /etc/mailname

④設定ファイル(Main.cf)編集

# vi /etc/postfix/main.cf
最終行へ追記
content_filter=smtp-amavis:[127.0.0.1]:10024

⑤設定ファイル(master.cf)編集

# vi /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

⑥設定反映

# usermod -G clamav amavis
# usermod -G amavis clamav
# systemctl restart clamav-daemon amavis postfix

Thuderbird等で自己宛にメールを送ると、受信メールのヘッダーに次のようなメッセージがあれば成功です。

4. Postfixに spamassassinをインストールしてスパム対策

①インストール

# apt install spamassassin

②SpamAssassin の設定の前準備
スパムメール保存用のディレクトリ「.Spam」を Maildir 形式で作成します。まず一般ユーザー(例としてhuong)としてログイン

# su – huong
$ cd ~
$ cd Maildir
$ /usr/bin/maildirmake.dovecot .Spam
$ su –

③Procmail を準備
Procmail がサーバ機にインストールされているかをチェックします。
もし、インストールされていなければインストールしましょう。

# apt install procmail

Procmail へのパスを以下のコマンドで調べます

# which procmail
/usr/bin/procmail

④Procmail の設定
設定をメールフィルタの全体をつかさどる「 /etc/procmailrc 」に記述すると全ユーザに適応されます。
各ユーザ個別のメールフィルタファイルである「 /home/username/.procmailrc 」に記述するとそのユーザのみにフィルタが適応されます。
今回は全ユーザに適応させるために「 /etc/procmailrc 」に記述します。

# vi /etc/procmailrc

procmailrc記載内容(新規作成)

# パスを設定
PATH=/bin:/usr/bin:/usr/local/bin
# メールボックスの設定
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
# Procmailのログファイル出力先を指定
LOGFILE=$MAILDIR/procmaillog
# ロックファイルのパスを指定
LOCKFILE=$HOME/.lockmail
# メールヘッダー中に「 X-Spam-*** 」の記述がなければ spamassassin を起動します
:0fw
*!^X-Spam.*
|spamassassin
# メールヘッダー中に「 X-Spam-Status: Yes 」の記述があれば、「 .Spam 」ディレクトリにメールを格納します
:0
* ^X-Spam-Status: Yes
$MAILDIR/.Spam/

⑤Postfix main.cf の編集

# vi /etc/postfix/main.cf
最終行に追記
mailbox_command = /usr/bin/procmail

⑥設定の反映と起動と動作確認

# systemctl start spamassassin
# systemctl restart postfix

⑦スパムメールの学習
以下のコマンドですべてのユーザの「.Spam」ディレクトリの中身を全てスパムメールとして学習させます

# /usr/bin/sa-learn –spam /home/*/Maildir/.Spam/cur
Learned tokens from 0 message(s) (0 message(s) examined).  <– 0通のメールをスパムメールとして学習

⑧通常のメールの学習

# /usr/bin/sa-learn –ham /home/*/Maildir/cur
Learned tokens from 4 message(s) (4 message(s) examined).  <– 4通のメールを普通のメールとして学習

⑨スクリプトを作成し、Cron に登録
ファイル名は適当に「 spam-learns.sh 」とし、/opt/script/配下に設置する
スクリプトを保存した後は、「 chmod 750 spam-learns.sh 」として実行可能なアクセス権を与える。

# vi /opt/script/spam-learns.sh

spam-learns.sh 内容

#! /bin/sh
# スパムメールの学習
/usr/bin/sa-learn –spam /home/*/Maildir/.Spam/cur
# 通常のメールを学習
/usr/bin/sa-learn –ham /home/*/Maildir/cur
# スパムメール保存ディレクトリの中身を強制的に消去してよいのなら以下の記述を追加
/bin/rm -f /home/*/Maildir/.Spam/cur
# chmod 750 /opt/script/spam-learns.sh

spam-learns.shができたら、定義ファイルを/lib/systemd/system直下に作成する。名前はspam-learns.serviceのように末尾が.serviceになるようにする。
Typeはsimpleで定義する

# cd /lib/systemd/system
# vi spam-learns.service

spam-learns.service の内容

[Unit]

Description=demo sample node.js program
[Service]

Type=simple
ExecStart= /opt/script/spam-learns.sh
Restart=always
[Install]

WantedBy=multi-user.target

Cronに学習スクリプトを登録します

# crontab -e
0 4 * * * /opt/script/spam-learns.sh

毎日午前4時に学習スクリプトを実行します

⑩自動的に起動するように設定

# systemctl enable spam-learns

⑪Thunderbird等で自己宛に空メールを送付し、受信メールヘッダーを確認すると次のようなメッセージあれば成功です

タイトルとURLをコピーしました