Все о Linux. LinuxRSP.Ru


Cвежие новости Linux и BSD, анонсы статей и книг прямо в почтовый ящик!
Подписаться письмом


 Сегодняшние новости:

25 лет исполнилось ядру Linux

Релиз KDevelop 5.0

Oracle открывает код JDK9 для ARM

Выпущен Timewarrior 1.0.0

Релиз Android 7.0

Percona Memory Engine для MongoDB на базе WiredTiger

PowerShell открыт и доступен для Linux

Форк TrueCrypt: VeraCrypt 1.18

Релиз Snapcraft 2.14

Релиз Go 1.7

Стабильный выпуск рабочего стола Lumina

Вышла первая версия аналога OpenCV - DCV 0.1

Выпуск минималистичной программы для мониторинга jsonmon 3

В MIT разработали новый язык программирования

Первый релиз Qt5Gtk2

Godot 2.1 - новая версия открытого игрового движка

Свободная цифровая станция звукозаписи: Ardour 5.0

Обновление SkypeWeb Plugin for Pidgin

Вышла версия 3.0 Android File Transfer для Linux (и для OS X)

Программный аналог MIDI-контроллера для создания музыки: Launchpadd v1.3

Mozilla спонсирует поддержку Python 3.5 в PyPy

Ef 0.08 - программа для моделирования динамики заряженных частиц

Обновление текстового редактора TEA до версии 42.0.0

Релиз OpenOrienteering Mapper 0.6.4

Вышли Guix и GuixSD 0.11

Релиз Opera 39

Выпуск LibreOffice 5.2

В OpenSSH обнаружены и устранены некоторые уязвимости

Эмулятор FCEUX 2.2.3

Компания Билайн переходит на российскую СУБД с открытым исходным кодом Tarantool

Google

 Новые статьи :

Утилиты для восстановления потерянных данных в Linux

Лучшие файловые менеджеры для Android

20 лучших бесплатных книг о Linux

Как сгенерировать открытый/закрытый SSH-ключ в Linux

Grive - клиент Google Drive для Linux с открытым исходным кодом

Протокол IPv6: варианты подключения

Сервер из образа: DHCP + TFTP + Initrd + OpenVZ

Обзор веб-панелей управления хостингом

Приёмы работы с Vim

Nginx как Reverse Proxy для сайта, использующего SSL

Разработка модулей ядра Linux

Мониторинг нагрузки http-сервера Apache 2

Перевод комментариев к файлу конфигурации Squid

Решение проблем при использовании "1c предприятие" 8.2 в Linux

Advanced Bash-Scripting Guide Искусство программирования на языке сценариев командной оболочки







Rambler's Top100





 
 

From: Sergey Levashev (aka Chek) <chek@alt.ru.>
Newsgroups: email
Date: Mon, 23 May 2005 18:21:07 +0000 (UTC)
Subject: Установка и настройка почтовой системы на базе Postfix

Установка и настройка Postfix + PostgreSQL + Courier-Authlib +
Courier-Imap + SqWebMail + Maildrop + ClamAV + SpamAssassin + AWStats

- Postfix (http://postfix.org) - MTA
- PostgreSQL (http://postgresql.org) - БД
- Courier-Authlib (http://www.courier-mta.org) - Демон и библиотека аутентификации
- Courier-Imap (там же) - IMAP и POP демон
- Maildrop (там же) - MDA
- SqWebMail (там же) - Веб-интерфейс для работы с почтовыми ящиками
- ClamAV (http://www.clamav.net/) - Фриварный антивирус
- SpamAssassin (http://spamassassin.apache.org/) - Убийца и маркировщик спама
- AWStats (http://awstats.sourceforge.net/) - Генератор статистики.




Intro

Есть: старый-старый сервер (FreeBSD 4.2, Sendmail, Courier-Imap), часто
падающий из-за перегрузок (ну как же без SpamAssassin'a и ClamAV'a?), с
загаженной базой пользователей (ну очень) и с очень загаженным винтом
(похлеще будет), притом пользователи (все 3000) созданы локально.
Также имеется база пользователей в PostgreSQL.

Хотим: перенести это с минимумом усилий и с учётом дальнейшего
разрастания пользовательской базы.

После двух недель блуждания по далёким серверам и надоедания гуглу
вопросом как связать PostgreSQL с сендмейлом без перестройки формата базы я
нашел патчик для связки с базой. http://blue-labs.org/software/sm-pgsql/
Принцип работы не понравился.

Решение: виртуальные почтовые ящики.


PostgreSQL

описание установки и настройки пропущу - читаем документацию


Courier-Authlib

Читаем документацию. Думаем. Устанавливаем.

В /etc/authlib/authdaemonrc пишем:

        authmodulelist="authpgsql"
        daemons=5
        DEBUG_LOGIN=0
        DEFAULTOPTIONS=""



В /etc/authlib/authpgsqlrc пишем:

        PGSQL_HOST              хост.где.находится.база
        PGSQL_PORT              5432
        PGSQL_USERNAME          имя
        PGSQL_PASSWORD          пароль
        PGSQL_CRYPT_PWFIELD     crypt
        PGSQL_CLEAR_PWFIELD     clear
        PGSQL_DATABASE          база данных с пользователями и их паролями

        #Так как база у меня в своём формате
        PGSQL_SELECT_CLAUSE     SELECT c.login as username,'' as cryptpw,               \
                        c.pass as clearpw,506 as uid,                           \
                        506 as gid,'/mailboxes/'||substring(c.login from 1 for 1)||'/'||c.login as home,\
                        '' as maildir,                                  \
                        30 as quota,con.nameorg as fullname,                    \
                        'disableimap' as options from cusers as c,              \
                        contracts as con where c.cid=con.cid and c.tid in (1,2) and c.deleted='-' and c.login = '$(local_part)';
        #'/mailboxes/'||substring(c.login from 1 for 1)||'/'||c.login as home -- пользовательские ящики с путями /mailboxes/первая_буква_логина/логин
        #gid 506 и uid 506 - пользователь vmail, которому будет принадлежать вся почта


Читаем документацию. Запускаем.


Courier-Imap

Читаем документацию. Думаем. Устанавливаем. Если надо - исправляем
дефолтные настройки. Читаем документацию. Запускаем.


Maildrop

Читаем документацию. Думаем. Устанавливаем.
в /etc/maildroprc пишем:

        `test -f $HOME/.mailfilter`
        if ( $RETURNCODE == 0 )
        {

                include '.mailfilter'
                if ( $QUIT )
                        REASON="users's filter"
        }

        to 'Maildir/.'


SpamAssassin

Читаем документацию, устанавливаем все необходимые перловые модули и DCC
с Razor2.

Пишем скрипт запуска:

        #!/bin/sh
        case "$1" in

        start)
            spamd -d -u clamav -m 7 -i 127.0.0.1 \
                  --max-conn-per-child=5 -r /home/clamav/spamd.pid
            ;;
        stop)
            kill `cat /home/clamav/spamd.pid`
            ;;
        restart)
            $0 stop
            $0 start
            ;;
        esac


Правим конфиг /etc/mail/spamassassin/local.cf:

        report_contact me@myhost.ru
        rewrite_subject 1
        report_safe 0
        whitelist_from *@myhost.ru
        lang ru
        ok_languages ru en
        ok_locales   ru en
        rewrite_header Subject          SPAM(_SCORE_)
        auto_whitelist_path /etc/mail/spamassassin/auto_whitelist
        bayes_path /etc/mail/spamassassin/bayes
        bayes_auto_learn        0
        auto_learn              0
        use_bayes               0
        use_bayes_rules         0
        use_auto_whitelist      0
        use_razor2              1
        use_dcc                 1
        use_pyzor               0
        score FROM_ILLEGAL_CHARS 0.5
        score HEAD_ILLEGAL_CHARS 0.5
        score SUBJ_ILLEGAL_CHARS 1.0
        score HTML_FONTCOLOR_RED 3.0
        score MIME_HTML_ONLY    2.0
        score HTML_FONT_BIG     1.5
        score RAZOR2_CF_RANGE_51_100 2.0
        score BAYES_99          3
        score RCVD_IN_NJABL_DUL 5.5
        score URIBL_SBL         3
        score RCVD_IN_SORBS_DUL 6.2
        score DCC_CHECK         4.9
        score RCVD_IN_XBL RBL   8.1
        score DNS_FROM_AHBL_RHSBL 8.1
        score RAZOR2_CHECK      8.7
        #score HTML_FONT_INVISIBLE
        required_hits           8



ClamAV

Заводим пользователя clamav, создаём директорию /var/clamav/{log,tmp} и
назначаем владельцем clamav

Читаем документацию. Думаем. Устанавливаем.

Правим /usr/local/etc/clamd.conf:

        LogFile /var/clamav/clamav.log
        LogFileMaxSize 2M
        LogTime
        LogClean
        LogSyslog
        LogFacility LOG_MAIL
        LogVerbose
        PidFile /var/clamav/clamd.pid
        TemporaryDirectory /var/clamav/tmp
        DatabaseDirectory /var/clamav
        LocalSocket /var/clamav/clamd.sock
        FixStaleSocket
        MaxConnectionQueueLength 30
        StreamMaxLength 400k
        MaxThreads 100
        IdleTimeout 5
        SelfCheck 100
        User clamav
        ScanHTML
        ScanArchive
        ScanRAR
        ArchiveMaxFileSize 400k


Правим /usr/local/etc/freshclam.conf:

        DatabaseDirectory /var/clamav
        UpdateLogFile /var/clamav/freshclam.log
        PidFile /var/clamav/freshclam.pid
        DatabaseOwner clamav
        DatabaseMirror database.clamav.net
        Checks 24


Переходим к самому интересному.


Postfix

Читаем документацию, из неё видим:
   For example:

        % make tidy
        % make -f Makefile.init makefiles \
                'CCARGS=-DHAS_PGSQL -I/usr/local/include/pgsql' \
                'AUXLIBS=-L/usr/local/lib -lpq'

           Then just run 'make'.


собираем, устанавливаем.

Заводим пользователя vmail.

Перенаправляем всю почту на наш хост в виртуал, правим /etc/postfix/transport:

        почтовый.сервер.ru  virtual:

В /etc/postfix/access разрешаем хостам отправлять почту через нас

В /etc/postfix/virtual у нас теперь и алиасы и виртуальные пользователи,
alias_maps и alias_database не возымеют на виртуальными пользователями никакой власти,
а локальных у нас теперь нет =)

Необходимые нам параметры в /etc/postfix/main.cf:

        transport_maps = hash:/etc/postfix/transport
        mynetworks = hash:/etc/postfix/access
        virtual_transport = maildrop
        virtual_mailbox_maps = pgsql:/etc/postfix/mailbox.pgsql
        virtual_uid_maps = static:506 #пользователь vmail
        virtual_gid_maps = static:506 #пользователь vmail
        virtual_alias_maps = hash:/etc/postfix/virtual
        mynetworks_style = host
        relay_domains =
        content_filter = scan:127.0.0.1:10025
        receive_override_options = no_address_mappings

        smtpd_sender_restrictions =
                 permit_mynetworks,
                 reject_non_fqdn_sender,
                reject_rbl_client list.dsbl.org,
                reject_rbl_client bl.spamcop.net,
                reject_rbl_client combined.njabl.org,
                reject_rbl_client rhsbl.ahbl.org,
                reject_rbl_client multi.surbl.org,
                reject_rbl_client relays.ordb.org,
                reject_rbl_client sbl-xbl.spamhaus.org,
                 reject_invalid_hostname,
                 reject_unknown_sender_domain

        smtpd_client_restrictions =
                 permit_mynetworks,
                 reject_non_fqdn_sender,
                reject_rbl_client list.dsbl.org,
                reject_rbl_client bl.spamcop.net,
                reject_rbl_client combined.njabl.org,
                reject_rbl_client rhsbl.ahbl.org,
                reject_rbl_client multi.surbl.org,
                reject_rbl_client relays.ordb.org,
                reject_rbl_client sbl-xbl.spamhaus.org,
                 reject_invalid_hostname,
                 reject_unknown_sender_domain

        smtpd_recipient_restrictions =
                reject_unlisted_recipient,
                 permit_mynetworks,
                 permit_mx_backup,
                 reject_non_fqdn_recipient,
                reject_unauth_destination


остальное правим на свой вкус и цвет.
в /etc/postfix/master.cf:

        maildrop  unix  -       n       n       -       -       pipe
              flags=DRhu user=vmail argv=/etc/postfix/test -d ${user}

        #test - научит постфикс автоматом создавать ящик для maildrop

        scan      unix  -       -       n       -       16      smtp
                -o smtp_send_xforward_command=yes

        # For injecting mail back into postfix from the filter
        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


Если не поняли - читаем http://www.nixp.ru/cgi-bin/go.pl?q=articles;a=clamav_postfix

Создаём /etc/postfix/test

        #!/bin/bash
        if ! test -d /mailboxes/${2:0:1}/$2; then
        mkdir /mailboxes/${2:0:1}/$2 && /usr/local/bin/maildirmake /mailboxes/${2:0:1}/$2/Maildir ;
        fi

        #echo $2 >> /mailboxes/test
        /usr/local/bin/maildrop $@



делаем его исполняемым

Запускаем mkdir /mailboxes/{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z} && chown vmail.vmail -R /mailboxes

SpamAssassin можно теперь сделать индивидуально или глобально, также
пользователи могут иметь свои white и black листы (читаем документацию)
для глобальной проверки почты spamassassin'om в /etc/maildroprc

Добавляем в начало:

        if ( $SIZE < 256000 ) # Filter if message is less than 250k
        {

            log " running message through spamc"
            exception {
            xfilter '/usr/bin/spamc -u $LOGNAME'
            }

        }

        #Если хотим, чтобы спам зарезался на месте:
        if ( /^X-Spam-Status: *Yes/)
        {
            to "/dev/null"
        }


Для проверки индивидуально - делаем тоже самое в файле /mailboxes/firs_char_of_user/user/.maildroprc
Если хотим сделать красивее, то создаём файлик /mailboxes/scheck, в него пишем:

        if ( $SIZE < 256000 ) # Filter if message is less than 250k
        {

            log " running message through spamc"
            exception {
            xfilter '/usr/bin/spamc -u $LOGNAME'
            }
        }


Создаём файлик /mailboxes/sdrop:

        if ( /^X-Spam-Status: *Yes/)
        {
            to "/dev/null"
        }


И теперь .maildroprc будет выглядеть:

        #для проверки
        include '/mailboxes/scheck'
        #для удаления спама
        include '/mailboxes/sdrop'


Вроде всё, если хорошо читали документацию и всё поняли - должно
заработать с полпинка.

Для первого раза, чтобы проверить свой почтовый ящик, нужно сначала
отправить себе письмо =)


Disclamer

Статью писал в первый раз, в обеденный перерыв, если что забыл - по ушам
не пинать =) поносить меня можно в icq 263665548


Источник

      

Связь | О проекте LinuxRSP | Реклама | О Linux
© 1999-2017 LinuxRSP