Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
  настройка
  подсчёт трафика
  программы
  почтовые системы
  FreeBSD Mail Howto
  exim & dovecot
  exim & courier-imap
  squirrelmail
  exim + saslauthd + courier-imap
  postfix -> exim
  sendmail -> exim
  imapsync
  Postfix + LDAP
  maildrop & postfix
  DSPAM
  Exim + LDAP
  ISPmanager
  Backup MX
  exim + exchange
  exim + dovecot + win2003 AD
  RoundCube
  qmail-ldap + AD
  spamooborona
  exim&dovecot + fetchmail + SSL
  Postfix + DBMail
  Mailgraph
  smfsav
  Exim+PgSQL
  Postfix + Dovecot + Clamav + SpamAssasin + LDAP vs MYSQL
  Simplemail Admin
  MTA qmail full install
  OpenLDAP адресная книга
  POSTFIX Статистики
  Backup MX (exim)
  Exim + dovecot + PgSQL + web
  Exim+dovecot2+dspam
  Возможности Dovecot 2
  Dovecot2 configfiles RUS
  Почтовый сервер по шагам ч.1
  Почтовый сервер по шагам ч.2
  Почтовый сервер по шагам ч.3
  Шелезяки
  Мелочи
  Файловая система
  WWW
  Security
  system
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco


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



Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?f=20&t=15234&start=0.

размещено: 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 не умрет. все работает. просто руки и голова на месте должны быть.



Хостинг HOST-FOOD

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
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 6 чел.
За последние 30 мин было: 42 человек
За сегодня было
1056 показов,
187 уникальных IP
 

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

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0957 секунд
Из них PHP: 66%; SQL: 34%; Число SQL-запросов: 85 шт.
Исходный размер: 290221; Сжатая: 40810