
Итак, идем дальше в деле защиты от атак

Для отслеживания атак в реальном времени, можно применить мощную и функциональную систему типа
snortОднако, не всегда нужна такая большая система, хватит простейшего средства блокирования разного рода попыток сканов (или атак).
Представляю скрипт, который делает такую работу.
2 части: настройка iptables и сам скрипт
# создаем необходимые правила для блокировки и логирования пакетов на отслеживаемый порт
# новый чейн
iptables -N attacks
iptables -F attacks
# логирование
iptables -A attacks -j LOG --log-prefix "Attack: "
# блокировка. при отсутствии будет логирование
iptables -A FORWARD -p tcp -i eth1 --dport 22 -j attacks
Далее, необходимо запустить скриптик, который, при возникновении опасной ситуации, создает необходимые блокирующие правила:
#!/bin/sh
OLDSRC=1
# бесконечный цикл чтения файла
tail -f -n 0 /var/log/syslog | \
( while read LINE
do
SRC=`echo $LINE | grep 'Attack:' | egrep -o 'SRC=[^ ]+' | cut -c5-`
DST=`echo $LINE | grep 'Attack:' | egrep -o 'DST=[^ ]+' | cut -c5-`
# проверка на SRC адреса - чтобы исключить срабатывание на пакеты с "хороших" хостов
case "x$SRC" in
x1.2.3.4) ;;
x) ;;
*)
# при сканах - тьма входящих пакетов. срабатывать надо 1 раз
if [ "x$SRC" != "x$OLDSRC" ]
then
# вывести на консоль данные
echo -n "$SRC $DST " ; date
# прописать блокирующее правило
/usr/sbin/iptables -I attacks -s $SRC -j DROP
# записать лог в файлик

echo -n "$S $D " >> LOG
/usr/bin/date >> LOG
OLDSRC=$SRC
fi
;;
esac
done )
Как обычно - решение дается as is. Его можно/нужно дорабатывать, например, на проверку и DST валидных адресов.
У данного решения есть 1-2 довольно больших недостатка (довольно объективных).
Их нахождение оставляется вам как "домашнее задание"
"No! Try not! Do. Or do not. There is no try." -- Yoda