Home > Debian | UNIX > [Debian]Debian lennyで1からサーバーを作ってみる – swatchをインストール

[Debian]Debian lennyで1からサーバーを作ってみる – swatchをインストール

  • swatchをインストール
    # aptitude install swatch
  • swatch自動起動スクリプト作成
    # mkdir /var/log/swatch
    # vi /etc/init.d/swatch
    
    #!/bin/sh
    
    PATH="/sbin:/bin:/usr/sbin:/usr/bin"
    NAME="swatch"
    DAEMON="/usr/bin/swatch"
    DESC="simple watcher"
    CONFFILE="/etc/swatch.conf"
    #LOGFILE="/var/log/secure"
    LOGFILE="/var/log/auth.log"
    PIDFILE="/var/run/swatch.pid"
    SCRIPTDIR="/var/log/swatch"
    OPTS="--config-file $CONFFILE --tail-file $LOGFILE --pid-file=$PIDFILE \
    	--script-dir=$SCRIPTDIR --awk-field-syntax --daemon"
    
    test -x $DAEMON || exit 0
    
    start() {
        if [ ! -f "$CONFFILE" ]; then
            echo "Error: $CONFFILE does not exist."
            exit 1
        fi
        if [ ! -f "$LOGFILE" ]; then
            echo "Error: $LOGFILE does not exist."
            exit 1
        fi
        if [ -f "$PIDFILE" ]
        then
            echo "Error: $NAME is already running."
        else
            $DAEMON $OPTS
        fi
    }
    
    stop() {
        if [ -f "$PIDFILE" ]
        then
            PID=`cat $PIDFILE`
            if ps h $PID > /dev/null
            then
                pkill -P $PID
            else
                echo "Error: $NAME is not running, but PID file exists. Deleting it."
            fi
            rm -f $PIDFILE
        else
            echo "Error: $NAME is not running."
        fi
    }
    
    case "$1" in
      start)
        echo "Starting $DESC: $NAME"
        start
        ;;
      stop)
        echo "Stopping $DESC: $NAME"
        stop
        ;;
      restart)
        echo "Restarting $DESC: $NAME"
        stop
        sleep 1
        start
        ;;
      *)
        echo "Usage: $0 start|stop|restart"
        exit 1
        ;;
    esac
    
    exit 0
    
    # chmod a+x /etc/init.d/swatch
    # update-rc.d swatch defaults 99
    
  • swatchアクションスクリプト作成
    # vi /usr/local/bin/swatch_action.sh
    #!/bin/bash
    
    PATH=/bin:/sbin:/usr/bin
    LANG=C
    
    # 規制IPアドレス情報メール通知先設定
    # ※メール通知しない場合は下記をコメントアウト
    mail=root
    
    # ログを標準入力から取得
    read LOG
    
    # ログからIPアドレスを抽出
    IPADDR=`echo $LOG|cut -d " " -f $1`
    echo "$IPADDR"|grep "^[0-9]*\." > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        # IPアドレスから始まる場合
        IPADDR=`echo "$IPADDR"|sed -e 's/\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*/\1/p' -e d`
    else
        # IPアドレス以外から始まる場合
        IPADDR=`echo "$IPADDR"|sed -e 's/.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*/\1/p' -e d`
    fi
    
    # IPアドレスをピリオドで分割
    addr1=`echo $IPADDR|cut -d . -f 1`
    addr2=`echo $IPADDR|cut -d . -f 2`
    addr3=`echo $IPADDR|cut -d . -f 3`
    addr4=`echo $IPADDR|cut -d . -f 4`
    
    # IPアドレスがプライベートIPアドレスの場合は終了
    if [ "$IPADDR" = "127.0.0.1" ]; then
        exit
    elif [ $addr1 -eq 10 ]; then
        exit
    elif [ $addr1 -eq 172 ] && [ $addr2 -ge 16 ] && [ $addr2 -le 31 ]; then
        exit
    elif [ $addr1 -eq 192 ] && [ $addr2 -eq 168 ]; then
        exit
    fi
    
    # 不正アクセスログメッセージをIPアドレス別ログファイルに記録
    echo $LOG >> /var/log/swatch/$IPADDR
    
    # IPアドレス別ログファイルから累積不正アクセス数取得
    cnt=`cat /var/log/swatch/$IPADDR | wc -l`
    
    # 該当IPアドレスからの累積不正アクセス数が3以上の場合または
    # 引数でlockと指定された場合アクセス規制
    if [ $cnt -ge 3 ] || [ $# -eq 2 -a  "$2" = "lock" ]; then
        # 該当IPアドレスからのアクセスを拒否するルールを挿入
        iptables -I INPUT -s $IPADDR -j DROP
    
        # 上記ルールを24時間後に削除するスケジュールを登録
        echo "iptables -D INPUT -s $IPADDR -j DROP > /dev/null 2>&1" | \
        at now+24hour > /dev/null 2>&1
    
        # アクセス規制IPアドレス情報をメール通知
        [ "$mail" != "" ] && (cat /var/log/swatch/$IPADDR ; \
                              echo ; whois $IPADDR) | \
                              mail -s "$IPADDR $cnt lock!" $mail
    
        echo "`date` $IPADDR $cnt lock!"
    else
        echo "`date` $IPADDR $cnt"
    fi
    
    chmod 700 /usr/local/bin/swatch_action.sh
  • swatch設定
    # vi /etc/cron.daily/logrotate
    
    /etc/init.d/swatch restart > /dev/null ← ファイル最下部へ追加
    
    # vi /etc/swatch.conf
    
    # BINDのバージョン照会を検知したら該当ホストからのアクセスを24時間規制
    # ※DNSサーバー(BIND)構築済であること
    watchfor /query \'VERSION\.BIND\/TXT\/CH\' denied/
        pipe "/usr/local/bin/swatch_action.sh 7 lock"
        throttle=00:00:10
    
    # アクセス無許可ホストからのDNS使用を検知したら該当ホストからのアクセスを24時間規制
    # ※DNSサーバー(BIND)構築済であること
    watchfor /named.*client.*query.*denied/
        pipe "/usr/local/bin/swatch_action.sh 7 lock"
    
    # アクセス無許可ホストからのSSHログイン失敗を検知したら該当ホストからのアクセスを24時間規制
    # ※/etc/hosts.deny、/etc/hosts.allowでアクセス許可ホストを制限していることが前提
    watchfor /sshd.*refused/
        pipe "/usr/local/bin/swatch_action.sh 10 lock"
        throttle=00:00:10
    
    # アクセス許可ホストからのSSHログイン失敗を3回以上検知したら該当ホストからのアクセスを24時間規制
    watchfor /sshd.*Invalid user/
        pipe "/usr/local/bin/swatch_action.sh 10"
        throttle=00:00:10
    
  • swatch起動
    # /etc/init.d/swatch start

Comments:0

add to hatena hatena.comment (2) add to del.icio.us (0) add to livedoor.clip (0) add to Yahoo!Bookmark (0) Total: 2

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://ore.saizensen.net/archives/356/trackback
Listed below are links to weblogs that reference
[Debian]Debian lennyで1からサーバーを作ってみる – swatchをインストール from おれ最前線ねっと

Home > Debian | UNIX > [Debian]Debian lennyで1からサーバーを作ってみる – swatchをインストール

Search
Feeds
Meta

Return to page top