Chkrootkit インストール
①ダウンロード、インストール
1 2 3 |
# cd /usr/local/src # wget https://launchpad.net/chkrootkit/main/0.55/+download/chkrootkit-0.55.tar.gz # tar xvf chkrootkit-0.55.tar.gz |
➁/root/bin ディレクトリを作成し、そのディレクトリにchkrootkit コマンドを移動
1 2 |
# mkdir -p /root/bin # mv chkrootkit-0.55/chkrootkit /root/bin |
➂chkrootkit を確認
1 2 |
# chkrootkit | grep INFECTED 何も表示されなければ問題ありません |
Checking `chsh'… INFECTED
上記の表示が出る場合はおそらく誤検知
④chkrootkit 定期実行スクリプトの作成と権限変更
chkrootkit実行スクリプトを毎日自動実行されるディレクトリへ作成
1 |
# vi /etc/cron.daily/chkrootkit |
定期実行スクリプトの内容
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 |
#!/bin/bash PATH=/usr/bin:/bin:/root/bin LOG=/tmp/$(basename ${0}) # chkrootkit実行 chkrootkit > $LOG 2>&1 # ログ出力 cat $LOG | logger -t $(basename ${0}) # SMTPSのbindshell誤検知対応 if [ ! -z "$(grep 465 $LOG)" ] && \ [ -z $(/usr/sbin/lsof -i:465|grep bindshell) ]; then sed -i '/465/d' $LOG fi # upstartパッケージ更新時のSuckit誤検知対応 if [ ! -z "$(grep Suckit $LOG)" ] && \ [ -z "$(rpm -V `rpm -qf /sbin/init`)" ]; then sed -i '/Suckit/d' $LOG fi # rootkit検知時のみroot宛メール送信 [ ! -z "$(grep INFECTED $LOG)" ] && \ grep INFECTED $LOG | mail -s "chkrootkit report in `hostname`" root |
chkrootkit実行スクリプトへ実行権限付加
1 |
# chmod 700 /etc/cron.daily/chkrootkit |
⑥chkrootkit が使用するコマンドをバックアップ
chkrootkit が使用するコマンドが改ざんされた場合、rootkit を検出できなくなるので、
これらのコマンドをバックアップしておきます。
必要な場合は、バックアップしたコマンドを使用してchkrootkit を実行します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# cd /root # mkdir /root/chkrootkit_cmd # cp `which --skip-alias awk cut echo egrep find head id ls netstat ps strings sed ssh uname` chkrootkit_cmd/ # ls -l /root/chkrootkit_cmd/ total 2568 -rwxr-xr-x 1 root root 723256 Mar 5 12:22 awk -rwxr-xr-x 1 root root 49952 Mar 5 12:22 cut -rwxr-xr-x 1 root root 37352 Mar 5 12:22 echo -rwxr-xr-x 1 root root 32 Mar 5 12:22 egrep -rwxr-xr-x 1 root root 214168 Mar 5 12:22 find -rwxr-xr-x 1 root root 45872 Mar 5 12:22 head -rwxr-xr-x 1 root root 41672 Mar 5 12:22 id -rwxr-xr-x 1 root root 142072 Mar 5 12:22 ls -rwxr-xr-x 1 root root 161712 Mar 5 12:22 netstat -rwxr-xr-x 1 root root 141080 Mar 5 12:22 ps -rwxr-xr-x 1 root root 116824 Mar 5 12:22 sed -rwxr-xr-x 1 root root 844272 Mar 5 12:22 ssh -rwxr-xr-x 1 root root 33256 Mar 5 12:22 strings -rwxr-xr-x 1 root root 37536 Mar 5 12:22 uname |
⑦コピーしたコマンドにchkrootkit を実行
何も表示されなければ問題ありません
1 |
# chkrootkit -p /root/chkrootkit_cmd | grep INFECTED |
⑧バックアップしたコマンドを圧縮
1 |
# tar zcvf chkrootkit_cmd.tar.gz chkrootkit_cmd |
⑨Windows にchkrootkit_cmd.tar.gz ファイルをダウンロードして退避
⑪バックアップしたサーバー上のコマンドを削除
1 |
# rm -f chkrootkit_cmd.tar.gz |
Logwatch導入
①インストール
1 |
# dnf install logwatch |
②設定ファイルの編集
1 2 3 4 5 6 7 8 9 |
# cat /usr/share/logwatch/default.conf/logwatch.conf >> /etc/logwatch/conf/logwatch.conf # vi /etc/logwatch/conf/logwatch.conf ●53 行目 : 「MailTo = root」の行頭に「#」を挿入し、その下行に通知を受け取りたいメールアドレスを設定 #MailTo = root MailTo = [メールアドレス] ●86行目あたり : ログ通知の詳細度を設定 #Detail = Low Detail = High |
③レポートを出力
1 |
# logwatch --output stdout |
下記のようなメッセージが出ます
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 |
################### Logwatch 7.8 (01/22/23) #################### Processing Initiated: Sun Mar 5 13:40:07 2023 Date Range Processed: yesterday ( 2023-Mar-04 ) Period is day. Detail Level of Output: 10 Type of Output/Format: stdout / text Logfiles for Host: Lepard ################################################################## -----------中略---------- **Unmatched Entries** Binding to IPv6 address not available since kernel does not support IPv6.: 12 Time(s) No hostname configured, using default hostname.: 1 Time(s) ---------------------- Systemd End ------------------------- --------------------- Disk Space Begin ------------------------ Filesystem Size Used Avail Use% Mounted on /dev/mapper/fedora-root 15G 4.3G 11G 29% / /dev/nvme0n1p2 960M 218M 743M 23% /boot ---------------------- Disk Space End ------------------------- ###################### Logwatch End ######################### |
④次のコマンドで設定したアドレスにレポートが届くかテストを行います。上記の様なログレポートメールが届いているか確認
1 |
# /etc/cron.daily/0logwatch |
DiCEのインストール
ネットが切断されたり、ルーターが切断再起動したときにおこるグローバルIPの変更の度に、ダイナミックDNSにアクセスしグローバルIPが変更されたことを知らせなくてはいけません。その作業を自動的にやってくれるのがDiCEです
①Diceのダウンロード、インストール
1 2 3 |
# cd /usr/local/bin # wget http://www.hi-ho.ne.jp/yoshihiro_e/dice/diced01914.tar.gz # tar -xzvf diced01914.tar.gz |
②DiCEの設定
DiCEの出力文字はEUCのため、文字化けしてしまう。UTF-8に変換するために、nkfをインストールしておく
1 |
# dnf install nkf |
64bitOSで32bitソフトのDiceを動かすため下記をインストール
1 |
# dnf install glibc.i686 |
③DiCEを起動する
1 2 |
# cd /usr/local/bin/DiCE # ./diced | nkf -uw |
④イベントの追加
DNSサービスはVALUEDOMAINとした場合
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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
=-=-=- DiCE DynamicDNS Client -=-=-= Version 0.19 for Japanese Copyright(c) 2001 sarad :add 新しくイベントを追加します DynamicDNSサービス名を入力してください "?"で対応しているサービスを一覧表示します (P)戻る >VALUEDOMAIN ------------------------------------------------- << バリュードメイン >> URL: http://www.value-domain.com/index.php *** 情報 *** ・全ホストを更新するにはホスト名に"*"を指定してください。 ・"ユーザー名"に入力された内容は無視されます。 ================================================= ドメイン名を入力してください "?"でドメイン一覧を表示します (P)戻る >[Domain name] ================================================= ホスト名を入力してください (P)戻る >[Host name] ================================================= ログインユーザ名を入力してください (P)戻る >[Login username] ================================================= ログインパスワードを入力してください (P)戻る >[Password] ================================================= 登録するIPアドレスを入力してください 空白にすると現在のIPアドレスを自動検出します (P)戻る >[Enter] ================================================= このイベントに題名を付けてください (P)戻る >[Any name] ================================================= このイベントを実行するスケジュールを設定します ------------------------------------------------- 実行する頻度を指定してください (番号入力) (0)1回のみ (1)1日1回 (2)1週間に1回 (3)1ヵ月に1回 (4)その他の周期 (5)IPアドレス変化時 (6)起動時 (P)戻る >[Any} ------------------------------------------------- IPアドレスがあまり変化しない環境の場合、更新せずに一定期間を過ぎると アカウントを削除されてしまうことがあります IPアドレスの変化が無い時に実行する間隔を指定してください (0)7日毎 (1)14日毎 (2)21日毎 (3)28日毎 (4)35日毎 (5)56日毎 (6)84日毎 (P)戻る >[Any} ================================================= ================================================= このイベントを有効にしますか? (Y/N) (イベントの有効/無効は"EN/DIS"コマンドで切替えられます) >y ================================================= イベントを保存しますか? (Y/N) >y イベント"xxxxx"を保存しました ================================================= :list (No.) (イベント名) (スケジュール) (次回予定) 0 * xxxxx IPアドレス変化時 (7日毎) 03/12 13:58 :ex o + 3/5 13:58 にxxxxxが実行されました IPアドレスを更新しました 終了 :exit |
⑤Diceの自動実行
DiCEを常駐モードで起動
1 |
# setarch `uname -m` /usr/local/bin/DiCE/diced -d -l |
DiCE自動起動設定
1 |
# echo “setarch `uname -m` /usr/local/bin/DiCE/diced -d -l” >> /etc/rc.d/rc.local |
rc.localに実行権限を付加
1 |
# chmod u+x /etc/rc.d/rc.local |
ディスク使用率チェックスクリプト導入
1 スクリプト作成
1 2 |
# cd /var/www/system # vi disk_capacity_check.sh |
disk_capacity_check.shの内容
1 2 3 4 5 6 7 8 9 10 |
#!/bin/bash #通知先メールアドレス指定 MAIL="<Mail address>" DVAL=`/bin/df / | /usr/bin/tail -1 | /bin/sed 's/^.* \([0-9]*\)%.*$/\1/'` if [ $DVAL -gt 80 ]; then echo "Disk usage alert: $DVAL %" | mail -s "Disk Space Alert in `hostname`" $MAIL fi |
実行権限
1 |
# chmod 700 disk_capacity_check.sh |
2 実行確認
①現在の使用率を確認
1 |
# df -h |
次のように表示される
1 2 3 4 5 6 7 8 9 10 11 |
Filesystem Size Used Avail Use% Mounted on devtmpfs 4.0M 0 4.0M 0% /dev tmpfs 2.2G 0 2.2G 0% /dev/shm tmpfs 896M 1.6M 895M 1% /run /dev/mapper/fedora-root 15G 4.4G 11G 30% / /dev/loop2 50M 50M 0 100% /var/lib/snapd/snap/snapd/18357 /dev/loop0 64M 64M 0 100% /var/lib/snapd/snap/core20/1822 /dev/loop1 44M 44M 0 100% /var/lib/snapd/snap/certbot/2772 tmpfs 2.2G 8.0K 2.2G 1% /tmp /dev/nvme0n1p2 960M 218M 743M 23% /boot tmpfs 448M 4.0K 448M 1% /run/user/1000 |
②使用率80%以上になるようダミーファイルを作成(例ではdummyfile という名前で9G程度)
1 |
# dd if=/dev/zero of=dummyfile bs=1M count=9000 |
➂ディスク容量チェックスクリプトを実行
1 |
# /var/www/system/disk_capacity_check.sh |
設定したメールアドレスに本文の内容として「Disk usage alert: 88 %」のように記載のメールが届きます
④作成した「dummyfile」を削除
1 |
# rm dummyfile |
⑤定期実行設定
1 2 |
# crontab -e 30 2 * * * /var/www/system/disk_capacity_check.sh |