FreeBSD + squidGuard + Apache + Squid + Berkeley DB
Бешков Андрей
tigrisha@regata.ru
Целью данных записок является создание простой в управлении и, в то же время, гибкой в настройке системы фильтрации интернет трафика. Строить мы ее будем на основе FreeBSD 4.5+ Squid + SquidGuard + Berkeley DB 3.2.9 + Apache.
В качестве кандидатов на место SquidGuard так же претендовали squirm и Jesred. От squirm пришлось отказаться, потому что список фильтрации поддерживается один на всех. По моему мнению, такое ограничение не позволяет использовать его в сетях средних и больших размеров.
Несмотря на то, что Jesred является модернизированным потомком squirm и имеет более гибкий синтаксис файла шаблонов, он все еще страдает от той же проблемы. Единственное улучшение в этой области - возможность пропускать запросы некоторых пользователей без фильтрации.
Я думаю, что нижеприведенных инструкций по настройке Apache и Squid хватит, что бы установить их в комплектации по умолчанию. Для получения более подробных сведений вам стоит сходить на следующие сайты:
В процессе сборки всего софта использовался gmake вместо стандартного make, но это уже вопрос личных предпочтений. Мне кажется, что gmake работает стабильнее и быстрее.
Ну что же, теперь когда с формальностями покончено, приступим к установке.
В качестве прокси я использовал squid 2.5.STABLE1. Взять его можно здесь.
# tar zxvf squid-2.5.STABLE1-src.tar.gz # cd squid-2.5.STABLE1 # ./configure # gmake # gmake install
После инсталяции редактируем конфиг squid, находящийся в /usr/local/squid/etc/squid.conf.
Должно получиться примерно следующее:
http_port 3128 hierarchy_stoplist cgi-bin ? acl QUERY urlpath_regex cgi-bin \? no_cache deny QUERY cache_mem 64 MB error_directory /usr/local/squid/share/errors/Russian-koi8-r maximum_object_size 16384 KB cache_dir ufs /usr/local/squid/cache 5000 16 256 cache_access_log /usr/local/squid/logs/access.log cache_log /usr/local/squid/logs/cache.log cache_store_log /usr/local/squid/logs/store.log ftp_user vasa@pupkin.ru quick_abort_pct 60 negative_ttl 1 minutes positive_dns_ttl 6 hours negative_dns_ttl 5 minutes half_closed_clients on acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl SSL_ports port 443 563 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 563 # https, snews acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT acl users src "/usr/local/squid/etc/users.txt" http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access allow users http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access deny all cache_mgr root@test.ru cache_effective_user nobody cache_effective_group nogroup forwarded_for on cachemgr_passwd passwd all client_db on
Обращаю внимание на строку acl users src "/usr/local/squid/etc/users.txt".
Она означает, что список пользователей, которым разрешен доступ к squid, находится
в файле /usr/local/squid/etc/users.txt
Этот файл имеет следующий формат:
#Петрова Наталья (Снабжение) 192.168.10.91/32 #Иванов Владимир (Доставка) 192.168.10.92/32 #Сергеев Игорь (Плановый отдел) 192.168.10.93/255.255.255.255 #Кривоухина Ирина (Лаборатория) 192.168.10.94/255.255.255.255 #Синицына Светлана (секретарь генерального директора) 192.168.10.95/255.255.255.255
Отдельный файл со списком пользователей я решил использовать, что бы не захламлять
главный конфигурационный файл. Users.txt должен иметь те же права доступа, что
и squid.conf.
Возможен и другой вариант управления доступом к squid, при котором доступ средствами squid не ограничивается. Для тех пользователей, чей адрес не внесен в файл /usr/local/squidGuard/squidGuard.conf, производится перенаправление на страницу запрещения. Соответственно, эти пользователи интернета не увидят. Чтобы добиться такого эффекта, нужно удалить из squid.conf строки:
acl users src "/usr/local/squid/etc/users.txt" http_access allow users http_access deny all
И добавить в squid.conf
http_access allow all
Мне больше нравится второй вариант разграничения доступа, но это уже дело вкуса.
страницы: | 1, 2, 3, 4 | ![]() |
FreeBSD + squidGuard + Apache + Squid + Berkeley DB
Бешков Андрей
tigrisha@regata.ru
Целью данных записок является создание простой в управлении и, в то же время, гибкой в настройке системы фильтрации интернет трафика. Строить мы ее будем на основе FreeBSD 4.5+ Squid + SquidGuard + Berkeley DB 3.2.9 + Apache.
В качестве кандидатов на место SquidGuard так же претендовали squirm и Jesred. От squirm пришлось отказаться, потому что список фильтрации поддерживается один на всех. По моему мнению, такое ограничение не позволяет использовать его в сетях средних и больших размеров.
Несмотря на то, что Jesred является модернизированным потомком squirm и имеет более гибкий синтаксис файла шаблонов, он все еще страдает от той же проблемы. Единственное улучшение в этой области - возможность пропускать запросы некоторых пользователей без фильтрации.
Я думаю, что нижеприведенных инструкций по настройке Apache и Squid хватит, что бы установить их в комплектации по умолчанию. Для получения более подробных сведений вам стоит сходить на следующие сайты:
В процессе сборки всего софта использовался gmake вместо стандартного make, но это уже вопрос личных предпочтений. Мне кажется, что gmake работает стабильнее и быстрее.
Ну что же, теперь когда с формальностями покончено, приступим к установке.
В качестве прокси я использовал squid 2.5.STABLE1. Взять его можно здесь.
# tar zxvf squid-2.5.STABLE1-src.tar.gz # cd squid-2.5.STABLE1 # ./configure # gmake # gmake install
После инсталяции редактируем конфиг squid, находящийся в /usr/local/squid/etc/squid.conf.
Должно получиться примерно следующее:
http_port 3128 hierarchy_stoplist cgi-bin ? acl QUERY urlpath_regex cgi-bin \? no_cache deny QUERY cache_mem 64 MB error_directory /usr/local/squid/share/errors/Russian-koi8-r maximum_object_size 16384 KB cache_dir ufs /usr/local/squid/cache 5000 16 256 cache_access_log /usr/local/squid/logs/access.log cache_log /usr/local/squid/logs/cache.log cache_store_log /usr/local/squid/logs/store.log ftp_user vasa@pupkin.ru quick_abort_pct 60 negative_ttl 1 minutes positive_dns_ttl 6 hours negative_dns_ttl 5 minutes half_closed_clients on acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl SSL_ports port 443 563 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 563 # https, snews acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT acl users src "/usr/local/squid/etc/users.txt" http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access allow users http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access deny all cache_mgr root@test.ru cache_effective_user nobody cache_effective_group nogroup forwarded_for on cachemgr_passwd passwd all client_db on
Обращаю внимание на строку acl users src "/usr/local/squid/etc/users.txt".
Она означает, что список пользователей, которым разрешен доступ к squid, находится
в файле /usr/local/squid/etc/users.txt
Этот файл имеет следующий формат:
#Петрова Наталья (Снабжение) 192.168.10.91/32 #Иванов Владимир (Доставка) 192.168.10.92/32 #Сергеев Игорь (Плановый отдел) 192.168.10.93/255.255.255.255 #Кривоухина Ирина (Лаборатория) 192.168.10.94/255.255.255.255 #Синицына Светлана (секретарь генерального директора) 192.168.10.95/255.255.255.255
Отдельный файл со списком пользователей я решил использовать, что бы не захламлять
главный конфигурационный файл. Users.txt должен иметь те же права доступа, что
и squid.conf.
Возможен и другой вариант управления доступом к squid, при котором доступ средствами squid не ограничивается. Для тех пользователей, чей адрес не внесен в файл /usr/local/squidGuard/squidGuard.conf, производится перенаправление на страницу запрещения. Соответственно, эти пользователи интернета не увидят. Чтобы добиться такого эффекта, нужно удалить из squid.conf строки:
acl users src "/usr/local/squid/etc/users.txt" http_access allow users http_access deny all
И добавить в squid.conf
http_access allow all
Мне больше нравится второй вариант разграничения доступа, но это уже дело вкуса.
страницы: | 1, 2, 3, 4 | ![]() |
# mkdir /usr/local/squid/cache
А тут у нас будут лежать логи.
# mkdir /usr/local/squid/logs
Нужно позаботиться, чтобы директории /usr/local/squid/cache и /usr/local/squid/logs были доступны пользователю, от имени которого работает squid. Узнать имя этого пользователя можно так:
# cat /usr/local/squid/etc/squid.conf | grep cache_effectiv cache_effective_user nobody сache_effective_group nogroup
Получается, что пользователя зовут nobody, и группа у него nogroup.
# chown -R nobody /usr/local/squid/cache /usr/local/squid/logs # /usr/local/squid/sbin/squid -z
Внутри директории /usr/local/squid/cache создаем иерархию директорий для хранения
файлов.
Заглянув в /usr/local/squid/cache, вы сразу поймете, что имелось в виду под
словом иерархия.
Запускаем squid
# /usr/local/squid/sbin/squid -D
А на другой консоли смотрим, какие ошибки появляются
# tail -f /var/log/messages
Если все сделали правильно, то должны увидеть что-то подобное.
Oct 3 12:15:05 dns squid[139]: Squid Parent: child process 141 started
Итак, squid у нас заработал. Теперь примемся за установку Russian Apache 1.3.27 PL30.16. Берем дистрибутив.
Распаковываем его и ставим в комплекте по умолчанию.
# tar zxvf apache_1.3.27rusPL30.16.tar.gz # ./configure # gmake # gmake instal
Запускаем apache:
/usr/local/apache/bin/apachectl start
Создаем директорию, где будут лежать пустой баннер и файл mp3 с каким-либо
забавным звуком.
# mkdir /usr/local/apache/htdocs/replace
Кладем туда 1x1.gif и my.mp3. Берем модифицированный block.cgi и копируем его в /usr/local/apache/cgi-bin Выставляем ему нужные права:
# chown nobody:wheel /usr/local/apache/cgi-bin/block.cgi # chmod 500 /usr/local/apache/cgi-bin/block.cgi
Этот perl скрипт будет вызываться каждый раз, когда пользователь попытается посетить запрещенную страницу. Взять его можно из архива с дистрибутивом squidGuard. В первоначальном варианте этот скрипт назывался /squidGuard-1.2.0/samples/squidGuard.cgi.in. Можно использовать его, а можно и слегка модифицированный мною вариант. Мой, наверно, лучше, потому что руссифицированный.
Все подготовительные работы окончены, и можно взяться за установку squidGuard 1.2.0. Для его работы необходимо иметь Berkeley DB 3.2.9. В свою очередь, Berkeley DB не соберется без libtool. Берем libtool Как обычно, делаем:
# tar zxvf libtool-1.3.4.tar.gz # cd libtool-1.3.4 # ./configure # gmake # gmake install
Скачиваем Berkeley DB 3.2.9. Забираем два патча здесь или здесь. И снова:
# tar zxvf db-3.2.9.tar.gz
Копируем патч файлы в получившуюся директорию db-3.2.9. Затем применяем их для модификации дистрибутива.
# cp patch.3.2.9.1 patch.3.2.9.2 ./db-3.2.9 # cd /usr/local/src/db-3.2.9 # patch -p0 < patch.3.2.9.1 # patch -p0 < patch.3.2.9.2 # cd build_unix # ../dist/configure # gmake # gmake install
Скачиваем squidGuard-1.2.0. Распаковываем и компилируем:
# tar zxvf squidGuard-1.2.0.tar.gz # cd squidGuard-1.2.0 # ./configure --prefix=/usr/local/squidGuard --with-db=/usr/local/BerkeleyDB.3.2 \ --with-sg-config=/usr/local/squi dGuard/squidGuard.conf \ --with-sg-logdir=/usr/local/squidGuard/log \ --with-sg-dbhome=/usr/local/squidGuard/db # gmake # gmake test # gmake install
Cоздаем для хранения файлов протоколирования работы squidGuard директорию /usr/local/squidGuard/log.
# mkdir /usr/local/squidGuard/log
Официальный список блокируемых доменов можно взять у squidGuard. Так же доступен список от MESD. И еще один хороший список от Dansguardian. Кратко сравним их между собой:
База | squidGuard | Mesd | dansguardian | Комментарии |
ads | реклама | |||
adult | нет | сайты для взрослых | ||
aggressive | агрессия | |||
audio-video | музыка и видео | |||
chat | нет | нет | чаты | |
forums | нет | форумы | ||
drugs | наркотики | |||
gambling | азартные игры | |||
hacking | хакерство | |||
local-block | нет | нет | сайты заблокированные местным админом | |
local-ok | нет | нет | сайты разрешенные местным админом | |
бесплатные почтовые сервера | ||||
porn | порнография | |||
proxy | общедоступные прокси сервера | |||
publicite | нет | опять реклама | ||
redirector | нет | анонимные прокси сервера | ||
violence | насилие | |||
warez | пиратское програмное обеспечение |
Итак, вполне очевидно, что лучше всего взять список MESD или Dansguardian. Какой из них выбрать - оставляю на Ваше личное усмотрение. И тот, и другой обновляются довольно часто. Но, во избежание перегрузки сервиса, не стоит качать списки чаще чем раз в неделю.
Скачав себе один из списком распакуем его:
# tar zxvf blacklists.tgz -C /usr/local/squidGuard # mv /usr/local/squidGuard/blacklists /usr/local/squidGuard/db
В директории /usr/local/squidGuard/db появилось несколько поддиректорий. В свою очередь, в каждой из них лежат файлы:
domains # список доменов urls # список адресов, используемых что бы заблокировать одельную страницу, а не весь домен. expression # выражения используемые при поиске в url. Например sex, hot, teens, porno и.т.д
Если бы мы взяли официальный список squidGuard, то внутри каждой директории можно было бы увидеть файлы обновлений к базам с такими названиями:
domains.20020825.diff domains.20020901.diff domains.20020908.diff domains.20020915.diff domains.20020922.diff urls.20020825.diff urls.20020901.diff urls.20020908.diff urls.20020915.diff urls.20020922.diff
Внутри каждого из этих файлов находятся записи вида:
+xratedpornsite.com +209.51.157.43 -zena.cenhost.com -scuzz.xtac.com
Записи, начинающиеся знаком "+", это запрос на добавление строчки в главную базу. Соответственно, строки с минусом имеют обратное назначение. Применить обновления можно только к базе в формате Berkeley DB. Выполняется это действие командой squidGuard -u. Мне кажется, что такой способ обновления не очень удобен. Поэтому нам следует отказаться от списка доменов составленного squidGuard.
страницы: | 1, 2, 3, 4 | ![]() |
Разобравшись с форматом базы приступим к конфигурированию squidGuard. Cоздаем файл /usr/local/squidGuard/squidGuard.conf. И вносим в него вот это:
logdir /usr/local/squidGuard/log |
# тут у нас логи лежат |
logdir /usr/local/squidGuard/db |
# здесь базы |
src it-department { |
# описываем адреса отдела ИТ |
ip 192.168.10.222-192.168.10.223 |
|
} |
|
# отдел доставки | |
src dostavka { |
|
ip 192.168.10.101, 192.168.10.104 |
|
} |
|
src snab { |
# отдел снабжения |
ip 192.168.10.105 |
|
} |
|
# говорим что, все обращения к файлам *.mp3 нужно перенаправить на http://192.168.10.9/replace/my.mp3 # и запротоколировать это событие в файле /usr/local/squidGuard/log/rewr_mp3 |
|
rewrite mp3 { |
|
s@.*\.mp3$@http://192.168.10.9/replace/my.mp3@r |
|
log rewr_mp3 |
|
} |
|
dest porn { |
# описываем базу порносайтов # записать протокол в файл /usr/local/squidGuard/log/porn |
domainlist porn/domains |
|
urllist porn/urls |
|
log porn |
|
} |
|
dest ads { |
# описываем базу рекламы # записать протокол в файл /usr/local/squidGuard/log/ads # подменяем все баннеры прозрачным изоражением размером 1x1 пиксель |
domainlist ads/domains |
|
urllist ads/urls |
|
log ads |
|
redirect http://192.168.10.9/replace/1x1.gif |
|
} |
|
dest banners { |
# описываем свою собственную базу баннерных систем # в этом файле записаны выражения типа baner, banner, ads, show_ads # перенаправляем все запросы на прозрачный gif размером 1x1 пиксель |
domainlist banners/domains |
|
expressionlist banners/expressions |
|
urllist banners/urls |
|
redirect http://192.168.10.9/replace/1x1.gif |
|
log banners |
|
} |
|
dest local-ok { |
# описываем домены которые не должны блокироваться никогда # вне зависимости от списка скачиваемого из сети |
domainlist local-ok/domains |
|
urllist local-ok/urls |
|
} |
|
dest local-block { |
# описываем домены которые должны быть заблокированы всегда |
domainlist local-block/domains |
# вне зависимости от списка скачиваемого из сети |
urllist local-block/urls |
# и перенаправляем все запросы на block.cgi |
redirect http://192.168.10.9/cgi-bin/block.cgi?clientaddr=%a&clientname=%n&clientident=%i&clientgroup=%s&targetgroup=%t&url=%u |
|
} |
|
acl { |
# начинаем раздавать права |
it-department { |
|
pass local-ok !banners !ads all |
# отделу ИТ можно все кроме рекламы |
} |
|
dostavka { |
|
pass local-ok !porn !banners !ads !local-block all |
|
redirect http://192.168.10.9/cgi-bin/block.cgi?clientaddr=%a&clientname=%n&clientident=%i&clientgroup=%s&targetgroup=%t&url=%u |
|
rewrite mp3 |
|
} |
|
snab { |
# отделу снабжения разрешаем только то что определено в local-ok |
pass local-ok none |
# так можно дать пользователю доступ только к избранным сайтам |
redirect http://192.168.10.9/cgi-bin/block.cgi?clientaddr=%a&clientname=%n&clientident=%i&clientgroup=%s&targetgroup=%t&url=%u |
|
rewrite mp3 |
|
} |
|
default { |
# действия выполняемые по умолчанию, если пользователь не описан ни в одном src |
pass none |
# блокируем все |
redirect http://192.168.10.9/cgi-bin/block.cgi?clientaddr=%a&clientname=%n&clientident=%i&clientgroup=%s&targetgroup=Not_Authorized&url=%u |
|
log default |
# пишем логи в файл /usr/local/squidGuard/log/default |
} |
|
} |
# закрываем список acl |
Покончив с файлом конфигурации, продолжим настройку squidGuard. Даем права пользователю, от мени которого будет работает squidGuard на директории log и db. Так же поступаем и с файлом squidGuard.conf.
# chown -R nobody /usr/local/squidGuard/log /usr/local/squidGuard/db # chown nobody /usr/local/squidGuard/squidGuard.conf
SquidGuard может работать с текстовыми базами данных, но в таком случае при каждом запуске ему приходится создавать в оперативной памяти слепок всех загружаемых баз данных в формате Berkeley DB. Этот процесс занимает довольно продолжительное время. Подобных задержек можно избежать, если заранее самому создать базы в формате Berkeley DB. Поэтому мы напишем скрипт для перестройки баз и перезапуска squidGuard с новыми базами.
# cat > /usr/local/squidGuard/bin/rebuid_base.sh #!/bin/sh /usr/local/squidGuard/bin/squidGuard -C all chown -R nobody /usr/local/squidGuard/db killall -HUP squid ^D # chmod 100 /usr/local/squidGuard/bin/rebuid_base.sh # /usr/local/squidGuard/bin/rebuid_base.sh
Запустив rebuid_base.sh, необходимо дождаться нормального завершения задачи.
Теперь во всех директориях, упомянутых в разделах dest конфигурационного файла,
появятся файлы баз данных domains.db и urls.db.
страницы: | 1, 2, 3, 4 | ![]() |
Перед тем как подключать squidGuard к squid, необходимо протестировать его локально. Для начала немного теории. Squid передает данные на стандартный ввод редиректора. Редиректор, в свою очередь, обрабатывает запрос и выдает на стандарный вывод результаты. Это либо пустая строка, если перенаправление не требуется, либо измененный URL. Формат запроса от squid к редиректору выглядит так:
URL | адрес клиента | разделитель | метод запроса | |
http://test.ru/win2000/setup.exe | 127.0.0.1/ | - | GET |
Для того чтобы протестировать как squidGuard будет реагировать на запросы от пользователей, скачиваем test.tar.gz. Распаковываем его и кладем полученный файл test.pl в /usr/local/squidGuard/bin/. Запускаем test.pl и вводим тестируемый адрес. Затем в файле result.txt смотрим результаты работы squidGuard. Набор тестируемых сайтов можно изменять прямо в файле test.pl.
Теперь самое время объединить squidGuard и Squid. В файл /usr/local/squid/etc/squid.conf добавляем строки:
redirector_bypass on |
# если не один из экземпляров squidGuard не |
# отвечает, то работать напрямую | |
redirect_program /usr/local/squidGuard/bin/squidGuard |
# где находится squidGuard |
redirect_children 1 |
# сколько копий squidGuard запускать |
Перезапускаем squid. В свою очередь, squid самостоятельно выполнит перезапуск всех запущенных редиректоров.
# killall -HUP squid
В конце файла /usr/local/squidGuard/log/squidGuard.log ищем такие строки:
2002-10-15 16:11:04 [10653] squidGuard 1.2.0 started (1034683864.337) 2002-10-15 16:11:04 [10653] squidGuard ready for requests (1034683864.353)
Если они есть, значит все работает как положено. Теперь сделаем так, что бы Squid и Apache запускались автоматически при каждой загрузке машины.
# cat > /usr/local/etc/rc.d/apache.sh #!/bin/sh /usr/local/apache/bin/apachectl start ^D # cat > /usr/local/etc/rc.d/squid.sh #!/bin/sh /usr/local/squid/bin/squid -D ^D # chmod 100 /usr/local/etc/rc.d/apache.sh /usr/local/etc/rc.d/squid.sh
Настало время перезапустить компьютер и наслаждаться тем, как все гладко работает. В качестве маленького бонуса можно наладить автоматическое обновление базы доменов. Для скачивания файла базы доменов нам понядобится wget. Распаковываем и ставим как обычно.
# tar zxvf wget-1.8.2.tar.gz # cd wget-1.8.2 # ./configure # gmake # gmake install
Смотрим, куда он у нас установился.
# where wget /usr/local/bin/wget
Пишем скрипт, который будет выкачивать обновления с сайта MESD и класть их в директорию /usr/local/squidGuard/update. Затем архив с обновлениями будет распакован и скопирован в директорию /usr/local/squidGuard/bd. После этого будет произведена перестройка баз и перезапуск squid.
#cat > /usr/local/squidGuard/bin/update_blacklist.sh #!/bin/sh /usr/local/bin/wget -q --cache=off 'http://blacklist.dansguardian.org/cgi-bin/download.pl?type=download&file=bigblacklist' -O /usr/local/squidGuard/update/blacklist.tar.gz tar zxvf /usr/local/squidGuard/update/blacklist.tar.gz -C /usr/local/squidGuard/update/ cp -R -f /usr/local/squidGuard/update/blacklists/* /usr/local/squidGuard/bd rm -R /usr/local/squidGuard/update/blacklists /usr/local/squidGuard/rebuid_base.sh ^D # chmod 100 /usr/local/squidGuard/bin/update_blacklist.sh # mkdir /usr/local/squidGuard/update # crontab -e -u root MAILTO="admin@test.ru" 1 0 * * 7 /usr/local/squidGuard/bin/update_blacklist.sh
Назначаем выполнение обновления на 0 часов 1 минуту каждого воскресенья. Уведомление о выполнении этого задания приказываем слать по адресу admin@test.ru.
Последнее изменение внесено 12.11.2002
страницы: | 1, 2, 3, 4 |