Contents
1. ウイルス対策ソフトClamav導入
ウィルス対策としてLinux 用のフリーのアンチウィルスソフトであるClam AntiVirus を導入します。
このアンチウィルスソフトを導入することで、サーバー全体のウィルススキャンはもちろん、メールサーバーを構築し、設定を行えば、送受信するメールのウィルススキャンも行うことができます。
1.1 インストール
1 |
# apt -y install clamav clamav-daemon |
尚、clamav関連の設定ファイルは、/etc/clamav/フォルダにインストールされる
1.2 ウイルス定義の更新
1 |
# sed -i -e "s/^NotifyClamd/#NotifyClamd/g" /etc/clamav/freshclam.conf |
1 2 3 4 5 6 |
# systemctl stop clamav-freshclam # freshclam Sun Nov 17 12:04:55 2024 -> ClamAV update process started at Sun Nov 17 12:04:55 2024 Sun Nov 17 12:04:55 2024 -> daily.cvd database is up-to-date (version: 27460, sigs: 2067964, f-level: 90, builder: raynman) Sun Nov 17 12:04:55 2024 -> main.cvd database is up-to-date (version: 62, sigs: 6647427, f-level: 90, builder: sigmgr) Sun Nov 17 12:04:55 2024 -> bytecode.cvd database is up-to-date (version: 335, sigs: 86, f-level: 90, builder: raynman) |
1 |
# systemctl start clamav-freshclam |
設定ファイルを編集
1 2 3 4 |
# vi /etc/logrotate.d/clamav-freshclam create 640 clamav adm ↓ create 640 clamav clamav |
ウイルス定義の自動更新確認
ウイルス定義の自動更新が行われるサービスが登録されていることを確認する。
1 |
# service clamav-freshclam status |
次のように表示される
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
● clamav-freshclam.service - ClamAV virus database updater Loaded: loaded (/lib/systemd/system/clamav-freshclam.service; disabled; preset: enabled) Active: active (running) since Sun 2024-11-17 12:05:35 JST; 40s ago Docs: man:freshclam(1) man:freshclam.conf(5) https://docs.clamav.net/ Main PID: 16925 (freshclam) Tasks: 1 (limit: 2264) Memory: 2.6M CPU: 14ms CGroup: /system.slice/clamav-freshclam.service └─16925 /usr/bin/freshclam -d --foreground=true Nov 17 12:05:35 Lepard systemd[1]: Started clamav-freshclam.service - ClamAV virus database updater. Nov 17 12:05:35 Lepard freshclam[16925]: Sun Nov 17 12:05:35 2024 -> ClamAV update process started at Sun Nov 17 12:05:35 2024 Nov 17 12:05:35 Lepard freshclam[16925]: Sun Nov 17 12:05:35 2024 -> daily.cvd database is up-to-date (version: 27460, sigs: 2067964, f-level: 90, builder: ray> Nov 17 12:05:35 Lepard freshclam[16925]: Sun Nov 17 12:05:35 2024 -> main.cvd database is up-to-date (version: 62, sigs: 6647427, f-level: 90, builder: sigmgr) Nov 17 12:05:35 Lepard freshclam[16925]: Sun Nov 17 12:05:35 2024 -> bytecode.cvd database is up-to-date (version: 335, sigs: 86, f-level: 90, builder: raynman) |
尚、/var/log/clamav/freshclam.logファイルにログが記録される。
1.3 ウイルスチェックの確認
①手動でウイルスチェックの実行
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# clamscan --infected --remove --recursive /home ----------- SCAN SUMMARY ----------- Known viruses: 8699755 Engine version: 1.0.7 Scanned directories: 3 Scanned files: 7 Infected files: 0 Data scanned: 0.00 MB Data read: 0.00 MB (ratio 0.00:1) Time: 20.166 sec (0 m 20 s) Start Date: 2024:11:17 12:08:05 End Date: 2024:11:17 12:08:25 |
Infected files: 0 なのでウイルスはありません
②無害ウィルスをダウンロードしてウイルス検出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# wget https://secure.eicar.org/eicar.com.txt # clamscan --infected --remove --recursive /root/eicar.com.txt: Win.Test.EICAR_HDB-1 FOUND /root/eicar.com.txt: Removed. ----------- SCAN SUMMARY ----------- Known viruses: 8699755 Engine version: 1.0.7 Scanned directories: 3 Scanned files: 9 Infected files: 1 Data scanned: 0.02 MB Data read: 0.01 MB (ratio 2.00:1) Time: 18.054 sec (0 m 18 s) Start Date: 2024:11:17 12:53:25 End Date: 2024:11:17 12:53:43 |
このように「FOUND」「Removed.」という表示と「Infected files: 1」という表示でウイルスを通知してくれる。又、「--remove」オプションを付けているので、テストウイルスは削除された。
1.4 フルスキャンするスクリプトファイルを作成
①事前にスクリプトファイル格納ディレクトリー(/opt/script)を作成しておく
1 |
# mkdir /opt/script |
②スクリプトファイルを作成
1 |
# vi /opt/script/clam-full.sh |
clam-full.sh の内容(新規作成)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#!/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 |
③実行権限を与える
1 |
# chmod +x /opt/script/clam-full.sh |
④ウイルス隔離用フォルダを作成
既にあればOKだが、無いと上記スクリプトで除外ディレクトリに指定しているので実行時エラーになる
1 |
# mkdir /var/log/clamav/virus |
⑤実行
1 |
# /opt/script/clam-full.sh |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
========================================= Sun Nov 17 01:00:30 PM JST 2024 Lepard ----------- SCAN SUMMARY ----------- Known viruses: 8699755 Engine version: 1.0.7 Scanned directories: 3861 Scanned files: 30105 Infected files: 0 Data scanned: 2146.32 MB Data read: 1519.37 MB (ratio 1.41:1) Time: 405.410 sec (6 m 45 s) Start Date: 2024:11:17 13:00:30 End Date: 2024:11:17 13:07:16 “virus undetected.” |
完了までけっこう時間がかかる
尚、/var/log/clamav/clamscan.logファイルにログが記録される
⑤cronでウイルススキャンの定期実行
1 2 |
# 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 を設定します。
1 |
# apt -y install postfix sasl2-bin |
一般的な構成設定の選択を求められるが、後で手動設定するため [No configuration] を選択
②設定ファイル(main.cf)編集
1 2 |
# cp /usr/share/postfix/main.cf.dist /etc/postfix/main.cf # vi /etc/postfix/main.cf |
編集内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# 82行目:コメント解除 mail_owner = postfix # 100行目:ホスト名指定追加 myhostname = mail.<domain name> # 107行目あたり:ドメイン名指定追加 mydomain = <domain name> # 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)編集
1 |
# vi /etc/postfix/master.cf |
編集内容
1 2 3 4 5 6 7 8 9 10 |
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 |
設定反映、再起動
1 2 |
# newaliases # systemctl restart postfix |
2.2 Dovecot : インストール 設定
①Dovecot をインストール
DovecotをインストールしてPOP/IMAPサーバーを構築します。POP は 110/TCP, IMAP は 143/TCP を使用します。
1 |
# apt -y install dovecot-core dovecot-pop3d dovecot-imapd |
②Postfix に SASL機能が提供できるように Dovecot を設定
1 2 3 |
# vi /etc/dovecot/dovecot.conf 30行目:コメント解除 listen = *, :: |
1 2 3 4 5 |
# vi /etc/dovecot/conf.d/10-auth.conf 10行目:コメント解除し変更(プレーンテキスト認証も許可する) disable_plaintext_auth = no 100行目:追記 auth_mechanisms = plain login |
1 2 3 |
# vi /etc/dovecot/conf.d/10-mail.conf 30行目:Maildir形式に変更 mail_location = maildir:~/Maildir |
1 2 3 4 5 6 7 8 |
# 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 } |
③設定反映、再起動
1 |
# systemctl restart dovecot |
2.3 メールユーザーアカウント登録
メール用のユーザーアカウントを登録します。
OS上のユーザーアカウントでメールも利用する場合の設定です
OS上のユーザーアカウントでメールを利用する場合は、追加の設定は不要で OSユーザーを登録するのみです
①メールクライアントインストール
1 |
# apt -y install mailutils |
②メールボックスは Maildir を参照するよう設定
1 |
# echo 'export MAIL=$HOME/Maildir/' >> /etc/profile.d/mail.sh |
2.4 ポートの開放
1 2 3 4 |
# ufw allow pop3 # ufw allow imap # ufw allow smtp # ufw reload |
2.5 動作確認 ①
①自身にテストメール送信 [mail (ユーザー名)@(ホスト名)]
ユーザー名 : huong
1 2 3 4 5 6 7 8 |
# su - huong $ mail huong@localhost # Cc の宛先 Cc: # 件名 Subject: Test Mail # 本文 This is the first mail. |
本文を終了する場合は Ctrl + D キー
受信メール確認
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
$ mail "/home/huong/Maildir/": 1 message 1 new >N 1 huong Mon Nov 18 02:15 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 4513ABFD85; Mon, 18 Nov 2024 11:15:54 +0900 (JST) To: <huong@localhost> Subject: Test Mail User-Agent: mail (GNU Mailutils 3.15) Date: Mon, 18 Nov 2024 11:15:54 +0900 Message-Id: <20241118021554.4513ABFD85@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にアカウントを設定し、確認します
①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 を起動します
1 |
# apt -y install clamav-daemon amavisd-new |
サーバーがホスト名として完全修飾ドメイン名(FQDN)を使用していない場合、Amavisの起動に失敗する可能性があります。また、OSのホスト名が変更される可能性があるため、有効なホスト名をAmavis構成ファイルに直接設定します
1 2 3 4 5 6 7 8 9 10 |
# 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 |
②ウィルススキャン有効化
1 2 3 4 5 |
# 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); |
③自身のドメイン名を登録
1 |
# echo '<yourDomain>' > /etc/mailname |
④設定ファイル(Main.cf)編集
1 2 3 |
# vi /etc/postfix/main.cf 最終行へ追記 content_filter=smtp-amavis:[127.0.0.1]:10024 |
⑤設定ファイル(master.cf)編集
1 |
# vi /etc/postfix/master.cf |
編集内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# 最終行へ以下全行追記 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 |
⑥設定反映
1 2 3 |
# 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: xxxxxx@korodes.com
X-Original-To: xxxxxx@korodes.com
Delivered-To: xxxxxx@korodes.com
Received: from localhost (localhost [127.0.0.1])
by mail.korodes.com (Postfix) with ESMTP id 8616FBFE40
for xxxxxx@korodes.com; Mon, 18 Nov 2024 11:27:19 +0900 (JST)
X-Virus-Scanned: Debian amavis at korodes.com
Received: from mail.korodes.com ([127.0.0.1])
by localhost (mail.korodes.com [127.0.0.1]) (amavis, port 10024) with ESMTP
id sDS_Efu-GlbO for xxxxxx@korodes.com;
Mon, 18 Nov 2024 11:27:19 +0900 (JST)
Received: from [192.168.11.45] (buffalo.setup [192.168.11.1])
by mail.korodes.com (Postfix) with ESMTPA id 5E712BFE3D
for xxxxxx@korodes.com; Mon, 18 Nov 2024 11:27:19 +0900 (JST)
Message-ID: 7001ca3e-176d-4edd-b798-33e310679ea0@korodes.com
Date: Mon, 18 Nov 2024 11:27:17 +0900
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
From: huong xxxxxx@korodes.com
Content-Language: en-US
To: xxxxxx@korodes.com
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
4 メールサーバーに スパムチェック適用
4.1 spamassassinとprocmailを使用して、スパムチェック
①spamassassinとprocmailインストール
1 |
# apt install procmail spamassassin |
➁procmailの設定
設定をユーザー全員に適用する場合は
/etc/procmailrc を作成
各個人毎に設定する場合は、各ユーザホームディレクトリに
~/.procmailrc を作成
今回は/etc/procmailrc を作成する
1 |
# vi /etc/procmailrc |
procmailrcの内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
SHELL=/bin/bash PATH=/usr/bin:/bin:/usr/local/bin DROPPRIVS=yes MAILDIR=$HOME/Maildir DEFAULT=$MAILDIR/ SPAM=$MAILDIR/.Spam/ LOGFILE=$HOME/.procmail.log # ログ出力先 VERBOSE=ON # 詳細ログ出力 # メールヘッダー中に「 X-Spam-*** 」の記述がなければ spamassassin を起動します :0fw *!^X-Spam.* |spamassassin # メールヘッダー中に「 X-Spam-Status: Yes 」の記述があれば、「 .Spam 」ディレク トリにメールを格納します :0 * ^X-Spam-Status: Yes $SPAM |
➂各ユーザの~/Maildirディレクトリに.Spamディレクトリを作成
1 2 |
# su - <user> $ mkdir Maildir/.Spam |
④postfixの設定ファイル編集
root権限で行う
1 2 3 4 |
# vi /etc/postfix/main.cf 479行目あたり コメント解除 mailbox_command = /usr/bin/procmail -a "$EXTENSION" |
⑤postfix、spamassassinを再起動
1 2 |
# systemctl restart postfix spamd # systemctl enable spamassassin-maintenance.timer |
⑥Thudrtbirdで確認
自分あてに空メール送信し、ヘッダーに下記のように表示されれば正常
X-Mozilla-Status: 0001
X-Mozilla-Status2: 00000000
Return-Path: huong@korodes.com
X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on Lepard
X-Spam-Level: ***
X-Spam-Status: No, score=3.1 required=5.0 tests=ALL_TRUSTED,EMPTY_MESSAGE,
MISSING_SUBJECT autolearn=no autolearn_force=no version=4.0.0
X-Original-To: xxxxxx@korodes.com
Delivered-To: xxxxxx@korodes.com
Received: from localhost (localhost [127.0.0.1])
by mail.korodes.com (Postfix) with ESMTP id 3FCCFBFE42
for xxxxxx@korodes.com; Mon, 18 Nov 2024 11:40:47 +0900 (JST)
X-Virus-Scanned: Debian amavis at korodes.com
Received: from mail.korodes.com ([127.0.0.1])
by localhost (mail.korodes.com [127.0.0.1]) (amavis, port 10024) with ESMTP
id TfT3LkYTvvVm for xxxxxx@korodes.com;
Mon, 18 Nov 2024 11:40:46 +0900 (JST)
Received: from [192.168.11.45] (buffalo.setup [192.168.11.1])
by mail.korodes.com (Postfix) with ESMTPA id A0E46BFE41
for xxxxxx@korodes.com; Mon, 18 Nov 2024 11:40:46 +0900 (JST)
Message-ID: e46b3fab-c151-4425-b1a6-b83b6d6e204c@korodes.com
Date: Mon, 18 Nov 2024 11:40:46 +0900
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
From: huong xxxxxx@korodes.com
Content-Language: en-US
To: xxxxxx@korodes.com
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
4.2 スパムメールの学習
SpamAssassin のメールの学習機能で、判定の精度を高める
①「.Spam」ディレクトリの中身を全てスパムメールとして学習
1 2 |
# /usr/bin/sa-learn --spam /home/*/Maildir/.Spam/cur Learned tokens from 0 message(s) (0 message(s) examined) |
➁非スパムメール(通常のメール)の学習
1 2 |
# /usr/bin/sa-learn --ham /home/*/Maildir/cur Learned tokens from 7 message(s) (7 message(s) examined) |
➂自動で学習させるスクリプト作成
1 |
# vi /opt/script/spam-learns.sh |
1 2 3 4 5 6 7 8 |
#! /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 |
1 |
# chmod 750 /opt/script/spam-learns.sh |
④システム起動時に SpamAssassin を自動的に起動
1 2 3 |
# systemctl enable spamd Synchronizing state of spamd.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable spamd |