Squid url_regex реклама порно ban резать Rejik
Основная проблема при зарезании рекламмы - найти списки URL и подготовить их, чтобы Squid правильно воспринял. Такие списки можно составить и самостоятельно. Предлагаю свой подход для решения задачи зарезания рекламмы на основании ban-листа
Rejik-ban-banners и
acl Squid url_regex.
Получаем ban-лист
Предположим, выбрали для хранения ban-листа следующую папку:
/usr/local/etc/squid
, тогда выполните следующую последовательность действий:
Код: Выделить всё
cd /usr/local/etc/squid
fetch http://rejik.ru/adblock
mv adblock adRejik
chown -R squid:squid adRejik
Подготавливаем ban-лист для Squid
Чтобы использовать скачаный ban-лист в Squid, сначала его надо подготовить. Следующий ниже скрипт на Perl преследует вышеобозначенную цель подготовки ban-листа для Squid:
ee /usr/local/etc/squid/ustakanim.pl
Код: Выделить всё
#!/usr/bin/perl -w
#Проверим передали ли файл как параметр
die "ERROR: peredaj skriptu parametr v vide imeni faila!!!\n" unless @ARGV;
#Открытие, чтение и закрытие файла блокировок рекламы Adblock
open(F1, $ARGV[0]) or die "ERROR: ne mogu otkrit\' fail\nTi che tam peredal hot\' ponyal sam\?\n";
@file = <F1>;
close(F1) or die $!;
#Откроем файл, куда будем складывать обработанные строки
open(FOUT, ">adRejik") or die "ERROR: cann't create new file\n";
## ...Идея->Тюрьма->Идея...:
## Подготовка Rejik'ского бан-листа для плагина Adblock браузера Firefox так,
## чтобы он корректно воспринялся ACL'ом url_regex прокси сервера Squid в
## качестве регулярного выражения.
#
# после ненапряжного зрительного и еще какого-то (незнаю как это назвать) анализа
# в режиковском бан-листе были выявлены следующие левые паттерны:
# (1)СИМВОЛЫ$domainСИМВОЛЫ
# (2)СИМВОЛЫ$КОНЕЦСТРОКИ
## Самый главный цикл
foreach $tekSTR (@file){
chop $tekSTR;
# паттерн (1)СИМВОЛЫ$domainСИМВОЛЫ буду ловить по "$d"
if ($tekSTR =~ /^(.+)\$d/) {
print FOUT MetasimvolLiteral($1),"\n";
}
# паттерн (2)СИМВОЛЫ$КОНЕЦСТРОКИ получается практически автоматом
elsif ($tekSTR =~ /^(.+)\$/) {
print FOUT MetasimvolLiteral($1),"\n";
}
# все остальные строки
elsif ($tekSTR =~ /[^\$]/) {
print FOUT MetasimvolLiteral($tekSTR),"\n";
}
}
## Функция:
# Если сочтет строку нерегулярным выражением, то заэкранирует Метасимволы
sub MetasimvolLiteral {
$in = $_[0];
# 1. Если в строке нет ни одного сопадения на экранирование, то строку
# будем анализировать на совпадение с Метасимволами и экранировать их
if ($in !~ /\\/){
# ТОЧКА .
$in =~ s/\./\\\./g;
# СЛЭШ /
# хоть кажется он и не является метасимволом, заэкранирую все же... на всякий случай...
$in =~ s/\//\\\//g;
# ВОПРОС ?
$in =~ s/\?/\\\?/g;
# ЗВЕЗДОЧКА *
$in =~ s/\*/\.\+/g;
return $in;
}
# 2. В противном случае строка считается регулярным выражением
# и ничего делать не будем
else {
return $in;
}
}
close(FOUT);
Выполним скрипт, передав ему режиковский ban-лист:
Код: Выделить всё
#chmod 744 /usr/local/etc/squid/ustakanim.pl
#/usr/local/etc/squid/ustakanim.pl adRejik
По идее ban-лист теперь можно считать подговленный для использования его в Squid, но на вашем месте я бы не лишал себя чувства здорового подозрения
Настраиваем конфигурацию Squid
Чтобы заблокировать доступ к ресурсам, перечисленным в ban-листе, надо конфигурацию Squid видоизменить так:
Код: Выделить всё
...
acl adRejik url_regex "/usr/local/etc/squid/adRejik"
...
http_access deny adRejik
...
не забывайте, что http_access deny adRejik надо ставить над всеми http_access, чтобы резалось все в самом начале.
========================
Я был бы очень признателен, если бы кто-нибудь шаристый подверг скрипт яростной, раздалбливающей все в пух и прах с целью добирания до истины в виде правильноработающего скрипта, критике.
-----
Всегда Ленин
Алексей Николаевич,
специально для Леночки

---------------------------------
май 2010, на улице солце прямо в глаз
третий этаж, палата номер 13 (направо), между Наполеоном и Архимедом (есть подозрение, что Архимед пидарас... Надо назюкать Гитлера из 6й, случайно проболтавшись ему, что мама Архимеда была истиная еврейка... пусть потом разбираются чья кровь Голубее).