drBatty, Это короче что получается: nslookup в цикле натравливаем на blacklist.url - дальше прикручиваем твой парсер - чтобф в итоге получить blacklist.ip - файло со списком IP для блокировки.
Ну и потом загоняем в цепочку для iptables.
Вроде красиво должно получиться.... wink
Правда манипуляций не многовато?
ы. - ну и в cron всю конструкцию.
Не много ток осталось настроить скрипт и поставить пакет с nslookup.
Во время скрипта не надо всякие там файлы > Можно циклы :) Которые подставляют ип.
Это уже всё изобретенно но в коммерческих делах.
if [ -f $BLACKLIST ]; then
# удаляем все пробелы, табуляцию и пустые строки
sed -i '
s/^[ \t]*//
s/[ \t]*$//
/./!d
' $BLACKLIST
while read line
do
nslookup ${line} > /tmp/nslookup.tmp
X=`sed -rn '1,/^$/d;/^Address:\s+/s///p' /tmp/nslookup.tmp`
A=( $X )
i=0; while [ "${A[$i]}" ]; do echo "${A[i]}"; (( i++ )); done >> /tmp/blacklist.ip
done < $BLACKLIST
fi
mv /tmp/blacklist.ip /var/blacklist.ip
if [ -f /var/blacklist.ip ] ;
then
cat /var/blacklist.ip | while read line
do
echo "${line}"
iptables -I FORWARD $n -d ${line} -j DROP
let n=n+1;
echo $n;
done
fi
Правильнее
iptables -I FORWARD $n -d ${line} -j DROP
let n=n+1;
Иначе правило могут не сработать.
Например так не сработают.
iptables -P FORWARD -j DROP
iptables -A FORWARD -s 192.168.0.0/24 -o ppp0 -j ACCEPT
#или даже так
iptables -A FORWARD -s 192.168.0.0/24 -o ppp0 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -d ${line} -j DROP
Почему курим man iptables а точнее прохождение пакетов.
Ну мастера велосипедов то а :D
да анимайзеров чуть больше чем до хрена =)
Однака это не мешает многим коммерческим продуктам делать свои фильтры, да и вообще на на каждую хитрую **** есть болт с обратной резьбой - и действует это правило в обе стороны. :lol:
Так что без таких велосипедов прогресс встанет.
drBatty написал:
дык можно просто
[console]# chmod 0700 hosts2ip.bash
# ./hosts2ip.bash[/console]
не?
Да. да. да.
Kettler написал:
Правильнее
iptables -I FORWARD $n -d ${line} -j DROP
let n=n+1;
Иначе правило могут не сработать.
Например так не сработают.
iptables -P FORWARD -j DROP
iptables -A FORWARD -s 192.168.0.0/24 -o ppp0 -j ACCEPT
#или даже так
iptables -A FORWARD -s 192.168.0.0/24 -o ppp0 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -d ${line} -j DROP
Тут уже на вкус и цвет, мне с PREROUTING нравиться, вообще лучше пользовательскую цепочку создать.
И я так думаю парсер этот должен быть отдельным скриптом, а в фаерволле только забор ip и блокировка.
if [ -f /var/blacklist.ip ] ;
then
cat /var/blacklist.ip | while read line
do
echo "${line}"
iptables -R FORWARD $n -d ${line} -j DROP
let n=n+1;
echo $n;
done
fi
Для меня идеальный вариант
в сам firewall вставляем 2 строки
iptables -N check_ip # Создаем цепь для соц сетей
iptables -I FORWARD 1 -s $lan -o $inet -j check_ip #отправляем на проверку на наличие запрещённых сетей
Скрипт будет таким.
text
#!/bin/bash
BLACKLIST="/var/blacklist.url"
n=1;
iptables -F check_ip
if [ -f $BLACKLIST ]; then
while read line
do
nslookup ${line} >> /tmp/nslookup.tmp;
done < $BLACKLIST
fi
if [ -f /var/blacklist.ip ] ;
then
cat /var/blacklist.ip | while read line
do
echo "${line}"
iptables -I check_ip $n -d ${line} -j DROP # дропаем
let n=n+1;
echo $n;
done
fi
iptables -A check_ip -j RETURN #отправляем дальше на проверку