LinuxForum.Fans
Тема

блокировка ВКонтакте

Автор: dimonshef11 95 сообщений 28386 просмотров
#167186

А я вот хочу своей девушке отключить её долбаный Вконтакте :D

#167188
newzenon написал:
drBatty, Это короче что получается: nslookup в цикле натравливаем на blacklist.url - дальше прикручиваем твой парсер - чтобф в итоге получить blacklist.ip - файло со списком IP для блокировки.
Ну и потом загоняем в цепочку для iptables.
Вроде красиво должно получиться.... wink
Правда манипуляций не многовато?
ы. - ну и в cron всю конструкцию.

Не много ток осталось настроить скрипт и поставить пакет с nslookup.
Во время скрипта не надо всякие там файлы > Можно циклы :) Которые подставляют ип.
Это уже всё изобретенно но в коммерческих делах.

#167196
drBatty написал:

без проблем. Имеем
text
# cat vk.txt 
Server:        192.168.1.1
Address:    192.168.1.1#53

Non-authoritative answer: Name: vkontakte.ru Address: 93.186.224.240 Name: vkontakte.ru Address: 93.186.224.241 Name: vkontakte.ru Address: 93.186.224.242 Name: vkontakte.ru Address: 93.186.224.243 Name: vkontakte.ru Address: 87.240.188.249 Name: vkontakte.ru Address: 87.240.188.250 Name: vkontakte.ru Address: 87.240.188.252 Name: vkontakte.ru Address: 87.240.188.254

Выполняем

text
# X=`sed -rn '1,/^$/d;/^Address:\s+/s///p' vk.txt `

а потом

text
A=( $X )

всё.

text
# i=0; while [ "${A[$i]}" ]; do echo "${A[i]}"; (( i++ )); done
93.186.224.240
93.186.224.241
93.186.224.242
93.186.224.243
87.240.188.249
87.240.188.250
87.240.188.252
87.240.188.254

т.е. обычный массив с нужными ipшниками

Ещё раз - не получается у меня:

text
A=( $X )

это как?

#167197

drBatty, вот это в одну строку как?

text
# удаляем все пробелы, табуляцию и пустые строки
sed -i '
s/^[ \t]*//
s/[ \t]*$//
/./!d
' $BLACKLIST
#167198
newzenon написал:
Это короче что получается: nslookup в цикле натравливаем на blacklist.url

это отдельная задача. Её можно выполнять скажем раз в неделю.

Kettler написал:
Во время скрипта не надо всякие там файлы >

почему?

newzenon написал:
Ещё раз - не получается у меня:
newzenon написал:
это как?

а это точно /bin/bash, или всё-же /bin/sh ?

newzenon написал:
вот это в одну строку как?

зачем? чтоб никто не понял?

#167200
drBatty написал:

а это точно /bin/bash, или всё-же /bin/sh ?

Да тут мой косяк, щаз попробую .....

Галиматья получаеццо.

text
if [ -f $BLACKLIST ]; then
    # удаляем все пробелы, табуляцию и пустые строки
    sed -i '
    s/^[ \t]*//
    s/[ \t]*$//
    /./!d
    ' $BLACKLIST
    while read line
    do
        rm /tmp/nslookup.tmp
        nslookup ${line} > /tmp/nslookup.tmp
        TMP=`sed -rn '1,/^$/d;/^Address:\s+/s///p' /tmp/nslookup.tmp`
           sed -i '
           s/^[ \t]*//
           s/[ \t]*$//
           /./!d
           ' /tmp/nslookup.tmp
        echo $TMP
        # echo "${line}"
        # iptables -t nat -A PREROUTING -d ${line} -j DNAT --to-destination 127.0.0.1
    done < $BLACKLIST
fi

exit

#167210

Всё сделал: Забирает обычные url-ы из /var/blacklist.url и создаёт распарсенный /var/blacklist.ip с IP адресами.

text
#!/bin/bash
BLACKLIST="/var/blacklist.url"

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 rm /tmp/blacklist.ip

cat /var/blacklist.ip

запускать

text
$ bash _наш_скрипт_.bash
#167252
newzenon написал:
запускать

$ bash _наш_скрипт_.bash

дык можно просто
[console]# chmod 0700 hosts2ip.bash
# ./hosts2ip.bash[/console]
не?

#167255

В итоге думаю для шлюза остановиться на таком.

text

#!/bin/bash
BLACKLIST="/var/blacklist.url"
n=1;

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 а точнее прохождение пакетов.

#167257

Ну мастера велосипедов то а :D
да анимайзеров чуть больше чем до хрена =)

#167258
i2ks написал:
Ну мастера велосипедов то а :D
да анимайзеров чуть больше чем до хрена =)

второй этап) демон проверяющий пакеты на слова.
типо
ngrep porno port 80

#167261
i2ks написал:
Ну мастера велосипедов то а :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 и блокировка.

#167263

Тогда так
iptables -t nat -I PREROUTING $n -d ${line} -j DNAT --to-destination 127.0.0.1

Просто в конец добавлять не есть правильно. Данные правила должны быть в начале.

#167267

Блин даже лучше не I а R тогда или делать сначала F

#167520

Решил сам всё таки разобраться вот что получилось.

text

    #!/bin/bash
    BLACKLIST="/var/blacklist.url"
    n=1;

if [ -f $BLACKLIST ]; then while read line do nslookup ${line} >> /tmp/nslookup.tmp; done < $BLACKLIST fi

awk '/Address:/ {if($2=="127.0.0.1#53"){} else{print $2 > "/var/blacklist.ip" }}' /tmp/nslookup.tmp

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

#167527

Kettler, а зачем n=1 и let n=n+1;?

#167532

Чтоб правило вставить по порядку
После повторного запуска мы просто заменим старые.
iptables -R FORWARD $n -d ${line} -j DROP

Если делать
iptables -A FORWARD -d ${line} -j DROP
то правила раздуются

Тут конечно есть нюанс щас думаю над этим.
Первый запуск надо
iptables -I FORWARD $n -d ${line} -j DROP

А дальнейшии
iptables -R FORWARD $n -d ${line} -j DROP

#167534

Для меня идеальный вариант
в сам 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

awk '/Address:/ {if($2=="127.0.0.1#53"){} else{print $2 > "/var/blacklist.ip" }}' /tmp/nslookup.tmp

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 #отправляем дальше на проверку

#167543

Kettler, не имхо нагородил огород, ну если нравиться...

text
if [ -f $BLACKLISTIP ] ;
then
    cat $BLACKLISTIP | while read line
do
    echo -en "${line}"
    iptables -D _правило_
    iptables -A _правило_
done
fi

При первом запуске правда ошибок навыдаёт.. if прикрутить.

Я себе вообще прописал в основной скрипт правил три строки:

text

if [ -f $BLACKLISTIP ] ;then cat $BLACKLISTIP | while read line; do  echo -en "${line} | ";
iptables -A _правило_ 
done; fi
#167548

ненравиться iptables -D и iptables -A.

Правила будут пухнуть. Или остатки.

Пример первый раз добавил 20 ип а второй раз 10. Куда денутся остальные?

Войдите или зарегистрируйтесь, чтобы ответить.