「エアコンの安全な修理・適切なフロン回収」はこちら「業務用エアコンエラーコード」はこちら

Debian10でサーバー構築 メールサーバー導入、ウイルス対策

スポンサーリンク
スポンサーリンク
スポンサーリンク

1.  ウイルス対策

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

1.1 ウイル対策ソフトClamav導入

①インストール

# apt install clamav clamav-daemon

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

②ウイルス定義の更新

# freshclam

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

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

# rm /var/log/clamav/freshclam.log
# touch /var/log/clamav/freshclam.log
# chown clamav:clamav /var/log/clamav/freshclam.log

③設定ファイルを編集

# 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; vendor preset: e
Active: active (running) since Fri 2019-08-16 02:00:32 JST; 2 days ago
Docs: man:freshclam(1)
man:freshclam.conf(5)
https://www.clamav.net/documents
Main PID: 888 (freshclam)
Tasks: 1 (limit: 4915)
CGroup: /system.slice/clamav-freshclam.service
└─888 /usr/bin/freshclam -d –foreground=true
8月 18 07:25:02 server freshclam[888]: Sun Aug 18 07:25:02 2019 -> daily.cld is up to d
8月 18 07:25:02 server freshclam[888]: Sun Aug 18 07:25:02 2019 -> bytecode.cld is up t
8月 18 08:25:02 server freshclam[888]: Sun Aug 18 08:25:02 2019 -> Received signal: wak
8月 18 08:25:02 server freshclam[888]: Sun Aug 18 08:25:02 2019 -> ClamAV update proces

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

⑤ウイルスチェックの実行

# clamscan –infected –remove –recursive /home

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

# su – <user>
$ cd ~  ← /home/<user> ディレクトリに移動
$ wget http://www.eicar.org/download/eicar.com
$ clamscan –infected –remove –recursive /home
/home/lan/eicar.com: Eicar-Test-Signature FOUND
/home/lan/eicar.com: Removed.

———– SCAN SUMMARY ———–
Known viruses: 6281795
Engine version: 0.100.3
Scanned directories: 206
Scanned files: 657
Infected files: 1
Data scanned: 25.92 MB
Data read: 12.33 MB (ratio 2.10:1)
Time: 59.342 sec (0 m 59 s)

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

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

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

# mkdir /opt/script

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

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

# –infected 感染を検出したファイルのみを結果に出力
# –recursive 指定ディレクトリ以下を再帰的に検査 圧縮ファイルは解凍して検査
# –log=FILE ログファイル
# –move=DIR 感染を検出したファイルの隔離先
# –remove 感染を検出したファイルを削除
# –exclude=FILE   検査除外ファイル(パターンで指定)
# –exclude-dir=DIR 検査除外ディレクトリ(パターンで指定)

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

# m h dom mon dow command

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] を選択

+——+ Postfix Configuration +——-+
| General type of mail configuration: |
| |
| No configuration |
| Internet Site |
| Internet with smarthost |
| Satellite system |
| Local only |
| |
| |
| <Ok> <Cancel> |
| |
+————————————–+

②設定ファイル(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.korodes.com
# 102行目:コメント解除しドメイン名指定
mydomain = korodes.com
# 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 (Debian/GNU)
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

設定反映、再起動

# newaliases
# systemctl restart postfix

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

# vi /etc/postfix/master.cf

submissionとsmtpsについて、一部コメントアウトする

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

 

#

smtps     inet  n       –       y       –       –       smtpd

  -o syslog_name=postfix/smtps

  -o smtpd_tls_wrappermode=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

②設定ファイル(dovecot.conf)編集

# vi /etc/dovecot/dovecot.conf

# 30行目:コメント解除
listen = *, ::

③設定ファイル(10-auth.conf)編集

# vi /etc/dovecot/conf.d/10-auth.conf

# 10行目:コメント解除し変更(プレーンテキスト認証も許可する)
disable_plaintext_auth = no

# 100行目:追記
auth_mechanisms = plain login

設定ファイル(10-mail.conf)編集

# vi /etc/dovecot/conf.d/10-mail.conf

# 30行目:Maildir形式に変更
mail_location = maildir:~/Maildir

⑤設定ファイル(10-master.conf)編集

# vi /etc/dovecot/conf.d/10-master.conf

# 107-109行目:コメント解除し追記
# Postfix smtp-auth
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

③OSユーザー [例としてhoge] を追加

# adduser hoge
パスワード            ← パスワードを聞かれるので入力、表示されない
再度パスワード

④ 追加したユーザーアカウントでログインし、メールの送信テストをします

# su – hoge
$ mail hoge@localhost  ← 自分宛にメールを送る
Cc:
Subject:test ← 件名
testmail ← 本文(終了するときはCtrl + D キー)
メール確認
$ mail
終了する場合は [q]
スポンサーリンク

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

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

# apt -y install clamav-daemon amavisd-new

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

# 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 ‘hoge.com’ > /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

 

#systemctl restart clamav-daemon amavis postfix

正常に設定されると、メール受信のヘッダーに
「X-Virus-Scanned:Debian amavisd-new at 送信元サーバー」の一行が表示されます

2.5 メールサーバーPostfixに spamassassinをインストールしてスパム対策

①インストール

# apt install spamassassin

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

# su – hoge
$ 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

以下の内容を記入し保存する

#パスを設定

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

⑦確認
自分のドメイン宛にメールを送信してみましょう。
そしてメールのヘッダーに以下のような記述があれば設定が正常に行われています。
以下のヘッダーはスパムメールと判定された場合の記述です。

・・省略・・・
X-Spam-Flag: YES
X-Spam-Checker-Version: SpamAssassin 2.64 (2004-01-11) on mail.example.com
X-Spam-Report:
* 0.1 HTML_60_70 BODY: Message is 60% to 70% HTML
* 0.0 HTML_MESSAGE BODY: HTML included in message
・・省略・・・
X-Spam-Status: Yes, hits=8.2 required=5.5 tests=CLICK_BELOW,
FORGED_RCVD_NET_HELO,HTML_60_70,HTML_FONTCOLOR_UNSAFE,
HTML_IMAGE_ONLY_08,HTML_LINK_CLICK_HERE,HTML_MESSAGE,QENCTXT
autolearn=no version=2.64
X-Spam-Level: ********
・・・省略・・・

メールヘッダー中に上記の「X-Spam-***」の記述があればSpamAssassinは正常に動作しています。
「 X-Spam-Status: Yes 」があれば、そのメールはスパムメールだと判定されています。
逆に「 X-Spam-Status: No 」ならば通常のメールとして判定されています。

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

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

通常のメールの学習

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

簡単なスクリプトを記述し、Cron に登録し、定期的に自動で実行するようにします。
スクリプト保存場所は「 /opt/script 」にします。 ファイル名は適当に「 spam-learns.sh 」などにします。
スクリプトを保存した後は、「 chmod 750 spam-learns.sh 」として実行可能なアクセス権を与えましょう。

# vi /opt/script/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になるようにする。

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

定義ファイルの内容
Typeもいろいろあるが、simpleでとりあえず定義する。

[Unit] Description=demo sample node.js program[Service] Type=simple
ExecStart= /usr/local/bin/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
error:Content is protected !!
タイトルとURLをコピーしました