Проект переехал на новый домен!  [[ перейти ]]

#!/bin/sh
#Подсмотрен алгоритм чтения из файла с сайта: 
#http://forum.lissyara.su/viewtopic.php?f=32&t=9551#p79072

#######################################################
DIR="/var/log"		# Директория файла auth.log
#			###############################
TMP="_tmp.log"		# Временный файл
RLS="ssh_ipfw"		# Файл с правилами для ipfw
#			###############################
FWN="4"			# Номер правила
SIP="xx.xxx.xxx.xx"	# IP-адрес сервера
SIF="tun0"		# Интерфейс сервера
#			###############################
MAX="5"			# Макс. отвергнутых подключений
#######################################################

# Читаем auth.log, делая выборку по слову Invalid, выбирая 10-ый
# столбец собираем уникальные адреса с подсчётом количества 
# повторений адрессов в лог-файле. 
cat $DIR/auth.log | grep Invalid | awk '{ print $10 }' | uniq -c | 
{
# Получаем в потоке виртуальный массив с двумя колонками, где
# 1 столбец - кол-во повторений ip-адреса в файле
# 2 столбец - сам ip
while read i
do
    COUNT=`echo $i | awk '{ print $1 }'`
    ADDRS=`echo $i | awk '{ print $2 }'`

# Если количество повторений определённого ip-адреса больше дано в $MAX,
# то создаём правило deny с этим ip-адресом и заносим во временный файл
    if [ $COUNT -ge $MAX ]
	then
	    echo "/sbin/ipfw add $FWN deny ip from $ADDRS to $SIP in via $SIF" >> $RLS
	fi
done
}

# Выкинем из правил повторения...
cat $RLS | sort -u > $TMP && mv $TMP $RLS

# Удаляем уже имеющиеся правила в фаирволе
# чтобы не задваивать и не разводить грязь
/sbin/ipfw delete $FWN > /dev/null 2>&1

# Выставляем права на файл с правилами и
# заносим правила в фаирвол
chmod 744 $RLS && ./$RLS > /dev/null 2>&1

# Осталось добавать в cron запускать этот скрипт приблизительно
# раз в полчаса и спокойно идти пить кофе...

# crontab -e
# 0/10 * * * * /home/ddr/scripts/parsing.sh
# wq