воскресенье, 4 мая 2014 г.

Squid + SquidGuard: Блокирование TLD

Не знаю, как вам - а лично мне до смерти надоело ежедневно плодящиеся в домене .tv сайтцы с онлайновым видео руками заносить в бан-лист и отсылать урлы немцам для включения в бан-лист webtv.

Решил я забанить их кардинально и накрыть медным тазом весь TLD (Top Level Domain) .tv . Ибо нефиг на работе смотреть фильмы, работать надо. Дома и за свои деньги - что угодно, хоть в гамаке на лыжах. А тут - не надо. 

Все бы, казалось, просто. Напиши регулярку вида \.tv$, добавь ее в expressions в SquidGuard - и вуаля. 

Фиг вам, изба индейская.

Однако, оказалось, что выражения SquidGuard недостаточно могучи и не охватывают полноценного синтаксиса регулярных выражений. Следовательно, такое выражение мало что не работает - оно и делает неработоспособной всю цепочку, куда вам взбрендится ее добавить.

Гугл-фу не принесло традиционных результатов, поэтому пришлось медитировать. 

Удалось намедитировать два способа.

Способ первый, грубиянский.

Поскольку регулярные выражения прекрасно работают в ACL сквида, можно тупо добавить вот такой ACL:

# Block top level domains
acl block_tld dstdom_regex \.(tv|xxx)$
http_access deny block_tld

Работает прекрасно, плохо то - что работает без разбора на всех без исключения. :) Не очень изящно. Зато можно зарубить любые домены первого уровня и работает это выражение правильно. Любители мазохизма могут даже в файл вытащить регулярки и переблочить половину интернета. :)

Способ второй, правильный.

Вы-таки будете смеяться. Но забанить домен первого уровня в SquidGuard не просто - а очень просто.

Надо просто тупо написать в одной из баз по вашему выбору:


причем в файле domains. Не надо добавлять домены в expressions или urls - работать не будет. Добавьте их в domains. Скомпилируйте базы заново, перезапустите сквид - и привет, Verboten!


Можете добавить туда и другие домены первого уровня и перебанить к чертовой матери половину интернета. :)))))))

PS. Коллеги подсказывают - не забудьте забанить urlshorteners, а то будут обходить блок при помощи goo.gl. ;)