URL-фильтрация по спискам в SQUID
Прежде всего создадим файл списка. Располагаться он может в любом месте, но будет логично разместить его в конфигурационной директории squid - /etc/squid (или /etc/squid3 если вы используете squid3)
touch /etc/squid/blacklist
и приступим к его заполнению. При указании URL следует использовать RegExp синтаксис, мы не будем подробно останавливаться на этом вопросе, так как это выходит за рамки статьи, подробнее с правилами RegExp можно ознакомиться здесь. Для примера заблокируем популярные соцсети:
vk\.com
odnoklassniki\.ru
Обратите внимание, точка в RegExp является служебным симоволом и поэтому должна быть экранирована символом \ (обратный слеш).
В конфигурационном файле squid (/etc/squid/squid.conf) создадим acl список, в который включим хосты или пользователей, для которых будет производиться фильтрация.
acl url_filtred src 10.0.0.100-10.0.0.199
В нашем случае фильтрация включена для всех хостов в диапазоне адресов 10.0.0.100-199, т.е. мы будем фильтровать интернет только для определенной группы пользователей.
Затем подключим наш список:
acl blacklist url_regex -i "/etc/squid/blacklist"
Ключ -i указывает на то, что список нечувствителен к регистру.
Теперь перейдем в секцию правил и перед правилом
http_access allow localnet
укажем:
http_access deny blacklist url_filtred
Еще раз обратим ваше внимание, что все правила в squid обрабатываются последовательно, до первого вхождения, поэтому если мы разместим более общее правило перед более частным, то оно работать не будет. То же самое справедливо и для перекрывающихся правил - сработает самое первое.
Сохраним изменения и перезапустим squid:
service squid restart
Попробуем посетить сайт из списка, если все сделано правильно, то вы увидите сообщение squid о запрете доступа к данному ресурсу.
В дальнейшем вы можете дополнять списки, не забывая каждый раз после этого перезапускать squid.
Рассмотрим немного иную ситуацию, требуется фильтровать интернет для всех, кроме определенной группы. В этом случае создадим acl для исключенных пользователей:
acl url_no_filtred src 10.0.0.127 10.0.0.100
и изменим запрещающее правило следующим образом:
http_access deny blacklist !url_no_filtred
Также вы можете использовать несколько URL-списков и списков доступа, гибко регулируя доступ для разных групп пользователей.
Вернемся к регулярным выражениям. Допустим, что нам нужно заблокировать не ресурс целиком, а его часть, тогда составим строку таким образом, чтобы она обязательно содержала нужную часть адреса, например строка:
my\.mail\.ru
Заблокирует доступ к социальной сети Мой мир, но не будет препятствовать доступу к Майл.ру.
В качестве строки можно использовать не только доменное имя, но и его часть. Так если мы внесем в список простую строку
mail
то это приведет к блокировке всех ресурсов, у которых данное сочетание входит в доменное имя, т.е. и mail.ru и hotmail.com. Поэтому к составлению списков, особенно содержащих короткие простые сочетания, нужно подходить осторожно.
Рассмотрим простой, но показательный пример. Допустим нужно заблокировать известный сайт auto.ru и его поддомены. Если мы, не долго думая, напишем
auto\.ru
То вместе с требуемым порталом будут заблокированы все сайты имеющие данное сочетание в имени, например abc-auto.ru. Есть о чем задуматься. Если с поддоменами все просто, достаточно написать
\.auto\.ru
и все что содержит точку перед искомым адресом будет заблокировано, то с основным доменом сложнее, самое время вспомнить про полный формат адреса:
http\:\/\/(www\.)?auto\.ru
Теперь будут заблокированы только адреса начинающиеся с http://auto.ru, конструкция (www\.)? обозначает, что префикс www c точкой могут быть, а могут не быть. Зато другие сайты, содержащие auto.ru будут нормально открываться.
Напоследок рассмотрим еще одну ситуацию, как сделать, чтобы на заблокированом сайте были доступны некоторые страницы. Например, страничка компании в Вконтакте или вы хотите обезопасить определенные адреса от случайного попадания под фильтр в будущем. Для этого следует добавить к системе "белый" список. Создадим файл списка:
touch /etc/squid/whitelist
внесем в него нужные адреса, для примера разблокируем страничку Вконтакте новостного портала Утро.ру:
vk\.com\/na_utro_ru
Подключим лист:
acl whitelist url_regex -i "/etc/squid/whitelist"
и добавим правило перед запрещающим, в итоге должно получиться:
http_access allow whitelist
http_access deny blacklist url_filtred
Так как разрешающее правило расположено раньше, то указанные в "белом" листе ресурсы будут доступны, несмотря на то, что будут попадать под правила "черного".
Как видим, технология URL-фильтрации по спискам при помощи squid очень проста и позволяет в кратчайшие сроки ограничить доступ к нежелательным ресурсам, ниже приведен набор используемых нами списков, которыми вы можете воспользоваться.
http://interface31.ru/tech_it/2013/09/squid-nastraivaem-url-filtraciyu-po-spiskam.html
|