Документация по ОС FreeBSD Среда, 08.05.2024, 05:51
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » Mail

Sendmail. Эффективная борьба со спамом и вирусами. Практический опыт [2007]
Итак в исходной задаче мы имеем виртуальный выделенный сервер системой FreeBSD под управлением VDSmanager на хостинг-площадке с предустановленным набором программного обеспечения ISPmananger.

Стандартно там установлен Sendmail и наша задача сделать почту наиболее эффективно работающей и безопасной, без спама и вирусов.

Что будем ставить и настраивать в первую очередь.

Антиспам:

Черные списки DNSBL- это такая штука, есть публичные листы, которые собирают адреса машин с которых рассылается спам. И эти IP-адреса туда заносятся. На какое-то время или пока админ сети не удалит их.

GreyListing. Когда первый раз приходит письмо на сервер, он говорит, попробуй позднее. Спам робот пробовать  не будет (оно ему не надо), а нормальный сервер попробует, письмо примется и добавится в белый список его IP-адрес.

SpamAssassin. Ну это больше для удобства пользователей. Пишет с сабжектах писем слово SPAM и можно настроить почтовую программу для сортировки таких писем в отдельную папку.

Антиспамовые функции sendmail. Про это чуть ниже.

Антивирус:

Ну тут думать не стал даже долго. Должно быть просто и бесплатно. Вообще весь софт который стоит на сервере бесплатен и следовательно "лицензионно чист". Антивирус ClamAV - это мой выбор.

Да, попутно, еще выяснилось, что их ISPmanager поддерживает работу с DNSBL, Milter-GreyList и SpamAssassin, подробности в документации. Списки DNSBL можно прямо добавить через менюшку и все пропишется и заработает.

Начинаем настройку

Антиспам.

Черные списки DNSBL - я просто использую листы

        bl.spamcop.net
        cbl.abuseat.org
        dnsbl.njabl.org
        dnsbl.njabl.org
        dnsbl.sorbs.net
        list.dsbl.org
        zen.spamhaus.org

Я их взял и добавил через ISPmanager, что получилось в конфиге sendmail - смотрите ниже.

Выяснилось, что milter-greylist уже установлен на сервере и надо только включить. Правим /etc/rc.conf

        miltergreylist_enable="YES"

SpamAssassin пришлось поставить из портов

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

и milter к sendmail

        # cd /usr/ports/mail/spamass-milter
        # make install clean

Все опции оставляем по-умолчанию

Все очень просто и быстро, малость пришлось повозиться с ключами для запуска, объясню что к чему, пишем в /etc/rc.conf

        spamd_enable="YES"
        spamd_flags="-A 82.146.xx.xx -u spamd -x -c -d -r /var/run/spamd/spamd.pid"
        spamass_milter_enable="YES"

Ключи

-A 82.146.xx.xx (82.146.xx.xx - ip-адрес вашего сервера, смотрится командой ifconfig)

На виртуальном выделенном сервере нет локального интерфейса, поэтому будем работать  с внешним и разрешим с него запросы

-u spamd - пользователь под которым запускается spamassassin (я считаю это более правильно, чем запускать под root)

-x - не создавать пользовательские конфиги. Вообщем то конфигурация пользователя будет вся лежать в /var/spool/spamd/.spamassassin/, ставим так

-c - создать конфиг автоматом если нет

-d - запуск в режиме демона

-r /var/run/spamd/spamd.pid - путь к PID-файлу.

Настраиваем конфиг SpamAssassin

        # vi /usr/local/etc/mail/spamassassin/local.cf

        rewrite_header Subject *****SPAM*****

Будет добавляться к заголовку письма слово *****SPAM*****

        report_safe 0

Чтобы почта, которая пометилась как спам приходила как письмо, а не в виде аттачмента

        trusted_networks 82.146.XX.XX

Указываем IP-адрес сервера. Почта с него (локальная почта) никогда не будет обрабатываться  и помечаться как спам.

Настраиваем ежедневное автообновление спам-баз (кстати, планировщиком Cron можно управлять и через ISPmanager)

        # crontab -e -u root
        @daily  /usr/local/bin/sa-update --nogpg

Делаем ящики для обучения спаму. Пользователи должны пересылать письма на эти адреса ТОЛЬКО(!) как вложения. Я создал руками отредактировав /etc/mail/virtusertable и /etc/mail/aliases

vi /etc/mail/virtusertable

        spam@mydomain.ru      spam
        not-spam@mydomain.ru       not-spam

vi /etc/mail/aliases

        spam:   "|/usr/local/bin/sa-learn --spam"
        not-spam:    "|/usr/local/bin/sa-learn --ham"

После чего сказать make в директории /etc/mail

Нам еще потребовалось создать директорию

        # mkdir /var/spool/mqueue/.spamassassin/

и права на нее

        # chmod 777 /var/spool/mqueue/.spamassassin/

Антивирус. Настраиваем clamav.

Он уже оказывается установлен, просто включите его, демон для автообновления базы и milter

        clamav_clamd_enable="YES"
        clamav_freshclam_enable="YES"
        clamav_milter_enable="YES"

Запускаем все

        # /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
#

divert(0)

# Это все было по умолчанию

VERSIONID(`$FreeBSD: src/etc/sendmail/freebsd.mc,v 1.30 2005/06/14 02:25:17 gshapiro Exp $')
OSTYPE(freebsd6)
DOMAIN(generic)

FEATURE(access_db, `hash -o -T<tmpf> /etc/mail/access')
FEATURE(blacklist_recipients)
FEATURE(local_lmtp)
FEATURE(mailertable, `hash -o /etc/mail/mailertable')
FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')

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')

define(`confBIND_OPTS', `WorkAroundBrokenAAAA')
define(`confNO_RCPT_ACTION', `add-to-undisclosed')
define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy')

TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS',`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

define(`confCACERT_PATH', `/usr/local/share/certs')
define(`confCACERT', `/usr/local/share/certs/ca-root.crt')
define(`confSERVER_CERT', `/etc/ssl/certs/sendmail.crt')
define(`confSERVER_KEY', `/etc/ssl/private/sendmail.key')

# 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 через эту панель управления
 
        Option ForceSpamAssassin
        path spamassassin.conf /usr/local/etc/mail/spamassassin/local.cf
        path spamassassinctl /usr/local/etc/rc.d/sa-spamd restart

Собственно говоря все. Мы получили эффективный почтовый сервер, который не пропустит спам и вирусы, а если и пропустит какой-либо спам, так вы его легко отфильтруете благодаря фильтру в почтовой программе.


Источник: http://www.opennet.ru/base/net/sendmail_antispam_gr.txt.html
Категория: Mail | Добавил: oleg (17.02.2008) | Автор: Litos
Просмотров: 1723 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024