Sendmail. Эффективная борьба со спамом и вирусами. Практический опыт [2007]
Итак в исходной задаче мы имеем виртуальный выделенный сервер системой FreeBSD под управлением VDSmanager на хостинг-площадке с предустановленным набором программного обеспечения ISPmananger.
Стандартно там установлен Sendmail и наша задача сделать почту наиболее эффективно работающей и безопасной, без спама и вирусов.
Что будем ставить и настраивать в первую очередь.
Антиспам:
Черные списки DNSBL- это такая штука, есть публичные листы, которые собирают адреса машин с которых рассылается спам. И эти IP-адреса туда заносятся. На какое-то время или пока админ сети не удалит их.
GreyListing. Когда первый раз приходит письмо на сервер, он говорит, попробуй позднее. Спам робот пробовать не будет (оно ему не надо), а нормальный сервер попробует, письмо примется и добавится в белый список его IP-адрес.
SpamAssassin. Ну это больше для удобства пользователей. Пишет с сабжектах писем слово SPAM и можно настроить почтовую программу для сортировки таких писем в отдельную папку.
Антиспамовые функции sendmail. Про это чуть ниже.
Антивирус:
Ну тут думать не стал даже долго. Должно быть просто и бесплатно. Вообще весь софт который стоит на сервере бесплатен и следовательно "лицензионно чист". Антивирус ClamAV - это мой выбор.
Да, попутно, еще выяснилось, что их ISPmanager поддерживает работу с DNSBL, Milter-GreyList и SpamAssassin, подробности в документации. Списки DNSBL можно прямо добавить через менюшку и все пропишется и заработает.
Делаем ящики для обучения спаму. Пользователи должны пересылать письма на эти адреса ТОЛЬКО(!) как вложения. Я создал руками отредактировав /etc/mail/virtusertable и /etc/mail/aliases
# /usr/local/etc/rc.d/milter-greylist.sh start # /usr/local/etc/rc.d/sa-spamd start # /usr/local/etc/rc.d/spamass-milter start # /usr/local/etc/rc.d/clamav-clamd start # /usr/local/etc/rc.d/clamav-freshclam start # /usr/local/etc/rc.d/clamav-milter start (может не запуститься не найдя себя в конфиге sendmail)
Мой конфиг sendmail (/etc/mail/myhostname.mc) с комментариями (сделал одним файлом, чтобы не писать 10 раз одно и то же) Содержит как защиту от спама, так и защиту от излишней нагрузки на сервер.
divert(-1) # # Copyright (c) 1983 Eric P. Allman # Copyright (c) 1988, 1993 # The Regents of the University of California. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All advertising materials mentioning features or use of this software # must display the following acknowledgement: # This product includes software developed by the University of # California, Berkeley and its contributors. # 4. Neither the name of the University nor the names of its contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. #
# # This is a generic configuration file for FreeBSD 5.X and later systems. # If you want to customize it, copy it to a name appropriate for your # environment and do the modifications there. # # The best documentation for this .mc file is: # /usr/share/sendmail/cf/README or # /usr/src/contrib/sendmail/cf/README #
dnl Uncomment to allow relaying based on your MX records. dnl NOTE: This can allow sites to use your server as a backup MX without dnl your permission. dnl FEATURE(relay_based_on_MX)
dnl DNS based black hole lists dnl -------------------------------- dnl DNS based black hole lists come and go on a regular basis dnl so this file will not serve as a database of the available servers. dnl For that, visit dnl http://directory.google.com/Top/Computers/Internet/Abuse/Spam/Blacklists/
dnl Uncomment to activate Realtime Blackhole List dnl information available at http://www.mail-abuse.com/ dnl NOTE: This is a subscription service as of July 31, 2001 dnl FEATURE(dnsbl) dnl Alternatively, you can provide your own server and rejection message: dnl FEATURE(dnsbl, `blackholes.mail-abuse.org', `"550 Mail from " $&{client_addr} " rejected, see http://mail-abuse.org/cgi-bin/lookup?" $&{client_addr}')
dnl Dialup users should uncomment and define this appropriately dnl define(`SMART_HOST', `your.isp.mail.server')
dnl Uncomment the first line to change the location of the default dnl /etc/mail/local-host-names and comment out the second line. dnl define(`confCW_FILE', `-o /etc/mail/sendmail.cw') define(`confCW_FILE', `-o /etc/mail/local-host-names')
dnl Enable for both IPv4 and IPv6 (optional) DAEMON_OPTIONS(`Name=IPv4, Family=inet') dnl DAEMON_OPTIONS(`Name=IPv6, Family=inet6, Modifiers=O')
# antispam Это я добавил dnsbl-списки через ISPmanager, можно добавить и руками если надо # FEATURE(dnsbl, `bl.spamcop.net', `"550 Mail from " $&{client_addr} " rejected - see bl.spamcop.net"') FEATURE(dnsbl, `cbl.abuseat.org', `"550 Mail from " $&{client_addr} " rejected - see cbl.abuseat.org"') FEATURE(dnsbl, `dnsbl.njabl.org', `"550 Mail from " $&{client_addr} " rejected - see dnsbl.njabl.org"') FEATURE(dnsbl, `dnsbl.sorbs.net', `"550 Mail from " $&{client_addr} " rejected - see dnsbl.sorbs.net"') FEATURE(dnsbl, `list.dsbl.org', `"550 Mail from " $&{client_addr} " rejected - see list.dsbl.org"') FEATURE(dnsbl, `zen.spamhaus.org', `"550 Mail from " $&{client_addr} " rejected - see zen.spamhaus.org"')
# Спамеры часто указывают неверный helo при установке smtp-сессии FEATURE(`block_bad_helo')dnl
# Аккуратнее с это опцией, надо чтобы у серверов клиентов была прямая и обратная # записи в DNS и они совпадали, если вы не знаете что это такое - не включайте FEATURE(`require_rdns')dnl
# Если у хоста отправителя неправильная MX-запись - не принимаем почту FEATURE(`badmx')dnl
# Ожидаем 5000ms перед выдачей приглашения, если команды писал спам-бот раньше приглашения, # то почту от него принимать не будем. FEATURE(`delay_checks')dnl FEATURE(`greet_pause', `5000')dnl
# Максимальное число неправильных адресов и адресатов письма define(`confBAD_RCPT_THROTTLE', `1')dnl define(`confMAX_RCPTS_PER_MESSAGE', `20')dnl
# antiflood # Ограничим число процессов sendmail. Каждый процесс требует почти 2 мегабайта памяти define(`confMAX_DAEMON_CHILDREN', `30')dnl
# Это различные таймауты. Бывает спамботы не закрывают соединение сами, тем самым # вызывают перерасход ресурсов, устраним это. define(`confTO_CONNECT', `30s')dnl define(`confTO_IDENT', `0')dnl define(`confTO_COMMAND', `30s')dnl define(`confTO_DATABLOCK', `2m')dnl define(`confTO_STARTTLS', `2m')dnl
# Максимальное число коннектов в секунду define(`confCONNECTION_RATE_THROTTLE', `10')dnl
# MAILER был уже, не трогаем MAILER(local) MAILER(smtp)
# Подключаем наши фильтры. Скопируйте один в один. INPUT_MAIL_FILTER(`greylist', `S=local:/var/milter-greylist/milter-greylist.sock,F=, T=S:1m;R:1m')dnl INPUT_MAIL_FILTER(`clmilter',`S=local:/var/run/clamav/clmilter.sock,F=, T=S:4m;R:4m')dnl INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/spamass-milter.sock, F=,T=S:4m;R:4m')dnl
# greylist macro # Различные опции - макросы нужные для работы milter-greylist # define(`confMILTER_MACROS_CONNECT', `j, {if_addr}')dnl define(`confMILTER_MACROS_HELO', `{verify}, {cert_subject}')dnl define(`confMILTER_MACROS_ENVFROM', `i, {auth_authen}')dnl define(`confMILTER_MACROS_ENVRCPT', `{greylist}')dnl
# spamassassin macro # Тоже самое для работы spamassassin # define(`confMILTER_MACROS_CONNECT',`b, j, _, r, {daemon_name}, {if_name}, {if_addr}')dnl
# Собственно говоря включили фильтры # define(`confINPUT_MAIL_FILTERS', `greylist,clmilter,spamassassin')dnl
# fake banner # Подменили стандарное приветствие sendmail на что-либо другое # define(`confSMTP_LOGIN_MSG', `exchange.srv.local Microsoft MAIL Service, Version: 6.0.3790.1830 ready')dnl
ну а пересобрать конфиг очень просто заходите в /etc/mail и пишите
# make
поставить
# make install
перезапустить
# make restart
Также, если вы используете ISPmananger вам необходимо добавить в его конфигурационный файл /usr/local/ispmgr/etc/ispmgr.conf строки для возможности управления SpamAssassin через эту панель управления
Собственно говоря все. Мы получили эффективный почтовый сервер, который не пропустит спам и вирусы, а если и пропустит какой-либо спам, так вы его легко отфильтруете благодаря фильтру в почтовой программе.