Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: AdKiller - блокировщик рекламы  (Прочитано 2390 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Protopopulus

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1687
  • А чего вы так смотрите?..
    • Просмотр профиля
AdKiller - блокировщик рекламы
« : 18 Январь 2014, 02:05:20 »
(звон фанфар, барабанная дробь, зычным голосом) С тех незапамятных времен, кода нерадивые админы блокировали нежелательные сайты с помощью файла /etc/hosts (ну вы понимаете о ком я), многое изменилось - наступила эра netfilter-а!!! Представляем вашему вниманию (торжественная пауза) АааааааадКииииллллеееерррр!!!

Простейший bash-скрипт adkiller.sh, позволит сэкономить Ваше время и составит за Вас правила для iptables. В эти правила будут внесены все айпи-адреса неугодных Вам хостов таким образом, что у браузера не будет возможности ни отправки запроса, ни получения данных к какому-либо нежелательному сайту. Все, что от Вас потребуется - составить список хостов, с которыми Вы не желаете иметь дела.

Итак, пишем в файле blacklist следующие строки:
ya.ru
vk.com
google.ru
google.com
Далее, запускаем убийцу рекламы:
sudo adkiller.sh /path_to_blacklistИ плачем, ведь мы только что заблокировали себе ВКонтакт!!! :'(

А вот, собственно и сам скрипт:
#!/bin/bash

# Подготовка iptables

# Сбрасываем текущие правила блокировки, если есть
iptables -F ADKILLER
iptables -X ADKILLER

# Создаем цепь для блокируемых адресов
iptables -N ADKILLER

# Добавляем правила перенаправления
iptables -I INPUT 1 -j ADKILLER
iptables -I OUTPUT 1 -j ADKILLER

# Получаем имя файла с хостами для блокирования
ADS="$1"

# Если указан файл
if [ -n "$ADS" ]
then
    if [ -f $1 ]
    then
        # Для каждой строки в файле
        for HOST in `cat "$ADS"`;
        do
            # Узнаем IP-адреса хоста (их может быть больше одного)
            for HOST_ADDR in `host "$HOST" | awk '{print $4}' | sed 's/[a-zA-Z\:]//g'`
            do
                # Добавляем в цепочку ADKILLER IP-адреса хостов
                iptables -A ADKILLER -d "$HOST_ADDR" -j REJECT
                iptables -A ADKILLER -s "$HOST_ADDR" -j REJECT
            done
        done
    else
        echo "Файл \"$1\" не найден"
    fi
else
    echo "Использование: \"$0 имя_файла\""
    echo "Где \"имя_файла\" - список блокируемых хостов"
fi

# Добавляем возврат в предыдущую цепочку
iptables -A ADKILLER -j RETURN

exit 0

UPD: За сохранность сумок администрация ответственности не несет
« Последнее редактирование: 18 Январь 2014, 02:08:11 от Protopopulus »
Если ты владеешь знаниями, то и знания владеют тобой. (с) Protopopulus

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7169
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: AdKiller - блокировщик рекламы
« Ответ #1 : 18 Январь 2014, 02:27:40 »
Protopopulus, годно. Теперь GUI приделать и нубам скармливать.

Оффлайн Protopopulus

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1687
  • А чего вы так смотрите?..
    • Просмотр профиля
Re: AdKiller - блокировщик рекламы
« Ответ #2 : 18 Январь 2014, 02:32:13 »
Да ну, какое там "годно". За 10 минут накидал на коленке...
Если ты владеешь знаниями, то и знания владеют тобой. (с) Protopopulus

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7169
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: AdKiller - блокировщик рекламы
« Ответ #3 : 18 Январь 2014, 02:51:04 »
Protopopulus, учитывая сколько раз я встречал темы про блокировки URL и IP адресов, то для форума - годно.

Оффлайн Protopopulus

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1687
  • А чего вы так смотрите?..
    • Просмотр профиля
Re: AdKiller - блокировщик рекламы
« Ответ #4 : 20 Январь 2014, 01:29:15 »
Чуток допилил блокировщик. Теперь можно выбирать блокировать по имени хоста или по айпи адресам.
#!/bin/bash

# Подготовка iptables

# Сбрасываем текущие правила блокировки, если есть
iptables -F ADKILLER
iptables -X ADKILLER

# Создаем цепь для блокируемых адресов
iptables -N ADKILLER

# Добавляем правила перенаправления
iptables -I INPUT 1 -j ADKILLER
iptables -I OUTPUT 1 -j ADKILLER

# Выбираем режим блокировки
# "-ip" для блокировки по IP
# "-host" для блокировки по имени хоста

MODE="$1"

# Получаем имя файла с хостами для блокирования
ADS="$2"

# Если указан файл
if [ -n "$ADS" ]
then
# Если файл существует
if [ -f "$ADS" ]
then
if [ "$MODE" == "-ip" ]
then
for HOST in `cat "$ADS"`;
do
# Узнаем IP-адреса хоста (их может быть больше одного)
for HOST_ADDR in `host "$HOST" | awk '{print $4}' | sed 's/[a-zA-Z\:]//g'`
do
# Добавляем в цепочку ADKILLER IP-адреса хостов
iptables -A ADKILLER -d "$HOST_ADDR" -j REJECT
iptables -A ADKILLER -s "$HOST_ADDR" -j REJECT
done
done
fi

if [ "$MODE" == "-host" ]
then
for HOST in `cat "$ADS"`;
do
# Добавляем правила блокировки
iptables -A ADKILLER -m string --algo bm --string "$HOST" -j REJECT
done
fi
else
echo "Файл \""$ADS"\" не найден"
fi
else
echo "Использование: \""$0" [-ip|-host] имя_файла\""
echo "Где \"имя_файла\" - список блокируемых хостов"
fi

# Добавляем возврат в предыдущую цепочку
iptables -A ADKILLER -j RETURN

exit 0
« Последнее редактирование: 21 Январь 2014, 03:30:54 от Protopopulus »
Если ты владеешь знаниями, то и знания владеют тобой. (с) Protopopulus

 

Страница сгенерирована за 0.186 секунд. Запросов: 25.