The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Подкиньте примерчик,NATD , !*! Stiki, 03-Апр-03, 12:05  [смотреть все]
2 неделю мучаюсь с natd, не хочет пускать в нет, ниукого нет примеров ограничения по ip, выборочно ?
192.168.1.5 пускать, а 192.168.1.11 непускать
Просто divert all from any  в нет пускает, а вот по ip никак
  • Подкиньте примерчик,NATD , !*! Nikolaev D., 12:30 , 03-Апр-03 (1)
    >2 неделю мучаюсь с natd, не хочет пускать в нет, ниукого нет
    >примеров ограничения по ip, выборочно ?
    >192.168.1.5 пускать, а 192.168.1.11 непускать
    >Просто divert all from any  в нет пускает, а вот по
    >ip никак

    Можно сделать разными способами. В этом примере заворачиваем на natd кому можно, остальных грохаем. $gw - внешний IP.
    $ipfw add 10000  divert natd ip from 192.168.1.5 to any out xmit rl0
    ipfw add 10100 deny ip from 192.168.1.11 to any out xmit rl0
    $ipfw add 11000  divert natd ip from any to $gw
    bla-bla-bla
    $ipfw add 65534 deny ip from any to any


    • Подкиньте примерчик,NATD , !*! Stiki, 12:34 , 03-Апр-03 (2)
      >>2 неделю мучаюсь с natd, не хочет пускать в нет, ниукого нет
      >>примеров ограничения по ip, выборочно ?
      >>192.168.1.5 пускать, а 192.168.1.11 непускать
      >>Просто divert all from any  в нет пускает, а вот по
      >>ip никак
      >
      >Можно сделать разными способами. В этом примере заворачиваем на natd кому можно,
      >остальных грохаем. $gw - внешний IP.
      >$ipfw add 10000  divert natd ip from 192.168.1.5 to any out
      >xmit rl0
      >ipfw add 10100 deny ip from 192.168.1.11 to any out xmit rl0
      >
      >$ipfw add 11000  divert natd ip from any to $gw
      >bla-bla-bla
      >$ipfw add 65534 deny ip from any to any


      Щас буду пробовать, есть ещё такой вопрос: я складываю всё в ipfw.sh и запускаю его, а если в rc.firewall ложить !? Вернее есть ли недостатки такого способа, firewall_type="open" стоит

      • Подкиньте примерчик,NATD , !*! Nikolaev D., 12:39 , 03-Апр-03 (3)
        >Щас буду пробовать, есть ещё такой вопрос: я складываю всё в ipfw.sh
        >и запускаю его, а если в rc.firewall ложить !? Вернее есть
        >ли недостатки такого способа, firewall_type="open" стоит

        В файле /etc/defaults/rc.conf
        делаешь
        firewall_script="/usr/local/etc/rc.firewall"    # Which script to run to set up the firewall
        На firewall_type="open"  можно забить.
        В  rc.firewall пишешь все правила.
        И $ipfw -f flush вначале не забудь.

        • Подкиньте примерчик,NATD , !*! Stiki, 12:48 , 03-Апр-03 (4)
          >В файле /etc/defaults/rc.conf
          > делаешь
          >firewall_script="/usr/local/etc/rc.firewall"    # Which script to run to set up
          >the firewall
          >На firewall_type="open"  можно забить.
          >В  rc.firewall пишешь все правила.
          >И $ipfw -f flush вначале не забудь.


          Тогда получается что всё содержимое файла можно очистить ?! Всякий мусор типа SIMPLE, CLIENT и тд ?!

          • Подкиньте примерчик,NATD , !*! Nikolaev D., 12:52 , 03-Апр-03 (5)
            >>В файле /etc/defaults/rc.conf
            >> делаешь
            >>firewall_script="/usr/local/etc/rc.firewall"    # Which script to run to set up
            >>the firewall
            >>На firewall_type="open"  можно забить.
            >>В  rc.firewall пишешь все правила.
            >>И $ipfw -f flush вначале не забудь.
            >
            >
            >Тогда получается что всё содержимое файла можно очистить ?! Всякий мусор типа
            >SIMPLE, CLIENT и тд ?!
            Файл /usr/local/etc/rc.firewall ты создаешь сам с нуля.

            • Подкиньте примерчик,NATD , !*! Stiki, 12:56 , 03-Апр-03 (6)
              >>>В файле /etc/defaults/rc.conf
              >>> делаешь
              >>>firewall_script="/usr/local/etc/rc.firewall"    # Which script to run to set up
              >>>the firewall
              >>>На firewall_type="open"  можно забить.
              >>>В  rc.firewall пишешь все правила.
              >>>И $ipfw -f flush вначале не забудь.
              >>
              >>
              >>Тогда получается что всё содержимое файла можно очистить ?! Всякий мусор типа
              >>SIMPLE, CLIENT и тд ?!
              >Файл /usr/local/etc/rc.firewall ты создаешь сам с нуля.


              Ой меня проглючило. Незаметил адресса.
              Ок, пасибки, щас посмотрим что с этого выйдет.

              • Подкиньте примерчик,NATD , !*! Stiki, 18:16 , 03-Апр-03 (7)
                Тут это наткнулся на интересную статью, думаю многим убудет интересно:

                Создание прозрачного firewall на основе FreeBSD.
                Межсетевой экран с возможностями фильтрации/ограничения пропускной способности трафика.


                Иногда полезно разделить одну физическую сеть (такую, как сегмент Ethernet) на два отдельных сегмента сети без необходимости создания подсетей IP и использования маршрутизатора для соединения сегментов. Устройство, которое соединяет две сети на такой манер, называется мостом. Система FreeBSD с двумя сетевыми адаптерами может выступать в роли моста.

                Мост работает на основе изучения адресов уровня MAC (адресов Ethernet) устройств на каждом из своих сетевых интерфейсах. Он перенаправляет трафик между двумя сетями, только когда адреса отправителя и получателя находятся в разных сетях.

                По многим параметрам мост работает также, как коммутатор Ethernet с малым количеством портов.


                Где же может применяться такой фильтрующий мост? Первое и самое очевидное - при подключении к провайдеру. Вот пример - вам выделили диапазон ip-адресов и выдали ethernet подключение к маршрутизатору провайдера, к которому вы доступа не имеете и который не выполняет абсолютно никакой фильтрации, а вам необходимо защитить свои сервера, создать DMZ... Конечно, сразу напрашивается решение - поставить програмный маршрутизатор на основе FreeBSD, выполняющий фильтрацию. Однако тут обычно и бывают сложности. Во-первых, у вас сразу уменьшится число ip-адресов на 2, т.к. маршрутизатору нужен адрес на каждый интерфейс и вам придется перекраивать выделенный блок ip-адресов, чтобы получить сеть с нормальной маской (возможно, даже теряя адреса). Во вторых, для установки маршрутизатора необходимо, чтобы провайдер прописал его на своем маршрутизаторе, чтобы тот был в курсе, куда посылать пакеты для вашего блока ip-адресов. Вот тут и придет на помощь мост с фильтрацией.


                Настройка моста


                1. Выбор сетевого адаптера
                Для работы моста требуются по крайней мере два сетевых адаптера. К сожалению, не все сетевые адаптеры во FreeBSD поддерживают функции моста. Прочтите страницу Справочника по bridge(4) для выяснения подробностей о поддерживаемых адаптерах.

                Перед тем, как продолжить, сначала установите и протестируйте два сетевых адаптера на работоспособность.

                2. Конфигурация ядра.

                options BRIDGE
                # Включим поддержку firewall
                options IPFIREWALL
                # для того, чтобы добавить возможность firewall вести логи
                # добавим параметр:
                options IPFIREWALL_VERBOSE

                # ограничим число пакетов, о которых ядро будет сообщать:
                options IPFIREWALL_VERBOSE_LIMIT=10

                #Если вы хотите использовать мост в качестве
                # машины, ограничивающей пропускную
                # способность, то добавьте в файл конфигурации
                # ядра опцию
                DUMMYNET

                #А для создания прозрачного прокси сервера опцию
                IPFIREWALL_FORWARD

                # Добавим еще парочку нужных параметров
                # ICMP_BANDLIM включает ограничение полосы для
                # ответов icmp error
                # Поскольку мы дадим мосту 1 ip-адрес,
                # этот параметр в некоторых случаях
                # помогает от D.O.S. атак.
                options ICMP_BANDLIM

                # Добавим также параметр, который заблокирует
                # перезагрузку системы при нажатии Ctrl+Alt+Del
                options SC_DISABLE_REBOOT


                3. Включение функций моста.

                Для того, чтобы запустить IPFirewall, необходимо добавить несколько параметров в /etc/rc.conf. Для начала опишем необходимые параметры, а затем приведем готовый фрагмент для вставки в rc.conf.

                Прежде всего необходимо добавить параметр
                firewall_enable="YES"
                Параметр firewall_script="/etc/rc.firewall" укажет, какой скрипт будет запускаться для активизации правил firewall. Следующим параметром будет firewall_type. Этот параметр показывает, какой тип firewall будет использоваться из заранее приготовленных разработчиками (open, client, simple, closed) или же имя файла, из которого будут браться правила для firewall, если не подходит ни один из заранее приготовленных типов. Мы создадим файл ipfw.rules со своими собственными правилами, посему поставим
                firewall_type="/etc/ipfw.rules"
                Также необходим параметр firewall_quiet. Если его поставить в YES, то при загрузке будет отключен вывод на экран правил firewall. Однако для начала лучше ему дать значение NO, чтобы видеть активируемые правила при загрузке. Парметр firewall_logging установим в YES для того, чтобы велись логи. Поскольку у нас машина с двумя сетевыми картами и чтобы она вдруг не заработала как маршрутизатор поставим
                gateway_enable="NO"
                Итого, у нас получилась следующая вставка в rc.conf:

                firewall_enable="YES"
                firewall_script="/etc/rc.firewall"
                firewall_type="/etc/ipfw.rules"
                firewall_quiet="NO"
                firewall_logging="YES"
                gateway_enable="NO"

                в файл /etc/sysctl.conf для включения функций моста во время работы системы. Если вы хотите, чтобы пакеты, проходящие через мост, фильтровались через ipfw(8), вы должны также туда добавить строчку

                net.link.ether.bridge_ipfw=1
                net.inet.ip.fw.one_pass=0
                net.inet.ip.forwarding=1
                net.link.ether.bridge=1


                4. Настройка правил для Firewall
                Создадим и отредактируем файл /etc/ipfw.rules, который мы указали в параметрах в rc.conf. Поскольку в конфиг ядра мы не добавляли параметр IPFIREWALL_DEFAULT_TO_ACCEPT, то ipfw по умолчанию не зависимо от наших настроек будет добавлять в конец правило 65535 deny ip from any to any. Поэтому мы должны разрешить все необходимые сервисы в нашем файле.

                Пусть у нас есть 2 интерфейса - xl0 и xl1. Для мостов приемлимым решением (а иногда и необходимым) является разрешение любого трафика на одном из интерфейсов и фильтрация входящего и исходящего на другом. Так и поступим - разрешим любой трафик на интерфейсе xl1, а фильтровать будем входящий на xl0.

                При работе моста есть еще одна особенность. Дело в том, что для корректной работы ip протокола необходимо использование протокола ARP. Если пакеты этого протокола не будут проходит через мост, то станции по разные стороны моста не смогут передавать друг другу пакеты, т.к. не будет выполняться преобразование ip-адресов в mac-адреса сетевых карт. ipfw имеет возможность ограничивать ethernet-протоколы. Для этого создается специальное правило для udp пакетов с адресом источника 0.0.0.0, а порт источника будет показывать номер ethernet-протокола. Таким образом можно заставить мост пропускать или не пропускать протоколы, отличные от IP. Для вышеупомянутого протокола arp правило будет выглядеть следующим образом:

                add allow udp from 0.0.0.0 2054 to 0.0.0.0

                Поскольку мы решили помимо фильтрации также использовать traffic shaper dummynet, напишем правило, ограничивающее, например, весь проходящий icmp-трафик (входящий+исходящй) на 50Кб/с:

                add pipe 1 icmp from any to any
                pipe 1 config bw 50Kbit/s queue 10

                Заметим, что в случае написания других правил для shaper'а, включающих в себя адресаузлов, сетей - их нужно ставить в самое начало нашего файла ipfw.rules. ipfw устроен таким образом, что пакет проверяется по правилам сверху вниз и как только находится правило, которому он удовлетворяет - проверка на соответствие другим нижестоящим правилам не производится. Таким образом, если пакет будет удовлетворять правилу фильтрации - он может не дойти до правил traffic shaper'а. Однако если первыми стоят правила шейпера, то существует возможность пропустить пакет по правилам, котрые стоят ниже правил шейпера. Для этого нужно установить переменную net.inet.ip.fw.one_pass=0.

                Програмируем переменные для нашей сети:

                наш сервер

                bridge="212.265.265.1"

                наша сеть

                net="212.265.265.0"
                mask="255.255.255.224"

                кому зарезаем пропускную способность канала:
                slow_1="212.265.265.10"
                slow_2="212.265.265.30"
                slow_1_speed="1024Kbit/s"
                slow_2_speed="2048Kbit/s"

                Добавим еще парочку правил, например, разрешающих прохождение входящего dns-трафика, обращений к web-серверу и icmp-трафика через интерфейс xl0. Также не забудем разрешить любой трафик через xl1:

                add 1000 allow tcp from any to any in via xl0 established
                add 1200 allow tcp from any to any domain in via xl0
                add 1300 allow udp from any to any domain in via xl0
                add 1400 allow udp from any domain to any 1024-65535 in via xl0
                add 1500 allow tcp from any to any www in via xl0
                add 1600 allow icmp from any to any
                add 1700 allow ip from any to any via xl1
                также добавляем правила прозрачного прокси сервера который расположен на этом компьютере
                add 1100 fwd 127.0.0.1,3128 tcp from $net:$mask to any 80

                Устанавливаем ограничения по траффику для клиентов
                pipe 10 config mask dst-ip 255.255.255.255 bw $slow_1_speed queue
                pipe 11 config mask dst-ip 255.255.255.255 bw $slow_2_speed queue
                add 910 pipe 10 tcp from any to $slow_1 via xl0
                add 911 pipe 11 tcp from any to $slow_2 via xl0
                Итого, наш итоговый файл /etc/ipfw.rules получился следующим:

                add pipe 1 icmp from any to any
                pipe 1 config bw 50Kbit/s queue 10
                pipe 10 config mask dst-ip 255.255.255.255 bw $slow_1_speed queue
                pipe 11 config mask dst-ip 255.255.255.255 bw $slow_2_speed queue
                add 0900 allow udp from 0.0.0.0 2054 to 0.0.0.0
                add 910 pipe 10 tcp from any to $slow_1 via xl0
                add 911 pipe 11 tcp from any to $slow_2 via xl0
                add 1000 allow tcp from any to any in via xl0 established
                #Пока отключаем эту функцию т.к. про конфигурацию прозрацного прокси сервера будет рассказано позднее
                #add 1100 fwd 127.0.0.1,3128 tcp from $net:$mask to any 80
                add 1200 allow tcp from any to any domain in via xl0
                add 1300 allow udp from any to any domain in via xl0
                add 1400 allow udp from any domain to any 1024-65535 in via xl0
                add 1500 allow tcp from any to any www in via xl0
                add 1600 allow icmp from any to any
                add 1700 allow ip from any to any via xl1


                Установка дополнительного П.О для анализа
                У нас получился полностью рабочий бридж, но ведь мы можем не только фильтровать пакеты, ограничивать скорость, но и считать трафик. Для этого нам понадабится программа IPFM которую можно поставить из портов (/usr/ports/net/ipfm) и скрипт написаный Гавриловым Анатолием для обработки вывода в веб данных IPFM.

                Устанавливаем IPFM
                cd /usr/ports/net/ipfm
                make
                make install
                make clean

                Теперь правим конфиг /usr/local/etc/ipfm.conf
                # Имя интерфеса для анализа
                DEVICE xl1

                #настройка статистики
                #Анализировать траффик от сети 10.1.1.0 но не к сети 10.1.0
                LOG 10.1.1.0/255.255.255.0 NOT WITH 10.1.0.0/255.255.0.0
                FILENAME /var/log/ipfm/daily/ipfm-%d.%m-%H.%M.%S
                # Лог записывать кадый 1 час
                TIME 1 hour
                SORT IN
                NORESOLVE

                ##### Вторичная конфигурация #####
                NEWLOG
                #log subnet 10.10.10.0 when not in relation with subnet 10.1O.0.0
                LOG 10.10.10.0/255.255.255.0 NOT WITH 10.10.0.0/255.255.0.0
                # do not log 10.10.10.10 when in relation with 10.10.10.20
                LOG NONE 10.10.10.10 WITH 10.10.10.20
                FILENAME /var/log/ipfm/weekly/ipfm-%d.%m-%H.%M.%S
                # Лог записывать кадые 7 дней
                TIME 7 day
                SORT IN
                NORESOLVE


                Функция NORESOLVE нужна для того чтобы наши клиенты отображались в качестве ИП а не имён хостов.
                Теперь в директории /var/log создаём директории weekly и daily.
                И создаём в директории /usr/local/etc/rc.d файл ipfm.sh в котором прописываем :

                #!/bin/sh
                /usr/local/sbin/ipfm -c /usr/local/etc/ipfm.conf


                теперь делаем chmod +x /usr/local/etc/rc.d/ipfm.sh
                Запускаем его. Теперь у нас считается статистика кто сколько накачал. Лог файлы IPFM выглядят так :


                HOST                                            IN            OUT          TOTAL
                10.1.1.110                                 4858300         802923        5661223
                10.1.1.12                                  4042790         401824        4444614
                10.1.1.28                                  3191423        1099193        4290616
                ...

                Это не совсем удобно, потомучто такой файл создаётся каждый час. Вы представьте у нас 24 часа в дне, и примерно 30 дней в месяце. Итого получаем 24*30=720 файлов. Поэтому мы будем использовать скрипт который будет обрабатывать эти файлы и выводить сумму. Для полноценной работы нам понадобится Веб сервер Apache поставить его можно из портов, /usr/ports/www/apache13 также как и предыдущюю программу. Скачиваем скрипт из секции cкачать->WEB утилиты->Lss. Распаковываем, кладём его в cgi-bin. Файл stat.html в data. Файл usesk.txt нужно положить в /var/log/ipfm/daily/ или подправить скрипт под себя.
                Формат файла usesk.txt таков:
                login;password;e-mail;Ф.И.О.;Группа;Limit;IP

                • Подкиньте примерчик,NATD , !*! Stiki, 18:18 , 03-Апр-03 (8)
                  И это:

                  SquidGuard - ДЛЯ ВСЕХ.

                  Эта статья - попытка разобраться с полезной на мой взгляд программой SquidGuard редиректа и фильтрации запросов Squid. SquidGuard предназначен для работы с proxy-сервером SQUID.

                  Возможности SquidGuard:

                  1) гибкая фильтрация запросов;

                  2) опознавание пользователей по IP-адресу или имени;

                  3) работа по расписанию;

                  4) обрезка (а точнее подмена) banners и т.д.

                  Я хочу рассмотреть только те элементы настройки SquidGuard, которые реально работают у меня . Думаю, большинству администраторов этого
                  будет достаточно.
                  Я администрирую работу с Интернет приложениями в учебном заведении. Общее количество машин - около 100. SquidGuard позволяет бороться с вредными наклонностями студентов (порнография,
                  чаты, агрессия, наркотики и т.д.), а также экономить трафик (рекламные банеры, mp3 и т.д.). В то же время отдельным пользователям можно позволить посещать всё или только список "хороших" сайтов.
                  Так, реклама прошла успешно, теперь к делу.

                  Любым способом устанавливаем пакет SquidGuard (например из портов).
                  Стандартно инсталляция проходит в папку /usr/local/SquidGuard.
                  Здесь создаются папки db, log и файлы squidGuard, squidGuard.conf
                  Качаем архив blacklists.tar.gz, распаковываем и полученные папки с файлами
                  выкладываем в папку db. Можно использоать адреса:
                  ·ftp://ftp.teledanmark.no/pub/www/proxy/squidGuard/contrib/bl...
                  ·http://ftp.teledanmark.no/pub/www/proxy/squidGuard/contrib/b...
                  Вы получаете папки:
                  ads - реклама (баннеры)
                  agressive - насилие
                  hacking - no comment
                  publicite - реклама
                  porn - no comment
                  warez - порно

                  В каждой папке могут быть файлы:
                  1. domains -список доменных имен :
                  sex.com
                  adult.com
                  216.185.108.1
                  (обращение ко всему домену)

                  2. expressions-список ожидаемых фрагментов слов в url : (sex|adult|lolita) (проверка на наличие указанных фраз в пути)

                  3. urls - no coment:
                  host.com/anus
                  12.10.220.125/alisa
                  (обращение к части домена)

                  Редактируем squidGuard.conf/

                  Все примеры взяты из реального conf - файла.
                  Поэтому несколько слов об окружении.
                  Имею:
                  FreBSD-4.5
                  Squid/2.4.STABLE3
                  Apache/1.3.20 - www.my.host
                  SquidGuard 1.1.4


                  Правим squidGuard.conf
                  # путь к лог директории
                  logdir /var/SquidGuard
                  # путь к базам
                  dbhome /usr/local/squidGuard/db

                  #готовим прикольную подмену для mp3 файлов

                  rewrite mp3 {
                  s@.*\.mp3$@http://www.my.host/my.mp3@r
                  }

                  # по адресу http://www.my.host/my.mp3 выложим свой mp3 - прикол (например:
                  #"Так мычит обычная корова ..")
                  #готовим диапазоны времени (нерабочее время)

                  time leisure-time {
                  weekly * 00:00-08:00 17:00-24:00 # ночь и вечер
                  weekly fridays 16:00-17:00 # + пятница с 16:00 до 17:00 (если у вас короткий день)
                  weekly sat sun 00:00-24:00 # + выходные
                  date*.01.01 # + Новый Год
                  # и т. д.
                  }

                  #Создаем группы

                  src kids {
                  ip 192.168.0.200 #любит качать mp3 (но канал не резиновый)
                  }
                  src student {
                  ip 192.168.0.1-192.168.0.45 #любят все (но не все стоит показывать)
                  }
                  src vasya {
                  ip 192.168.0.62 #просто Вася (chat,chat и еще раз chat)
                  }
                  src vasya2 {
                  ip 192.168.1.20 # просто Вася II (и ел бы "inet" ,и спал бы
                  #c "inet", а работать, когда!?! )
                  }
                  src comandor {
                  ip 192.168.4.170 192.168.1.1 #начальство (добавить нечего)
                  }
                  src my {
                  ip 192.168.0.100 #a это моя машинка
                  }


                  #Наша цель:
                  #Для :
                  # kids - обрезать файлы mp3;
                  # student - обрезать все неприличное и ненужное;
                  # vasya - в рабочее время отключить chat;
                  # vasya2 - в рабочее время отключить все кроме списка
                  # "хороших" адресов;
                  # my - мне можно все!!!
                  # для всех - убрать рекламу.
                  #
                  # Подключение баз.

                  dest pornography {
                  domainlist porn/domains
                  expressionlist porn/expressions
                  urllist porn/urls
                  }
                  dest warez {
                  domainlist warez/domains
                  urllist warez/urls
                  }
                  dest agressive {
                  domainlist agressive/domains
                  urllist agressive/urls
                  }
                  dest good {
                  domainlist good/domains
                  #список "хороших" адресов
                  #(составляется самостоятельно)
                  }
                  dest chat {
                  domainlist chat/domains #список "chat" адресов
                  #(составляется самостоятельно)
                  expressionlist chat/expressions #ожидаемые фразы
                  }
                  dest ads {
                  domainlist ads/domains
                  expressionlist ads/expressions
                  urllist ads/urls
                  redirect 302: http://www.my.host/Images/not_banner.gif
                  # адрес рисунка для подмены рекламных баннеров
                  }
                  dest drugs {
                  domainlist drugs/domains
                  urllist drugs/urls
                  }
                  dest hacking {
                  domainlist hacking/domains
                  urllist hacking/urls
                  }
                  #Начинаем описание кому чего можно
                  acl {

                  kids {
                  pass !ads all #все кроме рекламы
                  rewrite mp3 #подмена mp3 файлов на наш файл (смотри выше)
                  }

                  student {
                  pass !warez !chat !pornography !agressive !drugs !hacking !ads all
                  #все, кроме,warez,chat,pornography,agressive,drugs,hacking,ads
                  redirect http://www.my.host/cgi-bin/bl.cgi?clientaddr=%a&clientn...
                  &clientident=%i&clientgroup=%s&targetgroup=%t&url=%u
                  }

                  vasya within leisure-time {
                  pass !ads all #все, кроме рекламы, в нерабочее время
                  }
                  else
                  {
                  pass !chat !ads all #отключение chat-ов в рабочее время
                  redirect http://www.my.host/cgi-bin/bl.cgi?clientaddr=%a&clientn...
                  &clientident=%i&clientgroup=%s&targetgroup=%t&url=%u
                  }

                  vasya2 within leisure-time {
                  pass !ads all #все, кроме рекламы, в нерабочее время
                  }
                  else
                  {
                  pass good !ads all #ограничение разрешенных сайтов списком good в рабочее время
                  redirect http://www.my.host/cgi-bin/bl.cgi?clientaddr=%a&clientn...
                  &clientident=%i&clientgroup=%s&targetgroup=%t&url=%u
                  }

                  my {
                  pass all
                  }

                  comandor {
                  pass !warez !chat !pornography !agressive !drugs !hacking !ads all #покажем, что мы недаром кушаем хлеб
                  #pass all # все равно "попросят"
                  }

                  default { #для всех остальных
                  pass none
                  redirect http://www.my.host
                  log /var/SquidGuard/defoult.log
                  #и запишем в лог
                  }
                  }

                  Файл bl.cgi поставляется как squidGuard.cgi.in . Он выводит на экран симпатичный ответ в случае отказа на запрос.
                  Базы взяты из файла blacklists.tar.gz по адресу www.sguidguard.org SguidGuard выполняет redirect только на host, а не на файловую систему.
                  Предположим, что файл squidGuard.conf у нас готов.

                  У меня он лежит по пути /usr/local/bin/squidGuard.conf. Проверяем владельца и разрешения.
                  Для squidGuard и squidGuard.conf - владелец тот же, что и в squid.conf
                  прописан для cache_effective_user

                  Разрешения:
                  squidGuard 755
                  squidGuard.conf 644


                  Перед запуском squidGuard из под Squid-а , желательно протестировать его работу.

                  Тестируем.

                  Создаем исполняемый файл test и пишем
                  /usr/local/ squidGuard /squidGuard /usr/local/squidGuard/squidGuard/out -d
                  Из файла in будет чтение запросов, в файл out будет выведен результат.
                  Ключ -d - для режима отладки.
                  Создаем файл in. Как видно ниже, у него некий стандартный формат:

                  http://www.adult.com/live.mp3 192.168.0.200/- - GET #1
                  http://www.adult.com 192.168.0.200/- - GET #2
                  http://www.aport.ru 192.168.0.200/- - GET #3
                  http://www.sex.ru 192.168.0.10/- - GET #4
                  http://www.chat.ru 192.168.0.1/- - GET #5
                  http://www.k_k_k.com 192.168.0.20/- - GET #6
                  http://www.aport.ru 192.168.0.15/- - GET #7
                  http://adv.aport.ru:8000/banners/GOLDEN.gif 192.168.0.22/- - GET #8
                  http://www.chat.ru 192.168.0.62/- - GET #9
                  http://www.aport.ru 192.168.0.62/- - GET #10
                  http://adv.aport.ru:8000/banners/GOLDEN.gif 192.168.0.62/- - GET #11
                  http://www.sex.ru 192.168.0.100/- - GET #12
                  http://www.sex.ru 192.168.0.100/- - GET #13
                  http://www.chat.ru 192.168.0.100/- - GET #14
                  http://www.k_k_k.com 192.168.0.100/- - GET #15
                  http://www.aport.ru 192.168.0.100/- - GET #16
                  http://adv.aport.ru:8000/banners/GOLDEN.gif 192.168.0.100/- - GET #17
                  http://www.aport.ru 192.168.5.200/- - GET #18
                  http://www.mus.ru/live.mp3 192.168.0.227/- - GET #19

                  *Для удобства разбора полетов я справа пронумеровал строки.

                  Запускаем файл test в рабочее время. На экране получаем сообщения о загрузке баз, и в результате получаем файл out. В случае сообщения об ошибке в строке N## следует учитывать , что ошибка может быть в предыдущей строке!!!


                  302: http://www.my.host/my.mp3 192.168.0.200/- - GET #1
                  #2
                  #3
                  http://www.my.host/cgi-bin/bl.cgi?clientaddr=192.168.0.10&cl...
                  clientident=&clientgroup=student&targetgroup=pornography&url=http://www.sex.ru 192.168.0.10/- - GET #4
                  http://www.my.host/cgi-bin/bl.cgi?clientaddr=192.168.0.1&cli...
                  clientident=&clientgroup=student&targetgroup=chat&url=http://www.chat.ru 192.168.0.1/- - GET #5
                  #6
                  #7
                  302:http://www.my.host/Images/not_banner.gif 192.168.0.22/- - GET #8
                  http://www.my.host/cgi-bin/bl.cgi?clientaddr=192.168.0.62&cl...
                  clientident=&clientgroup=vasya&targetgroup=chat&url=http://www.chat.ru 192.168.0.62/- - GET #9
                  #10
                  302:http://www.my.host/Images/not_banner.gif 192.168.0.62/- - GET #11
                  #12
                  #13
                  #14
                  #15
                  #16
                  #17
                  http://www.my.host 192.168.5.200/- - GET #18
                  http://www.my.host 192.168.0.227/- - GET #19
                  Как видим, kids будет слушать "Корову ...". 2 ,3,6,7,10,12,13,14,15,16,17-ий запросы прошли без редиректа;
                  4, 5 - блокирование porno для студентов;
                  8, 11 - подмена баннера;
                  9 - блокирование chat-а для vasya;
                  18,19 - чужаки.

                  Изменив leisure-time, запускаем файл test для нерабочего времени .
                  В результате получаем файл out для нерабочего времени

                  302:http://www.my.host/my.mp3 192.168.0.200/- - GET
                  http://www.my.host/cgi-bin/bl.cgi?clientaddr=192.168.0.10&cl...
                  clientgroup=student&targetgroup=pornography&url=http://www.sex.ru 192.168.0.10/- - GET
                  http://www.my.host/cgi-bin/bl.cgi?clientaddr=192.168.0.1&cli...
                  clientident=&clientgroup=student&targetgroup=chat&url=http://www.chat.ru 192.168.0.1/- - GET

                  302:http://www.my.host/Images/not_banner.gif 192.168.0.22/- - GET

                  302:http://www.my.host/Images/not_banner.gif 192.168.0.62/- - GET

                  http://www.my.host 192.168.5.200/- - GET
                  http://www.my.host 192.168.0.227/- - GET

                  Как видим, vasya получил доступ к chat-ам

                  Теперь, разобравшись в этой кухне, вы можете написать свой Conf , протестировать его и запустить из под Squid-а.

                  Cтартуем из squid.
                  Добавляем в файл squid.conf.

                  redirect_program /usr/local/bin/squidGuard
                  redirect_children 3
                  redirector_bypass on # для случая, если все редиректы заняты - ломись напрямую, иначе squid слетает.

                  По идее все уже работает за исключением следующего:
                  1.Для строки подмены banners через редирект
                  http://www.my.host/Images/not_banner.gif нужно выложить файл
                  www.my.host/Images/not_banner.gif .
                  Это может быть ваш banner, logo или рисунок 1х1.

                  2.Для красивого ответа на запрет "строка вида"
                  http://www.my.host/cgi-bin/bl.cgi?clientaddr=192.168.0.1&cli...
                  clientident=&clientgroup=student&targetgroup=chat&url=http://www.chat.ru
                  нужно найти файл /usr/ports/www/squidguard/work/squidGuard-1.1.4/samples/squidGuard.cgi.in,
                  переименовать (например, bl.cgi) и подправить под свой host.
                  Выложить в свою web/cgi-bin и подправить путь для редиректа в файле squidGuard.conf

                  Теперь можно наслаждаться результатами своей работы.
                  В случае необходимости правим файлы domains,expressions и urls
                  ПРИМЕЧАНИЕ ! Если вы внесли изменения в файл domains или urls, то для вступления изменений в силу вам необходимо выполнить следующую команду
                  /usr/local/bin/squidGuard -C all
                  для создания файлов domains.db и urls.db.
                  Если лень, то удалите все файлы *.db, и squidGuard автоматически будет преобразовывать их при загрузке (замедляет загрузку).




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

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