Главная Файлы Форум Галерея Гостевая книга Обратная связь Карта сайта Поиск
 

 

Моё место работы

СитиСервис
  • Заправка и ремонт лазерных картриджей
  • Ремонт любых принтеров и копиров
  • Оригинальные и совместимые картриджи
  • Доставка бесплатно (от 2-х картриджей)
  • Накопительная система расчётов для корпоративных клиентов
Телефон
+7 (4722) 373-983
8-980-326-01-23
Адрес E-mail
mybelpost@gmail.com

Привет, Гость

Войти
Идентификация
Я забыл свой пароль
Регистрация

Разделы -> Статьи -> Debian GNU/Linux -> Скрипты для фильтра ...

Скрипты для фильтра контента dansguardian

Вынес отдельно свои скрипты для фильтра контента dansguardian, чтобы не раздувать статью "Установка и настройка DHCP, DNS (Dnsmasq, isc-dhcp-server), прокси-сервера (squid), фильтра контента (dansguardian) под Debian-7.5 Wheezy"

Все скрипты одним архивом можно скачать здесь.

bash-скрипт добавления доменных имён в белый список



Данному скрипту доменное имя передаётся в виде параметра. Т.е. вот так:

whitedomadd.sh odnoklassniki.ru

Или списком доменных имён разделённых пробелом
Или списком из файла, к примеру:

whitedomadd.sh $(/bin/cat /путь/к_файлу/с_вводимыми_доменами)

Внимание! В скрипте предусмотрено некоторое исправление синтаксиса входных данных, но это не значит, что я всё пердусмотрел и в выходной файл попадут доменные имена записанные правильно.
Т.е. вводимые данные должны быть максимально приближены к синтаксису списков dansguardian: одна строка - одно доменное имя без http://, www. и т.д. (копипаст из адресной строки браузера в скрипте обрабатывается правильно).

Переменная file_black содержит путь к файлу чёрного списка с высоким приоритетом.
Переменная my_black содержит путь к файлу чёрного списка с низким приоритетом.

Если при добавлении доменного имени в белый список имеется совпадение с доменами включёнными в файл чёрного списка с высоким приоритетом, то такое доменное имя игнорируется - не добавляется в белый список.

Если при добавлении доменного имени в белый список имеется совпадение с доменами включёнными в файл чёрного списка с низким приоритетом, то такое доменное имя добавляется в белый список и удаляется из файла чёрного списка с низким приоритетом.

Переменные file_black и my_black могут быть пустыми и тогда сверка добавляемого доменного имени с чёрными списками не производится.

Перед добавлением доменное имя проходит проверку на доступность по HTTP-коду 200.
Кириллические доменные имена кодируются в формат понятный DG.
#!/bin/bash
###################################################################
# Скрипт добавления доменов в белый список /etc/dansguardian/lists/exceptionsitelist
# Сценарию можно передавать как одиночные доменные имена или url, так и многочисленные разделённые пробелом
# или файл (одна строка - одно доменное имя).
# Пример: whitedomadd.sh $(/bin/cat /путь/к_файлу/дополнительных_доменных_имён)
#
# Внимание! В скрипте предусмотрено некоторое исправление синтаксиса входных данных, но это не значит, что я
# всё пердусмотрел и в выходной файл попадут доменные имена записанные правильно.
# Т.е. вводимые данные должны быть максимально приближены к синтаксису списков dansguardian: одна строка - одно доменное имя
# без http://, www. и т.д. (копипаст из адресной строки браузера в скрипте обрабатывается правильно).
#
# Переменная file_black содержит путь к файлу чёрного списка с высоким приоритетом.
# Переменная my_black содержит путь к файлу чёрного списка с низким приоритетом.
# 
# Если при добавлении доменного имени в белый список имеется совпадение с доменами включёнными в файл
# чёрного списка с высоким приоритетом, то такое доменное имя игнорируется - не добавляется в белый список.
# 
# Если при добавлении доменного имени в белый список имеется совпадение с доменами включёнными в файл
# чёрного списка с низким приоритетом, то такое доменное имя добавляется в белый список и удаляется из
# файла чёрного списка с низким приоритетом.
#
# Переменные file_black и my_black могут быть пустыми и тогда сверка добавляемого доменного имени
# с чёрными списками не производится.
###################################################################

IFS=$'\t\n';

file="/etc/dansguardian/lists/exceptionsitelist"; # Путь к файлу белого списка
file_black="/etc/dansguardian/lists/blacklists/roskomnadzor/domains"; # Путь к файлу чёргого списка с высоким приоритетом
my_black=""; # Путь к файлу чёрного списка с низким приоритетом

timeout="30"; # Время ожидания ответа от сервера теоретически приютившего сайт

useragent="Mozilla/5.0 (X11; Linux i686; rv:42.0) Gecko/20100101 Firefox/42.0"; # маскируем curl под Firefox

function f_add () {
    cod=$(curl -s --connect-timeout $timeout --max-time $timeout -A "$useragent" -L -I "$1" | grep "HTTP" | tail -n 1 | awk '{ print $2 }');
    if [[ "$cod" != 200 ]]; then
        echo "$(date "+%d.%m.%Y %H:%M:%S") Предупреждение: $1 не отвечает. Пропускаем.";
    else
        echo "$1" >> $file;
        echo "$(date "+%d.%m.%Y %H:%M:%S") $1 добавлен в белый список";
        if [[ -f "$my_black" ]] && [[ $(grep -x "$1" $my_black != "") ]]; then
            sed -i "/$1/d" $my_black;
            echo "$(date "+%d.%m.%Y %H:%M:%S") Внимание! $1 удалён из $my_black";
        fi
    fi
}

function f_sort () {
# Сортировка дополненного списка
    m=0;
    for i in $(/bin/cat $file); do
        mass[$m]=$i;
        let m=m+1;
    done
    echo ${mass[@]} | sed 's/ /\n/g' | sort -u > $file;
    if [[ $(whoami) = "root" ]]; then
        echo -e "$(date "+%d.%m.%Y %H:%M:%S") Перезапуск dansguardian и squid";
        service dansguardian stop;
        service squid stop;
        service squid start;
        service dansguardian start;
    fi
}

if [[ -f $(which curl) ]] && [[ -f $(which idn2) ]]; then
    echo -e "$(date "+%d.%m.%Y %H:%M:%S") Старт добваления доменнов в $(basename $file)\n";
    if [[ "$#" != 0 ]]; then
        for dom in $@; do
# Проверка и добавление доменных имён
            test_dom=$(echo "$dom" | sed 's/^.*http:\/\///; s/^.*https:\/\///; s/^\^\.\*//; s/^\.\*//; s/^\.*//; s/^www\.//; s/\/.*$//' | idn2);
            if [[ -f "$file_black" ]]; then
                if [[ $(grep -x "$test_dom" $file_black) = "" ]]; then
                    f_add "$test_dom";
                else
                    echo "$(date "+%d.%m.%Y %H:%M:%S") Внимание! $test_dom в чёном списке Роскомнадзора. Пропускаем.";
                fi
            else
                f_add "$test_dom";
            fi
        done
        f_sort
    else
        echo -e "Ничего не введено. Будет выполнена только сортировка\n$file";
        f_sort
    fi
    echo -e "\n$(date "+%d.%m.%Y %H:%M:%S") Скрипт $(basename $0) успешно завершил работу.";
else
    echo -e "$(date "+%d.%m.%Y %H:%M:%S") Ошибка: не установлено приложение curl или idn2\nУстановите curl и idn2 и запустите скрипт снова.";
fi


bash-скрипт добавления доменных имён в чёрный список


Скрипт позволяет добавлять доменные имена в чёрный список dansguardian
Переменная black_file содержит путь к файлу чёрного списка
Переменная white_file - путь к файлу белого списка
Если белый список не указан, то он использован в скрипте не будет.

Внимание! При добавлении доменного имени в чёрный список оно будет удалено из белого
Перед добавлением доменного имени в список проверяется его доступность по HTTP-коду 200
В скрипте предусмотрено некоторое исправление синтаксиса списков DG, но всё я предусмотреть не могу.
URL из адресной строки браузера воспринимается скриптом нормально, отбрасывается всё лишнее и добавляется в список.
Кириллические доменные имена кодируются в формат понятный DG.

#! /bin/bash
# Скрипт позволяет добавлять доменные имена в чёрный список dansguardian
# Переменная black_file содержит путь к файлу чёрного списка
# Переменная white_file - путь к файлу белого списка
# Если белый список не указан, то он использован в скрипте не будет.
#
# Внимание! При добавлении доменного имени в чёрный список оно будет удалено из белого
# Перед добавлением доменного имени в список проверяется его доступность, т.к. код 200
# В скрипте предусмотрено некоторое исправление синтаксиса списков DG, но всё я предусмотреть не могу.
# URL из адресной строки браузера воспринимается скриптом нормально, отбрасывается всё лишнее и добавляется в список.
#
IFS=$'\t\n';

black_file="/etc/dansguardian/lists/blacklists/mylist/domains";
white_file="/etc/dansguardian/lists/exceptionsitelist";

timeout="30"; # выставляем время ожидания ответа от сервера теоретически приютившего сайт

useragent="Mozilla/5.0 (X11; Linux i686; rv:42.0) Gecko/20100101 Firefox/42.0"; # маскируем curl под Firefox

function f_add () {
# Проверка на доступность домена указанного как параметр к функции
    cod=$(curl -s --connect-timeout $timeout --max-time $timeout -A "$useragent" -L -I "$1" | grep "HTTP" | tail -n 1 | awk '{ print $2 }');
    if [[ "$cod" != 200 ]]; then
        echo "Предупреждение: $1 в $(basename $black_file) не добавлен, т.к. от него не получен код 200";
    else
        echo "$1" >> $black_file;
        echo "$(date "+%d.%m.%Y %H:%M:%S") $1 добавлен в чёрный список";
        let con=con+1;
    fi
}

function f_sort () {
# Сортировка содержимого файла указанного как параметр для функции
    m=0;
    for i in $(/bin/cat $1); do
        mass[$m]=$i;
        let m=m+1;
    done
    echo ${mass[@]} | sed 's/ /\n/g' | sort -u > $1;
    echo "Выполнена сортировка $1";
}

function f_dgrestart () {
# Перезапуск dansguardian и squid
    echo -e "$(date "+%d.%m.%Y %H:%M:%S") Перезапуск dansguardian и squid";
    service dansguardian stop;
    service squid stop;
    service squid start;
    service dansguardian start;
}

if [[ -f $(which curl) ]] && [[ -f $(which idn2) ]]; then
    echo -e "$(date "+%d.%m.%Y %H:%M:%S") Старт добваления доменнов в $(basename $black_file)\n";
    if [[ "$#" != 0 ]]; then
        con=0;
        for dom in $@; do
# Проверка и добавление доменных имён
            test_dom=$(echo "$dom" | sed 's/^.*http:\/\///; s/^.*https:\/\///; s/^\^\.\*//; s/^\.\*//; s/^\.*//; s/^www\.//; s/\/.*$//; s/ *$//' | idn2);
            f_add "$test_dom";
            con2=0;
            if [[ -f "$white_file" ]]; then
                if [[ $(grep -x "$test_dom" $white_file) != "" ]]; then
                    sed -i "/$test_dom/d" $white_file;
                    echo "$test_dom удалён из $(basename $white_file).";
                    let con2=con2+1;
                fi
            fi
        done
        if [[ "$con" != 0 ]]; then
            f_sort "$black_file";
        fi
        if [[ "$con2" != 0 ]]; then
            f_sort "$white_file";
        fi
        if [[ "$con" != 0 ]] || [[ "$con2" != 0 ]]; then
            f_dgrestart
        fi
    else
        echo -e "Ничего не введено. Будет выполнена только сортировка\n$black_file";
        f_sort "$black_file";
        f_dgrestart
    fi
    echo -e "\n$(date "+%d.%m.%Y %H:%M:%S") Скрипт $(basename $0) успешно завершил работу.";
else
    echo -e "$(date "+%d.%m.%Y %H:%M:%S") Ошибка: не установлено приложение curl или idn2\nУстановите curl и idn2 и запустите скрипт снова.";
fi


bash-скрипт сравнения двух списков - чёрного и белого


Из белого списка удаляются совпадения с чёрным.
Назначение переменных в скрипте аналогично вышеприведённым.

#! /bin/bash
# Скрипт сравнения белого списка /etc/dansguardian/lists/exceptionsitelist с чёрным списком Роскомнадзора и Прокуратуры
#
IFS=$'\t\n';

file="/etc/dansguardian/lists/exceptionsitelist"; # Путь к сверяемому файлу.
file_black="/etc/dansguardian/lists/blacklists/roskomnadzor/domains"; # Путь к файлу чёрного списка доменов от Роскомнадзора и Прокуратуры
my_black=""; # Путь к дополнительному чёрному списку
# у которого приоритет выше, чем у белого /etc/dansguardian/lists/exceptionsitelist

function f_sort () {
# Сортировка дополненного списка
    m=0;
    for i in $(/bin/cat $file); do
        mass[$m]=$i;
        let m=m+1;
    done
    echo ${mass[@]} | sed 's/ /\n/g' | sort -u > $file;
}

if [[ -f "$file" ]]; then
    echo -e "Старт сверки $file с чёрными списками";
    com=0;
    if [[ -f "$file_black" ]]; then
        echo "Сверка с Федеральным чёрным списком.";
        for i in $(/bin/cat $file); do
            if [[ $(grep -x "$i" $file_black) != "" ]]; then
                sed -i "/$i/d" $file;
                echo -e "$i обнаружен в Федеральном чёрном списке. Из белого удалён.";
                let com=com+1;
            fi
        done
    else
        echo -e "Предупреждение: путь к Федеральному чёрному списку не указан или указан не правильно.\nДанную сверку пропускаю.";
    fi

    if [[ -f "$my_black" ]]; then
        echo "Сверка с дополнительным чёрным списком.";
        for i in $(/bin/cat $file); do
            if [[ $(grep -x "$i" $my_black) != "" ]]; then
                sed -i "/$i/d" $file;
                echo -e "$i обнаружен в дополнительном чёрном списке. Из белого удалён.";
                let com=com+1;
            fi
        done
    else
        echo -e "Предупреждение: путь к дополнительному чёрному списку не указан или указан не правильно.\nДанную сверку пропускаю.";
    fi

    if [[ $com != 0 ]]; then
        echo "Из белого списка удалено $com дом. им.";
        echo -e "$(date "+%d.%m.%Y %H:%M:%S") Перезапуск dansguardian и squid";
        service dansguardian stop;
        service squid stop;
        service squid start;
        service dansguardian start;
    else
        echo "Белый список изменён не был.";
    fi

else
    echo -e "Скрипт $(basename $0). Ошибка: не найден файл\n$file";
fi

echo -e "Скрипт $(basename $0) завершил работу.";


bash-скрипт проверки доступности сайтов


Скрипт проверяет доступность доменов из файла exceptionsitelist или любого другого списка доменов.
И если сервер не выдаёт код 200, то доменное имя удаляется из файла указанного в переменной file_src.
Перекодировка кириллических доменных имён в скрипте не осуществляется.

Переменная file_src - путь к обрабатываемому файлу
Переменная timeout - время ожидания ответа от сервера, на котором расположен проверяемый сайт
Для работы сценария необходимо наличие curl и доступа к и-нет.

#! /bin/bash
###################################################################
# Скрипт проверки доступности доменов из файла exceptionsitelist или любого другого списка доменов
# Просто запускаем скрипт и ждём пока отработает.
# В переменной file_src укажите путь к обрабатываемому файлу
# В переменной timeout укажите время ожидания ответа от сервера, на котором расположен проверяемый сайт
# Для работы сценария необходимо наличие curl и доступа к и-нет.
###################################################################

IFS=$'\t\n'; # меняем разделитель полей на случай пробелов в именах

file_src="/etc/dansguardian/lists/exceptionsitelist"; # путь к файлу со списком доменов
file_log="/tmp/$(basename $0).log"; # путь к файлу журнала сработки (по умолчанию в /tmp, т.к. особо не нужен)
timeout="30"; # выставляем время ожидания ответа от сервера теоретически приютившего сайт

useragent="Mozilla/5.0 (X11; Linux i686; rv:42.0) Gecko/20100101 Firefox/42.0"; # маскируем curl под Firefox

if [[ -f $(which curl) ]]; then
    if [[ -f "$file_src" ]]; then
        echo -e "$(date "+%d.%m.%Y %H:%M:%S") Старт проверки доступности доменов из списка $(basename $file_src)";
        echo -e "$(date "+%d.%m.%Y %H:%M:%S") Старт проверки доступности доменов из списка $(basename $file_src)" > $file_log;
# Проверка доступности доменов (ориентируемся по коду 200)
        for i in $(/bin/cat $file_src); do
            cod=$(curl -s --connect-timeout $timeout --max-time $timeout -A "$useragent" -L -I "$i" | grep "HTTP" | tail -n 1 | awk '{ print $2 }');
            if [[ "$cod" != 200 ]]; then
                sed -i "/$i/d" $file_src;
                if [[ "$cod" != "" ]]; then
                    echo "$i удалён по коду $cod" >> $file_log;
                    echo "$i удалён по коду $cod";
                else
                    echo "$i удалён по таймауту" >> $file_log;
                    echo "$i удалён по таймауту";
                fi
            fi
        done
# Сортировка списка
        m=0;
        for i in $(/bin/cat $file_src); do
            mass[$m]=$i;
            let m=m+1;
        done
        echo -e ${mass[@]} | sed 's/ /\n/g' | sort -u > $file_src;

        echo -e "$(date "+%d.%m.%Y %H:%M:%S") Перезапуск dansguardian и squid";
        service dansguardian stop;
        service squid stop;
        service squid start;
        service dansguardian start;

        echo -e "$(date "+%d.%m.%Y %H:%M:%S") Успешное завершение работы.";
        echo -e "$(date "+%d.%m.%Y %H:%M:%S") Успешное завершение работы." >> $file_log;
    else
        echo -e "$(date "+%d.%m.%Y %H:%M:%S") Ошибка: файл $file_src не найден.\n$(basename $0) завершил работу.";
        echo -e "$(date "+%d.%m.%Y %H:%M:%S") Ошибка: файл $file_src не найден.\n$(basename $0) завершил работу." >> $file_log;
    fi
else
    echo -e "$(date "+%d.%m.%Y %H:%M:%S") Ошибка: не установлено приложение curl.\nУстановите curl и снова запустите этот скрипт.";
    echo -e "$(date "+%d.%m.%Y %H:%M:%S") Ошибка: не установлено приложение curl.\nУстановите curl и снова запустите этот скрипт." >> $file_log;
fi
exit 0;




bash-скрипт исправления синтаксиса файлов с доменными именами


Этот bash-скрипт исправляет синтаксис в файле указанном в переменной dom_list.
Кириллические доменные имена кодируются в формат понятный DG.

#! /bin/bash
# Сценарий исправляет синтаксис файла содержащего доменные имена
# Переменная dom_list - путь к обрабатываемому файлу
# Всего предусмотреть не мог, но домены вставленные из адресной строки браузера исправляет.
#
dom_list="/etc/dansguardian/lists/exceptionsitelist";
ftmp="/tmp/exceptionsitelist";

if [[ -f $(which idn2) ]]; then
    sed -i 's/ //g; s/^http:\/\///g; s/^https:\/\///g; s/^www\.//g; s/\/.*//g' $dom_list;
    idn2 -l < $dom_list |sort -u > $ftmp;
    sed -i '/^$/d' $ftmp;

    mv $ftmp $dom_list;

    echo "Чистка и сортировка exceptionsitelist. Готово $(date)";
else
    echo "Не установлено приложение idn2. Скрипт $(basename $0) завершил работу."
exit 0;



Опубликовано: Константин, Автор/источник: Сакрюкин К.В. 21 Декабрь 2015 11:05:49

Комментировать

Вы не залогинены! Регистрация

Афоризмы, мысли

Философия Линукс: „Смейся в лицо опасности“. Ой, не то - „Сделай сам“! Да, правильно.

/Линус Бенедикт Торвальдс/

Счётчик

Сейчас на сайте - 1 (0 зарег.)
Всего хитов1104 
Сегодня хитов1104 
Сегодня хостов290 

Откуда гости наши?

 
Powered by ReloadCMS 1.5.0.
© 2004-2012 ReloadCMS Team
RSS AggregationPHP powered
Генерация страницы: 0.28
  Яндекс.Метрика
    Сакрюкин К.В.   Яндекс цитирования    
 
Здесь всё можно копировать и цитировать, но рабочая ссылка на мой сайт обязательна!