| 
		
			
			 
		 | 
		
			
			 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С на серверах.
 
			
			 
		 | 
	
	
		
		
	
		
			
			
				
					
						Статистика сайта
					 | 
				 
				
					
						Сейчас на сайте находится: 23 чел.
					 | 
				 
				
					
						За последние 30 мин было: 126 человек
					 | 
				 
				
					
						За сегодня было 10026 показов, 3880 уникальных IP
					 | 
				 
			 
		 | 
	 
 
	
		 | 
		 
		 | 
		
			   Этот информационный блок появился по той простой причине,
			что многие считают нормальным, брать чужую информацию не уведомляя автора
			(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
			Я не против распространения информации — только за. Только условие простое — извольте
			подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
			незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
			 
			  Если соизволите поставить автора в известность — то вообще почёт вам и уважение. 
			© lissyara 2006-10-24 08:47 MSK
			 
		 | 
		
			 
		 | 
		
		
		
		
		 | 
	
Комментарии пользователей [19 шт.]