業務用エアコン関連の技術情報、エラーコード、環境問題対策に関する別サイト「エアコンの安全な修理・適切なフロン回収」

Debian12.14 : Clamav(アンチウイルス) , メールサーバー インストール

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

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

1.1 インストール

# apt -y install clamav clamav-daemon

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

1.2 ウイルス定義の更新

# sed -i -e "s/^NotifyClamd/#NotifyClamd/g" /etc/clamav/freshclam.conf
# systemctl stop clamav-freshclam

# freshclam
Wed May 27 15:03:54 2026 -> ClamAV update process started at Wed May 27 15:03:54 2026
Wed May 27 15:03:54 2026 -> daily.cvd database is up-to-date (version: 28012, sigs: 355458, f-level: 90, builder: svc.clamav-publisher)
Wed May 27 15:03:54 2026 -> main.cvd database is up-to-date (version: 63, sigs: 3287027, f-level: 90, builder: tomjudge)
Wed May 27 15:03:54 2026 -> bytecode.cvd database is up-to-date (version: 339, sigs: 80, f-level: 90, builder: nrandolp)
# 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; disabled; preset: enabled)
     Active: active (running) since Wed 2026-05-27 15:04:36 JST; 1min 8s ago
       Docs: man:freshclam(1)
             man:freshclam.conf(5)
             https://docs.clamav.net/
   Main PID: 19930 (freshclam)
      Tasks: 1 (limit: 4554)
     Memory: 2.9M
        CPU: 12ms
     CGroup: /system.slice/clamav-freshclam.service
             └─19930 /usr/bin/freshclam -d --foreground=true

May 27 15:04:36 Lepard systemd[1]: Started clamav-freshclam.service - ClamAV virus database updater.
May 27 15:04:36 Lepard freshclam[19930]: Wed May 27 15:04:36 2026 -> ClamAV update process started at Wed Ma>
May 27 15:04:36 Lepard freshclam[19930]: Wed May 27 15:04:36 2026 -> daily.cvd database is up-to-date (versi>
May 27 15:04:36 Lepard freshclam[19930]: Wed May 27 15:04:36 2026 -> main.cvd database is up-to-date (versio>
May 27 15:04:36 Lepard freshclam[19930]: Wed May 27 15:04:36 2026 -> bytecode.cvd database is up-to-date (ve

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

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

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

# clamscan --infected --remove --recursive /home

----------- SCAN SUMMARY -----------
Known viruses: 3627866
Engine version: 1.4.3
Scanned directories: 4
Scanned files: 7
Infected files: 0
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 10.704 sec (0 m 10 s)
Start Date: 2026:05:27 15:06:42
End Date:   2026:05:27 15:06:52

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

②無害ウィルスをダウンロードしてウイルス検出

# wget https://secure.eicar.org/eicar.com.txt

# clamscan --infected --remove --recursive
/root/eicar.com.txt: Eicar-Test-Signature FOUND
/root/eicar.com.txt: Removed.

----------- SCAN SUMMARY -----------
Known viruses: 3627866
Engine version: 1.4.3
Scanned directories: 2
Scanned files: 8
Infected files: 1
Data scanned: 0.02 MB
Data read: 0.01 MB (ratio 2.00:1)
Time: 8.163 sec (0 m 8 s)
Start Date: 2026:05:27 15:07:54
End Date:   2026:05:27 15:08:02

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

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

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

# 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 “virus undetected.”
else
echo “virus detection!!”
fi

③実行権限を与える

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

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

# mkdir /var/log/clamav/virus

⑤実行

# /opt/script/clam-full.sh

----------- SCAN SUMMARY -----------
Known viruses: 3627866
Engine version: 1.4.3
Scanned directories: 5133
Scanned files: 38519
Infected files: 0
Data scanned: 2916.67 MB
Data read: 1963.64 MB (ratio 1.49:1)
Time: 512.605 sec (8 m 32 s)
Start Date: 2026:05:27 15:10:55
End Date:   2026:05:27 15:19:28
“virus undetected.”

完了までけっこう時間がかかる
尚、/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

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

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

# cp /usr/share/postfix/main.cf.dist /etc/postfix/main.cf
# vi /etc/postfix/main.cf
[main.cf]編集内容

#82行目:コメント解除
mail_owner = postfix

#100行目:ホスト名指定追加
myhostname = mail.[Domain]

#107行目あたり:ドメイン名指定追加
mydomain = [Domain]

#127行目あたり:コメント解除
myorigin = $mydomain

#141行目あたり:コメント解除
inet_interfaces = all

#189行目あたり:コメント解除
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

#232行目あたり:コメント解除
local_recipient_maps = unix:passwd.byname $alias_maps

#277行目あたり:コメント解除
mynetworks_style = subnet

#294行目あたり:自ネットワーク追記
mynetworks = 127.0.0.0/8, 192.168.11.0/24

#416行目あたり:コメント解除
alias_maps = hash:/etc/aliases

#427行目あたり:コメント解除
alias_database = hash:/etc/aliases

#449行目あたり:コメント解除
home_mailbox = Maildir/

#585行目あたり:コメントにしてその下に追記
#smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
smtpd_banner = $myhostname ESMTP

#659行目あたり:追記
sendmail_path = /usr/sbin/postfix

664行目あたり:追記
newaliases_path = /usr/bin/newaliases

#669行目あたり:追記
mailq_path = /usr/bin/mailq

#675行目あたり:追記
setgid_group = postdrop

#679行目あたり:コメント化
#html_directory =

#683行目あたり:コメント化
#manpage_directory =

#688行目あたり:コメント化
#sample_directory =

#692行目あたり:コメント化
#readme_directory =

#最終行へ追記
#SMTP VRFY コマンドは無効にする
disable_vrfy_command = yes

#クライアントに対して HELO コマンドを要求する
smtpd_helo_required = yes

#送受信メールサイズを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
[master.cf]編集内容

19,22行目 : コメント解除
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 を使用します。

# apt -y install dovecot-core dovecot-pop3d dovecot-imapd

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

# 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 ポートの開放

# ufw allow pop3
# ufw allow imap
# ufw allow smtp
# ufw reload

2.5 動作確認 ①

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

# su - huong
$ mail huong@localhost
Cc:
Subject: Test Mail
This is the first mail.

本文を終了する場合は Ctrl + D キー

 受信メール確認

$ mail

"/home/huong/Maildir/": 1 message 1 new
>N   1 huong              Wed May 27 06:37  13/427   Test Mail
? 1
Return-Path: <huong@Lepard>
X-Original-To: huong@localhost
Delivered-To: huong@localhost
Received: by mail.korodes.com (Postfix, from userid 1000)
        id 32A4BC05B1; Wed, 27 May 2026 15:37:50 +0900 (JST)
To: <huong@localhost>
Subject: Test Mail
User-Agent: mail (GNU Mailutils 3.15)
Date: Wed, 27 May 2026 15:37:50 +0900
Message-Id: <20260527063750.32A4BC05B1@mail.korodes.com>
From: huong <huong@Lepard>

This is the first mail.
? q
Saved 1 message in /home/huong/mbox
Held 0 messages in /home/huong/Maildir/

2.6 動作確認 ②

Mozilla Thunderbirdにアカウントを設定し、確認します(メールユーザーとしてOSユーザーhuongの場合)
Thunderbirdを起動し、右上の[三本]メニューの[New Account][Email]をクリック

Full name : 任意の名称
Email address : huong@<domain-name>
をそれぞれ入力し、「Continue」クリック

[EDIT CONFIGURATION]をクリック

受信サーバーの設定
[Connection security]を[None]にして[Continue]をクリック

送信サーバーの設定
[Connection security]を[None]にして[Test]をクリック

[Continue]をクリック

[Password]欄にユーザーのパスワードを入力し、[Continue]をクリック

[Continue]をクリック

メールアカウントの作成が成功しましたので、[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

11行目 : コメント解除し自ホストに変更
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

13-14行目 : コメント解除してウィルススキャン有効化
@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等で自己宛に空メールを送ると、受信メールのヘッダーに次のようなメッセージがあれば成功です。

X-Mozilla-Status: 0001
X-Mozilla-Status2: 00000000
Return-Path: xxxxx@xxxxxxx.com
X-Original-To: xxxxx@xxxxxxx.com
Delivered-To: xxxxx@xxxxxxx.com
Received: from localhost (localhost [127.0.0.1])
   by mail.xxxxxxx.com (Postfix) with ESMTP id D2C87A002F
   for xxxxx@xxxxxxx.com; Wed, 27 May 2026 15:52:45 +0900 (JST)
X-Virus-Scanned: Debian amavis at xxxxxxx.com
Received: from mail.xxxxxxx.com ([127.0.0.1])
 by localhost (mail.xxxxxxx.com [127.0.0.1]) (amavis, port 10024) with ESMTP
 id pdZKQYgBYANB for xxxxx@xxxxxxx.com;
 Wed, 27 May 2026 15:52:45 +0900 (JST)

Received: from [192.168.11.8] (buffalo.setup [192.168.11.1])
   by mail.xxxxxxx.com (Postfix) with ESMTPA id B9081A001F
   for xxxxx@xxxxxxx.com; Wed, 27 May 2026 15:52:45 +0900 (JST)
Message-ID: c8d2d46a-313a-46b6-a95e-ba341e819f7f@xxxxxxx.com
Date: Wed, 27 May 2026 15:52:44 +0900
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
From: xxxxx xxxxx@xxxxxxx.com
Content-Language: en-US
To: xxxxx xxxxx@xxxxxxx.com
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

自分自身にメール本文が「X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*」のメールを送ってみて、メールが破棄されて届かないことを確認する

4 メールサーバーに スパムチェック適用

spamassassinとprocmailを使用して、スパムチェック

4.1 spamassassin をインストール

①インストール

# apt update
# apt upgrade
# apt -y install spamassassin spamass-milter

②SpamAssassin の設定

# vi /etc/mail/spamassassin/v310.pre
 
24 行目 : コメント解除
loadplugin Mail::SpamAssassin::Plugin::DCC

➂SpamAssassin 設定ファイル最新化スクリプト

# vi /opt/script/spamassassin-update.sh
[spamassassin-update.sh]内容

#!/bin/bash

cd /etc/mail/spamassassin
wget -q https://github.com/kittyfreak/spamassassin_user_prefs/archive/refs/heads/main.zip
[ $? -ne 0 ] && exit
unzip main.zip >/dev/null 2>&1
[ $? -ne 0 ] && exit
rm -f main.zip
mv spamassassin_user_prefs-main/user_prefs .
rm -rf spamassassin_user_prefs-main
diff user_prefs user_prefs.org > /dev/null 2>&1
if [ $? -ne 0 ]; then
cp user_prefs local.cf
echo "report_safe 0" >> local.cf
echo "rewrite_header Subject SPAM" >> local.cf

if [ -f /etc/init.d/spamd ]; then
/etc/init.d/spamd restart > /dev/null
else
systemctl restart spamd > /dev/null
fi
fi
cp user_prefs user_prefs.org

spamassassin-update スクリプトに実行権限を付与し、実行

# chmod 700 /opt/script/spamassassin-update.sh
# /opt/script/spamassassin-update.sh

/etc/mail/spamassassin ディレクトリにSpamAssassin 設定ファイル(local.cf)が当日日付で
作成されていることを確認
事前にunzipをインストールしておく

# ls -l /etc/mail/spamassassin/

total 1660
-rw-r--r-- 1 root root   1292 Feb  8  2025 65_debian.cf
-rw-r--r-- 1 root root   1644 Feb  8  2025 init.pre
-rw-r--r-- 1 root root 500630 May 28 18:42 local.cf
-rw-r--r-- 1 root root 127072 May 28 18:42 main.zip.1
-rw-r--r-- 1 root root    118 Feb  8  2025 sa-compile.pre
drwxr-xr-x 2 root root   4096 May 27 15:44 sa-update-hooks.d
-rw-r--r-- 1 root root 500588 Apr 30  2023 user_prefs
-rw-r--r-- 1 root root 500588 May 28 18:42 user_prefs.org
-rw-r--r-- 1 root root   2257 May 28 18:38 v310.pre
-rw-r--r-- 1 root root   1163 Feb  8  2025 v312.pre
-rw-r--r-- 1 root root   2411 Feb  8  2025 v320.pre
-rw-r--r-- 1 root root   1232 Feb  8  2025 v330.pre
-rw-r--r-- 1 root root   1015 Feb  8  2025 v340.pre
-rw-r--r-- 1 root root   1310 Feb  8  2025 v341.pre
-rw-r--r-- 1 root root   1514 Feb  8  2025 v342.pre
-rw-r--r-- 1 root root   1261 Feb  8  2025 v343.pre
-rw-r--r-- 1 root root   1477 Feb  8  2025 v400.pre
-rw-r--r-- 1 root root   1118 Feb  8  2025 v401.pre

SpamAssassin 設定ファイルを最新化するスクリプトが毎日自動実行されるようcron に設定

# crontab -e
0 2 * * * /opt/script/spamassassin-update.sh > /dev/null 2>&1

spamass-milter起動・自動起動設定

# systemctl start spamass-milter
 
# systemctl enable spamass-milter
spamass-milter.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable spamass-milter
  • スパムメール保存用のディレクトリ「.Spam」を Maildir 形式で作成
  • 作成には対象のユーザで行う
# su - <user name>

「.Spam」という名のディレクトリを作成
$ cd Maildir
$ /usr/bin/maildirmake.dovecot .Spam

$ su -
Password:

4.2 Procmail の前準備

①Procmail のインストール

# apt -y install procmail

インストールされていれば、以下の結果が返ってきます

# which procmail
/usr/bin/procmail

②Procmail の設定
メールフィルタの全体をつかさどる「 /etc/procmailrc 」に記述すると全ユーザに適応されます。
各ユーザ個別のメールフィルタファイルである「 /home/[user]/.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/

4.3 Postfix の設定

① main.cfの編集

# vi /etc/postfix/main.cf

477行目コメント解除
mailbox_command = /usr/bin/procmail

②設定の反映と起動

# systemctl start spamd
# systemctl restart postfix

4.4 スパムメールの学習

すべてのユーザの「.Spam」ディレクトリの中身を全てスパムメールとして学習させます
①スパムメールの学習

# /usr/bin/sa-learn --spam /home/*/Maildir/.Spam/cur
Learned tokens from 0 message(s) (0 message(s) examined). 

②通常のメールの学習

# /usr/bin/sa-learn --ham /home/*/Maildir/cur
Learned tokens from 4 message(s) (4 message(s) examined).

③スクリプトを作成し、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

# crontab -e
0 4 * * * /opt/script/spam-learns.sh
# systemctl enable spam-learns
Created symlink /etc/systemd/system/multi-user.target.wants/spam-learns.service → /lib/systemd/system/spam-learns.service.

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

X-Mozilla-Status: 0001
X-Mozilla-Status2: 00000000
Return-Path: xxxxx@xxxxxxx.com
X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on Lepard
X-Spam-Level: **
X-Spam-Status: No, score=2.3 required=13.0 tests=ALL_TRUSTED,
  CONTENT_TYPE_PRESENT,EMPTY_MESSAGE autolearn=no autolearn_force=no
  version=4.0.1


-----------------------------------------------------------------------
Subject:

⑤スパムチェック確認
自分自身にメール本文が「XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X」のメールを送るとメールは配信されずSpamフォルダへ振り分けられていることを確認する
ヘッダーには次のように表示されている
/home/[user]/Maildir/.Spam/new/ 配下のメールを確認する

Return-Path: xxxxx@xxxxxxx.com
X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on Lepard
X-Spam-Flag: YES
X-Spam-Level:*********************************************
X-Spam-Status: Yes, score=1001.8 required=13.0 tests=ALL_TRUSTED,
     CONTENT_TYPE_PRESENT,GTUBE,HTML_MESSAGE,MPART_ALT_DIFF,
     MULTIPART_ALTERNATIVE autolearn=no autolearn_force=no version=4.0.1
X-Spam-Report:
     * 0.1 ALL_TRUSTED Passed through trusted hosts only via SMTP
     * 1000 GTUBE BODY: Generic Test for Unsolicited Bulk Email
     * 0.1 MULTIPART_ALTERNATIVE Multipart/alternative
     * -0.1 CONTENT_TYPE_PRESENT exists:Content-Type
     * 1.0 HTML_MESSAGE BODY: HTML included in message
     * 0.7 MPART_ALT_DIFF BODY: HTML and text parts are different

     * 1.0 HTML_MESSAGE BODY: HTML included in message
X-Original-To: xxxxx@xxxxxxx.com
Delivered-To: xxxxx@xxxxxxx.com