【ownCloud】自宅クラウドストレージのセキュリティ対策

Linux

ownCloud のセキュリティー対策

以前、紹介した記事で、自宅のパソコンに ownCloud を利用したクラウドストレージの構築手順を解説いたしました。

また、ownCloud のパフォーマンス改善方法も、別の記事で紹介いたしました。

ownCloud で構築した自宅クラウドストレージに何もセキュリティ対策を実施せずに、外部に公開すると、お腹を空かせたライオンの前に子供のシマウマが1頭で現れるがごとく、凄腕のハッカーたちのいい餌食になってしまいます。

そのため、今回は ownCloud で構築した自宅クラウドストレージの外部公開を目的とすることを前提にセキュリティ対策に関して解説していきたいと思います。

なお、ownCloud を構築した時の OS は Raspberry Pi Desktop(Debian Buster) でしたが、訳あって、同じ Debian 系 OS の Ubuntu にクラウドストレージを再構築しています。


スポンサーリンク

スポンサーリンク

スポンサーリンク

セキュリティ対策メニュー

以下が、ownCloud を構築したパソコンのセキュリティ対策メニューです。

セキュリティ対策メニュー
  1. ポート番号の変更
  2. ファイアウォールの設定
  3. ウィルス対策
  4. 改ざんの検知
  5. rootkit の検知




ポート番号の変更

Ubuntu Server 構築時に、秘密鍵を使って SSH のログイン方式を設定していますが、デフォルトのポート番号(22)のままでは、危険ですので SSH のポート番号を変更します。


ファイアウォールの設定

ufw を使用し、必要最小限の通信のみを許可します。


ウィルス対策

Clam AntiVirus を使用し、ウイルス対策を実施します。



改ざんの検知

Tripwire を使用し、データが改ざんを検知します。


rootkit の検知

rkhunter を使用し、rootkit が組み込まれていないか検知します。


セキュリティ対策

セキュリティ対策メニュー」に沿って、セキュリティ対策手順を解説していきます。


ポート番号の変更

はじめに、SSH のポート番号変更方法を解説いたします。


sshd.conf のバックアップを取得するため、以下のコマンドを実行します。

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org
画像クリックで拡大画像を表示します

設定ミスがあった場合、ポート番号変更前に戻せるようにバックアップを取得しています。




次に、SSH のポート番号を変更するため、以下のコマンドを実行し、sshd.conf を開きます。
また、Port を任意の番号に変更します。以下の例では、[Port] に [30001] を設定しています。

sudo vi /etc/ssh/sshd_config
画像クリックで拡大画像を表示します
画像クリックで拡大画像を表示します


ポート番号変更時に、以下の設定も変更もしくは見直しをおこなっています。

PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
KerberosAuthentication no
GSSAPIAuthentication no
X11Forwarding no




次に、SSH の設定を反映するため、以下のコマンドを実行し、SSH デーモンサービスを再起動します。

sudo systemctl restart sshd.service
画像クリックで拡大画像を表示します




SSH の設定を確認するため、一旦、切断し、ポート番号に「22」を指定し接続します。
「接続が拒否されました」のエラーが表示されたため、ポート番号の「22」は使用できなくなりました。

画像クリックで拡大画像を表示します
画像クリックで拡大画像を表示します




変更後のポート番号で、再度、実施したところ、正常に接続できました。
SSH のポート番号が変更できました。

画像クリックで拡大画像を表示します
画像クリックで拡大画像を表示します




ファイアウォールの設定

続いて、ファイアウォールの設定手順を解説いたします。

なお、IPv6 でサービスは公開いたしませんので、IPv6 は無効にします。



IPv6 を無効にするため、以下のコマンドを実行します。
また、[IPV6] に [no] を設定します。

sudo vi /etc/default/ufw
画像クリックで拡大画像を表示します
画像クリックで拡大画像を表示します




次に、ufw を有効化するため、以下のコマンドを実行します。

sudo ufw enable
画像クリックで拡大画像を表示します

デフォルトでは ufw は無効化されています。




次に、許可するポートを設定するため、以下のコマンドを実行します。

sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow [SSH のポート番号]
画像クリックで拡大画像を表示します

[SSH のポート番号] には、「ポート番号の変更」で設定したポート番号を指定します。




次に、ファイアウォールの設定を反映するため、以下のコマンドを実行します。

sudo ufw reload 
画像クリックで拡大画像を表示します




ウィルス対策

続いて、ウィルス対策の手順を解説いたします。

なお、ウィルス検知時に自分のメールアドレスにメールを送信するため、SSMTP の設定も実施いたします。


SSMTP はメンテナンスが止まっていますので、いずれ Postfix か msmtp に切り替える予定です。




ssmtp と mailutils をインストールするため、以下のコマンドを実行します。

sudo apt install ssmtp mailutils
画像クリックで拡大画像を表示します




次に、ssmtp を設定するため、以下のコマンドを実行します。
また、ssmtp.conf に設定値を追加します。

画像クリックで拡大画像を表示します
画像クリックで拡大画像を表示します


以下は、ssmtp の設定例です。

root=[自メールアドレス]
mailhub=smtp.gmail.com:587
rewriteDomain=gmail.com
hostname=tmusr21
FromLineOverride=YES
AuthUser=[自メールアドレス]
AuthPass[自メールアドレスのパスワード]
UseTLS=YES
UseSTARTTLS=YES




ssmtp の設定後、以下のコマンドを実行し、メール送信の確認を実施します。
なお、メールが送信されれば OK です。

echo "this is test mail" | mail [自メールアドレス]
画像クリックで拡大画像を表示します
画像クリックで拡大画像を表示します




次に、Clam AntiVirus をインストールするため、以下のコマンドを実行します。

sudo apt install clamav clamav-daemon
画像クリックで拡大画像を表示します




次に、手動でのウイルス定義のアップデート前に、以下のコマンドを実行し、clamav-freshclam サービスを停止します。

画像クリックで拡大画像を表示します

clamav-freshclam は、ウイルス定義アップデートサービスです。ウイルス定義アップデートサービスが起動しているとウイルス定義のアップデートコマンドでエラーになる場合がありますので、そのため、一旦、ウイルス定義アップデートサービスを停止します。


以下のエラーは、clamav-freshclam を停止せずに手動でウイルス定義をアップデートした時に発生した内容です。

WARNING: Ignoring deprecated option SafeBrowsing at /etc/clamav/freshclam.conf:22
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!




次に、手動でウイルス定義アップデートするため、以下のコマンドを実行します。

画像クリックで拡大画像を表示します

ウイルス定義アップデートサービスを停止せずに、手動でのウイルスの定義アップデートでエラーになった場合でも、再度、ウイルス定義アップデートサービスの「停止」→「手動更新」を実施すれば、ウイルス定義のアップデートは正常に完了します。




次に、ウイルス定義アップデートサービスを起動するため、以下のコマンドを実行します。

sudo systemctl start clamav-freshclam
画像クリックで拡大画像を表示します




次に、clamav-daemon を起動するため、以下のコマンドを実行します。

画像クリックで拡大画像を表示します

インストール時、clamav-daemon は停止しています。




次に、スクリプトやログファイル用のディレクトリを作成するため、以下のコマンドを実行します。

sudo mkdir /opt/script/clamav
sudo mkdir /var/log/clamav/virus
画像クリックで拡大画像を表示します

筆者の場合、スクリプトは「/opt/script/[software]」へ配置する構成にしていますので、Clam AntiVirus 用のスクリプトの配置先は「/opt/script/clamav」となります。




次に、cron から呼び出すスクリプトを作成するため、以下のコマンドを実行します。

sudo vi /opt/script/clamav/virus-scan.sh
画像クリックで拡大画像を表示します
画像クリックで拡大画像を表示します


以下は、スクリプト例です。
ウィルス検知時に設定したメールアドレスにアラートメールが送信されます。

#!/bin/sh
echo =========================================
date
hostname
clamscan / \
     --infected \
     --recursive \
     --max-filesize=4095M \
     --max-scansize=4095M \
     --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 [ $? -ne 0 ]; then
    echo "ウイルス検出!!"
    cat /var/log/clamav/clamscan.log | mail -s "NG : virus scan" [自メールアドレス]
fi




次に、スクリプトのアクセス権などを設定するため、以下のコマンドを実行します。

sudo chown root /opt/script/clamav/virus-scan.sh
sudo chmod 700 /opt/script/clamav/virus-scan.sh
画像クリックで拡大画像を表示します




次に、ウィルススキャンテストのため、以下のコマンドを実行し、作成したスクリプトを実行します。

sudo sh /opt/script/clamav/virus-scan.sh
画像クリックで拡大画像を表示します

正常にウィルススキャンができました。

スクリプトに問題ありません




ウィルススキャンテストでは、ウィルスが検知されないとメールが送信されません。
ですので、ウィルススキャンログメールの送信テストとして、以下のコマンドを実行します。
なお、メールが送信され、ウィルススキャン結果が通知されれば OK です。

画像クリックで拡大画像を表示します
画像クリックで拡大画像を表示します




次に、cron からジョブを実行するため、以下のコマンドを実行します。

sudo crontab -u root -e
画像クリックで拡大画像を表示します




次に、ジョブのスケジュールを設定するため、以下を入力します。

0 3 * * * /opt/script/clamav/virus-scan.sh >> /var/log/clamav/clamav_scan.log
画像クリックで拡大画像を表示します

毎日3時にスクリプトを実行します。

また、ウィルススキャンの結果を指定したログファイルに出力します。



crontab

crontab(クロンタブ、あるいはクローンタブ、クーロンタブとも)コマンドはUnix系オペレーティングシステム (OS) において、コマンドの定時実行のスケジュール管理を行うために用いられるコマンドである。標準入力からコマンド列を読み取り、crontabと呼ばれるファイルにそれを記録する。この記録を元に定時になると、その命令内容を読み取り、実行が行われる。cronという名称はギリシア語のクロノス (χρόνος) に由来するという説がある(Command Run ON の略という説も)。日本語ではクーロンという読みが慣習的に広く用いられているが、英語では通常クロンまたはクローンと発音する。

フリー百科事典ウィキペディアより引用




改ざんの検知

続いて、改ざんの検知の設定手順を解説いたします。


Tripwire をインストールするため、以下のコマンドを実行します。

sudo apt install tripwire
画像クリックで拡大画像を表示します




次に、「Tripwire Configuration」が表示されます。
サイトキーの作成に関して聞かれますので、[OK] → [Yes] を選択します。

画像クリックで拡大画像を表示します
画像クリックで拡大画像を表示します




次に、ローカルキーの作成に関して聞かれますので、[OK] → [Yes] を選択します。

画像クリックで拡大画像を表示します
画像クリックで拡大画像を表示します




次に、構成ファイルの再構築に関して聞かれますので、[OK] を選択します。

画像クリックで拡大画像を表示します




次に、ポリシーファイルの再構築に関して聞かれますので、[OK] を選択します。

画像クリックで拡大画像を表示します




次に、サイトキーのパスフレーズを入力し、[OK] を選択します。

画像クリックで拡大画像を表示します

次のウィンドウで、再度、サイトキーのパスフレーズを入力を求められるため、同じパスフレーズを入力します。

また、設定変更の際に、 サイトキーのパスフレーズを求められる場合があるため、忘れないように控えておきます。




次に、ローカルキーのパスフレーズを入力し、[OK] を選択します。

画像クリックで拡大画像を表示します

次のウィンドウで、再度、ローカルキーのパスフレーズを入力を求められるため、同じパスフレーズを入力します。

また、コマンドを実行する際、 ローカルキーのパスフレーズを求められる場合があるため、忘れないように控えておきます。




次に、「Tripwire がインストールされました」と表示されますので、[OK] を選択します。

画像クリックで拡大画像を表示します




次に、Tripwire を設定するため、以下のコマンドを実行します。
また、twcfg.txt の設定値を変更します。

画像クリックで拡大画像を表示します
画像クリックで拡大画像を表示します


以下は、Tripwire の設定変更例です。
メールのレポート詳細レベルとレポートレベルを変更しています。

EMAILREPORTLEVEL =4
REPORTLEVEL =4




次に、設定ファイルを暗号化するため、以下のコマンドを実行します。

twadmin -m F -c tw.cfg -S site.key twcfg.txt
画像クリックで拡大画像を表示します

サイトキーのパスフレーズを求められるため、サイトキーのパスフレーズを入力します。




次に、デフォルトのポリシーファイルを変更するため、以下のコマンドを実行します。
また、twpol.txt に設定を追加します。

画像クリックで拡大画像を表示します
画像クリックで拡大画像を表示します


以下は、Web サイトの改ざんを検知するための設定を追加した例です。

(
    rulename = "Web Site Check",
    severity = $(SIG_HI)
)
{
        /var/www/html -> $(SEC_CONFIG);
}




次に、ポリシー最適化スクリプトを作成します。
なお、このポリシー最適化スクリプトは、参考にさせていただいた複数のサイトで紹介されているものをそのまま使用しています。

vi twpolmake.pl
画像クリックで拡大画像を表示します
画像クリックで拡大画像を表示します


以下は、ポリシー最適化スクリプトの内容です。

#!/usr/bin/perl
# Tripwire Policy File customize tool
# ----------------------------------------------------------------
# Copyright (C) 2003 Hiroaki Izumi
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
# ----------------------------------------------------------------
# Usage:
#    perl twpolmake.pl {Pol file}
# ----------------------------------------------------------------
#
$POLFILE=$ARGV[0];

open(POL,"$POLFILE") or die "open error: $POLFILE" ;
my($myhost,$thost) ;
my($sharp,$tpath,$cond) ;
my($INRULE) = 0 ;

while (<POL>) {
    chomp;
    if (($thost) = /^HOSTNAME\s*=\s*(.*)\s*;/) {
        $myhost = `hostname` ; chomp($myhost) ;
        if ($thost ne $myhost) {
            $_="HOSTNAME=\"$myhost\";" ;
        }
    }
    elsif ( /^{/ ) {
        $INRULE=1 ;
    }
    elsif ( /^}/ ) {
        $INRULE=0 ;
    }
    elsif ($INRULE == 1 and ($sharp,$tpath,$cond) = /^(\s*\#?\s*)(\/\S+)\b(\s+->\s+.+)$/) {
        $ret = ($sharp =~ s/\#//g) ;
        if ($tpath eq '/sbin/e2fsadm' ) {
            $cond =~ s/;\s+(tune2fs.*)$/; \#$1/ ;
        }
        if (! -s $tpath) {
            $_ = "$sharp#$tpath$cond" if ($ret == 0) ;
        }
        else {
            $_ = "$sharp$tpath$cond" ;
        }
    }
    print "$_\n" ;
}
close(POL) ;




次に、デフォルトのポリシーファイルとポリシー最適化スクリプトから新しいポリシーファイルを作成するため、以下のコマンドを実行します。

perl twpolmake.pl twpol.txt > twpol.txt.out
画像クリックで拡大画像を表示します




次に、デフォルトのポリシーファイルを削除し、新しいポリシーファイルをリネームするため、以下のコマンドを実行します。

rm -f twpol.txt
mv twpol.txt.out twpol.txt
画像クリックで拡大画像を表示します

正規のポリシーファイルが置き換わります。




次に、ポリシーファイルを暗号化するため、以下のコマンドを実行します。

twadmin -m P -c tw.cfg -p tw.pol -S site.key twpol.txt
画像クリックで拡大画像を表示します

サイトキーのパスフレーズを求められるため、サイトキーのパスフレーズを入力します。




次に、データベースを構築するため、以下のコマンドを実行します。

tripwire --init
画像クリックで拡大画像を表示します

ローカルキーのパスフレーズを求められるため、ローカルキーのパスフレーズを入力します。




次に、Tripwire のデフォルトジョブは使用しないため、以下のコマンドを実行します。

mv /etc/cron.daily/tripwire /etc/tripwire/
画像クリックで拡大画像を表示します

デフォルトで実行されるジョブを退避しています。




次に、cron から呼び出すスクリプトを作成するため、ディレクトリの作成後に以下のコマンドを実行します。

vi tripwire-check.sh
画像クリックで拡大画像を表示します
画像クリックで拡大画像を表示します


以下は、スクリプト例です。
改ざん検知のレポート内容が設定したメールアドレスに送信されます。また、改ざん検知のレポートを指定してデータベースを更新し、改ざん検知のレポートを削除しています。

#!/bin/sh
/usr/sbin/tripwire --check | mail -s "Tripwire report" [自メールアドレス]
files="/var/lib/tripwire/report/*"
for filepath in $files; do
      /usr/sbin/tripwire -m u -a -s -c /etc/tripwire/tw.cfg -r $filepath -P [ローカルのパスフレーズ]
      rm $filepath
done




次に、スクリプトのアクセス権などを設定するため、以下のコマンドを実行します。

chmod 700 /opt/script/tripwire/tripwire-check.sh
画像クリックで拡大画像を表示します




次に、改ざん検知テストのため、以下のコマンドを実行し、作成したスクリプトを実行します。
改ざん検知のレポート内容が設定したメールアドレスに送信されれば、スクリプトは OK です。

画像クリックで拡大画像を表示します
画像クリックで拡大画像を表示します




Web サイトにファイルを追加し、改ざん検知を確認してみます。
ownCloud を表示し、新しいファイルをアップロードします。

画像クリックで拡大画像を表示します
画像クリックで拡大画像を表示します




再度、改ざん検知テストのため、以下のコマンドを実行します。
Web サイトの情報に変化が見えました。Tripwire が正常に動作しています。

sh /opt/script/tripwire/tripwire-check.sh
画像クリックで拡大画像を表示します
画像クリックで拡大画像を表示します




次に、cron からジョブを実行するため、以下のコマンドを実行します。

crontab -u root -e
画像クリックで拡大画像を表示します




次に、ジョブのスケジュールを設定するため、以下を入力します。

0 2 * * * /opt/script/tripwire/tripwire-check.sh
画像クリックで拡大画像を表示します

毎日2時にスクリプトを実行します。




rootkit の検知

続いて、rootkit 検知の設定手順を解説いたします。


rkhunter をインストールするため、以下のコマンドを実行します。

sudo apt install rkhunter
画像クリックで拡大画像を表示します




次に、rkhunter を設定するため、以下のコマンドを実行します。
また、rkhunter の設定を変更します。

画像クリックで拡大画像を表示します
画像クリックで拡大画像を表示します


以下は、rkhunter の設定例です。
デイリーのジョブ設定などを変更しています。

CRON_DAILY_RUN="true"
CRON_DB_UPDATE="true"
DB_UPDATE_EMAIL="true"




次に、rkhunter を調整するため、以下のコマンドを実行します。
また、rkhunter.conf の設定を変更します。

sudo vi /etc/rkhunter.conf
画像クリックで拡大画像を表示します
画像クリックで拡大画像を表示します


以下は、rkhunter.conf の調整例です。
メール設定などを変更します。

UPDATE_MIRRORS=1
MIRRORS_MODE=0
WEB_CMD=""
MAIL-ON-WARNING=[自メールアドレス]
MAIL_CMD=mail -s "[rkhunter] Warnings found for ${HOST_NAME}"




次に、データベースをアップデートするため、以下のコマンドを実行します。

sudo rkhunter --update
画像クリックで拡大画像を表示します




次に、システムのファイル情報をアップデートするため、以下のコマンドを実行します。

sudo rkhunter --propupd
画像クリックで拡大画像を表示します




次に、rootkit を確認するため、以下のコマンドを実行します。

sudo rkhunter --check --skip-keypress
画像クリックで拡大画像を表示します




次に、ログのローテーションを設定するため、以下のコマンドを実行します。
また、ログのローテーションなどの設定を変更します。

sudo vi /etc/logrotate.d/rkhunter
画像クリックで拡大画像を表示します
画像クリックで拡大画像を表示します


以下は、 ログのローテーションなどの設定例です。
ログのローテーション間隔などを変更しています。

/var/log/rkhunter/rkhunter.log {
    daily
    missingok
    rotate 7
    dateext
    compress
    delaycompress
    notifempty
    create 640 root root
}




まとめ

以上が、ownCloud を構築したパソコンのセキュリティ対策となります。

いかがでしたでしょうか?

「これで、セキュリティ対策は万全!」

とは言えませんが、少なくても、今までよりが強固になったのではないでしょうか。

まだまだ、セキュリティ対策に関してやることはあると思いますが、一旦、これぐらいにして、これからも、セキュリティ対策の情報収集を怠らず、何か問題があればすぐに対応していきたいと思います。

なお、Web サイトを公開しない時期はパソコンの電源は OFF にする運用なので、それが一番のセキュリティ対策なのかもしれません。

ドメインと SSL への対応方法 に関しては、次回の記事で解説いたしますので、よろしければこちらもご覧ください。




本稿をご覧になっていただいている読者様の中で、もし、インフラエンジニアを目指している方、もしくはインフラエンジニアに興味がある方がいらっしゃれば、スクールで学ぶことも「あり 」です。
いくつかインフラ系の技術が学べるスクールをピックアップいたしましたので、ご検討の一助となれば幸いです。

 スクール  受講料  受講期間  ポイント
ササエル 19,800円 14レッスン 初級のインフラエンジニアに特化したオンラインスクールです。インフラエンジニアを目指すなら、まずはここから!?
98,000円 15レッスン 初級の次は中級も学べます。
TechAcademy [テックアカデミー] 174,900円(※1) 4週間プラン コースにより、若干、インフラ要素あり。また、学べる言語が細分化されているので、目的に合ったコースが選べます。
【CCNAコース ウズウズカレッジ】 33,000円/月 1ヶ月~ 応募資格を満たしていれば、無料特待プランで受講料が無料!?
初心者OK!KENスクール 187,000円(※2) 50時間 ネットワークコースのLinuxレベル1取得講座。Webサーバーの構築まで学べます。
119,900円(※2) 30時間 ネットワークコースのWindows Server構築講座。クライアントOSの管理操作を学べます。
※1.フロントエンドコースの料金です。学生の場合、料金は163,900円と割引があります。
※2.スクール提携企業特別割引の場合、受講料が10~15% OFF、入会金無料。学生割引特典の場合、全講座料金 20% OFF。



最後までお読みいただきありがとうございました。


では。


スポンサーリンク

スポンサーリンク

Linux
スポンサーリンク
たまおをフォローする
スポンサーリンク
たまーのテクノロジー
タイトルとURLをコピーしました