|
|
www.lissyara.su
—> статьи
—> FreeBSD
—> Мелочи
—> ClamAV mirror
Создание неофициального зеркала обновлений ClamAV
Автор: lissyara.
В связи с тем, что внезапно и как-то резко расплодились филиальные сервера с почтой, встал вопрос о своеврменном обновлении антивирусов на них. Использовался ClamAV, причём исключительно для проверки почты. Поиски по инету со словами 'clamav mirror' дали инструкцию, прочёв которую я не понял одного - зачем так извращённо - надо региться, надо белый IP и т.п. Дальнейшие поиски привели вообще к полному непониманию происходящего - авторы не поддерживают и не хотят чтобы были закрытые зеркала. Зато рекомендуют тем, у кого много машин во внутренних сетях, использовать кэширующий прокси, настроив его в конфиге freshclam.
Идея с прокси меня нифига не вдохновляла, зато идея зеркала - ещё как. Поэтому, перечитав инструкцию по созданию официального зеркала, приступил к созданию своего, приватного. Для начала был сделан виртуалхост в апаче, на одной из незагруженных машин:
#
<VirtualHost *:80>
ServerAdmin admin@lissyara.su
DocumentRoot /shares/sites/clamav_mirror/data
ServerName clamav.my-domain.local
ServerAlias clamav
CustomLog /shares/sites/clamav_mirror/log/access.log combined
ErrorLog /shares/sites/clamav_mirror/log/error.log
</VirtualHost>
| После прописания имени в DNS, полез на один из серверов, рихтовать конфиги - по дефолту freshclam у меня нигде не был включен. Поэтому, прописываем его в автозапуске:
grep lam /etc/rc.conf
# ClamAV
clamav_clamd_enable="YES"
clamav_freshclam_enable="YES"
| Правим в конфиге имя зеркала на то, которое у виртуалхоста в апаче:
grep Mirror /usr/local/etc/freshclam.conf
#DatabaseMirror db.XY.clamav.net
DatabaseMirror clamav.my-domain.local
| Запускаем:
/usr/local/etc/rc.d/clamav-freshclam start
Starting clamav_freshclam.
| Тутже наблюдаем в логах апача такое:
[Fri Oct 05 09:14:50 2007] [error] [client 172.30.102.18] File does not exist: /shares/sites/clamav_mirror/data/main-44.cdiff
[Fri Oct 05 09:14:50 2007] [error] [client 172.30.102.18] File does not exist: /shares/sites/clamav_mirror/data/main-44.cdiff
[Fri Oct 05 09:14:50 2007] [error] [client 172.30.102.18] File does not exist: /shares/sites/clamav_mirror/data/main-44.cdiff
[Fri Oct 05 09:14:50 2007] [error] [client 172.30.102.18] File does not exist: /shares/sites/clamav_mirror/data/main.cvd
[Fri Oct 05 09:14:56 2007] [error] [client 172.30.102.18] File does not exist: /shares/sites/clamav_mirror/data/main-44.cdiff
[Fri Oct 05 09:14:56 2007] [error] [client 172.30.102.18] File does not exist: /shares/sites/clamav_mirror/data/main-44.cdiff
[Fri Oct 05 09:14:56 2007] [error] [client 172.30.102.18] File does not exist: /shares/sites/clamav_mirror/data/main-44.cdiff
[Fri Oct 05 09:14:56 2007] [error] [client 172.30.102.18] File does not exist: /shares/sites/clamav_mirror/data/main.cvd
[Fri Oct 05 09:15:01 2007] [error] [client 172.30.102.18] File does not exist: /shares/sites/clamav_mirror/data/main-44.cdiff
[Fri Oct 05 09:15:02 2007] [error] [client 172.30.102.18] File does not exist: /shares/sites/clamav_mirror/data/main-44.cdiff
[Fri Oct 05 09:15:02 2007] [error] [client 172.30.102.18] File does not exist: /shares/sites/clamav_mirror/data/main-44.cdiff
[Fri Oct 05 09:15:02 2007] [error] [client 172.30.102.18] File does not exist: /shares/sites/clamav_mirror/data/main.cvd
|
Ну, а далее немного лирики и скрипт. Вначале я решил, что тут всё просто - тупо парсим логи, ищем имена файлов которые оно хочет, их вытаскиваем с удалённого сервера. Тут же был написан скрипт, который успешно эксплуатировался ровно сутки:
cat /shares/sites/clamav_mirror/clamav_update.sh
#!/bin/sh
# даннынй скрипт парсит логи апача для заданного
# виртуалхоста, и ищет файлы, на которые апач дал
# 404 ответ. Т.к. на этот хост ходят тока филиальные
# сервера - за обновлениями, то это и будут файлы обновлений.
# тупо скачиваем их с одного из зеркал, и всё.
# переменные
home_dir="/shares/sites/clamav_mirror"
http_err_log="log/error.log"
http_root_dir="data"
clamav_mirror="database.clamav.net"
clamav_version_server="current.cvd.clamav.net"
# приложения
cat="/bin/cat"
grep="/usr/bin/grep"
awk="/usr/bin/awk"
sort="/usr/bin/sort"
uniq="/usr/bin/uniq"
fetch="/usr/bin/fetch"
host="/usr/bin/host"
tr="/usr/bin/tr"
# достаём имена файлов, что просили клиенты
${cat} ${home_dir}/${http_err_log} | ${grep} "File does not exist" \
| ${awk} -F "${http_root_dir}/" '{print $2}' | ${sort} \
| ${uniq} |
{
while read file_name
do
# топем в диру для обновлений
cd ${home_dir}/${http_root_dir}
# качаем обновление
${fetch} "http://${clamav_mirror}/${file_name}"
done
}
# очищаем лог апача
echo -n > ${home_dir}/${http_err_log}
| Через сутки до меня допёрло - файлы daily.cvd и main.cvd при такой схеме обновляться не будут - у них имена останутся те же самые, а значит на них не будет ругани в логах, и новые версии скачиваться не будут. Удалять планировщиком и качать заново - не метод. К этому моменту, благодаря ковырянию логов и вербозного вывода freshclam я знал - он, в первую очередь, работает через DNS - просит TXT запись определёного домена, парсит её, и достаёт оттуда версии файлов. После пары часов мучений было рождено такое:
#!/bin/sh
# даннынй скрипт достаёт версии файлов из TXT записи
# домена 'current.cvd.clamav.net', скачивает их, а также,
# проверяет обновление файлов daily.cvd и main.cvd,
# также, скачивая их в случае необходимости.
# переменные
home_dir="/shares/sites/clamav_mirror"
http_root_dir="data"
clamav_mirror="database.clamav.net"
clamav_version_server="current.cvd.clamav.net"
# приложения
cat="/bin/cat"
grep="/usr/bin/grep"
awk="/usr/bin/awk"
sort="/usr/bin/sort"
uniq="/usr/bin/uniq"
fetch="/usr/bin/fetch"
host="/usr/bin/host"
tr="/usr/bin/tr"
# Новую версию кламав получает из DNS.
# выглядит это так:
# host -t txt current.cvd.clamav.net
# current.cvd.clamav.net descriptive text "0.91.2:44:4474:1191572941:1"
# значения полей, в общем-то понятны, но не все (мало что понял
# из исходников), те что понял - вот:
# 0.91.2 - текущая версия ClamAV
# 44 - версия main.cvd
# 4474 - версия daily.cvd
# 1191572941 - штамп веремни чтоли
# 1 -
# соответственно - парсим и достаём её - частота работы скрипта выше чем
# частота срабатываний freshclam - следовательно файл будет скачан
# заранее, и удасться избежать части 404 ошибок
# да и вообще - решение более красивое :)
# достаём TXT запись
txt_records="`${host} -t txt ${clamav_version_server} | \
${tr} -d '"' | ${awk} '{print $4}'`"
# разбираем на известные поля
main_cvd_ver="`echo ${txt_records} | ${awk} -F ':' '{print $2}'`"
daily_cvd_ver="`echo ${txt_records} | ${awk} -F ':' '{print $3}'`"
# проверяем наличие соответтсвующих файлов
if ! test -f ${home_dir}/${http_root_dir}/daily-${daily_cvd_ver}.cdiff
then
# качаем файл
cd ${home_dir}/${http_root_dir}
${fetch} "http://${clamav_mirror}/daily-${daily_cvd_ver}.cdiff"
fi
if ! test -f ${home_dir}/${http_root_dir}/main-${main_cvd_ver}.cdiff
then
cd ${home_dir}/${http_root_dir}
${fetch} "http://${clamav_mirror}/main-${main_cvd_ver}.cdiff"
fi
# Зеркалируем прочие файлы, что удалось вычислить (флаг -m у fetch)
cd ${home_dir}/${http_root_dir}
# daily.cvd
${fetch} -m "http://${clamav_mirror}/daily.cvd"
# main.cvd
${fetch} -m "http://${clamav_mirror}/main.cvd"
# ставим права
${chmod} -R 644 ${home_dir}/${http_root_dir}/*
| Ну и всё. В крон его, раз в 10 минут, и маразм разрабочиков удалось обойти :)
Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?t=18560.
размещено: 2007-10-05,
последнее обновление: 2009-08-25,
автор: lissyara
|
|
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту
Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis
Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS
Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT
В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat
Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp
Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration
Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster
HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS
История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire
Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной
Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server
Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs
Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec
Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash
Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT
Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3
Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
2010-08-31, Cancer
Установка и настройка OpenVPN
На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
|
Статистика сайта
|
Сейчас на сайте находится: 18 чел.
|
За последние 30 мин было: 63 человек
|
За сегодня было 976 показов, 204 уникальных IP
|
|
|
|
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
|
|
|
Комментарии пользователей [19 шт.]