The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Подкиньте примерчик,NATD "
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"Подкиньте примерчик,NATD "
Сообщение от Stiki emailИскать по авторуВ закладки on 03-Апр-03, 12:05  (MSK)
2 неделю мучаюсь с natd, не хочет пускать в нет, ниукого нет примеров ограничения по ip, выборочно ?
192.168.1.5 пускать, а 192.168.1.11 непускать
Просто divert all from any  в нет пускает, а вот по ip никак
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Подкиньте примерчик,NATD "
Сообщение от Nikolaev D. emailИскать по авторуВ закладки on 03-Апр-03, 12:30  (MSK)
>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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Подкиньте примерчик,NATD "
Сообщение от Stiki emailИскать по авторуВ закладки on 03-Апр-03, 12:34  (MSK)
>>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" стоит

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Подкиньте примерчик,NATD "
Сообщение от Nikolaev D. emailИскать по авторуВ закладки on 03-Апр-03, 12:39  (MSK)
>Щас буду пробовать, есть ещё такой вопрос: я складываю всё в 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 вначале не забудь.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Подкиньте примерчик,NATD "
Сообщение от Stiki emailИскать по авторуВ закладки on 03-Апр-03, 12:48  (MSK)
>В файле /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 и тд ?!

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Подкиньте примерчик,NATD "
Сообщение от Nikolaev D. emailИскать по авторуВ закладки on 03-Апр-03, 12:52  (MSK)
>>В файле /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 ты создаешь сам с нуля.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Подкиньте примерчик,NATD "
Сообщение от Stiki emailИскать по авторуВ закладки on 03-Апр-03, 12:56  (MSK)
>>>В файле /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 ты создаешь сам с нуля.


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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Подкиньте примерчик,NATD "
Сообщение от Stiki emailИскать по авторуВ закладки on 03-Апр-03, 18:16  (MSK)
Тут это наткнулся на интересную статью, думаю многим убудет интересно:

Создание прозрачного 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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "Подкиньте примерчик,NATD "
Сообщение от Stiki emailИскать по авторуВ закладки on 03-Апр-03, 18:18  (MSK)
И это:

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/blacklists.tar.gz
·http://ftp.teledanmark.no/pub/www/proxy/squidGuard/contrib/blacklists.tar.gz
Вы получаете папки:
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&clientname=%n
&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&clientname=%n
&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&clientname=%n
&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&clientname=&
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&clientname=&
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&clientname=&
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&clientname=&clientident=&
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&clientname=&
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&clientname=&
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 автоматически будет преобразовывать их при загрузке (замедляет загрузку).

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




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

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