Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Как запретить хосты из списка хостов для блокировщика рекламы и прочее? #822

Closed
maksam07 opened this issue Sep 9, 2022 · 5 comments

Comments

@maksam07
Copy link

maksam07 commented Sep 9, 2022

Добрый день.
Не так давно задался вопросом, что через прокси идет лишний трафик, который на машине, использующей прокси, по какой-то причине не отрезается, хотя на машине блокировщик рекламы настроен. В общем, в чем суть. Хочу при помощи списка доменов и "deny" в конфиге отрезать все лишнее.
Составил небольшой скрипт на питоне, который из файла для hosts делает мне файл для 'deny' (домены через запятую, без пробелов и пр.). Доменов более 200к. Столнкулся с проблемой, что оно почему-то не работает.

Проверяю блокировщик таким сервисом: https://d3ward.github.io/toolz/adblock.html

Проблема в том, что все блоки остаются красными (кроме одного, но он и без блокировки зеленый)
Я попробовал вручную добавить хосты из блока "Google Ads": pagead2.googlesyndication.com,ads.google.com,adservice.google.com,pagead2.googleadservices.com,googleadservices.com
И после этого блок стал зеленый.
Но когда я использую свой сформированный список - блок красный. Хотя в списке есть все эти домены. То есть файл отсечения лишних доменов работает, но не при случае, когда я загружаю туда свой сформированный список.

Прикладываю сгенерированный список:
list.txt

Просьба подсказать, в чем может быть проблема.

@z3APA3A
Copy link
Collaborator

z3APA3A commented Sep 15, 2022

Длина строки не должна превышать 64К.
Можно разбить на несколько deny, убирающихся в лимит.
В таком случае лучше использовать PCREPlugin и блокировать через pcre request deny "//(host1|host2|host3)" (не забыв экранировать точки)
потому что PCRE компилирует выражение и это будет работать быстрей, чем поиск по подстрокам в обычном deny. Наверняка можно сильно сократить список если использовать список регулярок, а не хостнеймов.
Так же можно создать много записей типа

nscache 100500
nsrecord host1 0.0.0.1
nsrecord host2 0.0.0.1

задав достаточно большой nscache (чтобы в него гарантировано поместились все записи). Это выглядит громоздко, но на самом деле будет работать быстро, потому что для запиcей используется хеш-таблица. Список можно держать в отдельном файле, включать через include

@z3APA3A z3APA3A closed this as completed Sep 15, 2022
@maksam07
Copy link
Author

Попробовал вариант с nscache и nsrecord. На счет эффективности, по сравнению с другими, говорить ничего не буду, просто выбрал тот, который проще всего.
Тест был на основе такого конфига (кусок конфига):

...
nscache 800000
include /file.txt
...
deny * * 0.0.0.1
...

Собственно, в файле почти 800к строк, типа: nsrecord domain.com 0.0.0.1

Чекеры рекламы: https://d3ward.github.io/toolz/adblock.html и https://checkadblock.ru/
Выдают результаты: около 95/100 и около 75/100 соответственно.
Результат вполне хороший.
Спидтест был близок к моему тарифу интернета. Загрузка различных страниц вроде бы тоже на хорошем уровне. Сам сервер, где настраивался прокси, довольно слабый, всего 1 ядро и 1 озу (взял самое дешевое, что было). Средняя загрузка озу наверное окло 200мб.

Собственно вопрос:
При таком кол-ве строк мне есть о чем беспокоиться? Может быть в будущем какие-то проблемы вылезут? Или уже сейчас будут периодически появляться?
В остальном пока вопросов никаких, вариант решения проблемы более чем приемлемый

@z3APA3A
Copy link
Collaborator

z3APA3A commented Sep 16, 2022

Конфигурация немного дольше читаться будет, но влиять это ни на что не должно.

@maksam07
Copy link
Author

Она читается единожды при запуске или есть какая-то периодичность? Если единожды при запуске, то даже с 800к строками и на таком слабом сервере, сервис доволь быстро запускается. Тут главное, чтобы конфигурация не читалась при каждом обращении к сайтам, а то каждый раз чекать 800к доменов - может быть уже проблематично, я думаю)

@z3APA3A
Copy link
Collaborator

z3APA3A commented Sep 16, 2022

Сама по себе - не пересчитывается

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants