У меня такая же проблема. У меня стоит:
FreeBSD 6.0
Postfix 2.2.10
courier-imap 4.1.0,1
ClamSMTP 1.6
ClamAV 0.88.1
SpamAsassin 3.1.1
Вот мои конфиги:
Вот это я добавил в Main.cf:content_filter = avscan:127.0.0.1:10025
receive_override_options = no_address_mappings
spamfilter_destination_recipient_limit = 1
clamsmtpd.conf:
# The address to send scanned mail to.
# This option is required unless TransparentProxy is enabled
OutAddress: 10026
# The maximum number of connection allowed at once.
# Be sure that clamd can also handle this many connections
#MaxConnections: 64
# Amount of time (in seconds) to wait on network IO
#TimeOut: 180
# Keep Alives (ie: NOOP's to server)
#KeepAlives: 0
# Send XCLIENT commands to receiving server
XClient: off
# Address to listen on (defaults to all local addresses on port 10025)
Listen: 127.0.0.1:10025
# The address clamd is listening on
ClamAddress: /var/run/clamav/clamd
# A header to add to all scanned email
Header: X-Virus-Scanned: ClamAV using ClamSMTP
# Directory for temporary files
TempDirectory: /tmp/clamav
# Whether or not to bounce email (default is to silently drop)
#Bounce: off
Bounce: off
# Whether or not to keep virus files
Quarantine: off
# Enable transparent proxy support
TransparentProxy: off
# User to switch to
User: clamav
# Virus actions: There's an option to run a script every time a virus is found.
# !IMPORTANT! This can open a hole in your server's security big enough to drive
# farm vehicles through. Be sure you know what you're doing. !IMPORTANT!
VirusAction: /usr/local/etc/clamsmtpd_virus.sh
Вот это я добавил в master.cf:
# ====================================================================
#
# ClamSMTP
#
avscan unix - - n - 16 smtp
-o smtp_send_xforward_command=yes
127.0.0.1:10026 inet n - n - 16 smtpd
# -o content_filter=
-o content_filter=spamfilter
-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
# ====================================================================
#
# SpamAssasin
#
spamfilter unix - n n - 10 pipe
flags=R
user=spamd argv=/usr/local/etc/postfix/spam.pl "localhost:10027" "spamfilter"\
"${sender}" "${recipient}" "/usr/local/bin/spamc"
localhost:10027 inet n - n - 10 smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o mynetworks=127.0.0.0/8
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o myhostname=localhost
Как я выяснил проблема в том, что в ClamSMTP нету опции, запрещающей посылать на проверку большие письма, a в ClamAV нету опцие запрещающей проверять большие файлы, там только можно ограничить размер проверяемых архивов. В результате если посылается письмо с преложенным 100Мб AVI или 60Мб ISO файлом, ClamAV пытается его проверить. Как вы понимаете, дело это не быстрое и через пару минут мы получаем ответ, что ClamAV не даёт ответа, хотя на самом деле бедолага усердно проверяет письмо. В логах мы видим вот это:
Apr 7 18:06:52 mail spamd[608]: prefork: child states: II Apr 7 18:10:36 mail postfix/smtpd[708]: connect from unknown[10.0.0.178] Apr 7 18:10:37 mail postfix/smtpd[708]: 2C4301076C11:
client=unknown[10.0.0.178]
Apr 7 18:10:37 mail postfix/cleanup[711]: 2C4301076C11:
message-id=<443681E0.9060500@aaaaa.aa>
Apr 7 18:15:54 mail pop3d: LOGIN, user=1@aaaaa.aa, ip=[10.0.0.178]
Apr 7 18:15:54 mail pop3d: LOGOUT, user=1@aaaaa.aa, ip=[10.0.0.178], top=0, retr=0, rcvd=12, sent=39, time=0 Apr 7 18:19:49 mail postfix/qmgr[500]: 2C4301076C11:
from=<1@aaaaa.aa>, size=143596463, nrcpt=1 (queue active)
Apr 7 18:19:49 mail postfix/smtpd[708]: disconnect from unknown[10.0.0.178] Apr 7 18:19:49 mail clamsmtpd: 100000: accepted connection from:
127.0.0.1
Apr 7 18:19:49 mail postfix/smtpd[730]: connect from mail.aaaaa.aa[127.0.0.1] Apr 7 18:19:49 mail postfix/smtpd[730]: 8C2EE1076C18: client=unknown[10.0.0.178]
Apr 7 18:23:00 mail clamsmtpd: 100000: CLAMAV: network read operation timed out
Apr 7 18:23:00 mail clamsmtpd: 100000: unexepected response from clamd:
Apr 7 18:23:00 mail clamsmtpd: 100000: from=1@aaaaa.aa, to=2@aaaaa.aa, status=CLAMAV-ERROR
Apr 7 18:23:01 mail postfix/smtp[729]: 2C4301076C11: to=<2@aaaaa.aa>, relay=127.0.0.1[127.0.0.1], delay=744, status=deferred (host 127.0.0.1[127.0.0.1] said: 451 Local Error (in reply to end of DATA
command))
Apr 7 18:23:01 mail postfix/smtpd[730]: disconnect from mail.aaaaa.aa[127.0.0.1]
Есть несколько решений этой проблемы:
1) Заставить Postfix не посылать письма, к примеру, больше 10Mb в “content_filter = avscan:127.0.0.1:10025”. Я перерыл весь инет, но не нашел как это можно сделать. Если кто знает, как можно этого добиться, расскажите.
2) Сделать скрипт который будет определять, какого размера письмо и в случае если он превышает 10Мб отправлять его на порт 1027 минуя все фильтры. Можно попробовать вставить этот скрипт сюда:
Master.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)
# ==========================================================================
smtp inet n - n - - smtpd
#submission inet n - n - - smtpd
-o content_filter=largefiles
# -o smtpd_etrn_restrictions=reject
# -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#smtps inet n - n - - smtpd
# -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes
#submission inet n - n - - smtpd
# -o smtpd_etrn_restrictions=reject
# -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes
largefiles unix - n n - 10 pipe
flags=R
user=large argv=/usr/local/etc/postfix/large.pl "localhost:10027"
localhost:10027 inet n - n - 10 large
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o mynetworks=127.0.0.0/8
(Тут я наверни-ка написал ерунду, но если будет скрипт, я придумаю как его запустить)
По моему, один из этих вариантов должен решить проблему.
Люди добрые умные, помогите. Если первый вариант не возможен, пожалуйста, напишите скрипт.
Огромное, огромное СПАСИБО, тому кто поможет.