From: Антон <fr.butch@mail.ru.>
Newsgroups: email
Date: Mon, 24 Oct 2007 14:31:37 +0000 (UTC)
Subject: Прокси сервер с антивирусной проверкой трафика
squid, sams, samba, havp, clamav, dante на gentoo. Прокси сервер с
антивирусной проверкой трафика, ntlm авторизацией пользователей в домене
win2000 и контролем трафика
Я достаточно много потратил времени на поиски необходимых приложений и чтение документации,
поэтому решил поделится собраной информацией. надеюсь кому то это будет полезно.
Думаю статья достаточно сырая и сумбурная. местами наверняка закрались ошибки. да и за стиль описания
заранее прошу прощения.
на всякий случай: icq uin# 285 907 664
Актуально на июль 2007
конфиг, на котором все это крутится:
gate htdocs # uname -a
Linux gate 2.6.20-gentoo-r8 #1 Fri May 18 11:18:33 MSD 2007 i686 Intel(R) Celeron(R) CPU
2.53GHz GenuineIntel GNU/Linux
768 мв. ОЗУ
вполне себе обычный удма диск на 40гб.
Итак, не буду долго распинать по поводу того как я пришел именно к этой
связке =) Просто расскажу как заставить это работать и что какую роль выполняет.
Для начала необходимый софт:
squid - самый известныймощный кеширующий httpftp прокси
sams - система учета пользователей сквид
samba - нам нужен winbindd для реализации ntlm аутентификации
havp - антивирусный прокси. служит исключительно для проверки проходящего через него трафика на вирусы.
clamav - в представлении не нуждается
dante - соксы
Все инстолится на gentoo, естественно с помощью emerge =)
Итак, первым делом загружаем sams http://sams.irc.perm.ru/ и читаем
документацию. Объем не очень большой, при этом в общих чертах думаю вам
станет понятно зачем он нужен. В кратце - самс читает логи сквида
(через заданый интервал или непрерывно, я предпочел через заданый
интервал) и заносит данные в MySQL о посещенных страницах, объеме трафика
и времени посещения. через веб морду самса мы добавляем пользователей,
шаблоны для них и другие условия, можем настроить блокировку
нежелательных страниц или баннеров, доступны несколько вариантов
аутентификации, но в условиях предприятий актуальны два - ip и ntlm.
возможности достаточно широки. управление сквидом происходит через
добавление необходимых строк в его конфиг. это acl и правила
http_access.
Для реализации авторизации по ip фактически ничего не нужно =) для того
чтобы работала ntlm
Авторизация в домене вин2000 необходимо завести линуховую тачку в домен.
самбу нужно собрать с поддержкой winbindd.
Начнем именно с этого.
gate ~ #emerge -s net-fs/samba
* net-fs/samba
Latest version available: 3.0.24-r3
Latest version installed: 3.0.24-r3
Size of files: 17,467 kB
Homepage: http://www.samba.org/ http://www.openantivirus.org/projects.php
Description: SAMBA is a suite of SMB and CIFS client/server programs for UNIX
License: GPL-2
Нашли. отлично =) теперь выясним какие use флаги нам нужны. доступны:
Компилим, читаем доки. я наверное буду писать только важные моменты настройки.
Читаем теперь снова доки по самсе, а также заходим на сайт havp http://www.server-side.de/
а также не пропускаем фак на форуме этого проекта, и читаем как возможно
пропихнуть хавп между сквидом. Зовут они это дело сендвичом. Зачем это нужно: в цепочке
пользователь--сквид1--хавп--сквид2--инет первый сквид отвечает за
ограничения и аутентификацию, при этом кешированием он не занимается,
второй сквид2 занимается исключительно кэшированием, дабы самое
медленное звено цепочки не сильно тормозило. Речь конечно же о хавпе.
Дабы он каждый раз не качал самостоятельно ресурсы ставим перед ним
кеширующий прокси.
Итак. Конфиг первого сквида в цепочке:
gate ~ # cat /etc/squid/squid.conf | grep --invert-match #
#лишние строки я убрал, как и строки, внесенные самсом.
#пояснения будут только к строкам явно этого неуждающимся
http_port 3128
#итак, описание парент прокси. первая строка - хавп, вторая - второй скивд. зачем нужно
#указывать здесь второй сквид - далее
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443
#наконец то указываем хелпер, идущий в комплекте с самбой, ибо идущий
#со сквидом вместе нифига не работает с самбой версии 3.хх
#первым указываем нтлм авторизацию. она срабатывает соответсвенно первой
#при этом замечательно аворизуется автоматом ИЕ. это наверное одна из
#вкусных фишек
#второй идет бэйсик авторизация - все остальные клиенты должны предоставить
#имя пользователя и пароль доменного юзера
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 6
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 6
auth_param basic realm Please, enter your user name and password
auth_param basic credentialsttl 2 hours
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl to_localhost dst 127.0.0.0/8
acl thishost src 127.0.0.1/32
#этот лист необходим чтобы не кешировать отданный хавпом контент.
#зачем? чтобы вдруг не прокешировать пропущенный кламав вирь.
acl HAVP_PORT myport 8081
acl purge method PURGE
acl CONNECT method CONNECT
#этот лист содержит список того, что проверять на вири не нужно.
#с джпегами отдельный разговор. лучше их сканить, но машина думаю тормозить будет
acl noscan urlpath_regex -i .(jpe?g|gif|png|ico|swf|flv|pdf|bmp|mov|avi)$
acl proto_HTTP proto HTTP
acl Proto_HTTPS proto HTTPS
#пытаемся отправить мимо хавпа картинки и прочее, не требующее проверки.
cache_peer_access 127.0.0.2 allow proto_https noscan
cache_peer_access 127.0.0.2 deny all
#все остальное пускаем через хавп
cache_peer_access 127.0.0.1 allow all
memory_pools off
via off
forwarded_for off
buffered_logs on
no_cache deny QUERY
no_cache deny CONNECT
#как и говорил, не кешируем ответы хавпа
no_cache deny !HAVP_PORT
#запрещаем ходить мимо парент прокси
never_direct allow all
header_access Via deny all
header_access via deny all
error_directory /usr/share/squid/errors/Russian-1251
prefer_direct off
strip_query_terms off
coredump_dir /var/cache/squid
pipeline_prefetch off
relaxed_header_parser on
Вроде ничего не потерял =) не забываем что нам нужны описания тегов в
коментариях для самса.
Так что не торопитесь копипастить мой конфиг. Кстати, сначало я пытался
заставить работать хавп с одним сквидом. Но к сожалению происходило
зацикливание аутентификации. Крайне неприятная вещь. Особенно если
учесть что несколько дней все проработало именно в конфигурации с одним
сквидом.
Как назло все случилось когда я наконец вышел в отпуск. Пришлось
потратить два дня на ковыряние документации и безконечные реконфигуривания
сквида. Отписался о проблеме на оф.сайте хавпа. подождал минут 15 и решил
разделить сквид. В итоге висят две копии сквида. Второй использует свои
pid файл, логи и свой кэш. Запускается просто:
Можно было конечно более интелектуально все сделать =) В мыслях именно такой
был план, но после того как все благополучно завелось я эту идею забросил =)
Второй конфиг сквида приводить не буду. Там ничего принципиального.
Продолжим. Взглянем на то, что мы имеем: сквид с нтлм авторизацией.
Проверим, работает она или нет.
Прописываем прокси в IE и заходим на какой-нибудь сайт. Читаем лог.
http://ww1.pegast.ru/images/price2.gif olga DEFAULT_PARENT/127.0.0.1 image/gif
1185864568.546 42 192.168.0.93 TCP_MISS/304 373 GET http://ww1.pegast.ru/pict/error.gif
olga DEFAULT_PARENT/127.0.0.1 image/gif
Что мы видим =) имя пользователя красуется в логе =) замечательно.
настраиваем через веб-интерфейс самс на свое усмотрение. Указываем как
пишется имя пользователя в лог. Заводим кучку пользователей.
Но мы кое-что пропустили =) Конечно же забыли про установку самс =)
Качаем исходники sams. Они имеют замечательный скрипт установки.
Инсталлируем все по мануалу.
Вообщем то и все. Читаем в документации самс какие есть варианты работы.
Используем тот, что понравился. Варианты работы указываются в веб-интерфейсе.
Делаем симлинк в htdocs апача (думаю с его установкой и установкой PHP
проблем не будем.
Читаем внимательно, что необходимо для работы скриптов самса в документации самса)
gate ~ # ls -aFl /var/www/localhost/htdocs/sams
lrwxrwxrwx 1 root root 21 Jun 6 12:32 /var/www/localhost/htdocs/sams ->
/usr/local/share/sams/
симлинк сделать просто:
ln -s <цель> <имя_линка>
делаем необходимые настройки в вэб-интерфейсе sams.
HAVP
Следующий на очереди havp.
Я долгое время думал как прикрутить антивирус к прокси.
Первый варианты был viralator. Вещь интересная, но я могу назвать минусы:
- привязка к какому то из редиректоров, сквидгварду, например. Я его использовать не хотел.
- ориентация исключительно на содержание url.
- вывод лишнего окошка при загрузке.
Это основное. идея неплохая, но от него я отказался.
Следующий претендент была связка через icap - отказался сразу из-за необходимости патчить
сквид (хотя может быть и не нужно. прочел в каком то хауту).
Далее - squidclamav. Работа через curl. Что то не очень гладко у меня с ним все работало.
Поднять толком не смог. Потратил кучу времени, психанул и плюнул.
И наконец вариант с havp или dansguardian. Последний дольше существует, имеют версию выше
2.9, в отличии от хавпа, текущая версия которого 0.86 =)
Но чем то последний мне не понравился. Может быть потому что мне нужна была только проверка
на вирусы и ничего больше? может быть просто потому что документация хавпа
оказалась яснее, или потому что я взялся за хавп первым =)
Устранавливаем хавп. Вносим необходимые "use" флаги для сборки с поддержкой
кламав и ssl:
#имя пользователя и группа для хавпа
USER havp
GROUP havp
#работает в режиме демона
DAEMON true
PIDFILE /var/run/havp/havp.pid
#количество процессов
SERVERNUMBER 20
MAXSERVERS 50
#логи
ACCESSLOG /var/log/havp/access.log
ERRORLOG /var/log/havp/havp.log
#не ведем лог в сислог
USESYSLOG false
SYSLOGNAME havp
SYSLOGFACILITY daemon
SYSLOGLEVEL info
#можно поставить true на время дебагинга и повыше логлевел
LOG_OKS false
LOGLEVEL 0
#важная тема. для хавпа нужна файловая система с поддержкой хард локинга.
#лучший выбор - рамдиск. о нем ниже
SCANTEMPFILE /var/tmp/havp/havp-XXXXXX
TEMPDIR /var/tmp/havp/
#на каком порту сидим, с какого отправляем и получаем запросы
PORT 8080
BIND_ADDRESS 127.0.0.1
SOURCE_ADDRESS 127.0.0.1
#не забудьте отредактировать шаблоны
TEMPLATEPATH /etc/havp/templates/ru/
WHITELISTFIRST true
#вайтлисты. указываем внути то, что мона пропустить без проблем
WHITELIST /var/tmp/havp/white
FAILSCANERROR true
SCANNERTIMEOUT 2
RANGE true
#нафиг не сканим картинки
SCANIMAGES false
#настройки сканирования и отдачи клиенту контента. читаем коментарии в конфиге
MAXSCANSIZE 400000
KEEPBACKBUFFER 600000
KEEPBACKTIME 5
TRICKLING 15
MAXDOWNLOADSIZE 0
#пропускаем большого объема и зашифрованные архивы
IGNOREVIRUS Oversized. Encrypted.
#юзаем кламлиб
ENABLECLAMLIB true
CLAMBLOCKBROKEN false
CLAMBLOCKENCRYPTED false
CLAMBLOCKMAX false
CLAMMAXFILES 2
CLAMMAXFILESIZE 1
CLAMMAXRECURSION 2
CLAMMAXRATIO 250
Чуть не забыл про dante-socks =)
После перевода всех 60 юзеров на шлюз выяснилось, что icq работает плохо через
HTTP-прокси. Немного подумав, я решил использовать socks.
Поискал возможные варианты:
* net-proxy/dante
Latest version available: 1.1.19-r1
Latest version installed: 1.1.19-r1
Size of files: 874 kB
Homepage: http://www.inet.no/dante/
Description: A free socks4,5 and msproxy implementation
License: BSD
Простая достаточно вещь. Установил и настроил примерно за 40 минут.
Конфиг далее (пускает всех из локалки на аькины подсети/домены,
а так же дает жить мэйл.ру агенту):
Через соксы аська завелась замечательно. Единственная проблема возникала
с оригинальными клиентами аськи. В журнале было видно что они заходят
на IP: 0.0.0.1 -- видимо просто не могу разрешить доменное имя в IP.
Лечится оч просто - прописываем ип адресс какого нить из серверов аськи
прямо в настройки клиента. Все =)
Надеюсь я ничего не пропустил. Эта связка замечательно работает (не
считая мелких глюков демонов самс) уже около месяца. Около недели назад
я перевел всех пользователей домена на эту прокси. Единственные
проблемы, которые всплыли - аська плохо работала через HTTP, но это
быстро решилось поднятием соксов.
Спасибо большое тем, кто смог прочесть и пожалуйста тем, кому помогло =)
1587 Прочтений • [Прокси сервер с антивирусной проверкой трафика (squid gentoo linux proxy virus windows samba auth filter ramdisk)] [08.05.2012] [Комментариев: 0]