Changes between Initial Version and Version 1 of ログ監視ツールswatch


Ignore:
Timestamp:
Nov 7, 2016, 2:02:46 PM (5 years ago)
Author:
admin
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ログ監視ツールswatch

    v1 v1  
     1[wiki:WikiStart 戻る]
     2
     3ログ監視ツール導入(SWATCH)
     4
     5■概要
     6システムのログファイル(/var/log/messages等任意のログファイル)を監視し、特定のメッセージを検知してリアルタイムに任意のアクションを実行することができるSWATCHを導入して、不正アクセス元からのアクセスを即ブロックする。
     7なお、該当IPアドレスは動的IPアドレスの場合もあり、該当IPアドレスが正当なユーザに割当てられた場合に正当なユーザがアクセスできなくなってしまうので、24時間後にアクセス制限を自動的に解除するようにする。
     8
     9
     10
     11■SWATCHインストール
     12{{{
     13[root@fedora ~]# yum -y install perl-File-Tail ← SWATCHに必要なFile::Tailインストール
     14[root@fedora ~]# yum -y install swatch ← SWATCHインストール
     15}}}
     16
     17■SWATCH設定
     18(1)SWATCHアクションスクリプト作成
     19SWATCHが検知したIPアドレスからの累積不正アクセス数が3回以上になった場合または、引数でlock※と指定された場合、該当IPアドレスからのアクセスを24時間規制するシェルスクリプトを作成する
     20※Ping of Death等悪意のあるアクセスを即規制するためのオプション
     21{{{
     22[root@fedora ~]# vi /usr/local/bin/swatch_action.sh ← SWATCHアクションスクリプト作成
     23#!/bin/bash
     24PATH=/bin:/sbin:/usr/bin
     25LANG=C
     26# 規制IPアドレス情報メール通知先設定
     27# ※メール通知しない場合は下記をコメントアウト
     28mail=root
     29# ログを標準入力から取得
     30read LOG
     31# ログからIPアドレスを抽出
     32IPADDR=`echo $LOG|cut -d " " -f $1`
     33echo "$IPADDR"|grep "^[0-9]*\." > /dev/null 2>&1
     34if [ $? -eq 0 ]; then
     35    # IPアドレスから始まる場合
     36    IPADDR=`echo "$IPADDR"|sed -e 's/\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*/\1/p' -e d`
     37else
     38    # IPアドレス以外から始まる場合
     39    IPADDR=`echo "$IPADDR"|sed -e 's/.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*/\1/p' -e d`
     40fi
     41
     42# IPアドレスをピリオドで分割
     43addr1=`echo $IPADDR|cut -d . -f 1`
     44addr2=`echo $IPADDR|cut -d . -f 2`
     45addr3=`echo $IPADDR|cut -d . -f 3`
     46addr4=`echo $IPADDR|cut -d . -f 4`
     47
     48# IPアドレスがプライベートIPアドレスの場合は終了
     49if [ "$IPADDR" = "127.0.0.1" ]; then
     50    exit
     51elif [ $addr1 -eq 10 ]; then
     52    exit
     53elif [ $addr1 -eq 172 ] && [ $addr2 -ge 16 ] && [ $addr2 -le 31 ]; then
     54    exit
     55elif [ $addr1 -eq 192 ] && [ $addr2 -eq 168 ]; then
     56    exit
     57fi
     58
     59# 不正アクセスログメッセージをIPアドレス別ログファイルに記録
     60echo $LOG >> /var/log/swatch/$IPADDR
     61
     62# IPアドレス別ログファイルから累積不正アクセス数取得
     63cnt=`cat /var/log/swatch/$IPADDR | wc -l`
     64
     65# 該当IPアドレスからの累積不正アクセス数が3以上の場合または
     66# 引数でlockと指定された場合アクセス規制
     67if [ $cnt -ge 3 ] || [ $# -eq 2 -a  "$2" = "lock" ]; then
     68    # 該当IPアドレスからのアクセスを拒否するルールを挿入
     69    iptables -I INPUT -s $IPADDR -j DROP
     70
     71    # 上記ルールを24時間後に削除するスケジュールを登録
     72    echo "iptables -D INPUT -s $IPADDR -j DROP > /dev/null 2>&1" | \
     73    at now+24hour > /dev/null 2>&1
     74
     75    # アクセス規制IPアドレス情報をメール通知
     76    [ "$mail" != "" ] && (cat /var/log/swatch/$IPADDR ; \
     77                          echo ; whois $IPADDR) | \
     78                          mail -s "$IPADDR $cnt lock!" $mail
     79
     80    echo "`date` $IPADDR $cnt lock!"
     81else
     82    echo "`date` $IPADDR $cnt"
     83fi
     84
     85[root@fedora ~]# chmod 700 /usr/local/bin/swatch_action.sh ← SWATCHアクションスクリプトへ実行権限付加
     86}}}
     87
     88(2)SWATCH設定
     89{{{
     90[root@fedora ~]# mkdir /etc/swatch ← SWATCH設定ファイル格納ディレクトリ作成
     91[root@fedora ~]# vi /etc/logrotate.d/swatch ← SWATCHログ切替え設定ファイル作成
     92/var/log/swatch/swatch.log {
     93    missingok
     94    notifempty
     95    sharedscripts
     96    postrotate
     97        /etc/rc.d/init.d/swatch restart > /dev/null || true
     98    endscript
     99}
     100}}}
     101
     102(3)/var/log/messages監視設定
     103以下のメッセージを検知したら該当ホストからのアクセスを24時間規制するようにする
     104{{{
     105Oct 21 05:20:12 fedora named[14130]: client XXX.XXX.XXX.XXX#55199: query 'VERSION.BIND/TXT/CH' denied
     106
     107[root@fedora ~]# vi /etc/swatch/messages.conf ← /var/log/messages監視用設定ファイル作成
     108# logfile /var/log/messages
     109
     110# BINDのバージョン照会を検知したら該当ホストからのアクセスを24時間規制
     111# ※DNSサーバー(BIND)構築済であること
     112watchfor /query \'VERSION\.BIND\/TXT\/CH\' denied/
     113    pipe "/usr/local/bin/swatch_action.sh 7 lock"
     114
     115# アクセス無許可ホストからのDNS使用を検知したら該当ホストからのアクセスを24時間規制
     116# ※DNSサーバー(BIND)構築済であること
     117watchfor /named.*client.*query.*denied/
     118    pipe "/usr/local/bin/swatch_action.sh 7 lock"
     119}}}
     120
     121(4)/var/log/secure監視設定※SSHサーバー構築済であること
     122・以下のメッセージを検知したら該当ホストからのアクセスを24時間規制するようにする
     123{{{
     124Jan 24 09:32:07 fedora sshd[21171]: refused connect from ::ffff:XXX.XXX.XXX.XXX (::ffff:XXX.XXX.XXX.XXX)
     125{{{
     126・以下のメッセージを3回以上検知したら該当ホストからのアクセスを24時間規制するようにする
     127{{{
     128Jan 28 19:32:10 fedora sshd[16367]: Invalid user admin from XXX.XXX.XXX.XXX
     129}}}
     130
     131{{{
     132[root@fedora ~]# vi /etc/swatch/secure.conf ← /var/log/secure監視用設定ファイル作成
     133# logfile /var/log/secure
     134
     135# アクセス無許可ホストからのSSHログイン失敗を検知したら該当ホストからのアクセスを24時間規制
     136# ※/etc/hosts.deny、/etc/hosts.allowでアクセス許可ホストを制限していることが前提
     137watchfor /sshd.*refused/
     138    pipe "/usr/local/bin/swatch_action.sh 10 lock"
     139
     140# アクセス許可ホストからのSSHログイン失敗を3回以上検知したら該当ホストからのアクセスを24時間規制
     141watchfor /sshd.*Invalid user/
     142    pipe "/usr/local/bin/swatch_action.sh 10"
     143}}}
     144
     145(5)/var/log/vsftpd.log監視設定※FTPサーバー(vsftpd)構築済であること
     146・以下のメッセージを検知したら該当ホストからのアクセスを24時間規制するようにする
     147{{{
     148Fri Jul 28 15:55:44 2006 [pid 28097] CONNECT: Client "XXX.XXX.XXX.XXX", "Connection refused: tcp_wrappers denial."
     149}}}
     150・以下のメッセージを3回以上検知したら該当ホストからのアクセスを24時間規制するようにする
     151{{{
     152Tue May 23 16:34:10 2006 [pid 11167] [xxxxxxxx] FAIL LOGIN: Client "XXX.XXX.XXX.XXX"
     153}}}
     154{{{
     155[root@fedora ~]# vi /etc/swatch/vsftpd.conf ← /var/log/vsftpd.log監視用設定ファイル作成
     156# logfile /var/log/vsftpd.log
     157
     158# アクセス無許可ホストからのFTPログイン失敗を検知したら該当ホストからのアクセスを24時間規制
     159# ※/etc/hosts.deny、/etc/hosts.allowでアクセス許可ホストを制限していることが前提
     160watchfor /Connection refused: tcp_wrappers denial/
     161    pipe "/usr/local/bin/swatch_action.sh 10 lock"
     162
     163# アクセス許可ホストからのFTPログイン失敗を3回以上検知したら該当ホストからのアクセスを24時間規制
     164watchfor /FAIL LOGIN/
     165    pipe "/usr/local/bin/swatch_action.sh 12"
     166}}}
     167
     168(6)/var/log/maillog監視設定※vpopmail構築済であること
     169・以下のメッセージを検知したら該当ホストからのアクセスを24時間規制するようにする
     170{{{
     171Sep 25 01:02:53 fedora vpopmail[30896]: vchkpw-smtp: vpopmail user not found xxxxxxxx@:XXX.XXX.XXX.XXX
     172Oct 4 20:09:00 fedora vpopmail[27103]: vchkpw-pop3: vpopmail user not found xxxxxxxx@:XXX.XXX.XXX.XXX
     173Oct 4 20:10:20 fedora vpopmail[27208]: vchkpw-pop3s: vpopmail user not found xxxxxxxx@:XXX.XXX.XXX.XXX
     174}}}
     175
     176{{{
     177[root@fedora ~]# vi /etc/swatch/maillog.conf ← /var/log/maillog監視用設定ファイル作成
     178# logfile /var/log/maillog
     179
     180# 存在しないユーザ名によるvpopmail認証試行を検知したら該当ホストからのアクセスを24時間規制
     181watchfor /vpopmail user not found/
     182    pipe "/usr/local/bin/swatch_action.sh 11 lock"
     183}}}
     184
     185■SWATCH起動
     186
     187{{{
     188[root@fedora ~]# vi /etc/rc.d/init.d/swatch ← SWATCH起動スクリプト作成
     189#!/bin/bash
     190#
     191# swatch
     192#
     193# chkconfig: 2345 90 35
     194# description: swatch start/stop script
     195
     196# Source function library.
     197. /etc/rc.d/init.d/functions
     198
     199PATH=/sbin:/usr/local/bin:/bin:/usr/bin
     200
     201mkdir -p /var/log/swatch
     202
     203start() {
     204    # Start daemons.
     205    ls /var/run/swatch_*.pid > /dev/null 2>&1
     206    if [ $? -ne 0 ]; then
     207        echo -n "Starting swatch"
     208        pno=0
     209        for conf in /etc/swatch/*.conf
     210        do
     211            pno=`expr $pno + 1`
     212            WATCHLOG=`grep "^# logfile" $conf | awk '{ print $3 }'`
     213            swatch --config-file $conf --tail-file $WATCHLOG \
     214            --script-dir=/tmp --awk-field-syntax --use-cpan-file-tail --daemon \
     215            --pid-file /var/run/swatch_$pno.pid \
     216            >> /var/log/swatch/swatch.log 2>&1
     217            RETVAL=$?
     218            [ $RETVAL != 0 ] && return $RETVAL
     219        done
     220        echo
     221        [ $RETVAL = 0 ] && touch /var/lock/subsys/swatch
     222        return $RETVAL
     223    else
     224        echo "swatch is already started"
     225    fi
     226}
     227
     228stop() {
     229    # Stop daemons.
     230    ls /var/run/swatch_*.pid > /dev/null 2>&1
     231    if [ $? -eq 0 ]; then
     232        echo -n "Shutting down swatch"
     233        for pid in /var/run/swatch_*.pid
     234        do
     235           kill $(cat $pid)
     236           rm -f $pid
     237        done
     238        echo
     239        rm -f /var/lock/subsys/swatch /tmp/.swatch_script.*
     240    else
     241        echo "swatch is not running"
     242    fi
     243}
     244
     245status() {
     246    ls /var/run/swatch_*.pid > /dev/null 2>&1
     247    if [ $? -eq 0 ]; then
     248        echo -n "swatch (pid"
     249        for pid in /var/run/swatch_*.pid
     250        do
     251           echo -n " `cat $pid`"
     252        done
     253        echo ") is running..."
     254    else
     255        echo "swatch is stopped"
     256    fi
     257}
     258
     259case "$1" in
     260  start)
     261        start
     262        ;;
     263  stop)
     264        stop
     265        ;;
     266  restart)
     267        stop
     268        start
     269        ;;
     270  status)
     271        status
     272        ;;
     273   *)
     274        echo "Usage: swatch {start|stop|restart|status}"
     275        exit 1
     276esac
     277
     278exit $RETVAL
     279
     280[root@fedora ~]# chmod +x /etc/rc.d/init.d/swatch ← SWATCH起動スクリプトへ実行権限付加
     281
     282[root@fedora ~]# /etc/rc.d/init.d/swatch start ← SWATCH起動
     283Starting swatch
     284
     285[root@fedora ~]# chkconfig --add swatch ← SWATCH起動スクリプトをcheconfigへ登録
     286
     287[root@fedora ~]# chkconfig --list swatch ← SWATCH自動起動設定確認
     288swatch          0:off   1:off   2:on    3:on    4:on    5:on    6:off ← ランレベル2~5のonを確認
     289}}}
     290
     291■SWATCHその他
     292設定に従って各種ログファイルを監視し、不正アクセスを検知して該当ホストからのアクセスを24時間規制した場合、該当IPアドレスのwhois情報がメール通知されてくる。
     293※SWATCHアクションスクリプト(swatch_action.sh)で規制IPアドレス情報通知先メールアドレスを指定した場合
     294
     295IPアドレスの規制状態は以下のコマンドで確認可能
     296{{{
     297[root@fedora ~]# iptables -L INPUT -n|grep DROP ← iptablesによる受信拒否ルールの照会
     298Chain INPUT (policy DROP)
     299DROP       all  --  XXX.XXX.XXX.XXX      0.0.0.0/0
     300DROP       all  --  XXX.XXX.XXX.XXX      0.0.0.0/0
     301}}}
     302
     303IPアドレスの規制解除予約状態は以下のコマンドで確認可能
     304{{{
     305[root@fedora ~]# atq|sort ← atコマンドによる予約キューの照会
     306114     2006-02-04 09:32 a root
     307115     2006-02-04 09:33 a root
     308
     309[root@fedora ~]# at -c 114|tail -2 ← atコマンドにより予約されている処理の照会
     310iptables -D INPUT -s XXX.XXX.XXX.XXX -j DROP > /dev/null 2>&1
     311
     312[root@fedora ~]# at -c 115|tail -2 ← atコマンドにより予約されている処理の照会
     313iptables -D INPUT -s XXX.XXX.XXX.XXX -j DROP > /dev/null 2>&1
     314}}}
     315
     316上記例の場合、iptablesによるアクセス拒否ルールの削除コマンドが、2006-02-04 09:32と2006-02-04 09:33に予約されている