>Помогите разобраться вот с каким вопросом.
>
>Мажно ли выписать ресурсы Интернета к которым не должен поучать доступ пользователь
>в отдельный файл и как, при этом, нужно описать ссылку на
>файл в squid.conf?
>
>Заранее, спасибо... Есть два решения
1. Прокси-сервер SQUID
Прокси-сервер - это программа которая выполняет роль "прокладки" между браузером пользователя и WWW сервером. Через него проходят все запросы пользователя по протоколу http и ответы серверов пользователю. Он может фильтровать проходящий траффик по тем или иным признакам, а так же разграничивать доступ к интернету по протоколу http (в случае если используется непрозрачный прокси-сервер).
SQUID - пожалуй, самый лучший прокси под UNIX платформу. Есть сборки и для win32, но, на мой взгляд, это уже совсем не то :) Очень богатая функциональность:
— Поддержка протоколов HTTP, FTP, SSL, HTCP, CAPR
— Каскадирование серверов
— возможность прозраного проксирования
— поддержка протокола SNMP
кэширование DNS-запросов
Устанавливаем SQUID
#cd /usr/ports/www/squid
#make && make install && make clean
Парамерты отсавляем без изменения
По завершению установки создаем конфигурачионный фаил
#rm /usr/local/etc/squid/squid.conf
#ee /usr/local/etc/squid/squid.conf
http_port 3128
icp_port 0
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_mem 128 MB
maximum_object_size 8092 KB
maximum_object_size_in_memory 512 KB
cache_dir ufs /home/squid/cache 2048 64 256
cache_access_log /home/squid/log/access.log
cache_log /home/squid/log/cache.log
cache_store_log /home/squid/log/store.log
cache_mgr kialeon@tmn.sng-proekt.ru
visible_hostname http://rusgazen.ru
tcp_outgoing_address 200.168.1.200
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
redirect_program /home/squid/redirector.pl
redirect_children 10
acl all src 0.0.0.0/0.0.0.0
acl allowed_sites dstdomain "/home/squid/allowed_sites.conf"
acl limited_IP src "/home/squid/limited_IP.conf"
acl localhost src 127.0.0.0/8
acl our_networks src 192.168.0.0/23
acl denied_sites dstdomain "/home/squid/denied_ext.conf"
http_access deny denied_sites
http_access allow allowed_sites
http_access deny limited_IP
http_access allow our_networks
http_access allow localhost
http_access deny all
#httpd_accel_host virtual
#httpd_accel_port 80
#httpd_accel_uses_host_header on
coredump_dir /home/squid/cache
pid_filename /home/squid/log/squid.pid
Применчание:
tcp_outgoing_address 200.168.1.200 #Внешний IP
acl our_networks src 192.168.0.0/23 #IP сети которую выпускаем в инет
Это - самый минимум конфигурации, для прозрачного проксирования, и списков людей, которым можно посещать лишь малое количество сайтов (сайты описаны в файле allowed_sites.conf, а ip компов в файле limited_IP.conf), и списка сайтов на которые ходить нельзя никому (denied_ext.conf).
Далее создаем файлы описанные в конфиге
#mkdir -p /home/squid
#mkdir -p /home/squid/log
#mkdir -p /home/squid/cache
#touch /home/squid/allowed_sites.conf
#touch /home/squid/limited_IP.conf
#touch /home/squid/denied_ext.conf
#touch /home/squid/redirector.pl
#cd /home/squid
#chmod +x redirector.pl
#chown -R squid:wheel /home/squid/log/
#chod 777 /home/squid/cache
#echo 'squid_enable="YES"' >> /etc/rc.conf
#squid -z
2005/09/20 14:51:04| aclParseAclLine: WARNING: empty ACL: acl
2005/09/20 14:51:04| aclParseAclLine: WARNING: empty ACL: acl
2005/09/20 14:51:04| aclParseAclLine: WARNING: empty ACL: acl
2005/09/20 14:51:04| Creating Swap Directories
Всё нормально, не считая ругани на пустые файлы ACL. На это можно не обращать внимания, или забить туда какие-ньть адреса. Тогда он ругаться перестанет.
Вот содержимое файла /home/squid/redirector.pl
#ee /home/squid/redirector.pl
#! /usr/bin/perl
$0 = 'redirect' ;
$| = 1 ;
open (IN_FILE, "/home/squid/denied_ext.conf") || die $!;
my @tmp_data = <IN_FILE>;
chomp @tmp_data;
push @banners, map { qr /\Q$_\E/ } grep { ! /^\s*$/ } @tmp_data;
close IN_FILE;
while (<>) {
($url, $who, $ident, $method, $hz) = /^(\S+) (\S+) (\S+) (\S+) (\S+)$/ ;
$url = 'http://rusgazen.ru/'
if grep ($url=~/$_/i, @banners) ;
print "$url $who $ident $method\n" ;
}
Это простенький перловый скрипт, перебирающий переданный ему URL на соответствие шаблонам лежащим в файле denied_ext.conf, и если они подходят, то вместо этого УРЛа он отдаёт другой – http://rusgazen.ru по которому лежит мелкий рисунок серого цвета (белый неудобно - у меня до кучи он баннеры режет и белые дыры на страницах не смотрятся вообще...)
Ну, а теперь пристегните ремни, сейчас мы попробуем взлететь со всем этим хозяйством (копирайт из старого-старого анекдота):
#cd /usr/local/etc/rc.d/
#squid start
Starting squid.
2005/09/20 15:28:35| aclParseAclLine: WARNING: empty ACL: acl allowed_sites
2005/09/20 15:28:35| aclParseAclLine: WARNING: empty ACL: acl limited_IP
2005/09/20 15:28:35| aclParseAclLine: WARNING: empty ACL: acl denied_sites
#ps -ax | grep squid
73072 ?? Ss 0:00.00 /usr/local/sbin/squid -D
73074 ?? D 0:04.75 (squid) -D (squid)
73087 p0 D+ 0:00.00 grep squid
#ps -ax | grep perl
73075 ?? Is 0:00.03 redirect (perl)
73076 ?? Is 0:00.03 redirect (perl)
73077 ?? Is 0:00.03 redirect (perl)
73078 ?? Is 0:00.03 redirect (perl)
Всё нормально. Добавляем правило в файрволл (ipfw), до divert natd:
#ipfw add 100 fwd 127.0.0.1,3128 tcp from 192.168.0.0/23 to any 80 via em0
Где em0 - внешний интерфейс, и всё, можно работать. Если на ходу возникает необходимость переконфигурить squid то перезапускать необязательно, можно дать команду
#squid -k reconfigure
или
#killall -1 squid
Заполняйте файлы с разрешениями-запретами, и пользуйтесь. Клиентов настраивать не нужно - достаточно указать шлюзом по-умолчанию машину со squid - всё остальное сделает ipfw - перекинет пакеты на squid.
И второй
Собираем из портов SquidGuard
# cd /usr/ports/www/squidguard
Создаем конфигурационный фаил.
#ee /usr/local/etc/squid/squidGuard.conf
logdir /home/squid/SquidGuard/log
dbhome /home/squid/SquidGuard
src it-department { # описываем адреса отдела ИТ
ip 200.168.1.202-200.168.1.220
log it-department
}
src it-user { # Юзвери
ip 200.168.1.1-200.168.1.201
log it-user
}
src it-server { # Сервера
ip 200.168.0.1-200.168.0.254
log it-server
}
rewrite mp3 { #Константа подмены mp3
s@.*\.mp3$@http://s-proxy/block.mp3@r
log rewr_mp3
}
dest porn { #Описывам ПОРНО
expressionlist porn/1 #Обрезает по словам в адресной строке
domainlist porn/domains #Обрезает по доменам
urllist porn/urls #Обрезает по URL
log porn
}
acl { # начинаем раздавать права
it-department {
pass !porn all # отделу ИТ можно все
redirect http://200.168.0.1/deny.html
rewrite mp3
}
it-user {
pass all # Можно все кроме пормно mp3 и малоли что потом придумаю
redirect http://200.168.0.1/deny.html
}
it-server {
pass none # отделу ИТ можно все кроме рекламы
redirect http://200.168.0.1/deny.html
}
default { # действия выполняемые по умолчанию, если пользователь не описан ни в одном src
pass none # блокируем все
redirect http://200.168.0.1/deny.html
log default # пишем логи в файл /usr/local/squidGuard/log/default
}
} # закрываем список acl
Далее создаем файлы описанные в конфиге
#mkdir -p /home/squid/SquidGuard/log
#mkdir -p /home/squid/SquidGuard/
#cd /home/squid
#chown -R squid:wheel /home/squid/SquidGuard/
#chown -R squid:wheel /home/squid/SquidGuard/log
#chod 777 /home/squid/SquidGuard/
#chod 777 /home/squid/SquidGuard/log
Далее переносим базы с /var/db/squidGuard/ в /home/squid/SquidGuard/
и делаем всем перенесенным папкам и файлам права 777.
#chod 777 /home/squid/SquidGuard/porn
#chod 777 /home/squid/SquidGuard/porn/*
и так далее по всем каталогам.