Страница 1 из 1
Блокировка ip из файла
Добавлено: 2011-10-07 14:23:59
Вован
Всем привет, требуется помощь в вопросе. Есть список ip который дополняется и хочется что бы при перезагрузке ipfw или шлюза в ipfw сразу добавлялось правило что бы из файла эти ip блочились.
Нашел в инете этот скрипт но он не отрабатывает ((((
PS Freebsd 7.4 + ipfw
ipfw table 1 flush
cat /etc/block1.txt | while read ip; do
# echo ipfw table 1 add $ip 1
ipfw table 1 add $ip 1
done
Привязка таблицы к правилу блокировки:
ipfw add 100 deny ip from "table(1)" to any via em1
Re: Блокировка ip из файла
Добавлено: 2011-10-07 14:28:30
Bayerische
Код: Выделить всё
cat /etc/ipfw/table_1.txt | { while read ip;
do
/sbin/ipfw table 1 add $ip;
done;
}
cat /etc/ipfw/table_2.txt | { while read ip;
do
/sbin/ipfw table 2 add $ip;
done;
}
cat /etc/ipfw/table_3.txt | { while read ip;
do
/sbin/ipfw table 3 add $ip;
done;
}
У меня так. 3 таблицы, с разными категориями "засранцев". Заполняются тоже скриптами.
Re: Блокировка ip из файла
Добавлено: 2011-10-07 14:55:43
Alex Keda
Код: Выделить всё
srv0# cat /root/scripts/ipfw/ipfw.sh
#!/bin/sh
# path
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
# бинариник файрволла
FwCMD="/sbin/ipfw -q"
# директория где живём
basedir="/root/scripts/ipfw"
# файлы локальных таблиц
basedir_local="/root/scripts/db"
# tmp file
tmp="/tmp/$$"
# файлы таблиц
table_list="`ls $basedir | grep table`"
table_list_local="`ls $basedir_local | grep table`"
# список портов
port_list="`ls $basedir | grep table | awk -F '.' '{print $2}'`"
port_list_local="`ls $basedir_local | grep table | awk -F '.' '{print $2}'`"
#echo $table_list
# отключаем файрволл
#${FwCMD} disable firewall
# скидываем правила
${FwCMD} flush
# разрешаем ходить самому на себя
${FwCMD} add allow all from me to me
# Запрещаем заблокированным хостам указанные порты - глобально
for port in $port_list
do
# строим временный файл для загрузки парвил
echo -n > $tmp.$port.global
for ip in `cat $basedir/table.$port.txt | grep -v ^# | grep -v ^\$ | sort | uniq`
do
echo "table $port add $ip" >> $tmp.$port.global
done
# очищаем таблицу
${FwCMD} table $port flush
# добавляем правило в файрволл
${FwCMD} add deny ip from "table($port)" to me $port
# заполняем таблицу из временного файла
${FwCMD} $tmp.$port.global &
done
# Запрещаем заблокированным хостам указанные порты - локально
for port in $port_list_local
do
# добавляем правило в файрволл - если такой таблицы нет локально
if test -f $basedir/table.$port.txt
then
# есть
else
${FwCMD} table $port flush
${FwCMD} add deny ip from "table($port)" to me $port
fi
# строим временный файл для загрузки прaвил
echo -n > $tmp.$port.local
for ip in `cat $basedir_local/table.$port.txt | grep -v ^# | grep -v ^\$ | sort | uniq`
do
echo "table $port add $ip" >> $tmp.$port.local
done
# заполняем таблицу из временного файла
${FwCMD} $tmp.$port.local &
done
# Запрет X-сканирования:
${FwCMD} add reject log tcp from any to any tcpflags fin, syn, rst, psh, ack, urg
# Запрет N-сканирования:
${FwCMD} add reject log tcp from any to any tcpflags !fin, !syn, !rst, !psh, !ack, !urg
# Запрет FIN-сканирования:
${FwCMD} add reject log tcp from any to any not established tcpflags fin
# Защита от спуфинга
${FwCMD} add deny log ip from any to any not verrevpath in
# прикрываем memcached снаружи
${FwCMD} add deny tcp from not me to me 11211
${FwCMD} add deny udp from not me to me 11211
# temporary - because change IP
#if [ `hostname -s` = "srv7" ]
#then
# ${FwCMD} add fwd 91.227.16.17,80 tcp from any to 77.73.29.17 80
#fi
#if [ `hostname -s` = "srv9" ]
#then
# ${FwCMD} add fwd 91.227.16.19,80 tcp from any to 77.73.29.19 80
#fi
#if [ `hostname -s` = "srv2" ]
#then
# ${FwCMD} add fwd 91.227.16.12,80 tcp from any to 77.73.29.12 80
#fi
#if [ `hostname -s` = "srv8" ]
#then
# ${FwCMD} add fwd 91.227.16.18,80 tcp from any to 77.73.29.18 80
#fi
#if [ `hostname -s` = "srv1" ]
#then
# ${FwCMD} add fwd 91.227.16.11,80 tcp from any to 77.73.29.11 80
#fi
# Ограничиваем кол-во подключений с одного IP
${FwCMD} add allow tcp from any to me 21 setup limit src-addr 8
${FwCMD} add allow tcp from any to me 80 setup limit src-addr 32
${FwCMD} add allow tcp from any to me 443 setup limit src-addr 16
if [ "`hostname -s`" != "srv0" ]
then
# limit all ports
${FwCMD} add allow tcp from any to me setup limit src-addr 32
# ограничиваем число одновременных соединений наружу с сервера на 25 порт других
# серверов, для всех кроме юзера mailnull
${FwCMD} add allow log logamount 100000 tcp from me to not me 25 not uid mailnull setup limit src-addr 1
else
# unlimit connects to mysql
${FwCMD} add allow tcp from any to me not 3306 setup limit src-addr 32
${FwCMD} add allow tcp from any to me 3306 setup limit src-addr 50
fi
# added by lissyara 2009-10-04 in 01:44
${FwCMD} add allow tcp from any to any
${FwCMD} add allow udp from any to any
${FwCMD} add allow all from any to any
# включаем файрволл
${FwCMD} enable firewall
/sbin/sysctl net.inet.ip.fw.enable=1
# удаляем врменный файл
sleep 5 && rm -f $tmp.* &
# удаляем кору, если она есть
rm -f ipfw.core
очень сожалею что максимальный номер таблицы ограничен 127 =((
было бы колоссально удобно....
а так - подумываю что надо писать файлс соответсвиями, если понадобится номер порта больше 127
Re: Блокировка ip из файла
Добавлено: 2011-10-07 15:14:58
Вован
Bayerische
что то не катит твой вариант, я добавляю ip потом запускаю скрипт но с того ip я все равно могу пинговать свой сервак что считаю скрипт не отработал
Re: Блокировка ip из файла
Добавлено: 2011-10-07 18:38:34
Вован
Re: Блокировка ip из файла
Добавлено: 2011-10-07 20:18:41
Bayerische
Вован
Отрывок скрипта, что я привёл, лишь заполняет таблицу нужными значениями из файла. По поводу правил фаервола вопрос должен быть совсем в другом ключе, я его даже не касался.
Re: Блокировка ip из файла
Добавлено: 2011-10-07 22:16:02
Вован
Bayerische
Расскажи пожалуйста подробно что нужно сделать. Потому как я еще пока нуб в этих вопросах и только всему учусь ((((
Re: Блокировка ip из файла
Добавлено: 2011-10-07 22:49:53
Alex Keda
изучение, чтоит начать с хандбука, мануалов, изучения чужих скриптов
а ждать пока вам всё разжуют - можно бесконечно