Устанавливаем clamav из портов: # cd /usr/ports/security/clamav # make install clean CLEANDEPENDS=Yes Или с помощью прекомпилированного пакета: # pkg_add ftp://ftp.openbsd.org/pub/OpenBSD/3.8/packages/i386/clamav-0.88.tgz Переходим в каталог с примерами конфигурационных mc-файлов: # cd /usr/share/sendmail/cf Подключаем антивирус: # vi server.mc # Для взаимодействия с sendmail используем TCP-сокет. # INPUT_MAIL_FILTER(`clamav', `S=inet:3311@127.0.0.1, F=T, T=S:4m;R:4m')dnl # Альтернативный вариант: используем доменный сокет Unix. # INPUT_MAIL_FILTER(`clamav', `S=local:/var/clamav/clamav-milter.sock, F=T, T=S:4m;R:4m')dnl # `F=' позволяет разрешать прохождение почты в случае сбоя clamav-milter. # dnl INPUT_MAIL_FILTER(`clamav', `S=inet:3311@127.0.0.1, F=, T=S:4m;R:4m')dnl dnl INPUT_MAIL_FILTER(`clamav', `S=local:/var/clamav/clamav-milter.sock, F=, T=S:4m;R:4m')dnl Пересобираем mc-файл, предварительно сделав копию исходного /etc/mail/sendmail.cf: # cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.bak # m4 ../m4/cf.m4 server.mc > /etc/mail/sendmail.cf Редактируем конфигурационный файл freshclam: # vi /etc/freshclam.conf DatabaseDirectory /var/db/clamav UpdateLogFile /var/clamav/freshclam.log PidFile /var/clamav/freshclam.pid DatabaseOwner _clamav DatabaseMirror database.clamav.net Checks 2 Запускаем freshclam в режиме демона: # /usr/local/bin/freshclam -d Проверяем получение антивирусных баз: # ls -l /var/db/clamav total 5344 -rw-r--r-- 1 _clamav _clamav 146241 Oct 25 23:36 daily.cvd -rw-r--r-- 1 _clamav _clamav 2560365 Oct 25 23:36 main.cvd Вариант 1: используем TCP-сокет и отказываемся от демона clamd: # /usr/local/sbin/clamav-milter -qlo -U /var/clamav/quarantine \ -m 10 -T 0 inet:3311@127.0.0.1 Вариант 2: взаимодействуем через Unix-сокет и используем clamd: # vi /etc/clamd.conf LogFile /var/clamav/clamd.log PidFile /var/clamav/clamd.pid TemporaryDirectory /var/tmp DatabaseDirectory /var/db/clamav LocalSocket /var/clamav/clamd.sock FixStaleSocket User _clamav Создаем лог-файл, чтобы clamd и clamav-milter могли выполнять журналирование событий: # touch /var/clamav/clamd.log # chown _clamav:_clamav /var/clamav/clamd.log Загружаем clamd: # /usr/local/sbin/clamd Загружаем clamav-milter: # /usr/local/sbin/clamav-milter -loP -U /var/clamav/quarantine \ --pidfile=/var/clamav/clamav-milter.pid \ --external local:/var/clamav/clamav-milter.sock Вне зависимости от выбранного варианта запускаем sendmail: # /usr/sbin/sendmail -L sm-mta -bd -q30m Либо заставляем демона перечитать свой cf-конфиг: # kill -HUP `head -1 /var/run/sendmail.pid` В первом случае в /etc/rc.local прописываем автозапуск freshclam и clamav-milter: # vi /etc/rc.local if [ -x /usr/local/bin/freshclam ]; then echo -n ' freshclam'; /usr/local/bin/freshclam -d fi if [ -x /usr/local/sbin/clamav-milter ]; then echo -n ' clamav-milter' /usr/local/sbin/clamav-milter -qlo -U /var/clamav/quarantine \ -m 10 -T 0 inet:3311@127.0.0.1 fi При использовании второго варианта: # vi /etc/rc.local if [ -f /etc/clamd.conf -a -f /etc/freshclam.conf ]; then rm -f /var/clamav/*.pid /var/clamav/*.sock if [ -x /usr/local/bin/freshclam ]; then echo -n ' freshclam'; /usr/local/bin/freshclam -d fi if [ -x /usr/local/sbin/clamd ]; then echo -n ' clamd'; /usr/local/sbin/clamd fi if [ -x /usr/local/sbin/clamav-milter ]; then echo -n ' clamav-milter' sleep 2 /usr/local/sbin/clamav-milter \ -loP -U /var/clamav/quarantine \ --pidfile=/var/clamav/clamav-milter.pid \ --external local:/var/clamav/clamav-milter.sock fi fi Начиная с версии 0.90.х, может потребоваться изменить стартовый сценарий так, чтобы clamav-milter смог корректно запуститься после того, как clamd загрузит свою вирусную базу. # vi /etc/rc.local if [ -f /etc/clamd.conf -a -f /etc/freshclam.conf ]; then rm -f /var/clamav/*.pid /var/clamav/*.sock if [ -x /usr/local/bin/freshclam ]; then echo -n ' freshclam'; /usr/local/bin/freshclam -d fi sleep 2 if [ -x /usr/local/sbin/clamd ]; then echo -n ' clamd'; /usr/local/sbin/clamd fi if [ -x /usr/local/sbin/clamav-milter ]; then echo -n ' clamav-milter' retry=20 while [ ! -f /var/clamav/clamd.sock -a ! $retry = 0 ]; do sleep 1 retry=$(($retry - 1)) done /usr/local/sbin/clamav-milter -eql -U /var/clamav/quarantine \ inet:3311@127.0.0.1 fi fi |