Антон Пищулин
http://www.clamav.net.ua
2006-07-06
Идеи для самой простой, в моем понимании, почтовой системы я частично собрал на opennet.ru, частично повзаимствовал у более продвинутых коллег, а на что-то наступил сам :)FreeBSD & Postfix & ClamAV & SmtpClamAV & Popa3d & Postgrey
Вникать в детали, как установить и настроить FreeBSD мы не будем - этому вопросу посвящено множество ресурсов и печатных изданий. Упомяну лишь мелочи, без которых хорошо работающую систему не получить.
Итак... мы имеем установленную и настроенную для работы в сети FreeBSD в минимальной конфигурации с коллекцией портов. Всегда желательно иметь свежие порты для компиляции более современного программного обеспечения.
Для обновления коллекции портов, можно использовать cvsup. Рекомендую устанавливать вместе с системой freeBSD
Итак!
cp /usr/share/examples/cvsup/ports-supfile /root/ports-supfile
редактируем /root/ports-supfile
меняем
*default host=CHANGE_THIS.FreeBSD.org
на
*default host=cvsup8.FreeBSD.org
По моим личным наблюдениям, с этого или с cvsup7.FreeBSD.org удачнее всего получается обновиться
Но ... каждый пусть делает по-своему :)
cvsup -g -L 2 /root/ports-supfile
после окончания обновлений - начинаем установку
1) Postfix
cd /usr/ports/mail/postfix
make install clean
Я отказываюсь от изменения mailer.conf.
При компиляции, создаются соответствующие логины, пароли, ставки, явки, каталоги и прочее - увидите все сами.
Для запуска постфикса при старте FreeBSD необходимо добавить
postfix_enable="YES"
в файл /etc/rc.conf
Это будет работать в том случае, если в каталог /usr/local/etc/rc.d
добавлен скрипт запуска либо вами, либо при компиляции.
Детализация этого - ваш экспириенс :)
Теперь ... sendmail. Надо бы в rc.conf пристрелить его.
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
Дальше редактируем /etc/aliases
root: вашемыло@вашдомен
Выполняем newaliases
Здесь я столкнулся с одним казусом, который толком не смог решить. Команда newaliases "поправляет" файл /etc/mail/aliases.db, а мой postfix почему-то искал /etc/aliases.db. Ни явное указание в конфигурационном файле пути, ни стук в бубен не помогли и я, как человек ленивый, создал символический линк и этим ограничился. Ваше право решить это по-своему.
2) ClamAV - полагаю, что весь сыр-бор сайта clamav.net.ua из-за этого ПО :)
cd /usr/ports/security/clamav
make install clean
Добавляем в /etc/rc.conf
clamav_clamd_enable="YES"
clamav_freshclam_enable="YES"
И редактируем конфигурационный файл /usr/local/etc/clamd.conf
Рекомендую базироваться на екзампле
Вот, что поулчилось у меня
##
LogFile /var/log/clamav/clamd.log
## Example config file for the Clam AV daemon
## Please read the clamd.conf(5) manual before editing this file.
##
LogFileMaxSize 2M
LogTime
PidFile /var/run/clamav/clamd.pid
TemporaryDirectory /tmp
DatabaseDirectory /var/db/clamav
LocalSocket /var/run/clamav/clamd
FixStaleSocket
MaxConnectionQueueLength 30
StreamMaxLength 20M
MaxThreads 10
User clamav
AllowSupplementaryGroups
ScanPE
DetectBrokenExecutables
ScanOLE2
ScanMail
ScanHTML
ScanArchive
#ScanRAR
# отключено, ибо рекомендуют - нужны какие-то там патчи и прочее
# как не морочить себе голову с эти, я расскажу потом - про amavisd :).
ArchiveMaxFileSize 15M
ArchiveMaxRecursion 9
ArchiveMaxFiles 1500
ArchiveMaxCompressionRatio 300
ArchiveBlockEncrypted
ArchiveBlockMax
Посматривайте на комментарии в конфигурационных файла - значение настроек станет понятным :)
Теперь /usr/local/etc/freshclam.conf
##
DatabaseDirectory /var/db/clamav
## Example config file for freshclam
## Please read the freshclam.conf(5) manual before editing this file.
## This file may be optionally merged with clamd.conf.
##
UpdateLogFile /var/log/clamav/freshclam.log
LogSyslog
PidFile /var/run/clamav/freshclam.pid
DatabaseOwner clamav
AllowSupplementaryGroups
DNSDatabaseInfo current.cvd.clamav.net
DatabaseMirror database.clamav.net
NotifyClamd
3) ClamSmtpD - это, собственно, прокладка между postfixom и ClamAV - механизм включается с минимальными усилиями и максимальным эффектом
cd /usr/ports/security/clamsmtp/
make install clean
в /etc/rc.conf
добавляем
clamav_clamsmtp_enable="YES"
и редактируем конфигурационный файл /usr/local/etc/clamsmtpd.conf
# ------------------------------------------------------------------------------
OutAddress: 10026
# SAMPLE CLAMSMTPD CONFIG FILE
# ------------------------------------------------------------------------------
#
# - Comments are a line that starts with a #
# - All the options are found below with sample settings
Listen: 127.0.0.1:10025
ClamAddress: /var/run/clamav/clamd
Header: X-Virus-Scanned: ClamAV (www.clamav.net.ua)
TempDirectory: /tmp
User: clamav
4) Popa3D - ну раз у нас есть smtp сервер, то не грех обзавестись и pop3 сервером :)
cd /usr/ports/mail/popa3d
make install clean
софт в конфигурировании не нуждается - это самый простой, с моей точки зрения, вариант pop3
Запуск этого сервера происходит следующим образом
добавляем строку в конфигурационный файл
/etc/inetd.conf
pop3 stream tcp nowait root /usr/local/libexec/popa3d popa3d
и в /etc/rc.conf
inetd_enable="YES"
5) Postgrey - очень занятная программа, позволяющая отфильтровывать многие почтовые сообщения - как спам, так и почтовые вирусы
Что и как она делает ?
Получив почтовое сообщение postgrey отвечает серверу отправителю требованием повторить отправку позже. Если сервер -отправитель - "правильный" smtp сервер, то он повторит отправку письма через одному ему известный промежуток времени и оно дойдет до получателя, а если это машина-зомби, то, вероятнее всего, письмо больше не придет*. Такой механизм позволяет отфильтровывать 50-90 % спама, потому, что многие спамеры не читают нужных мануалов и их доморощенные серверы не обладают необходимой функциональностью. :)
cd /usr/ports/mail/postgrey/
make install clean
добавляем в /etc/rc.conf
postgrey_enable="YES"
6) Завершающие штрихи - необходимо все это связать в кучу.
Сначала редактируем
/usr/local/etc/postfix/main.cf
Находим нужное и пишем свое.
# кое какие специфические настройки сервера.
myhostname = mail.any-host.com.ua
#эти две строки - ClamAV
content_filter = scan:127.0.0.1:10025
mydomain = any-host.com.ua
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks_style = subnet
mynetworks = 192.168.0.0/24, 127.0.0.0/8
relayhost = smtp.prov-serv.ua
default_destination_concurrency_limit = 2
receive_override_options = no_address_mappings
maps_rbl_reject_code = 554
strict_rfc821_envelopes = yes
disable_vrfy_command = yes
smtpd_helo_required = yes
# полезный блок - можете что-то повыбрасывать или дописать
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination,
reject_unknown_recipient_domain,
reject_non_fqdn_recipient,
reject_rbl_client list.dsbl.org,
reject_rbl_client relays.ordb.org,
reject_rbl_client dynablock.wirehub.net,
reject_rbl_client blackholes.wirehub.net,
reject_rbl_client dnsbl.njabl.org,
reject_rbl_client dialups.mail-abuse.org,
reject_rbl_client dul.ru,
reject_rbl_client blackholes.mail-abuse.org,
reject_rbl_client dialups.mail-abuse.org,
reject_rbl_client opm.blitzed.org,
reject_rbl_client sbl.spamhaus.org,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client dul.dnsbl.sorbs.net,
reject_rbl_client dnsbl.njabl.org,
reject_rbl_client dynablock.njabl.org,
reject_rbl_client combined.njabl.org
# это postgrey
check_policy_service inet:127.0.0.1:10023
теперь правим
/usr/local/etc/postfix/main.cf
#
# Postfix master process configuration file. For details on the format
# of the file, see the Postfix master(5) manual page.
#
# ===================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ===================================
########## начало нашей вставки :)
#antivirus
scan unix - - n - 16 smtp
-o smtp_send_xforward_command=yes
127.0.0.1:10026 inet n - n - 16 smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
########## коней нашей вставки :)
smtp inet n - n - - smtpd
#submission inet n - n - - smtpd
...
Имейте ввиду, что от postgrey'я есть эффект, если у вашего домена 1 MX сервер и его ip адрес - адрес этой машины, если их более одного - то там тоже следует поставить какую-либо защиту от спама, иначе спам просто потечет через второй MX :)
Если что-то забыл, или ошибся - пишите на http://www.clamav.net.ua/forum/- отвечу - исправлю
*Прим.ред. Имейте в виду, что требование повтора отправления приведет к тому, что Вы будете получать ВСЕ письма с непредсказуемой задержкой (от получаса до нескольких суток), а некоторые дельные письма Вы не получите вообще. Возможно, Вас это устраивает, от некоторого спама действительно должно помогать.