The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Использование request_body_max_size в acl, !*! Slayeruga, 14-Май-09, 12:20  [смотреть все]
Здравствуйте.
В нашей организации запрещен интернет для пользователей во избежание утечки информации. Я решил обойти эту проблему, используя squid и попробывать дать интернет. Нашел в squid.conf параметр request_body_max_size и он реально блокирует отправку файлов большего размера, чем задам. Но этот параметр един для squid и штатными средствами нельзя использовать его в acl, а групп у меня 4. Ну, не запускать же 4 squid'а на одной машине?
Основная идея такова: 1 группе дать возможность отправлять файлы без ограничений; 2 группе ограничить request_body_max_size до 30кб, для возможности отправки сообщений на форумах; 3 группе дать возможность отправлять не более 3х мегабайт (отчетность в бухгалтерии); 4-ой группе дать request_body_max_size до 3кб, дав доступ чисто для открытия страниц (компьютер для общего доступа в интернет). Доступ в интернет дан только к белому списку сайтов, поэтому здесь исключается возможность использовать тунелль, который соединяет клиента с сайтом методом CONNECT или GET, что позволяет избежать обхода моих блокировок на отправку файлов.

Натолкнулся на основном сайте кальмара на вот такую темку: http://www.squid-cache.org/mail-archive/squid-users/200404/1...
Цитирую:

======================================================
> Can I use "request_body_max_size" inside a acl ?

There only is one single limit in this directive.

But it is possible to invent a new acl for this using the external acl
interface. request_body_max_size looks into the Content-Length request
header, available to external_acl_type as %{Content-Length}

This silly shell script should work

#!/bin/sh
while read line; do
  set -- $line
  length="$1"
  limit="$2"
  if [ "$length" -le "$2" ]; then
     echo OK
  else
     echo ERR
  fi
done

Use this as

external_acl_type request_body %{Content-Length} /path/to/above/script

acl request_max_20MB request_body 20971520

This acl can then be used in http_access to match requests up to the given
size. If you need different sizes just define new acls with different
limits in bytes (20971520 == 20480 * 1024 == 20480 KB)
============================================================

В сообщении видно, что возможно использовать внешний acl, используя парамерт которым может являтся обычный скрипт. Опция request_body_max_size в squid ищет параметр Content-Length, т.е. размер, в заголовке запроса и сравнивает его со своим параметром. Если размер заголовка больше, чем задано, то этот запрос блокируется. За внешние acl отвечает опция external_acl_type. Если создать скрипт, как описано выше и прописать его в external_acl_type, то squid нормально запускается и вместе с ним запускается 5 родительских процессов с названием этого скрипта, в моём случае он называется request_body.sh

external_acl_type request_body %{Content-length} /home/request_body.sh

Тут все нормально. Далее пытаюсь присвоить ему acl в squid.conf вот так:

acl request1 request_body 100000

И тут squid отваливается с такой ошибкой:

2009/05/14 14:10:49| aclParseAclLine: Invalid ACL type 'request_body'
FATAL: Bungled squid.conf line 104: acl request_body 100000
Squid Cache (Version 2.7 STABLE3): Terminated abnormally.

т.е., если я правильно понял, после определения внешнего acl, нужно присвоить acl со своим именем и параметром в байтах, в данном случае 100000 байт. Но squid падает с такими настройками. Кто-нибудь сталкивался с подключением внешних acl или видит где моя ошибка? уже 2 дня бьюсь.

P.s. Моя система Debian Lenny 5.0.1 и squid 2.7 STABLE3, установленный из apt.
P.p.s. Эта тема вроде затрагивалась на opennet, но найти я её не смог. А тема очень актуальна для многих организаций.

  • Использование request_body_max_size в acl, !*! ipmanyak, 11:29 , 21-Май-09 (1)
    Юзай тэг reply_body_max_size вместо того что ты пишешь!
    #  TAG: reply_body_max_size     bytes allow|deny acl acl...

    • Использование request_body_max_size в acl, !*! Slayeruga, 20:44 , 22-Май-09 (2)
      >Юзай тэг reply_body_max_size вместо того что ты пишешь!
      >#  TAG: reply_body_max_size     bytes allow|deny acl acl...
      >

      Этот тег у меня уже используется для этих 4-х групп, для ограничения размера скачиваемых файлов, а мне теперь требуется ограничить размер ОТПРАВЛЯЕМЫХ файлов через веб-формы. В том и вся загвоздка, что reply_body_max_size можно штатными средствами использовать в acl, а request_body_max_size - нет.

      P.s. Натолкнулся на программу-прокси для маниакальных админов :). Она умеет резать POST запросы указанных размеров, но умеет ли она использовать разные ограничения на разные группы? Пока читаю его маны и статьи, но определённо на этот вопрос ответить не могу..

      • Использование request_body_max_size в acl, !*! Slayeruga, 12:41 , 23-Май-09 (3)

        >P.s. Натолкнулся на программу-прокси для маниакальных админов :). Она умеет резать POST
        >запросы указанных размеров, но умеет ли она использовать разные ограничения на
        >разные группы? Пока читаю его маны и статьи, но определённо на
        >этот вопрос ответить не могу..

        Совсем упустил из вида - она называется "dansguardian".

  • Использование request_body_max_size в acl, !*! Direvius, 14:00 , 22-Сен-10 (4)
    Вместо acl request1 request_body 100000 пишите acl request1 external request_body 100000.
    • Использование request_body_max_size в acl, !*! Alex, 18:01 , 24-Ноя-11 (5)
      > Вместо acl request1 request_body 100000 пишите acl request1 external request_body 100000.

      У кого-то получилось???

      • Использование request_body_max_size в acl, !*! zabudkin, 08:21 , 24-Апр-12 (6)
        >> Вместо acl request1 request_body 100000 пишите acl request1 external request_body 100000.
        > У кого-то получилось???

        У меня получилось :)
        В скрипте меняем -le на -ge

        ----файл /etc/squid/postmaxsize ---
        #!/bin/sh
        while read line; do
          set -- $line
          length="$1"
          limit="$2"
          if [ "$length" -ge "$2" ]; then
            echo OK
            echo OK $line >>/etc/squid/postmaxsize.log
          else
            echo ERR
            echo ERR $line >>/etc/squid/postmaxsize.log
          fi
        done

        Перед самым первым http_access allow пишем:
        ----файл /etc/squid/squid.conf ---
        acl AllowAnyBodySize src 192.168.1.234 192.168.1.200

        external_acl_type request_body %{Content-Length} /etc/squid/postmaxsize

        acl request_max_30MB external request_body 30000000
        acl request_max_50Kb external request_body 50000

        http_access allow AllowAnyBodySize request_max_30Mb
        http_access deny all request_max_50Kb

        AllowAnyBodySize - список ip адресов кому разрешены POST запросы размером до 30 мегабайт.
        для остальных стоит ограничение в ~~50 Кбайт, чего вполне достаточно.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру