SpecialistOff.NET / Вопросы / Статьи / Фрагменты кода / Резюме / Метки / Помощь / Файлы

Назад

badguys


Метки:

Внимание
root # time /etc/badguys.py -a XXX.XXX.XXX.XXX

Очистка таблицы межсетевого экрана
Загрузка списка IP в таблицу межсетевого экрана
5.108u 15.048s 0:21.35 94.3%    33+169k 0+1io 0pf+0w


root #time /etc/badguys.sh add XXX.XXX.XXX.XXX

Сортировка списка IP адресов
Загрузка списка IP в таблицу файервола
1.492u 4.500s 0:06.23 96.1%     113+173k 0+2io 1pf+0w

Файл:

/etc/badguys.sh

#!/bin/sh -
echo "Скрипт интерактивного добавления IP или подсети в бан лист файервола"

echo "Установка переменных"
table=${table:="2"}
filename=${filename:="/etc/badguys.list"}
tmpfile=`mktemp /tmp/badguys.XXX`
tmpdialog=`mktemp /tmp/dialog.XXX`
DIALOG=${DIALOG:=/usr/bin/dialog}

reload() {
	echo
	echo "Очистка таблицы файервола"
	ipfw table ${table} flush

sort_list

	echo "Загрузка списка IP в таблицу файервола"
	for i1 in `cat ${filename}`;
	do
		ipfw table ${table} add $i1
	done
}

# Сортировка списка IP адресов
sort_list() {
	echo "Сортировка списка IP адресов"
	sort -n ${filename} > ${tmpfile}
	uniq ${tmpfile} ${filename}
}

# Показ списка IP адресов
print_list() {
	if [ -n "$2" ]; then
		less ${filename}
	else
		grep $2 ${filename}
	fi
}

print_help() {
	echo
	case $2 in
	add)
		echo "Без параметров вызывает диалоговое окно добавления"
		echo "Параметр после add добавляется в файл и таблица перезагружается"
	;;
	*)
		echo "add - добавление нового IP"
		echo "delete - удаление файла"
		echo "clear - очистка таблицы"
		echo "help - помощь"
		echo "list - показать бан лист"
		echo "sort - сортировка списка"
	;;
	esac
}

case $1 in
add)
	isip=`echo $2 | grep -E -o '[0-9]{1,3}(\.[0-9]{1,3}){3}'`
	if [ ${isip} != "" ]
	then
		echo ${isip} >> ${filename}
		reload
	else
		${DIALOG} --inputbox "Добавить новый IP или подсеть" 10 40 2> ${tmpdialog}
		ip=`cat ${tmpdialog}`
		echo ${ip} >> ${filename}
		reload
	fi
;;
clear)
	ipfw table ${table} flush
;;
delete)
	rm -rf ${filename}
;;
help)
	print_help $2
;;
list)
	print_list
;;
sort)
	sort_list
;;
*)
	reload
	print_help
;;
esac

rm -rf ${tmpdialog}
rm -rf ${tmpfile}