Примеры

Примеры описания объектов

Примеры описания категорий

Примеры правил

Примеры настроек обновления

Примеры лимитов

Пример создания шаблона

Пример отчета

Примеры скриптов


Примеры описания объектов

Для более удобного описания объектов создадим несколько файлов:

/home/admin/good_sites
www.good-site1.ru
www.good-site2.ru
www.good-site3.ru

/home/admin/music_by_ct
audio/midi
audio/mpeg
audio/x-realaudio
audio/x-wav
audio/x-mpegurl

/home/admin/do_log
#!/bin/sh
echo "$UCFP_DATE IP:$UCFP_IP URL:$UCFP_URL RES:$UCFP_RESULT Size:$UCFP_SIZE" >> /home/admin/ucfp_log

Приведем несколько примеров описания объектов, которые в дальнейшем будут использоваться в примерах правил:

name = mysite; type = urls; value = www.mydomain.ru;
comment = Мой сайт;

name = good-sites; type = urls; value = /home/admin/good_sites;
comment = Хорошие сайты;

name = bad-ip; type = urls; value = 111.111.111.111;
comment = Плохой ip-адрес;

name = my_network; type = clients; value = 10.0.0.0/8;
comment = Моя сеть;

name = some-users; type = clients; value = 10.0.0.2-10.0.0.22;
comment = Некоторые пользователи;

name = admin; type = clients; value = 10.0.0.1;
comment = IP аминистратора;

name = bad-user; type = clients; value = 10.0.0.13;
comment = Нехороший пользователь;

name = bosses; type = logins; value = boss,chief,papa;
comment = Директорат (логины);

name = music_ext; type = ext; value = mp3,wav,m3u;
comment = Расширения музыкальных файлов;

name = music_ct; type = ct; value = /home/admin/music_by_ct;
comment = Музыкальные типы контента;

name = pictures; type = ext; value = gif,jpg;
comment = Картинки;

name = log_notify; type = notify; value = /home/admin/do_log;
comment = Лог нарушителей;


Примеры описания категорий

Приведем несколько описаний предустановленных категорий:

name = viruses; type = list; block = db, tpl, tmp;
Блокировать вирусы по базе данных (db) и по результатам проверки антивируса (tpl), добавлять записи об обнаруженных вирусах в tmp-лист (tmp).

name = banners; type = list; block = db, url_parts;
Блокировать баннеры по базе данных баннерообменных сетей (db), а также блокировать все URL содержащие слова banner и baner (parts)(содержимое файла /usr/local/ucfp/parts/banners)

name = sport; type = list; block = db, tpl, url_parts, tmp;
Блокировать сайты спортивной тематики по базе данных (db) и по результатам проверки контента (tpl), добавлять записи об обнаруженных анализатором контента спортивных сайтах в tmp-лист (tmp).

name = humor; type = list; block = db;
Блокировать юмористические сайты только по базе данных (db).

Приведем несколько примеров создания собственных категорий:

  1. Администратор хочет использовать в правилах управления доступом ресурсы, содержащие в URL слово forum. Для этого необходимо создать следующую категорию:

    name = forums; type = list; parts = forum; block = url_parts; comment = Форумы;

  2. Администратор считает, что пользователи не должны посещать сайты, на которых более 2-х раз встречается слово badword. Для запрета доступа необходимо создать файл-шаблона для анализатора контента (См. раздел Примеры: Пример создания шаблона) с одним словом badword1 = 1, далее с помощью утилиты maketpl скомпилировать файл-шаблон например /home/admin/my.tpl, и создать категорию:

    name = badword_sites; type = list; tpl = /home/admin/my.tpl; threshold = 3; block = tpl;
    reason = Уважаемый пользователь! Доступ к этой странице запрещен, т.к. она содержит слово badword более двух раз;
    comment = Сайты содержащие badword;

  3. Сотрудникам компании должен быть запрещен доступ к сайтам конкурента (компания "Enemy"), а так же к сайтам рекламирующим и продающим продукцию конкурентов (продукты "Enemy_food", "Enemy_stuff" и "Enemy_drink"), при этом все сайты, содержащие запрещенный контент, неизвестны.

    Для блокировки нужно создать шаблон со словами enemy, enemy_food, enemy_stuff и enemy_drink и назначить им некоторые весовые коэффициенты (См. раздел Примеры: Пример создания шаблона), с помощью утилиты maketpl скомпилировать файл /home/admin/enemy.tpl, а также перечислить известные сайты конкурента в файле /home/admin/enemy.db. Далее описать категорию:

    name = enemy_sites; type = list; tpl = /home/admin/enemy.tpl; db = /home/admin/enemy.db;
    threshold = 100; parts = enemy; block = tpl, db, url_parts;
    reason = Сайты компании enemy;
    comment = Категория enemy;

  4. Администратор считает, что существующий анализатор контента недостаточно "жестко" блокирует порно-ресурсы, и желает для этих целей использовать свой шаблон /home/admin/my_porno.tpl, а также использовать стандартные для UCFP базы данных порно-ресурсов. Для этого администратор может создать свою категорию:

    name = my_porno; type = list; tpl = /home/admin/my_porno.tpl; db = porno;
    threshold = 100; block = db, tpl, dns_parts, tmp;
    reason = Порно;
    comment = Моя порнолочилка;

    или исправить параметр tpl у предустановленной категории porno:

    name = my_porno; type = list; tpl = /home/admin/my_porno.tpl;
    block = db, tpl, dns_parts, tmp;

Примеры правил

В правилах используются примеры объектов и категории рассмотренные выше.

Метод прочтения правила:

Запретить (do = deny) или разрешить (do = allow) доступ с клиентских компьютеров с IP-адресами clients и с логинами пользователей logins к запрашиваемому ресурсу размером более size байт, если происходит попытка применить method, а также ресурс принадлежит к одной из категорий lists или ресурс имеет адрес urls, тип контента ct или расширения файла ext. Помимо запрета/разрешения доступа выполнить скрипт notify. Перечисляемые значения каждого из параметров читаются через "или".
Если параметр не задан, то соответствующую ему часть правила нужно опустить.

Приведем несколько простейших однострочных правил:

  1. Осуществлять только антивирусную проверку всего трафика, используя настройки категории viruses, в случае обнаружения вируса доступ запретить и выполнить скрипт $mail (оповещение администратора по e-mail), иначе доступ разрешить:

    do = deny; lists = $viruses; notify = $mail;

  2. Запретить доступ ко всем ресурсам сайтов спортивной тематики, при попытке доступа выполнить скрипт, описанный объектом log (т.е. добавить соответствующую запись в файл /home/admin/my_log):

    do = deny; lists = $sport; notify = $log;

  3. Запретить показ картинок на порно-ресурсах, используя расширения графических файлов, указанные в объекте pictures:

    do = deny; lists = $porno; ext = $pictures;

  4. Полностью запретить метод POST:

    do = deny; method = POST;

  5. Лишить компьютеры с IP-адресами 10.0.0.10 и 10.0.0.11 доступа в интернет:

    do = deny; clients = 10.0.0.10, 10.0.0.11;

  6. Запретить пользователю с логином bad_user скачивать файлы более 1000000 байт:

    do = deny; logins = bad_user; size = 1000000;

  7. Запретить доступ ко всем ресурсам сайта www.bad-site.com и ко всем сайтам, имеющим IP-адрес объекта bad-ip:

    do = deny; urls = www.bad-site.com, $bad-ip;

  8. Отнести сайт bad-site.com к порно-ресурсам, т.е. к категории porno:

    do = deny; urls = www.bad-site.com; lists = $porno;

  9. Запретить пользователям с логинами vasya и pupkin с компьютеров, принадлежащих подсети 10.0.0.0/8, скачивать с музыкальных и порно сайтов файлы, размером более 1000000 байт, и расширениями указанными в объекте music_ext или типами контента указанными в объекте music_ct:

    do = deny; clients = 10.0.0.0/8; logins = vasya, pupkin; lists = $music, $porno; ct = $music_ct; ext = $music_ext; size = 1000000;

Используя метод прочтения, правило из последнего примера можно прочитать как:
запретить доступ с клиентских компьютеров подсети 10.0.0.0/8 и с логинами пользователей vasya или pupkin к запрашиваемому ресурсу размером более 1000000 байт, если ресурс принадлежит к категории music или porno, имеет тип контента, описанный в объекте music_ct или расширение, описанное в объекте music_ext запроса.

Также большое значение имеет порядок следования правил. Приведем несколько примеров:

  1. Проверять на вирусы весь трафик, кроме компьютера с IP-адресом 10.0.0.1:

    do = allow; clients = 10.0.0.1;
    do = deny; lists = $viruses;


  2. Проверять весь трафик на вирусы. После антивирусной проверки запретить всем доступ к сайтам всех категорий, но разрешить пользователю с логином boss доступ к порно-ресурсам:

    do = deny; lists = $viruses;
    do = allow; lists = $porno; login = boss;
    do = deny; lists = $porno, $amuse, $humor, $music, $video, $games, $sport, $books, $warez, $travel, $cigar, $medic, $cars, $dating, $pictures, $beauty, $job, $chat, $phones, $food, $horo, $ecards, $webmail, $banners;


  3. Запретить доступ в интернет всем компьютерам, кроме подсети, описанной в объекте my_networks, трафик которых проверять на вирусы:

    do = deny; clients = $my_network; lists = $viruses;
    do = allow; clients = $my_network;
    do = deny;


  4. Использовать по прямому назначению категорию white (не блокировать сайты данной категории и не проверять их на вирусы) и запрещать доступ к сайтам всех остальных категорий:

    do = allow; lists = $white;
    do = deny; lists = $viruses; $porno, $amuse, $humor, $music, $video, $games, $sport, $books, $warez, $travel, $cigar, $medic, $cars, $dating, $pictures, $beauty, $job, $chat, $phones, $food, $horo, $ecards, $webmail, $banners;


  5. Разрешить всем компьютерам, кроме администратора (объект admin), доступ только к сайтам, указанным в файле /home/admin/good_sites. Администратор должен иметь полный доступ ко всему:

    do = allow; clients = $admin;
    do = allow; urls = /home/admin/good_sites;
    do = deny;


  6. Запретить всем, кроме пользователей с логинами из объекта bosses качать архивы (расширения exe,zip,rar) более 5000000 байт. Все архивы проверять на вирусы.

    do = deny; logins = $bosses; ext = exe,zip,rar; lists = $viruses;
    do = allow; logins = $bosses; ext = exe,zip,rar;
    do = deny; size = 5000000;


  7. Запретить всем, кроме пользователей с логинами из объектов bosses и admin, оставлять сообщения на любых сайтах:

    do = allow; logins = $bosses, $admin; method = POST;
    do = deny; method = POST;


  8. Разрешить всем пользователям читать форумы и чаты , но оставлять сообщения в них разрешить только с компьютеров, перечисленных в объекте some-users:

    do = allow; lists = $chat, $forums; clients = $some-users; method = POST;
    do = deny; lists = $chat, $forums; method = POST;

Использование объектов в правилах совершенно необязательно. Т.е. можно задавать значения параметров правил и в явном виде:

do = allow; lists = $chat, $forums; clients = 10.0.0.2-10.0.0.22; method = POST;
do = deny; clients = 10.0.0.2-10.0.0.22; method = POST;

но в этом случае, когда понадобится, например, добавить еще один IP-адрес, которому разрешено оставлять сообщения в форумах и чатах придется исправлять 2 строки, а в случае использования объекта только одну.

Между понятиями "не проверять по определенной категории" и "разрешить доступ к сайтам определенной категории" есть некоторая разница. Например, для компьютера с IP-адресом 10.0.0.1 существует следующее правило:

do = deny; clients = 10.0.0.1; lists = $sport, $book;

Для того, чтобы не проверять запросы с 10.0.0.1 по категории sport (спортивные сайты) нужно просто убрать $sport, т.е.:

do = deny; clients = 10.0.0.1; lists =$book;

В этом случае доступ к сайту sport-referats.ru (рефераты о спорте) будет запрещен категорией books.

Для того, чтобы разрешить доступ с 10.0.0.1 ко всем сайтам категории sport, включая рефераты о спорте, нужно добавить разрешающее правило:

do = allow; clients = 10.0.0.1; lists = $sport;
do = deny; clients = 10.0.0.1; lists =$book;

В этом случае доступ к сайту sport-referats.ru будет разрешен.


Примеры настроек обновлений

viruses = strip_db, tpl, send;

Отсылать утилитой ucfpdb --send tmp-лист с ресурсами, на которых во время работы были обнаружены вирусы, в компанию "Риланс" (send) и обновлять базу данных вирусных сайтов (strip_db) и антивирусные базы (tpl) с помощью утилиты ucfpdb --get.

porno = strip_db, tpl, send;

Отсылать утилитой ucfpdb --send порно tmp-лист в компанию "Риланс" (send) и обновлять базу данных (strip_db) и списки слов для анализатора контента (tpl) порно-сайтов с помощью утилиты ucfpdb --get.

banners = strip_db;

Обновлять базы баннерообменных сетей с помощью утилиты ucfpdb --get (strip_db)

См. также Примечания: Обновление антивирусных баз и Примечания:Типы баз


Примеры лимитов

В правилах используются примеры объектов и категорий рассмотренные выше.

Метод прочтения правила лимита:

Установить ограничение по трафику с клиентских компьютеров с IP-адресами clients и с логинами пользователей logins в limit мегабайт за промежуток времени time. Перечисляемые значения каждого из параметров читаются через "или".
Если параметр не задан, то соответствующую ему часть правила нужно опустить.

Приведем несколько примеров правил лимита:

  1. Установить ограничение трафика в 100Мб/месяц для всех:

    limit = 100; time = 1m;

  2. Разрешить всем скачивать не более 10Мб в день, кроме компьютера с IP-адресов объекта admin, для которого ограничения нет:

    limit = 0; clients = $admin;
    limit = 10; time = 1;


  3. Установить ограничение 50Мб/неделю для всех и разрешить пользователю с логином vasya скачать 100Мб единовременно:

    limit = 100; logins = vasya;
    limit = 50; time = 1w;


  4. Не устанавливать ограничений для логинов из объекта bosses. Компьютерам с IP-адресами 10.0.0.8 и 10.0.0.12 установить ограничение 10Мб/месяц. Компьютерам с IP-адресами, описанными в объекте some-users, установить лимит 50Мб/неделю. Всем остальным компьютерам из подсети, описанной в объекте my_networks, установить ограничение 100Мб/месяц.

    limit = 0; logins = $bosses;
    limit = 10; time = 1m; clients = 10.0.0.8, 10.0.0.12;
    limit = 50; time = 1w; clients = $some-users;
    limit = 100; time = 1m; clients = $my_network;

Пример создания шаблона

В файле user_tpl содержатся следующие записи:

badword1 = 10
badword2 = 20
badword3 = 5

В конфигурационном файле у данной пользовательской категории параметр threshold = 50

Пользователь запрашивает html-страницу, которая помимо всего прочего содержит в себе указанные в user_tpl слова в таком количестве:

badword1 2
badword2 1
badword3 4

Умножая на весовые коэффициенты получаем 2*10+1*20+4*5=60, это значение больше указанного в threshold, значит данная страница попадает в user_tmp, т.е. будет отнесена к данной категории.

Слова в user_tpl задаются во всех русских кодировках. Для этого в состав дистрибутива входит скрипт maketpl, который используется следующим образом:

maketpl -i words.file -o user.tpl -l koi8-r

где words.file - файл с исходными словами, user.tpl - полученный файл-шаблон, koi8-r - исходная кодировка.

Если maketpl выдает ошибку:

Can't setup [ru_RU.koi8-r] locale: No such file or directory

это означает что не заданы настройки соответствующей локали. Установить их можно командами:

localedef -f koi8-r -i ru_RU ru_RU.koi8-r
localedef -f cp1251 -i ru_RU ru_RU.cp1251
localedef -f utf8 -i ru_RU ru_RU.utf8


Пример отчета

10.01.2004 12:30:00 10.0.0.2 - 200/GET 194.226.146.5 http://www.e1.ru/title.gif image/gif 512 yes allow -

10 января 2004 в 12:30 неавторизованный клиент с IP-адреса 10.0.0.2 обратился к ресурсу http://www.e1.ru и ему был передан файл title.gif размером 512 байт. Файл не был проверен ни антивирусом (например в настройках не указано проверять подобного рода файлы), ни анализатором контента, который анализирует только тектовые ресурсы. Сайт e1.ru не содержится в базах данный ни одной категории, поэтому доступ был разрешен.

10.01.2004 12:31:00 10.0.0.14 egor 200/GET 195.12.77.146 ftp://ftp.relans.ru/updates/101_45095.exe application/octet-stream 549222 yes allow KAV

Пользователь с логином egor с IP-адреса 10.0.0.14 обратился к ресурсу ftp://ftp.relans.ru и скачал файл updates/101_45095.exe размером 549222 байта. Файл был проверен, вирусов обнаружено не было. Ресурс relans.ru не запрещен ни одним из листов других категорий, поэтому доступ был разрешен.

10.01.2004 12:33:00 10.0.0.16 badguy 200/GET 195.12.77.146 ftp://ftp.relans.ru/test/eicar.com application/octet-stream 72 yes block Infected: EICAR-Test-File / (quarantined)

Пользователь с логином badguy с IP-адреса 10.0.0.16 обратился к ресурсу ftp://ftp.relans.ru и пытался скачать test/eicar.com размером 72 байта. В файле был обнаружен тестовый вирус, который был помещен на карантин. Антивирусная проверка была выполнена первой, поэтому проверки по всем другим категориям не производились.

10.01.2004 12:33:20 10.0.0.16 badguy 200/GET 195.12.77.146 ftp://ftp.relans.ru/test/eicar.com application/octet-stream 0 yes block Viruses temporary list

Пользователь с логином badguy с IP-адреса 10.0.0.16 повторно пытался скачать файл ftp://ftp.relans.ru/test/eicar.com, но, т.к. данный ресурс уже присутствует в текущем черном списке, ни единого байта передано не было.

10.01.2004 12:34:00 10.0.0.3 - 200/GET 81.176.69.78 http://www.avp.ru/index.html text/html 30451 yes allow White database

Неавторизованный клиент с IP-адреса 10.0.0.3 обратился к ресурсу http://www.avp.ru, адрес которого есть в белом списке антивирусной проверки (white_list), поэтому доступ был разрешен без каких-либо дополнительных проверок.

10.01.2004 16:22:00] 10.0.0.1 - 200/GET 194.87.11.112 http://porno.ru/index.html text/html 12524 yes block Porno database

Неавторизованный клиент с IP-адреса 10.0.0.1 обратился к ресурсу http://porno.ru/index.html. URL содержится в базе данных порносодержащих ресурсов. Доступ к ресурсу был заблокирован.

10.04.2004 19:04] 10.0.0.2 - 200/GET 194.87.11.112 http://www.porno.ru/ru/ text/html 12545 yes block Porno Template

Неавторизованный клиент с IP-адреса 10.0.0.1 обратился к ресурсу http://www.porno.ru/ru/, который в результате проверки контента по шаблонам был отнесен к порносодержащим ресурсам. Доступ к ресурсу был запрещен.


Примеры скриптов

Пример скрипта для получения ежедневной статистики на e-mail администратра

#!/bin/sh

yesterday=`date --date=yesterday +%d/%m/%Y`
/usr/local/ucfp/bin/ucfp -t
/usr/local/ucfp/bin/genstat -s -q -D $yesterday | mail -s "UCFP Stat: $yesterday" e-mail_адм-ра

Этот скрипт можно скопировать в cron.daily или прописать в crontab
0 0 * * * root имя_скрипта