Revision [2400]

This is an old revision of ddosDotSh made by JeffTaylor on 2011-01-18 15:21:36.

 

#!/bin/bash
# ddos.sh - by Jeff Taylor

## Where to store the block file (full path required)
BLOCKFILE="/etc/ddos.block"

## Where to store the temp file (full path required)
TEMPFILE="/tmp/ddos.tmp"

## Which file does your DNS service log query info in (full path required)
LOGFILE="/var/log/named/filter"

## Name of the iptables chain (Default is "INPUT")
CHAIN="INPUT"

## A string to identify this program's actions in syslog
NAME="DNS_Filter"

## Time (in seconds) to keep an IP address blocked (Default is 600)
TIMER=600

## Network device which receives DNS queries
NETDEV="eth0"

## Source port that the queries are coming in on
SPORT=25345

## Offending query string being sent to DNS
QUERY="$SPORT: view net: query: isc.org IN ANY +ED"


##----- Do not edit beyond this point -----##


if [ ! -f "$BLOCKFILE" ]; then touch $BLOCKFILE ; fi

LAST="-n100"
while true ; do
  ## Generate a list of IP addresses that have performed the offending query
  FILTER=`tail $LAST $LOGFILE | grep "$QUERY" | awk '{ print $6 }' | cut -d\# -f1 | sort | uniq`
  now=`date "+%s"`

  ## Check all IP addresses and block as needed
  for IP in $FILTER ; do
	if [ "`grep $IP $BLOCKFILE`" == "" ] ; then
	  COUNT=`tail $LAST $LOGFILE | grep "$QUERY" | grep $IP | wc -l`
	  if [ $COUNT -ge 10 ] ; then
	    iptables -A $CHAIN -i $NETDEV -s $IP -p udp --sport $SPORT -j DROP
	    END=$(($now + $TIMER))
	    echo "$END      $IP" >> $BLOCKFILE
	    logger -t $NAME Blocked $IP
	  fi
	fi
  done

  ## Check if an IPs timer has expired, and remove the block
  if [ -f "$BLOCKFILE" ] ; then
	while read timeout IP ; do
	  if [ $timeout -lt $now ] ; then
	    iptables -D $CHAIN -i $NETDEV -s $IP -p udp --sport $SPORT -j DROP 2>/dev/null
	    sed "/$IP/d" $BLOCKFILE > $TEMPFILE
	    mv -f $TEMPFILE $BLOCKFILE
	    logger -t $NAME Removed $IP
	  fi
	done < $BLOCKFILE
  fi

  LAST="-c+`stat -c%s $LOGFILE`"
  sleep 1
done
There are no comments on this page.
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki