Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> почтовые системы —> MTA qmail full install

Установка MTA qmail c наложением патча от John Simpsons в связке с vpopmail mysql spamassasin clamav и т.д.

Автор: Gegemon.


Вступление.
Написано по мотивам http://www.freebsdrocks.net/ и благодаря этой ветки форума.
Рассмотрена установка MTA qmail c наложением патча от John Simpsons в связке с vpopmail mysql spamassasin clamav и т.д.
Установка производилась на FreeBSD-7.1-RELEASE-i386.


Шаг  1. Установка Perl с поддержкой suidperl

Удалим текущую версию Perl
Перейдем:
# cd /usr/ports/lang/perl5.8

Выполним:
# make deinstall 

Установим Perl с suidgid
# echo "ENABLE_SUIDPERL=true" >> /etc/make.conf 

Выполним:
# cd /usr/ports/lang/perl5.8
# make install clean 

Шаг  2. Устанавливаем MySQL

# cd /usr/ports/databases/mysql50-server
# make install clean

# echo 'mysql_enable="YES"' >> /etc/rc.conf
# /usr/local/etc/rc.d/mysql-server start

Дадим права:
# chown -R mysql /var/db/mysql/
# chgrp -R mysql /var/db/mysql/

Установим пароль:
# /usr/local/bin/mysqladmin -u root password SECUREPASSWORD

пароль пишем правильно - т.е. придумываем свой.

Шаг  3. Устанавливаем Apache 2.2

# cd /usr/ports/www/apache22
# make install clean

Options for apache 2.2.9_5
[X] MYSQL


Правим конфигурационный файл:
# ee /usr/local/etc/apache22/httpd.conf

Приводим к виду:
Listen 80
User www — смените на пользователя от которого запускается apache
Group www — смените на группу от которого запускается apache
you@example.com - Смените на ваш e-mail адрес
DocumentRoot "/usr/local/www/apache22/data" - Смените на ваш путь
Directory "/usr/local/www/apache22/data" - Смените на ваш путь
DirectoryIndex index.html index.html.var index.php
#CustomLog /var/log/httpd-access.log
ScriptAlias /cgi-bin/ "/usr/local/www/cgi-bin/" смените на ваш путь к cgi-bin 
Directory "/usr/local/www/cgi-bin">

# echo 'accf_http_load="YES"' >> /boot/loader.conf
# kldload accf_http

Запуск:
# apachectl start

Пропишем запуск Apache при старте системы:
# echo 'apache22_enable="YES"' >> /etc/rc.conf

Настроим SSL:
# mkdir /usr/local/etc/apache22/ssl.key
# mkdir /usr/local/etc/apache22/ssl.crt
# chmod 0700 /usr/local/etc/apache22/ssl.key
# chmod 0700 /usr/local/etc/apache22/ssl.crt

Создаем сертификат:
# cd /root
# openssl genrsa -des3 -out server.key 1024
# openssl req -new -key server.key -out server.csr
# openssl x509 -req -days 3650 -in /root/server.csr -signkey /root/server.key \
-out /root/server.crt

Сертификат будет действителен 3650 дней. Вполне достаточно, чтобы не вспоминать эту процедуру каждый год :-)
Хотите знать больше о SSL Certs, вам сюда: http://httpd.apache.org/docs-2.0/ssl/ssl_faq.html#aboutcerts
Копируем сертификаты:
# cp /root/server.key /usr/local/etc/apache22/ssl.key/
# cp /root/server.crt /usr/local/etc/apache22/ssl.crt/

Установим права:
# chmod 0400 /usr/local/etc/apache22/ssl.key/server.key
# chmod 0400 /usr/local/etc/apache22/ssl.crt/server.crt

Правим конфигурационный файл:
# cd /usr/local/etc/apache22/extra
# ee httpd-ssl.conf

Приводим к виду:
DocumentRoot "/usr/local/www/apache22/data" 
# — смените путь на ваш httpd.conf document root.
ServerName www.example.com:443
# - Смените www.example.com на ваше доменное имя (domain name).
ServerAdmin : you@example.com - Смените на ваш e-mail адрес
ErrorLog /var/log/httpd-error.log
# — Вы можете расскоментировать эту линию .
TransferLog /var/log/httpd-access.log
# - Вы можете расскоментировать эту линию .
SSLCertificateFile "/usr/local/etc/apache22/ssl.crt/server.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl.key/server.key"

Удаляем pass-phrase (опционально):
# cp /usr/local/etc/apache22/ssl.key/server.key \
/usr/local/etc/apache22/ssl.key/server.key.org
# cd /usr/local/etc/apache22/ssl.key/
# openssl rsa -in server.key.org -out server.key

Enter pass phrase for server.key.org:
writing RSA key

# chmod 400 server.key

Перезапускаем APACHE:
# apachectl stop
# apachectl start

Добавим поддержку PHP в APACHE:
# cd /usr/ports/lang/php5
# make config

В опциях включаем:
[X] APACHE Build Apache module

# make install clean
# ee /usr/local/etc/apache22/httpd.conf

Добавляем:
AddType application/x-httpd-php .php 
AddType application/x-httpd-php-source .phps

и
DirectoryIndex index.php index.html

Перезапускаем APACHE:
# apachectl stop
# apachectl start

Для проверки можно создать следующее:
# ee /usr/local/www/apache22/data/info.php

Пропишем и сохраним:
<?php
echo $_SERVER['REMOTE_ADDR'];
// Show all information, defaults to INFO_ALL
phpinfo();
// Show just the module information.
// phpinfo(8) yields identical results.
phpinfo(INFO_MODULES);
?>

Смотрим:
http://yoursite.com/info.php

Шаг  4. Устанавливаем PHPMyAdmin

# cd /usr/ports/databases/phpmyadmin
# make install clean

В опциях включаем:
[X] MYSQLI Improved MySQL support

# cd /usr/local/www/phpMyAdmin
# cp config.sample.inc.php config.inc.php

Правим:
# ee config.inc.php 

$cfg['blowfish_secret'] = 'Password'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
$cfg['Servers'][$i]['controluser'] = 'mysqluser';
$cfg['Servers'][$i]['controlpass'] = 'password';

Редактируем:
# ee /usr/local/etc/apache22/httpd.conf

<Directory />
	AllowOverride None
	Order deny,allow
	Deny from all
</Directory> 
Alias /phpmyadmin/ "/usr/local/www/phpMyAdmin/"

<Directory "/usr/local/www/phpMyAdmin/">
	Options none
	AllowOverride Limit

	Order Deny,Allow
	Deny from all
	Allow from 127.0.0.1 .example.com
</Directory>

Рестартуем Apache:
# apachectl restart

Создадим суперпользователя для MySQL:
# mysql -u root -p 

Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> GRANT ALL PRIVILEGES ON *.* TO mysqluser@localhost IDENTIFIED 
BY 'password' WITH GRANT OPTION;
Query OK, 0 rows affected (0.08 sec)

mysql> quit
Bye

Заходим:
http://domain.xxx/phpmyadmin

Шаг  5. Устанавливаем qmail

Здесь опишем установку qmail из портов с наложением патча от John Simpsons ( http://qmail.jms1.net/ )
Вот способ, которым мы сделаем это:
# cd /usr/ports/mail/qmail
# make install

Когда появится окно откажемся от выбора RCDLINK:
[ ] RCDLINK

# cd ~root

Скачаем скрипт:
# fetch http://freebsdrocks.ru/files/users.sh
# chmod 755 users.sh
# ./users.sh
# rm users.sh
# cp /usr/ports/distfiles/qmail/qmail-1.03.tar.gz ~root
# cd ~root
# tar zxvf qmail-1.03.tar.gz

На странице http://qmail.jms1.net/patches/combined-links.shtml выбрать нужный патч, скачать и применить.
# fetch http://qmail.jms1.net/patches/qmail-1.03-jms1.7.07.patch
# cd ~root/qmail-1.03
# patch < ../qmail-1.03-jms1.7.07.patch
# make man
# make setup check
# ./config-fast bsd.localhost

Где bsd.localhost - полное имя хоста (например mail.example.com)
Your fully qualified host name is mail.example.com
Putting mail.example.com into control/me...
Putting example.com into control/defaultdomain...
Putting example.com into control/plusdomain...
Putting mail.example.com into control/locals...
Putting mail.example.com into control/rcpthosts...
Now qmail will refuse to accept SMTP messages except to mail.example.com.
Make sure to change rcpthosts if you add hosts to locals or virtualdomains!

# cd /usr/ports/mail/qmail
# make clean
===> Cleaning for qmail-1.03_7

Шаг 6. Устанавливаем UCSPI-TCP

# cd /usr/ports/sysutils/ucspi-tcp
# make install clean

Появится на выбор 4 варианта.
Рекомендую установить man-страницы.
Если Вы хотели бы использовать rblsmtp с uscpi, то выбор за вами.
Использование rbl позволяет значительно уменьшить спам, который Вы получаете.
Выбор SSL является дополнительным, если Вы планируете использовать SMTP с SSL ( ucspi-ssl можно устанавить позже).
Я выбрал все опции
Options for ucspi-tcp 0.88_2
[X] MAN Install man(1) pages
[X] RSS_DIFF Patch rblsmtpd for qmail users
[X] SSL Adds support for SSL (Secure Socket Layer)
[X] RBL2SMTPD Don't drop connection, pass envvar to smtpd

Шаг 7. Установка Daemontools

# cd /usr/ports/sysutils/daemontools
# make install clean

Options for daemontools 0.76_12
[X] MAN Install Gerrit Pape's manual pages
[ ] SIGQ12 Add svc support for QUIT, USR1, and USR2 signals
[X] TESTS Run the test suite, fails on NFS-mounted workdir

Создадим директорию /service для svscan
# mkdir /service

Запустим cvscan:
# csh -cf '/usr/local/bin/svscanboot &'

Проверим:
# ps -auxw | grep svscan 

Должны увидеть примерно такое:
root 26791 0.0 0.2 3456 1112 p0 I 3:02AM 0:00.05 /bin/sh /usr/local/bin/svscanboot
root 26793 0.0 0.1 3104 604 p0 S 3:02AM 0:00.04 svscan /service
root 26948 0.0 0.2 1632 772 p0 R+ 3:03AM 0:00.02 grep svscan

Запуск daemontools при загрузке FreeBSD:
# echo "csh -cf '/usr/local/bin/svscanboot &'" >> /etc/rc.local

Удаляем скрипт автозапуска созданный при установке daemontools
# rm /usr/local/etc/rc.d/svscan.sh

Daemontools установлен и работает.

Шаг 8. Устанавливаем Fetchmail

Хотя у fetchmail есть свой собственный режим демона,
используя его с daemontools можно обеспечить некоторые преимущества.
Они включают:
интерфейс управления через утилиту svc daemontools
надежный, независимый от платформы запуск демона и скриптов
ведение лог-файла с помощью multilog
Устанавливаем:
# cd /usr/ports/mail/fetchmail
# make install clean

Создадим каталог, где будет находиться fetchmail :
# cd /var/qmail/supervise
# mkdir -m 755 fetchmail
# cd fetchmail

Скачаем скрипт:
# fetch http://freebsdrocks.ru/files/run.fetchmail

# mv run.fetchmail run 
# chmod 755 run
# mkdir -m 755 log
# cd log
# fetch http://freebsdrocks.ru/files/log-run
# mv log-run run
# chmod 755 run

# chown fetchmail:fetchmail /var/qmail/supervise/fetchmail/ 

Если открыть файл run, то вы увидите интервал в секундах (INTERVAL=300), между проверками сообщений.
Теперь поправим /usr/local/etc/fetchmailrc

заменим pop.server на актуальное имя pop сервера
заменим user на актуальное имя пользователя
заменим pass на актуальный пароль

SMTP хост - IP адрес вашего сервера, с установленным qmail.
Это необходимо fetchmail чтобы не авторизоваться qmail.
poll pop.server
with protocol pop3
username user password pass is user@domain.xxx here
smtphost 192.168.9.10

Можно проверять несколько почтовых ящиков на одном сервере:
poll pop.server
with protocol pop3
username user password pass is user@domain.xxx here
smtphost 192.168.9.10
username user password pass is user@domain.xxx here
smtphost 192.168.9.10
username user password pass is user@domain.xxx here
smtphost 192.168.9.10
username user password pass is user@domain.xxx here
smtphost 192.168.9.10

Или для проверки нескольких серверов:

poll pop.server
with protocol pop3
username user password pass is user@domain.xxx here
poll pop.server
with protocol pop3
username user password pass is user@domain.xxx here
poll pop.server
with protocol pop3
username user password pass is user@domain.xxx here
Дадим права:
# chown fetchmail:nofiles fetchmailrc
# chmod 600 fetchmailrc

И создаём сервис:
# ln -s /var/qmail/supervise/fetchmail /service/

Через несколько секунд запустим:
# svstat /service/fetchmail/ /service/fetchmail/log/

И должны увидеть нечто подобное:
/service/fetchmail/: up (pid 50481) 4 seconds
/service/fetchmail/log/: up (pid 50482) 4 seconds

Если хотите форсировать проверку fetchmail'ом сообщений, то команда svc -t /service/fetchmail рестартует fetchmail.

Шаг 9. Установка EZMLM-IDX

# cd /usr/ports/mail/ezmlm-idx
# make install clean
# cp /usr/local/etc/ezmlm/ezmlmglrc.sample /usr/local/etc/ezmlm/ezmlmglrc
# cp /usr/local/etc/ezmlm/ezmlmrc.sample /usr/local/etc/ezmlm/ezmlmrc
# cp /usr/local/etc/ezmlm/ezmlmsubrc.sample /usr/local/etc/ezmlm/ezmlmsubrc

Шаг 10. Установка Autorespond

# cd /usr/ports/mail/autorespond
# make install clean

Шаг 11. Установка Vpopmail с поддержкой mysql и т.д.

# mkdir ~vpopmail/etc
# chown vpopmail:vchkpw ~vpopmail/etc

Настроим mysql-соединение для vpopmail:
# echo "localhost|0|vpopmailuser|vpopmailpassword|vpopmail" \
> ~vpopmail/etc/vpopmail.mysql
# chown vpopmail:vchkpw ~vpopmail/etc/vpopmail.mysql
# chmod 640 ~vpopmail/etc/vpopmail.mysql
# mysql -u root -p 

mysql> CREATE DATABASE vpopmail;
 Query OK, 1 row affected (0.04 sec)

mysql> GRANT select,insert,update,delete,create,drop ON vpopmail.* 
TO vpopmailuser@localhost IDENTIFIED BY 'vpopmailpassword';
mysql>
 Query OK, 0 rows affected (0.02 sec)
mysql> quit
Bye 

Теперь протестируем соединение к БД с правами пользователя, которого мы только что создали:
# mysql -u vpopmailuser -p

# cd ~vpopmail
# fetch http://freebsdrocks.ru/files/skel.tgz
# tar zxvf skel.tgz 

# chown -R vpopmail:vchkpw skel/
# chmod -R 700 skel/
# chmod 0600 skel/.qmail skel/mailfilter
# rm skel.tgz

# cd /usr/local
# rm -dfr vpopmail
# ln -s ~vpopmail /usr/local/vpopmail

# cd /var/qmail/supervise
# mkdir -m 1755 qmail-updater
# mkdir -m 755 qmail-updater/log
# cd qmail-updater/log
# fetch http://qmail.jms1.net/scripts/service-any-log-run
# mv service-any-log-run run
# chmod 755 run
# cd ..
# fetch http://qmail.jms1.net/scripts/pipe-watcher
# fetch http://qmail.jms1.net/scripts/update-qmail
# fetch http://qmail.jms1.net/scripts/service-qmail-updater-run
# mv service-qmail-updater-run run
# chmod 755 pipe-watcher update-qmail run

# ln -s /var/qmail/supervise/qmail-updater /service/ 

# svstat /service/qmail-updater /service/qmail-updater/log
/service/qmail-updater: up (pid 29257) 10 seconds
/service/qmail-updater/log: up (pid 29258) 10 second

# tail -f /service/qmail-updater/log/main/current

в другой консоле:
# echo testing > /tmp/update-qmail

Получим примерно такой вывод:
@40000000494a92242f70dfe4 starting
@40000000494a922433f1bcb4 waiting for input on /tmp/update-qmail
@40000000494a934b294b386c gathering input
@40000000494a934b29ac8e64 /-----
@40000000494a934b29ac9634 testing
@40000000494a934b29ac9e04 \-----
@40000000494a934b29aca5d4 running [/service/qmail-updater/update-qmail] (output follows)
@40000000494a934b29acada4 /-----
@40000000494a934b31440d8c Starting
@40000000494a934b31441174 Checking users/assign and users/cdb
@40000000494a934b31441944 Checking morercpthosts and morercpthosts.cdb
@40000000494a934b31442114 Checking virtualdomains
@40000000494a934b31442ccc Checking locals
@40000000494a934b3144349c   locals has changed
@40000000494a934b31443c6c Sending HUP to qmail-send
@40000000494a934b35a2d7b4 No matching processes were found
@40000000494a934b35bd87bc Checking validrcptto.cdb
@40000000494a934b35bd8f8c Checking auth.txt and auth.cdb
@40000000494a934b35bd975c Done
@40000000494a934b35e11934 \----- rv=0
@40000000494a934b35e6262c sleeping 5 seconds...
@40000000494a935035e89efc waiting for input on /tmp/update-qmaill 


# cd /usr/ports/mail/vpopmail/files
# rm patch-vlist.c patch-vlistlib.c patch-vpalias.c \
patch-vpopmail.c patch-vutil.c patch-config.h.in \
patch-configure patch-vdelivermail.c patch-vmysql.c patch-vpgsql.c
# cd /usr/ports/mail/vpopmail
# make extract
# cd work/vpopmail-5.4.26
# fetch http://qmail.jms1.net/vpopmail/vpopmail-5.4.26-skel4.patch
# patch < vpopmail-5.4.26-skel4.patch

…..
done

Зададим аргументы для сборки ( Внимание!!! писать в одну строку! Спасибо Jurik47.) :
# cd /usr/ports/mail/vpopmail
# make CONFIGURE_ARGS="--enable-logging=p --enable-skeleton --enable-onchange-script 
--enable-auth-module=mysql --disable-passwd --enable-clear-passwd --disable-many-domains 
--enable-auth-logging --enable-sql-logging --enable-valias --disable-mysql-limits"

# make install clean 


# cd ~vpopmail/etc
# fetch http://qmail.jms1.net/vpopmail/onchange

# chown vpopmail:vchkpw ~vpopmail/etc/onchange
# chmod 750 ~vpopmail/etc/onchange
# chmod +x ~vpopmail/etc/onchange

# tail -f /service/qmail-updater/log/main/current 

в другой консоле:
# cd ~vpopmail/bin

Создадим домен:
# ./vadddomain mydomain.com
Please enter password for postmaster:
enter password again:

Должен появится лог примерно следующего содержания:
@400000004947b8af046b4f3c Checking locals
@400000004947b8af046b5324 locals has changed
@400000004947b8af046b5af4 Sending HUP to qmail-send
@400000004947b8af097cc3ac No matching processes were found
@400000004947b8af09cf6404 Checking validrcptto.cdb
@400000004947b8af09cf6bd4 Checking auth.txt and auth.cdb
@400000004947b8af09cf73a4 Done
@400000004947b8af0a4ae14c \----- rv=0
@400000004947b8af0a5fc8dc sleeping 4 seconds...
@400000004947b8b30aa1755c waiting for input on /tmp/update-qmail
@400000004947d48408e9f1bc gathering input
@400000004947d484095a6e9c /-----
@400000004947d484095a766c onchange add_domain mydomain.com
@400000004947d484095a7e3c \-----
@400000004947d484095a860c running [/service/qmail-updater/update-qmail] (output follows)
@400000004947d484095a95ac /-----
@400000004947d4840e48845c Starting
@400000004947d4840e488c2c Checking users/assign and users/cdb
@400000004947d4840e489014 Checking morercpthosts and morercpthosts.cdb
@400000004947d4840e489bcc Checking virtualdomains
@400000004947d4840e48a39c virtualdomains has changed
@400000004947d4840e48ab6c Checking locals
@400000004947d4840e48b33c locals has changed
@400000004947d4840e48bb0c Sending HUP to qmail-send
@400000004947d48411646a5c No matching processes were found
@400000004947d484125c62d4 Checking validrcptto.cdb
@400000004947d484125c7274 Checking auth.txt and auth.cdb
@400000004947d484125c7a44 Done
@400000004947d48412e5d26c \----- rv=0
@400000004947d48412fc11bc sleeping 5 seconds...
@400000004947d48913500204 waiting for input on /tmp/update-qmail

Создадим почтовый ящик:
 ./vadduser -q 104857600  test@mydomain.com  -c USER password 

Должен появится лог примерно следующего содержания:
@400000004947d4840e48ab6c Checking locals
@400000004947d4840e48b33c locals has changed
@400000004947d4840e48bb0c Sending HUP to qmail-send
@400000004947d48411646a5c No matching processes were found
@400000004947d484125c62d4 Checking validrcptto.cdb
@400000004947d484125c7274 Checking auth.txt and auth.cdb
@400000004947d484125c7a44 Done
@400000004947d48412e5d26c \----- rv=0
@400000004947d48412fc11bc sleeping 5 seconds...
@400000004947d48913500204 waiting for input on /tmp/update-qmail
@400000004947d51200c80ce4 gathering input
@400000004947d51201121604 /-----
@400000004947d51201121dd4 onchange add_user test@mydomain.com
@400000004947d51201122d74 \-----
@400000004947d51201123544 running [/service/qmail-updater/update-qmail] (output follows)
@400000004947d51201123d14 /-----
@400000004947d51205842d94 Starting
@400000004947d51205843564 Checking users/assign and users/cdb
@400000004947d51205843d34 Checking morercpthosts and morercpthosts.cdb
@400000004947d51205844504 Checking virtualdomains
@400000004947d51205844cd4 Checking locals
@400000004947d512058454a4 Checking validrcptto.cdb
@400000004947d51205845c74 Checking auth.txt and auth.cdb
@400000004947d51205846444 Done
@400000004947d51205f3fe94 \----- rv=0
@400000004947d512060a5554 sleeping 5 seconds...
@400000004947d517066fe93c waiting for input on /tmp/update-qmail
@400000004947d517066ff10c gathering input
@400000004947d51706cfc064 /-----
@400000004947d51706cfc834 onchange mod_user test@mydomain.com
@400000004947d51706cfd004 \-----
@400000004947d51706cfd7d4 running [/service/qmail-updater/update-qmail] (output follows)
@400000004947d51706cfdfa4 /-----
@400000004947d5170bdefe6c Starting
@400000004947d5170bdf063c Checking users/assign and users/cdb
@400000004947d5170be831e4 Checking morercpthosts and morercpthosts.cdb
@400000004947d5170be839b4 Checking virtualdomains
@400000004947d5170be84184 Checking locals
@400000004947d5170be84954 Checking validrcptto.cdb
@400000004947d5170be85124 Checking auth.txt and auth.cdb
@400000004947d5170be858f4 Done
@400000004947d5170c9411e4 \----- rv=0
@400000004947d5170cb1040c sleeping 5 seconds...
@400000004947d51c0d0d4d0c waiting for input on /tmp/update-qmail

# cd ~vpopmail/bin
# chmod 6711 vchkpw
# chown vpopmail:vchkpw vchkpw

Шаг 12. Настраиваем Validrcptto

# cd /usr/ports/databases/cdb
# make extract

Внесём необходимые изменения:
# cd work/cdb-0.75/
# ee error.h

Найти эту строку:
extern int errno;

Закомментировать строку и добавить следующую:
/* extern int errno; */
#include <errno.h>

Должно стать так:
#ifndef ERROR_H
#define ERROR_H

/* extern int errno; */
#include <errno.h>

extern int error_intr;
extern int error_nomem;

# cd ../..
# make install clean

Установим модуль CDB_File:
# perl -MCPAN -e shell 
cpan> install CDB_File
cpan> exit 

# cd /usr/local/bin
# fetch http://qmail.jms1.net/scripts/mkvalidrcptto
# chmod 755 mkvalidrcptto 
# perl -c /usr/local/bin/mkvalidrcptto
/usr/local/bin/mkvalidrcptto syntax OK

Запускаем:
# mkvalidrcptto

Будет выведен список e-mail адресов на которые будет производится прием почтовых сообщений.
....

…...
# cd /var/qmail/control
# mkvalidrcptto -c validrcptto.cdb

Шаг 13. Установка Maildrop

# cd /usr/ports/mail/maildrop
# make install clean

Добавим ведение логов для maildrop
Подробности тут: http://www.antagonism.org/mail/maildrop-multilog.shtml
# mkdir -m 1755 /var/qmail/supervise/maildrop-logger
# mkdir -m 755 /var/qmail/supervise/maildrop-logger/log
# cd /var/qmail/supervise/maildrop-logger/log
# fetch http://freebsdrocks.ru/files/log-run
# mv log-run run
# chmod 755 run
# cd ..
# fetch http://freebsdrocks.ru/files/log-maildrop
# fetch http://freebsdrocks.ru/files/pipe-watcher
# fetch http://freebsdrocks.ru/files/maildrop-logger-run
# mv maildrop-logger-run run
# chmod 755 pipe-watcher log-maildrop run
# touch /tmp/log-maildrop
# chown vpopmail:vchkpw /tmp/log-maildrop
# ln -s /var/qmail/supervise/maildrop-logger /service

Проверим запустились ли сервисы:
# svstat /service/maildrop-logger /service/maildrop-logger/log

Получим такой вывод:
/service/maildrop-logger: up (pid 5571) 4 seconds
/service/maildrop-logger/log: up (pid 5572) 4 seconds

Шаг 14. Удаляем Sendmail

# killall sendmail
# mv /usr/sbin/sendmail /usr/sbin/sendmail.old
# chmod 0 /usr/sbin/sendmail.old

# echo "sendmail_enable=NONE" >> /etc/rc.conf
# echo "sendmail_submit_enable=NO" >> /etc/rc.conf
# echo "sendmail_outbound_enable=NO" >> /etc/rc.conf
# echo "sendmail_msp_queue_enable=NO" >> /etc/rc.conf 

# echo "NO_SENDMAIL=yes" >> /etc/make.conf
# echo "NO_MAILWRAPPER=yes" >> /etc/make.conf

# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail

Шаг 15. Настраиваем qmail

# cd ~root
# mkdir qmail
# cd qmail

Скачаем скрипт
# fetch http://freebsdrocks.ru/files/scripts.tgz

Распакуем архив:
# tar zxvf scripts.tgz 

Следующего содержания:
x pop3d_log
x pop3d_run
x qbonk
x qbonkns
x qfixq
x qmail.sh
x qmailctl
x rc
x send_log
x send_run
x smtpd_log
x smtpd_run

# rm scripts.tgz 

Отредактируем:
# ee smtpd_run

Исправим следующее:
IP=1.2.3.4 IP # адрес на котором будем слушать SMTP. 
#Не оставляйте равным 0 без веских причин. 
PORT=25 # Установите номер порта. 
SSL=0 # Не использовать SSL.
FORCE_TLS=0 # Отклонять прием почты от клиентов кто не использует STARTTLS.
DENY_TLS=0 # Не отклонять соединение с использованием команды STARTTLS.
AUTH=0 # Настроим 25 порт только для приёма входящей почты.
REQUIRE_AUTH=0 # Отклонять доступ клиентам не прошедшим аутентификацию (AUTH)

# ./qmail.sh
# cd ~root
# rm -dfr qmail

# echo  postmaster@domain.xxx >/var/qmail/alias/.qmail-root
# echo  postmaster@domain.xxx >/var/qmail/alias/.qmail-postmaster
# echo  postmaster@domain.xxx >/var/qmail/alias/.qmail-mailer-daemon

Пропишем с каким именем будет работать сервер:
# ee /var/qmail/supervise/qmail-pop3d/run

# mkdir /etc/tcp/
# cd /etc/tcp
# fetch http://freebsdrocks.ru/files/etc-tcp-makefile
# mv etc-tcp-makefile Makefile

Пропишем с каких адресов разрешена пересылка писем:
# ee /etc/tcp/smtp

127.:allow,RELAYCLIENT=""
192.168.0.:allow,RELAYCLIENT=""
:allow

# gmake

tcprules smtp.cdb smtp.tmp < smtp
chmod 644 smtp.cdb smtp

Шаг 16. Настраиваем SMTPS

# cd /usr/ports/sysutils/ucspi-ssl
# make install clean

# cd /var/qmail/supervise
# mkdir -m 1755 qmail-smtp-ssl
# cd qmail-smtp-ssl
# fetch http://freebsdrocks.ru/files/run.smtp.sslserver
# mv run.smtp.sslserver run
# ee run

IP=1.2.3.4  # IP адрес, который будем слушать. 
#Не оставляйте раным 0 без веских причин.
PORT=465  # Порт который будем слушать.
SSL=1   # Запуск как SSL-only service.
FORCE_TLS=0  # Не нужно если используется SSL services.
DENY_TLS=0  # Не нужно если используется SLS services.
AUTH=1  # Разрешить команду AUTH.
REQUIRE_AUTH=1  # Отбрасывать клиентов кто не прошел авторизацию (AUTH).

# chmod 700 run
# mkdir -m 755 log
# cd log
# fetch http://freebsdrocks.ru/files/service-any-log-run
# mv service-any-log-run run
# chmod 700 run

# cd /etc/tcp
# ee smtpssl

:allow

# ee Makefile

Приведём к такому виду
all: smtp.cdb smtpssl.cdb

# gmake

tcprules smtpssl.cdb smtpssl.tmp < smtpssl
chmod 644 smtpssl.cdb smtpssl

Создадим SSL key файл
# cd /var/qmail/control
# openssl req -newkey rsa:1024 -x509 -nodes -days 3650 -out servercert.pem \
-keyout servercert.pem

Generating a 1024 bit RSA private key
............................++++++
.............................++++++
writing new private key to 'servercert.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]: Страна
State or Province Name (full name) [Some-State]: Город
Locality Name (eg, city) []: Город
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Имя компании (опцияl)
Organizational Unit Name (eg, section) []: Имя подразделения (опция)
Common Name (eg, YOUR name) []: Обязательно к заполнению, смотри ниже
Это имя должно совпадать с именем которое будет видно клиентам их почтовыми 
программами, как имя SMTP-сервера.
Email Address []: Email (Обязательно к заполнению)

# chown root:qnofiles servercert.pem
# chmod 640 servercert.pem
# cp servercert.pem clientcert.pem
# chown root:qmail clientcert.pem

# chmod 640 clientcert.pem

# ln -s /var/qmail/supervise/qmail-smtp-ssl /service/
# svstat /service/qmail-smtp-ssl /service/qmail-smtp-ssl/log 

/service/qmail-smtp-ssl: up (pid 6279) 4 seconds
/service/qmail-smtp-ssl/log: up (pid 6280) 4 seconds 

# tail -f /service/qmail-smtp-ssl/log/main/current

Запустим qmail
# rehash
# qmailctl start

Starting qmail...

Starting qmail-send
Starting qmail-smtpd
Starting qmail-pop3d 

# qmailctl stat 
/service/qmail-send: up (pid 6997) 156 seconds
/service/qmail-send/log: up (pid 7003) 156 seconds
/service/qmail-smtpd: up (pid 7008) 156 seconds
/service/qmail-smtpd/log: up (pid 7012) 155 seconds
/service/qmail-pop3d: up (pid 7005) 156 seconds
/service/qmail-pop3d/log: up (pid 7006) 156 seconds
messages in queue: 0
messages in queue but not yet preprocessed: 0

Закончили с qmail.

Шаг 17. УСТАНОВКА SpamAssassin

# cd /usr/ports/mail/p5-Mail-SpamAssassin
# make install

очистить:
[ ]AS ROOT
[ ] SPAMC
[ ] GNUPG


# /usr/ports/mail/p5-Mail-SpamAssassin/work/Mail-SpamAssassin-3.x.x/build/
check_dependencies

Ругается :):
доустанавливаем необходимые модули (чтобы не ругался). В моём случае так:

# cd /usr/ports/mail/p5-Mail-SPF-Query && make install clean&& \
cd /usr/ports/net/p5-Net-Ident && make install clean && \
cd /usr/ports/net/p5-IO-INET6  && make install clean && \
cd /usr/ports/security/p5-IO-SSL  && make install clean && \
cd /usr/ports/mail/p5-Mail-DomainKeys  && make install clean && \
cd /usr/ports/mail/p5-Mail-DKIM && make install clean && \
cd /usr/ports/databases/p5-DBI && make install clean

# /usr/ports/mail/p5-Mail-SpamAssassin/work/Mail-SpamAssassin-3.2.5/build/
check_dependencies

Всё — ругани нет :)
# cd /usr/ports/mail/p5-Mail-SpamAssassin
# make clean

# cd /usr/local/etc/mail/spamassassin/
# cp local.cf.sample local.cf
# ee local.cf

rewrite_header Subject - Оставьте закоментированным (#).
Мы сконфигурируем qmail-scanner для перезаписи заголовкаc subject.
report_safe - Оставьте закоментированным.
trusted_networks - Оставьте закоментированным. 
Настроим в файле/etc/tcp/smtp.
lock_method flock - Оставьте закоментированным.
required_score - Раскомментируйте и установите в 4.3 или по-вашему усмотрению. 
use_bayes - Оставьте закоментированным. 
Если хотите использовать то посетите страничку:
http://goodcleanemail.com/index.php?option=com_content&task=view&id=12&Itemid=1 
bayes_ignore_header - Оставьте закоментированным.
Для более подробной информации смотрите: 
http://www.stearns.org/doc/spamassassin-setup.current.html

# mkdir -m 1755 /var/qmail/supervise/spamd
# mkdir -m 755 /var/qmail/supervise/spamd/log
# cd /var/qmail/supervise/spamd
# fetch http://freebsdrocks.ru/files/spamd-run
# mv spamd-run run
# chmod 755 run
# cd log
# fetch http://freebsdrocks.ru/files/log-run
# mv log-run run
# chmod 755 run

Создадим сервис:
# ln -s /var/qmail/supervise/spamd /service/ 

Через несколько секунд проверим:
# svstat /service/spamd/ /service/spamd/log/

/service/spamd/: up (pid 40771) 12 seconds
/service/spamd/log/: up (pid 40772) 12 seconds

# ps auxw | grep spam
qscand 47135 12.4  5.3 29560 27268  ??  S    10:06AM   0:00.06 spamd child (perl5.8.8)
qscand 47134 12.2  5.3 29560 27268  ??  S    10:06AM   0:00.07 spamd child (perl5.8.8)
root   47128 11.9  5.3 29560 27244  ??  S    10:06AM   0:03.63 /usr/
local/bin/perl5.8.8 -T -w /usr/local/bin/spamd -x -u qscand -H /tmp -s /dev/stderr
root   47126  0.0  0.1  1384   720  ??  S    10:06AM   0:00.02 supervise spamd 

# spamassassin --lint

Удалим скрипт запуска:
# rm /usr/local/etc/rc.d/sa-spamd

Шаг 18. УСТАНОВКА ClamAV

Если не установлен unzip, то установливаем его:
# cd /usr/ports/archivers/unzip && make install clean

# cd /usr/ports/security/clamav
# make install clean

[X] ARC           Enable arch archives support
[X] ARJ           Enable arj archives support
[X] LHA           Enable lha archives support
[X] UNZOO         Enable zoo archives support
[X] UNRAR         Enable rar archives support

# mkdir -m 1755 /var/qmail/supervise/clamav
# mkdir -m 1755 /var/qmail/supervise/freshclam
# mkdir -m 755 /var/qmail/supervise/clamav/log
# mkdir -m 755 /var/qmail/supervise/freshclam/log
# cd /var/qmail/supervise/clamav
# fetch http://freebsdrocks.ru/files/clamav-run
# mv clamav-run run
# chmod 755 run
# cd log
# fetch http://freebsdrocks.ru/files/log-run
# mv log-run run
# chmod 755 run
# cd /var/qmail/supervise/freshclam
# fetch http://freebsdrocks.ru/files/freshclam-run
# mv freshclam-run run
# chmod 755 run
# cd log
# fetch http://freebsdrocks.ru/files/log-run
# mv log-run run
# chmod 755 run

# ee /usr/local/etc/clamd.conf

#Example - пусть будет закоментирована или удалена
#LogFile - лог вести будем сами
#LogSysLog no - см. LogFile
PidFile /var/run/clamav/clamd.pid
DatabaseDirectory /var/db/clamav
LocalSocket /var/run/clamav/clamd.sock
FixStaleSocket yes - опционально
User - установить qscand
Foreground yes - необходимо для запуска clamav через daemontools

# ee /usr/local/etc/freshclam.conf

# Example
DatabaseDirectory /var/db/clamav
# UpdateLogFile - будем использовать multilog для логирования
# LogSyslog no - см. UpdateLogFile
PidFile /var/run/clamav/freshclam.pid
DatabaseOwner - сменить clamav на qscand
Foreground yes - необходимо для запуска clamav через daemontools
Для Вашего сведения, freshclam запускается каждые 2 часа по умолчанию.
Если вы хотите изменить его так что более или менее часто, просто изменить 
эти переменные в freshclam.conf 
# Number of database checks per day.
# Default: 12 (every two hours)
# Checks 24

# chown -R qscand:qscand /var/log/clamav
# chown -R qscand:qscand /var/run/clamav/
# chown qscand:qscand /var/db/clamav/

# ln -s /var/qmail/supervise/clamav /service/
# ln -s /var/qmail/supervise/freshclam /service/
# svstat /service/clamav/ /service/clamav/log

/service/clamav: up (pid 82396) 63 seconds
/service/clamav/log: up (pid 82446) 25 seconds

# svstat /service/freshclam/ /service/freshclam/log

Должны увидеть примерно следующее:
/service/freshclam/: up (pid 82409) 69 seconds
/service/freshclam/log: up (pid 82410) 69 seconds

# rm /usr/local/etc/rc.d/clamav-clamd
# rm /usr/local/etc/rc.d/clamav-freshclam

# ps auxw | grep clam
root   11252  0.0  0.1  1384   720  ??  I    10:24AM   0:00.02 supervise clamav
root   11254  0.0  0.1  1384   720  ??  I    10:24AM   0:00.02 supervise freshclam
qscand 11256  0.0 13.3 72916 67944  ??  I    10:24AM   0:10.37 /usr/local/sbin/clamd
qscand 11258  0.0  0.4  4308  2068  ??  I    10:24AM   0:00.53 /usr/local/bin/
freshclam -d --stdout

Шаг 19. УСТАНОВКА сканера

Предлагаю на выбор qmail-scanner или simscan.

УСТАНОВКА qmail-scanner

Должен быть установлен bash.
В портах пока версия qmail-scanner-2.01_4
# cd /usr/ports/mail/qmail-scanner
# make extract

Options for qmail-scanner 2.01_4
[X] TNEF Mark Simpson's Patch (Recommended)
[X] FIX_MIME Fix broken MIME messages
[X] REDUNDANT Scan attachments and body mails
[X] NORMALIZE Decode encoded headers per MIME Base64
[X] CWRAPPER use C wrapper (no suid perl script needed)

# cp /usr/ports/distfiles/qmail-scanner-2.01.tgz ~root/ 
# cd ~root/
# tar zxvf qmail-scanner-2.01.tgz 
# fetch \
http://toribio.apollinare.org/qmail-scanner/download/q-s-2.01st-20070204.patch.gz
# gunzip q-s-2.01st-20070204.patch.gz
# cd ~root/qmail-scanner-2.01/
# patch < ../q-s-2.01st-20070204.patch

.......
done
./configure --admin postmaster --domain mydomain1.com \
--admin-description "Antivirus mydomain1" \
--local-domains "mydomain1.com,mydomain2.com,mydomain3.com" \
--silent-viruses auto --virus-to-delete 1 --skip-text-msgs 1 \
--debug 0 --minidebug 3 --add-dscr-hdrs 1 \
--dscr-hdrs-text "X-Antivirus-mydomain1" --normalize yes \
--archive 0 --settings-per-domain 1 --max-scan-size 100000000 \
--unzip 1 --max-zip-size 80000000 --max-unpacked-files 2000 \
--redundant 1 --log-details 0 --log-crypto 0 --fix-mime 2 \
--ignore-eol-check 1 --sa-subject ":SPAM:" --sa-delta 0.5 \
--sa-alt 1 --sa-debug 1 --sa-report 0 --sa-quarantine 1.8 \
--sa-delete 3.6 --sa-reject 1 --scanners "auto" --install 1

Теперь для проверки встроенного сканера запустите команду:
# /var/qmail/bin/qmail-scanner-queue.pl -r

Эта команда должна вернуть список из нескольких вирусов.
Затем под непривилигированным пользователем выполните команду:
# /var/qmail/bin/qmail-scanner-queue.pl -g

При успешном создании базы данных, вы получите сообщение, подобное этому:
perlscanner: generate new DB file from /var/spool/qscan/quarantine-events.txt
perlscanner: total of 12 entries.

Сейчас необходимо перезапусть qmail, чтобы qmail-scanner встроился в очередь.
Наш run-скрипт, созданный ранее, не требует каких либо дополнительных настроек.
# qmailctl stop
# qmailctl start

Теперь пришло время протестировать Qmail-Scanner, Spamassassin и Clam AV на корректную работу.
В архиве с Qmail-Scanner содержится прекрасный скрипт для тестирования:
# ~root/qmail-scanner-2.01/contrib/test_installation.sh -doit

Успешный тест должен завершиться следующим:
2 сообщения будут помещены в карантин Clam Antivirus в /var/spool/quarantine/new,
2 сообщения будут помещены в почтовый ящик, указанный в конфигурационном скрипте Qmail-scanner.
Вполне возможно, что вы не получите сообщения об инфицированных e-mail'ах.

Установка simscan (переход с qmail-scanner на simscan)

Установка:
# cd /usr/ports/mail/simscan && make extract

Options for simscan 1.4.0_3

[X] CLAMAV    Support for ClamAV Virus Scanning
[X] RIPMIME   Ripmime Processing (if Clamav ScanMail disabled)
[X] SPAMD     Support for SpamAssassin Spam Filtering
[X] USER      Turn On Per User SpamAssassin (required SPAMD)
[X] DOMAIN    Turn On Per Domain Based Checking
[X] ATTACH    Turn On Attachment Scanning (required CLAMAV)
[ ] DROPMSG   Drop Message in Case of Virus Found
[X] PASSTHRU  Pass Spam Thru, Do Not Reject (required SPAMD)
[X] HEADERS   Add a Received Line With Versions of Scanners

Перейдем в папку с исходниками:
# cd work/simscan-1.4.0/

Скачаем патч и установим:
# fetch http://qmail.jms1.net/simscan/simscan-1.4.0-umask.patch

simscan-1.4.0-umask.patch 100% of 473 B 71 kBps

Применим патч:
# patch < simscan-1.4.0-umask.patch

Hmm... Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|diff -ruN simscan-1.4.0-factory/simscan.c simscan-1.4.0-patched/simscan.c
|--- simscan-1.4.0-factory/simscan.c 2007-10-29 10:15:05.000000000 -0400
|+++ simscan-1.4.0-patched/simscan.c 2007-11-23 01:33:48.000000000 -0500
--------------------------
Patching file simscan.c using Plan A...
Hunk #1 succeeded at 283.
done


# cd /usr/ports/mail/simscan && make install clean 

Доустановилось:
ripmime-1.4.0.6
p5-Mail-SpamAssassin-3.2.5_1
p5-Net-DNS-0.65
p5-Digest-SHA1-2.11
p5-Digest-HMAC-1.01
simscan-1.4.0_3

Зададим владельца:
# chown -R simscan:simscan /var/qmail/simscan

Внесем изменения:
# cd  /etc/tcp/
# ee smtp

127.:allow,RELAYCLIENT=""
192.168.0.:allow,RELAYCLIENT="",QMAILQUEUE="/var/qmail/bin/simscan"
:allow,QMAILQUEUE="/var/qmail/bin/simscan"

Пересоздадим базу:
# gmake

tcprules smtp.cdb smtp.tmp < smtp
chmod 644 smtp.cdb smtp

# qmailctl restart

Restarting qmail:
* Stopping qmail-smtpd.
* Sending qmail-send SIGTERM and restarting.
* Sending qmail-pop3d SIGTERM and restarting.
* Restarting qmail-smtpd.

Изменяем владельца:
# ee /usr/local/etc/clamd.conf/

#User qscand
User clamav

# ee /usr/local/etc/freshclam.conf

#DatabaseOwner qscand
DatabaseOwner clamav

Изменяем пользователя от которого запускаются сервисы:
# ee /service/spamd/run

exec spamd -x -u clamav -H /tmp -s /dev/stderr

Возвращаем права владельцу clamav, если использовали qmail-scanner:
# chown -R clamav:clamav /var/log/clamav
# chown -R clamav:clamav /var/run/clamav/
# chown clamav:clamav /var/db/clamav/

Перезапустим сервис:
# svc -u /service/clamav/ && svc -u /service/clamav/

Смотрим:
# tail -f -n 50 /service/clamav/log/main/current

Увидим лог примерно следующего содержания:
@400000004999193b13514254 Limits: Recursion level limit set to 16.
@400000004999193b1358cfec Limits: Files limit set to 10000.
@400000004999193b13604de4 Archive support enabled.
@400000004999193b136f2a94 Algorithmic detection enabled.
@400000004999193b13772d5c Portable Executable support enabled.
@400000004999193b137ebaf4 ELF support enabled.
@400000004999193b1387522c Mail files support enabled.
@400000004999193b138ef734 OLE2 support enabled.
@400000004999193b13919afc PDF support enabled.
@400000004999193b13981724 HTML support enabled.
@400000004999193b139e31a4 Self checking every 1800 seconds.
@400000004999193b13ad029c Set stacksize to 1114112
@4000000049991a9537243024 Socket file removed.
@4000000049991a95373041fc Pid file removed.
@4000000049991a95373d886c --- Stopped at Mon Feb 16 10:49:31 2009
@4000000049991a9f16ab46ac ERROR: LOCAL: Socket file
/var/run/clamav/clamd.sock could not be bound: Permission denied
@4000000049991aa70b23e3fc ERROR: LOCAL: Socket file
/var/run/clamav/clamd.sock could not be bound: Permission denied
@4000000049991aad0655d574 ERROR: LOCAL: Socket file
/var/run/clamav/clamd.sock could not be bound: Permission denied
@4000000049991aaf1af8da94 ERROR: LOCAL: Socket file
/var/run/clamav/clamd.sock could not be bound: Permission denied
@4000000049991ab131de0f54 ERROR: LOCAL: Socket file
/var/run/clamav/clamd.sock could not be bound: Permission denied
@4000000049991ab40b6a2074 ERROR: LOCAL: Socket file
/var/run/clamav/clamd.sock could not be bound: Permission denied
@4000000049991ab61d06715c ERROR: LOCAL: Socket file
/var/run/clamav/clamd.sock could not be bound: Permission denied
@4000000049991ab82e20f3cc ERROR: LOCAL: Socket file
/var/run/clamav/clamd.sock could not be bound: Permission denied
@4000000049991abb05ef5b14 ERROR: LOCAL: Socket file
var/run/clamav/clamd.sock could not be bound: Permission denied
@4000000049991abd17c61904 ERROR: LOCAL: Socket file
/var/run/clamav/clamd.sock could not be bound: Permission denied
@4000000049991abf2b79b12c ERROR: LOCAL: Socket file
/var/run/clamav/clamd.sock could not be bound: Permission denied
@4000000049991ac203bef624 ERROR: LOCAL: Socket file
/var/run/clamav/clamd.sock could not be bound: Permission denied
@4000000049991ac4161abac4 ERROR: LOCAL: Socket file
/var/run/clamav/clamd.sock could not be bound: Permission denied
@4000000049991ac626298224 ERROR: LOCAL: Socket file
/var/run/clamav/clamd.sock could not be bound: Permission denied
@4000000049991ac83a8c3e3c ERROR: LOCAL: Socket file
/var/run/clamav/clamd.sock could not be bound: Permission denied
@4000000049991acb118bd434 ERROR: LOCAL: Socket file
/var/run/clamav/clamd.sock could not be bound: Permission denied
@4000000049991acd24d4758c ERROR: LOCAL: Socket file
/var/run/clamav/clamd.sock could not be bound: Permission denied
@4000000049991acf34c9dcd4 ERROR: LOCAL: Socket file
/var/run/clamav/clamd.sock could not be bound: Permission denied
@4000000049991ad20af146f4 ERROR: LOCAL: Socket file
/var/run/clamav/clamd.sock could not be bound: Permission denied
@4000000049991ad420683de4 ERROR: LOCAL: Socket file
/var/run/clamav/clamd.sock could not be bound: Permission denied
@4000000049991ad631907424 ERROR: LOCAL: Socket file /
var/run/clamav/clamd.sock could not be bound: Permission denied
@4000000049991ad9083a4ce4 Limits: Global size limit set to 104857600 bytes.
@4000000049991ad90841da7c Limits: File size limit set to 26214400 bytes.
@4000000049991ad908496814 Limits: Recursion level limit set to 16.
@4000000049991ad90850f1c4 Limits: Files limit set to 10000.
@4000000049991ad908586bd4 Archive support enabled.
@4000000049991ad9086014c4 Algorithmic detection enabled.
@4000000049991ad90867aa2c Portable Executable support enabled.
@4000000049991ad9086f4764 ELF support enabled.
@4000000049991ad90876dccc Mail files support enabled.
@4000000049991ad9087f1a2c OLE2 support enabled.
@4000000049991ad90886b37c PDF support enabled.
@4000000049991ad9088e9aec HTML support enabled.
@4000000049991ad9088fcf84 Self checking every 1800 seconds.
@4000000049991ad908963c0c Set stacksize to 1114112

Правим (запрещаем прием вложений с расширением .exe):
# ee /var/qmail/control/simcontrol
mydomain.com:clam=yes,spam=yes,attach=.exe
:clam=yes,spam=yes,trophie=no,spam_hits=17

Создадим базу:
# /var/qmail/bin/simscanmk -g

simscan versions cdb file built. /var/qmail/control/simversions.cdb

Добавим пользователя simscan в группу clamav:
# pw groupmod clamav -m simscan

# less  /etc/group | grep clamav:

clamav:*:106:simscan

Изменим скрипт запуска службы qmail-smtpd:
# ee /service/qmail-smtpd/run

Разкомментируем:
QMAILQUEUE="$VQ/bin/simscan"

SIMSCAN_DEBUG=2
SIMSCAN_DEBUG_FILES=1

Закомментируем:
#QMAILQUEUE="$VQ/bin/qmail-scanner-queue.pl"

Тестируем:
# cd ~root/
# echo 'hi, testing' > mailtest.txt
# time env QMAILQUEUE=/var/qmail/bin/simscan SIMSCAN_DEBUG=2 
SIMSCAN_DEBUG_FILES=1 /var/qmail/bin/qmail-inject postmaster@mydomain.com < mailtest.txt

Должны получить примерно следующее:
simscan: cdb looking up
simscan: cdb for found clam=yes,spam=yes,trophie=no,spam_hits=17
simscan: pelookup clam = yes
simscan: pelookup spam = yes
simscan: pelookup trophie = no
simscan: trophie = no/0
simscan: pelookup spam_hits = 17
simscan: unimplemented flag spam_hits = 17
simscan: starting: work dir: /var/qmail/simscan/1234791758.108397.12154
simscan: pelookup: called with postmaster@mydomain.com
simscan: pelookup: domain is mail.mydomain.com
simscan: cdb looking up mail.mydomain.com
simscan: pelookup: local part is postmaster
simscan: cdb looking up postmaster@mail.mydomain.com
simscan: pelookup: called with postmaster@mydomain.com
simscan: pelookup: domain is mydomain.com
simscan: cdb looking up mydomain.com
simscan: cdb for mydomain.com found clam=yes,spam=yes,attach=.exe
simscan: pelookup clam = yes
simscan: pelookup spam = yes
simscan: pelookup attach = .exe
simscan: attachment flag attach = .exe
simscan: .exe is attachment number 0
simscan: pelookup: local part is postmaster
simscan: cdb looking up postmaster@mydomain.com
simscan: cdb looking up version attach
simscan: calling clamdscan
simscan: cdb looking up version clamav
simscan: normal clamdscan return code: 0
simscan: calling spamc
simscan: calling /usr/local/bin/spamc spamc -u postmaster@mydomain.com
simscan: cdb looking up version spam
simscan:[12153]:CLEAN (2.90/5.00):0.2986s::(null):
postmaster@mydomain.com: postmaster@mydomain.com
simscan: done, execing qmail-queue
simscan: qmail-queue exited 0
0.006u 0.146s 0:00.37 37.8% 71+814k 0+8io 0pf+0w

Увеличиваем производительность сканирования.

Можно (нужно) применить подобное и при использовании qmail-scanner :)

Создаём виртуальный диск (RAM disk) для simscan:

Добавить в /boot/loader.conf
tmpfs_load="YES"

или пересобрать ядро с опцией:
options TMPFS

Загрузим модулем (если нет поддержки в ядре):
# kldload tmpfs
# kldstat | grep tmpfs

3 1 0xc0d83000 97d0 tmpfs.ko

#  mount -t tmpfs -o mode=2750,uid=simscan,gid=simscan none /var/qmail/simscan

Получим системное сообщение:
kernel: WARNING: TMPFS is considered to be a highly experimental feature in FreeBSD.

Т.е. используем данное решение на свой страх и риск.

# df -h

Filesystem Size Used Avail Capacity Mounted on
/dev/ad2s1a 496M 160M 296M 35% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/ad2s1e 496M 566K 456M 0% /tmp
/dev/ad2s1f 33G 4.1G 26G 14% /usr
/dev/ad2s1d 1.4G 636M 713M 47% /var
tmpfs 1.1G 4.0K 1.1G 0% /var/qmail/simscan

Монтирум при загрузке:
# ee /etc/fstab

none /var/qmail/simscan tmpfs rw,mode=2750,uid=74,gid=74 0 0

И действительно получаем прирост в скорости обработки....

Шаг 20. Установка  Courier-IMAP

Установим Courier-IMAP. http://www.courier-mta.org/imap/
Перед началом установки добавим следующие опции:
# echo "WITHOUT_X11=yes" >> /etc/make.conf
# echo "NO_X=yes" >> /etc/make.conf
# cd /usr/ports/lang/expect
# make install clean
# cd /usr/ports/mail/courier-imap
# make install clean

Выберем:
[X] AUTH_VCHKPW  Vpopmail/vchkpw support

Далее ставимl courierpassd:
# cd /usr/ports/security/courierpassd
# make install clean 

Удалим файл автозапуска в папке /usr/local/etc/rc.d:
# rm /usr/local/etc/rc.d/courier-authdaemond

и убедимся, что следующей строки нет в  /etc/rc.conf:
enable_ courier-authdaemond=”YES”

Далее необходимо для запуска с помощью daemontools создать структуру каталога сервиса courierpasswd.
Я использую /var/qmail/supervise для физического размещения моих директорий с сервисами.
# cd /var/qmail/supervise
# mkdir -m 1755 courier-passwd
# cd courier-passwd
# fetch http://freebsdrocks.ru/files/service-courierpassd-run
# mv service-courierpassd-run run
# chmod 755 run
# mkdir -m 755 log
# cd log
# fetch http://freebsdrocks.ru/files/service-any-log-run
# mv service-any-log-run run
# chmod 755 run

Запустим как сервис:
# ln -s /var/qmail/supervise/courier-passwd /service/courier-passwd

Проверим:
# svstat /service/courier-passwd/ /service/courier-passwd/log/

Настроим:  
# cd /usr/local/etc/courier-imap
# cp imapd.cnf.dist imapd.cnf
# cp imapd-ssl.dist imapd-ssl 

Создадим imap cert:
# /usr/local/share/courier-imap/mkimapdcert

Отредактируем:
# ee /usr/local/etc/authlib/authdaemonrc

Изменим следующее значение:
authmodulelist="authvchkpw"

Будем запускать courier-authdaemond как сервис:  
# cd /var/qmail/supervise
# mkdir -m 1755 courier-authdaemond
# cd courier-authdaemond
# fetch http://freebsdrocks.ru/files/courier-authdaemond-run
# mv courier-authdaemond-run run
# chmod 755 run
# mkdir -m 755 log
# cd log
# fetch http://freebsdrocks.ru/files/service-any-log-run
# mv service-any-log-run run
# chmod 755 run 

И в конце создадим линк для authdaemond в /service:
# ln -s /var/qmail/supervise/courier-authdaemond /service/courier-authdaemond

Посмотрим работает ли courier-authdaemond:
# svstat /service/courier-authdaemond/ /service/courier-authdaemond/log/

Удалим скрипты автозапуска созданные при сборке courier в папке /usr/local/etc/rc.d:
# rm /usr/local/etc/rc.d/courier-imap-imapd
# rm /usr/local/etc/rc.d/courier-imap-imapd-ssl 

Удалим следующие строки в /etc/rc.conf (необходимо чтобы не стартовал дважды.):
Enable_courier-imap-imapd=”YES”
Enable_courier-imap-imapd-ssl=”YES”

Также создадим директорию для courierpassd для запуска оного сервисом:
# cd /var/qmail/supervise
# mkdir -m 1755 courier-imap
# cd courier-imap
# fetch http://freebsdrocks.ru/files/courier-imap-run 
# mv courier-imap-run run
# chmod 755 run
# mkdir -m 755 log
# cd log
# fetch http://freebsdrocks.ru/files/service-any-log-run 
# mv service-any-log-run run
# chmod 755 run

Создадим линк на courier-imap в /service:
# ln -s /var/qmail/supervise/courier-imap /service/courier-imap

Проверим работу courier-imap:
# svstat /service/courier-imap/ /service/courier-imap/log/

PLAIN IMAP  будем использовать для localhost. IMAP SSL можно разрешить на внешних интефейсах.
# cd /var/qmail/supervise
# mkdir -m 1755 courier-imap-ssl
# cd courier-imap-ssl
# fetch http://freebsdrocks.ru/files/courier-imap-ssl-run 
# mv courier-imap-ssl-run run
# chmod 755 run
# mkdir -m 755 log
# cd log
# fetch http://freebsdrocks.ru/files/service-any-log-run 
# mv service-any-log-run run
# chmod 755 run 

Создадим линк на imap-ssl в /service:
# ln -s /var/qmail/supervise/courier-imap-ssl /service/courier-imap-ssl

Используем модифицированный скрипт qmailctl названный imapctl.
# cd /var/qmail/bin
# fetch http://freebsdrocks.ru/files/imapctl
# chmod 755 imapctl

Если запустить imapctl stat, увидим работающие сервисы  imap.
# ./imapctl stat

/service/courier-authdaemond: up (pid 39026) 1129 seconds
/service/courier-authdaemond/log: up (pid 39027) 1129 seconds
/service/courier-imap: up (pid 42398) 594 seconds
/service/courier-imap/log: up (pid 42399) 594 seconds
/service/courier-passwd: up (pid 36102) 1590 seconds
/service/courier-passwd/log: up (pid 36103) 1591 seconds

Шаг 21. Установка SquirrelMail

SquirrelMail — клиент электронной почты с веб-интерфейсом, написанный на PHP.
Для получения дополнительной информации см. http://www.squirrelmail.org
Чтобы установить squirrelmail из портов, запустите следующую команду:
# cd /usr/ports/mail/squirrelmail
# make install clean

Squirrelmail будет инсталлирован в /usr/local/www и проинсталирует необходимые модули.
Можете сделать symlink в месторасположение вашей папки с webmail.
# ln -s /usr/local/www/squirrelmail/ /usr/local/www/apache22/webmail

Сконфигурируем Squirrelmail
Теперь необходимо сконфигурировать  Squirrelmail. Выполните команду для перехода в режим настройки:
# cd /usr/local/www/apache22/webmail/config 
# cd /path/to/webmail/config
# ./conf.pl

Появится меню. Пункт 1 - Organization Preferences. Любые из настроек внутри этого окна являются
необязательными. Когда Вы закончите, нажмите клавишу S, чтобы сохранить, а затем нажмите Ввод
и затем нажмите клавишу R, чтобы вернуться в главное меню.

Перейдём к этапу 2 - Server settings. Введите 1 Domain и нажмите Ввод на клавиатуре.
Вы можете ввести имя сервера или локальный IP или внешний IP, какой вы предпочитаете.
Если ваш почтовый сервер находится позади маршрутизатора / брандмауэра, используйте
локольный IP. Если  используете внешний IP, то имя хоста или статический IP будут
работать хорошо. Если вы используете службу DynDNS как dyndns.org,  рекомендуется
использовать локальные IP и поместить Qmail сервер после маршрутизатора / брандмауэра.


В соответствии с настройками сервера используйте следующее. Измените XXXX на IP своего
почтового сервера:
1.  Domain                 : x.x.x.x
2.  Invert Time            : false
3.  Sendmail or SMTP       : Sendmail

A.  Update IMAP Settings   : localhost:143 (other)
B.  Change Sendmail Config : /var/qmail/bin/sendmail

Нажать Y и потом Enter. Нажать S для сохранения и снова Enter. Нажать Q для выхода из меню.

Зададим владельца для вложений squirrelmail:
# chown www:www /var/spool/squirrelmail

Настроим php.ini (если он еще не сущществует):
# cd /usr/local/etc
# cp php.ini-recommended php.ini

Тестируем Squirrelmail
Если увидите такую ошибку при просмотре сайта squirrelmail:

Fatal error: Call to undefined function: preg_replace() in /usr/local/www/apache22/data/functions/global.php on line 165

Установите следующий порт:
# cd /usr/ports/devel/php4-pcre
# make install clean

Чтобы убедится что Squirrelmail работает правильно, необходумо выполнить тест конфигурации. Выполните его, проследовав по следующему адресуl. http://your-squirrelmail-location/src/configtest.php. Замените your-squirrelmail-location на ваш IP или hostname. Он покажет вам что ваш squirrelmail настроен правильно. Если видите такое:
ERROR: Error connecting to SMTP server "localhost:25".Server error: (0) Unknown error: 0

Значит не всё в порядке. Значит нет доступа для приема сообщений на 25 порт. После установки squirrelmail можетеустановит плагин change_pass-2.7-1.4.x Чтобы иметь возможность изменять пароли в squirrelmail.

http://squirrelmail.org/plugin_download.php?id=21&rev=1072


Шаг 22.Установка QmailAdmin с onchange

Установим qmailadmin с наложением патча onchange
# cd /usr/ports/mail/qmailadmin
# make extract
# cd work/qmailadmin-1.2.10/
# fetch http://qmail.jms1.net/vpopmail/qmailadmin-1.2.11-onchange.3.patch
# patch < qmailadmin-1.2.11-onchange.3.patch
# cd /usr/ports/mail/qmailadmin

Писать в одну строку:
# make CONFIGURE_ARGS="--enable-modify-spam=Y 
--enable-spam-command='|preline -f /usr/local/bin/maildrop mailfilter' 
--enable-cgibindir=/usr/local/www/apache22/cgi-bin 
--enable-htmldir=/usr/local/www/apache22/data/qmailadmin 
--enable-imagedir=/usr/local/www/apache22/data/images/qmailadmin 
--enable-help --enable-autoresponder-path=/usr/local/bin"

# make install

Настраиваем qmailadmin
Когда мы добавляем новых пользователей через qmailadmin, мы хотим, чтобы борьба со спамом бьла  включена по умолчанию. Необходимо изменить:
# vi /usr/local/share/qmailadmin/html/add_user.html

Наити следующую строку:
<input type="checkbox" name="spamcheck">

И изменить на:
<input type="checkbox" name="spamcheck" checked>

Это разрешит при создании аккаунта пользователя средствами qmailadmin включения в ящик пользователя папки обнаружения спама ("Spam Detection")
# cd /usr/ports/mail/qmailadmin
# make clean

Теперь перейдя: http://www.domain.xxx/cgi-bin/qmailadmin увидите экран с предложение ввода имени пользователя и пароля:
Можно создавать почтовые ящики для вашего домена. Если надо добавить домен, используйте утилиту ~vpopmail/bin/vadddomain

Шаг 23.Установка vQadmin

# cd /usr/ports/mail/vqadmin
# make CONFIGURE_ARGS="--enable-cgibindir=/usr/local/www/apache22/cgi-bin/ 
--enable-htmldir=/usr/local/www/apache22/data"
# make install clean

Перейдем:
# cd /usr/local/www/apache22/cgi-bin/vqadmin/

Отредактируем:
# ee .htaccess

Приведем к виду:
AuthType Basic
AuthUserFile /usr/local/etc/apache22/conf/.htpasswd
AuthName vQadmin
require valid-user
satisfy any

Зададим владельца:
# chown www .htaccess

Создадим пользователя и пароль:
# htpasswd -bc /usr/local/etc/apache22/conf/.htpasswd admin adminpassword

Adding password for user admin

# ee /usr/local/etc/apache22/httpd.conf
<Directory "/usr/local/www/apache22/cgi-bin/vqadmin">
    deny from all
    Options ExecCGI
    AllowOverride AuthConfig
    Order deny,allow
</Directory>

# apachectl restart
# chmod 644 /usr/local/www/apache22/cgi-bin/vqadmin/.htaccess 

Запускаем
http://www.domain.com/cgi-bin/vqadmin/vqadmin.cgi

p.s.: Принимается конструктивная критика и замечания.
Материалы:
http://www.freebsdrocks.ru
http://www.freebsdrocks.net
http://www.qmailrocks.org
http://www.qmailrocks.ru
http://www.google.com



размещено: 2009-02-08,
последнее обновление: 2009-08-19,
автор: Gegemon

Ixtis, 2009-02-09 в 8:13:45

Поддержка suidperl не требуется, когда у тебя qmail-scanner собирается с cwrapper. Не нужно suidperl'а. Когда тем более suidperl потенциальная дыра в безопасности.

Dark, 2009-02-09 в 13:56:03

Если память не изменяет, то SUID_PERL необходим для SquirrelMail. Критичных дыр в безопасности там не находилось уже давно, однако замечание правильное. Уж лучше какого-нибудь PHP-клиента и спаться будет спокойнее.

Gegemon, 2009-02-09 в 14:44:08

SUID_PERL нужен и для vpopmail как минимум.:)
А с замечаниями, обсуждением, предложениями добро пожаловать сюда.

abigor, 2009-02-11 в 12:21:02

># ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
># ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
плохо! пользуй /etc/mail/mailer.conf это будет правильно

abigor, 2009-02-11 в 12:36:22

Может лучше не советовать новичкам ставить php4??
>cd /usr/ports/devel/php4-pcre
или это опечатка?
----------------------
вы уж меня извините, но exim как-то проще, сам в свое время ковырял qmail все было отлично до тех пор пока объем спама не стал доходить до пятизначных цифр в сутки, переезд на exim исправил положение.
-----------------------
А не страшно пользовать продукт который уже давно не сопровождается, а функционал добавляется сторонними патчами, в которых порой не понятно чего правится

Gegemon, 2009-02-11 в 13:27:38

To abigor: ответил в форуме.

arksu, 2009-03-06 в 14:15:11

респект автору!
все таки ввел в продакшн седня свой почтарь
сделал на основе qmail-spamcontrol (сильно переписанный мной qmail-smtpd)

спасибо автору за много находок в этой статье. много почерпнул и настроил в плане spamassasin, clamav, courier-imap

З.Ы. лично я считаю кумейл лучшим почтовым сервером на никсах (а может и не только на никсах) за его расширяемость и гибкость в настройке, зе легко понимаемые исходники ;) которые легко модифицировать под себя

Jurik47, 2009-03-08 в 16:26:40

cd /usr/ports/mail/vpopmail
# make CONFIGURE_ARGS="--enable-logging=p --enable-skeleton --enable-onchange-script \
--enable-auth-module=mysql --disable-passwd --enable-clear-passwd --disable-many-domains \
--enable-auth-logging --enable-sql-logging --enable-valias --disable-mysql-limits"
*************
При всём при этом vpopmail собирается почему-то с поддержкой CDB, но не MySQL. Глюк?

Gegemon, 2009-03-08 в 18:40:51

To: Jurik47
Зайди в ветку обсуждения. Там решим твою проблему.

Gegemon, 2009-03-08 в 18:53:36

To arksu:
Пожалуйста!

JIeXa, 2009-08-12 в 17:20:33

мм. Навороченная система получается. suid bit для vpopmail - а зачем простите?
долгое время пользовался qmail.. Спам, куча проблем безопасности, глюки.. Хотя почтарь вобщем не плохой, но лично у меня не хватает квалификации "дообработать напильником" в нужном объеме.
ЗЫ Статья с кумейлрокс.орг практически полностью.
По мне для новичка вполне хватило бы
qmail+vpopmail(без мускуля)+ucspi

Gegemon, 2009-08-12 в 17:53:20

угу...
а qmailrocks.org - c freebsdrocks.net.... :)
А сам автор патча не рекомендует ставить по qmailrocks.org.
http://qmail.jms1.net/qmailrocks.shtml
Так что кто у кого я бы не стал голословно заявлять. :)
Да и где кстати там про Simscan???
А уважаемый?

ALex_hha, 2009-08-18 в 23:39:28

Хосподи, та когда ж он наконец то умрет. И нравится же народу заниматься никрофилией

Gegemon, 2009-08-19 в 9:52:40

Не умрет. sendmail не умер. И qmail не умрет. и exim не умрет. и postfix не умрет. все работает. просто руки и голова на месте должны быть.



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.1058 секунд
Из них PHP: 63%; SQL: 37%; Число SQL-запросов: 85 шт.
У Вас отключено GZIP-сжатие в браузере. Размер страницы 222268