PostfixАdmin revamped (ViMbAdmin)

    ViMbAdmin



    ViMbAdmin проект (vim/-be/-admin/) предоставляет веб-интерфейс администрирования виртуальных
    почтовых ящиков, позволяя почтовым администраторам легко управлять доменами, и псевдонимами.
    ViMbAdmin является свободным программным обеспечением, вы можете распространять или изменять его в соответствии с условиями GNU General Public License версии 3.

    ViMbAdmin был написан на PHP с использованием нашего собственного web application framework, который включает Zend Framework, ORM Doctrina и система шаблонов Smarty с JQuery и Bootstrap.

    ViMbAdmin размещается на отдельной странице проекта GitHub, где можно найти документацию,
    просмотреть исходный код. GitHub

    UPDATE:
    yum install dovecot-mysql
    



    ViMbAdmin Demonstration System:


    www.opensolutions.ie/vimbadmin/auth/login
    =======================================

    Стандартные и расширенные возможности от PostfixAdmin включают в себя:


    — Супер-администратор с полным доступом;
    — Администраторы имеющие доступ только к установленному домену и их почтовым ящикам и псевдонимам;
    — Супер-администраторы могут создавать и изменять супер администраторов и администраторов;
    — JQuery Datatable для быстрого поиска в браузере и нумерация страниц;
    — Создание, изменение и удаление;
    — Включение / выключение администраторов, доменов, почтовых ящиков и псевдонимов по нажатию одной кнопки;
    — Полное логирование событий;
    — Интерфейс для пользователей (владельцев почтовых ящиков), чтобы изменить свой пароль;

    Дополнительные функции включают в себя:


    — значения по умолчанию для квоты, количество почтовых ящиков и псевдонимов для создания домена;
    — добавлены дополнительные столбцы в схему почтовых ящиков (в том числе UID, GID, домашний каталог и Maildir);
    — шаблоны писем приветствия и настроек для пользователей;
    — Поддержка на выбор plain или hashed или salted пароль почтового ящика;
    — Таблицы паролей Администраторов с salted SHA;
    — Password Reset функции для администраторов и почтовых ящиков;

























    инструкция по установке ViMbAdmin


    github.com/opensolutions/ViMbAdmin/wiki/Installation-instructions

    Установка и настройка Postfix + Dovecot:


    Устанавливаем CentALT + EPEL репозитории:
    rpm -Uhv http://centos.alt.ru/pub/repository/centos/6/x86_64/centalt-release-6-1.noarch.rpm
    rpm -Uhv http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
    


    устанавливаем почтовые программы:
    yum install postfix dovecot dovecot-pigeonhole
    


    Создаем пользователя и группу, которые будут отвечать за почтовые ящики:
    groupadd -g 5000 vmail
    useradd -g vmail -u 5000 vmail -d /home/vmail -m
    


    Создаем директорию, в которой будут храниться настройки подключения к MySQL:
    mkdir /etc/postfix/mysql
    touch /etc/postfix/mysql/virtual-alias-maps.cf
    

    user = vimbadmin
    password = password
    hosts = 127.0.0.1
    dbname = vimbadmin
    query = SELECT goto FROM alias WHERE address = '%s' AND active = '1'
    


    touch /etc/postfix/mysql/virtual-mailbox-domains.cf
    

    user = vimbadmin
    password = password
    hosts = 127.0.0.1
    dbname = vimbadmin
    query = SELECT domain FROM domain WHERE domain = '%s' AND backupmx = '0' AND active = '1'
    


    touch /etc/postfix/mysql/virtual-mailbox-maps.cf
    

    user = vimbadmin
    password = password
    hosts = 127.0.0.1
    dbname = vimbadmin
    query = SELECT maildir FROM mailbox WHERE username = '%s' AND active = '1'
    


    Приступаем к редактированию /etc/dovecot/dovecot.conf:
    # 2.0.21: /etc/dovecot/dovecot.conf
    auth_mechanisms = plain login
    disable_plaintext_auth = no
    log_timestamp = "%Y-%m-%d %H:%M:%S "
    mail_location = maildir:/home/vmail/%d/%n
    mail_privileged_group = mail
    managesieve_notify_capability = mailto
    managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date ihave
    namespace {
      inbox = yes
      location =
      prefix =
      type = private
    }
    passdb {
      driver = pam
    }
    passdb {
      args = /etc/dovecot/dovecot-sql.conf
      driver = sql
    }
    protocols = imap pop3
    service auth {
      unix_listener /var/spool/postfix/private/auth {
        group = postfix
        mode = 0660
        user = postfix
      }
      unix_listener auth-master {
        mode = 0600
        user = vmail
      }
      user = root
    }
    userdb {
      driver = passwd
    }
    userdb {
      args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes
      driver = static
    }
    protocol pop3 {
      pop3_uidl_format = %08Xu%08Xv
    }
    protocol lda {
      auth_socket_path = /var/run/dovecot/auth-master
      log_path = /home/vmail/dovecot-deliver.log
      postmaster_address = postmaster@myserver.com
    }
    
    


    Также отредактируем /etc/dovecot/dovecot-sql.conf:
    driver = mysql
    connect = host=127.0.0.1 dbname=vimbadmin user=vimbadmin password=password
    default_pass_scheme = PLAIN-MD5
    password_query = SELECT username as user, password FROM mailbox WHERE username = '%u'
    


    Переходим к настройке Postfix.
    /etc/postfix/main.cf

    # Директория с дополнительными файлами конфигурации
    additional_config_dir = /etc/postfix/config
    # Сообщение, которое будет появляться при входе на наш SMTP
    smtpd_banner = $myhostname ESMTP Xbox
    # Не использовать biff программу, которая 
    # позволяет пользователям узнать, что им пришла почта.
    biff = no
    # Appending .domain is the MUA's job.
    append_dot_mydomain = no
    # Документация
    readme_directory = /usr/share/doc/postfix
    
    # TLS parameters
    # Расположение файла сертификата сервера
    smtpd_tls_cert_file = /etc/ssl/certs/postfix.pem
    # Расположение файла ключа сервера
    smtpd_tls_key_file = /etc/ssl/private/postfix.pem
    # Сообщать ли клиентам о возможности использования TLS
    smtpd_use_tls = yes
    smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
    smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
    
    # Соответствует полному доменному имени (FQDN)
    myhostname = mail.server.com
    # Список доменов, для которых почта будет доставляться локально, а не
    # пересылаться на другой хост
    mydestination = $myhostname, localhost, localhost.$mydomain, $myhostname.$mydomain
    # Доверенные сети
    mynetworks = 127.0.0.0/8
    alias_maps = hash:/etc/aliases
    alias_database = hash:/etc/aliases
    myorigin = /etc/mailname
    mailbox_command = procmail -a "$EXTENSION"
    # Размер почтового ящика в байтах. Если 0 - неограничено
    mailbox_size_limit = 0
    # Сетевые интерфейсы, на которых будет работать Postfix
    inet_interfaces = all
    # Документация в html
    html_directory = /usr/share/doc/postfix/html
    # Требуем, чтобы удаленный SMTP клиент представлял себя в начале SMTP сессии
    # с помощью команды HELO или EHLO
    smtpd_helo_required = yes
    # Всегда отправлять EHLO вначале SMTP сессии
    smtp_always_send_ehlo = yes
    # Отключает SMTP команду VRFY. В результате чего, невозможно определить
    # существование определенного ящика. Данная техника (применение команды VRFY)
    # используется спамерами для сбора имен почтовых ящиков
    disable_vrfy_command = yes
    # Поддержки старых версий почтовых клиентов, например Microsoft Outlook Express 4
    # и Microsoft Exchange 5, использующих другую форму команды AUTH
    broken_sasl_auth_clients = yes
    # Содержит имена обслуживаемых доменов
    virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual-mailbox-domains.cf
    # Карта расположения почтовых ящиков
    virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual-mailbox-maps.cf
    # Карта алиасов
    virtual_alias_maps = mysql:/etc/postfix/mysql/virtual-alias-maps.cf
    # Карта UID-ов виртуальных пользователей
    virtual_uid_maps = static:5000
    # Карта GID-ов виртуальных пользователей
    virtual_gid_maps = static:5000
    virtual_transport = dovecot
    # Поддержку sasl авторизации
    smtpd_sasl_auth_enable = yes
    # Тип sasl авторизации
    smtpd_sasl_type = dovecot
    smtpd_sasl_path = private/auth
    dovecot_destination_recipient_limit = 1
    
    # Ограничения
    smtpd_restriction_classes = 
                                verify_sender,
                                rbl_cbl_abuseat_org,
                                rbl_sbl_spamhaus_org,
                                rbl_dul_ru, rbl_spamcop,
                                white_client_ip,
                                black_client_ip,
                                block_dsl,
                                helo_access,
                                white_client,
                                black_client,
                                mx_access
    
    # Описание классов:
    verify_sender        = reject_unverified_sender, permit 
    rbl_cbl_abuseat_org  = reject_rbl_client cbl.abuseat.org
    rbl_dul_ru           = reject_rbl_client dul.ru
    rbl_sbl_spamhaus_org = reject_rbl_client sbl.spamhaus.org
    rbl_spamcop          = reject_rbl_client bl.spamcop.net
    # IP адреса, которые нужно пропускать, не смотря ни на что
    white_client_ip      = check_client_access pcre:$additional_config_dir/white_client_ip
    # IP адреса, которые нужно блокировать не смотря ни на что
    black_client_ip      = check_client_access pcre:$additional_config_dir/black_client_ip
    # E-mail, которые нужно пропускать не смотря ни на что
    white_client         = check_sender_access pcre:$additional_config_dir/white_client
    # E-mail, которые нужно блокировать не смотря ни на что
    black_client         = check_sender_access pcre:$additional_config_dir/black_client
    # Правила для блокировки dsl/модемных пулов, с которых подключаются клиенты.
    block_dsl            = regexp:$additional_config_dir/block_dsl
    # Соблюдение документа RFC 2821
    helo_access          = check_helo_access pcre:$additional_config_dir/helo_checks
    # Содержит список приватных сетей, которые по всем канонам глобальной сети интернет
    # не могут быть использованы в качестве IP для MX записей
    mx_access            = check_sender_mx_access cidr:$additional_config_dir/mx_access
    
    # Далее restrictions
    
    # Проверки клиентского компьютера (или другого почтового сервера),
    # который соединяется с сервером postfix для отправки письма
    smtpd_client_restrictions = 
                                white_client_ip,
                                black_client_ip,
                                white_client,
                                black_client,
                                helo_access,
                                block_dsl,
                                rbl_dul_ru,
                                rbl_sbl_spamhaus_org,
                                rbl_spamcop,
                                rbl_cbl_abuseat_org
                                # Принимать письма от клиентов локальной сети
                                permit_mynetworks,
                                # Пропускать письма от авторизованных пользователей
                                permit_sasl_authenticated,
                                # Если клиент не из mynetworks оценивает
                                # reject_unauth_destination. Отклоняется попытки пересылки,
                                # если получатель сообщения не относится к доменам места
                                # назначения и доменам пересылки, указанным в ваших настройках
                                reject_unauth_destination,
                                # Отвергает запрос, когда клиент отправляет команды SMTP
                                # раньше времени, еще не зная, поддерживает ли Postfix конвейерную
                                # обработку команд ESMTP
                                reject_unauth_pipelining,
                                # Блокируем клиентов с адресами from, домены которых
                                # не имеют A/MX записей
                                reject_unknown_address,
                                # Блокирует почту от несуществующих доменов
                                reject_unknown_recipient_domain,
                                # Проверяем домен на записи типа A и MX в DNS.
                                # Если нет, то отклоняем
                                reject_unknown_sender_domain
    
    # Проверки исходящей или пересылаемой через нас почты
    smtpd_sender_restrictions = 
                                white_client,
                                white_client_ip,
                                black_client_ip,
                                # Отклоняет сообщения в не существующие домены
                                reject_unknown_recipient_domain,
                                reject_unknown_sender_domain,
                                # Если имя получателя не соответствует FQDN то отклоняем
                                reject_non_fqdn_recipient,
                                # Если имя отправителя не соответствует FQDN - отклоняем
                                reject_non_fqdn_sender,
                                permit_sasl_authenticated,
                                permit_mynetworks,
                                mx_access,
                                # Отклонение писем с несуществующим адресом отправителя
                                reject_unlisted_sender,
                                reject_unauth_destination
    
    # Правила приема почты нашим сервером
    smtpd_recipient_restrictions = 
                                   verify_sender
                                   white_client,
                                   helo_access,
                                   reject_unknown_recipient_domain,
                                   reject_unknown_sender_domain,
                                   reject_non_fqdn_recipient,
                                   reject_non_fqdn_sender,
                                   reject_unauth_pipelining,
                                   permit_sasl_authenticated,
                                   permit_mynetworks,
                                   reject_unlisted_recipient,
                                   reject_unknown_address,
                                   reject_unauth_destination,
                                   # Отказ в приеме сообщениям с пустым именем отправителя
                                   # конверта, предназначенным нескольким получателям
                                   reject_multi_recipient_bounce
    
    smtpd_data_restrictions = 
                              reject_unauth_pipelining,
                              reject_multi_recipient_bounce,
                              permit
    
    # Пропустить серверы, которые приветствуют нас кодом состояния 5xx
    smtp_skip_5xx_greeting = no
    smtpd_reject_unlisted_sender = yes
    # Отклонение писем с несуществующим адресом получателя
    smtpd_reject_unlisted_recipient = yes
    


    Теперь в конец файла /etc/postfix/master.cf добавляем:
    dovecot   unix  -       n       n       -       -       pipe
      flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}
    


    Mail Filters:
    mkdir /etc/postfix/config
    touch /etc/postfix/config/black_client
    touch /etc/postfix/config/black_client_ip
    touch /etc/postfix/config/block_dsl
    touch /etc/postfix/config/helo_checks
    touch /etc/postfix/config/mx_access
    touch /etc/postfix/config/white_client
    touch /etc/postfix/config/white_client_ip
    


    Редактируем /etc/postfix/config/black_client:
    #Значение                #Команда      #Сообщение при reject'е
    # Отбрасывать все письма с ящиков mail.ru
    #/^.*\@mail\.ru$/        REJECT        Your e-mail was banned!
    


    Редактируем /etc/postfix/config/black_client_ip:
    #Значение                #Команда      #Сообщение при reject'е
    # Забанить IP (в данном примере 123.45.67.89)
    #/123\.45\.67\.89/       REJECT        Your IP was banned!
    # Забанить подсеть (в данном примере 123.45.0-255.0-255)
    #/123\.45/               REJECT        Your IP-range was banned!
    # Забанить домен (в данном примере xyz.ua)
    #/xyz\.ua/               REJECT        Your Domain was banned!
    # Забанить домен (в данном примере cc.zxc.ua)
    #cc\.zxc\.ua/            REJECT        Your Domain was banned!
    


    Редактируем /etc/postfix/config/block_dsl:
    /^dsl.*\..*/i                   553 AUTO_DSL We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
    /.*\.dsl\..*/i                  553 AUTO_DSL2 We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
    /[a|x]dsl.*\..*\..*/i           553 AUTO_[A|X]DSL We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
    /client.*\..*\..*/i             553 AUTO_CLIENT We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
    /cable.*\..*\..*/i              553 AUTO_CABLE We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
    /pool\..*/i                     553 AUTO_POOL We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
    /.*dial(\.|-).*\..*\..*/i       553 AUTO_DIAL We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
    /ppp.*\..*/i                    553 AUTO_PPP We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
    /dslam.*\..*\..*/i              553 AUTO_DSLAM We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
    /dslb.*\..*\..*/i               553 AUTO_DSLB We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
    /node.*\..*\..*/i               553 AUTO_NODE We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
    /.*\.dynamicIP\..*/i            553 AUTO_DYNAMIC We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
    /[ax]dsl.*\..*\..*/i            REJECT Your message looks like SPAM 01
    /\.dsl.*\..*\..*/i              REJECT Your message looks like SPAM 02
    /cable.*\..*\..*/i              REJECT Your message looks like SPAM 03
    /client.*\..*\..*/i             REJECT Your message looks like SPAM 04
    /dhcp.*\..*\..*/i               REJECT Your message looks like SPAM 05
    /dial.*\..*\..*/i               REJECT Your message looks like SPAM 06
    /dialup.*\..*\..*/i             REJECT Your message looks like SPAM 07
    /dslam.*\..*\..*/i              REJECT Your message looks like SPAM 08
    /node.*\..*\..*/i               REJECT Your message looks like SPAM 09
    /pool.*\..*\..*/i               REJECT Your message looks like SPAM 10
    /ppp.*\..*\..*/i                REJECT Your message looks like SPAM 11
    /user.*\..*\..*/i               REJECT Your message looks like SPAM 12
    /[0-9]+-[0-9]+/                 REJECT Invalid hostname (D-D) (dsl)
    /(modem|dia(l|lup)|cp[ce]|dsl|p[cp]p|cable|catv|poo(l|les)|pppoe|dhcp|client|customer|user|host|[0-9]{4,})(-|_|\.|[0-9])/ REJECT Invalid hostname (client)
    


    Редактируем /etc/postfix/config/helo_checks:
    /^\[?10\.\d{1,3}\.\d{1,3}\.\d{1,3}\]?$/ REJECT Address in RFC 1918 private network
    /^\[?192\.\d{1,3}\.\d{1,3}\.\d{1,3}\]?$/ REJECT Address in RFC 1918 private network
    /^\[?172\.\d{1,3}\.\d{1,3}\.\d{1,3}\]?$/ REJECT Address in RFC 1918 private network
    /\d{2,}[-\.]+\d{2,}/ REJECT Invalid hostname (D-D)
    /^(((newm|em|gm|m)ail|yandex|rambler|hotbox|chat|rbc|subscribe|spbnit)\.ru)$/ REJECT Faked hostname ($1)
    /^(((hotmail|mcim|newm|em)ail|post|hotbox|msn|microsoft|aol|news|compuserve|yahoo|google|earthlink|netscape)\.(com|net))$/ REJECT Faked hostname ($1)
    /[^[] *[0-9]+((\.|-|_)[0-9]+){3}/ REJECT Invalid hostname (ipable)
    /(modem|dia(l|lup)|cp[ce]|dsl|p[cp]p|cable|catv|poo(l|les)|pppoe|dhcp|client|customer|user|host|[0-9]{4,})(-|_|\.|[0-9])/ REJECT Invalid hostname (client)
    


    Редактируем /etc/postfix/config/mx_access
    127.0.0.1      DUNNO 
    127.0.0.2      550 Domains not registered properly
    0.0.0.0/8      REJECT Domain MX in broadcast network 
    10.0.0.0/8     REJECT Domain MX in RFC 1918 private network 
    127.0.0.0/8    REJECT Domain MX in loopback network 
    169.254.0.0/16 REJECT Domain MX in link local network 
    172.16.0.0/12  REJECT Domain MX in RFC 1918 private network 
    192.0.2.0/24   REJECT Domain MX in TEST-NET network 
    192.168.0.0/16 REJECT Domain MX in RFC 1918 private network 
    224.0.0.0/4    REJECT Domain MX in class D multicast network 
    240.0.0.0/5    REJECT Domain MX in class E reserved network 
    248.0.0.0/5    REJECT Domain MX in reserved network
    


    Редактируем /etc/postfix/config/white_client:
    # Принимать все письма c ящиков mail.ru
    #/^.*\@mail\.ru$/        PERMIT
    


    Редактируем /etc/postfix/config/white_client_ip:
    # Принимать письма с SMTP-сервера 91.214.209.5
    #/91\.214\.209\.5/        PERMIT
    


    Открываем лог и смотрим чтобы небыло ошибок:
    tail -f /var/log/mail.log
    


    И запускаем почтовэ сервисы:
    /etc/init.d/dovecot restart
    /etc/init.d/postfix restart
    


    ©
    debian.asy.org.ua/5-postfix-postfixadmin-dovecot-ssl-roundcube.html
    www.opensolutions.ie/open-source/vimbadmin
    Поделиться публикацией

    Похожие публикации

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 13

      0
      Возможно ли подключение к уже настроенному и работающему серверу, или требуется установка/настройка с нуля?
        0
        Это веб-интерфейс, как постфикс-админ
        Вроде классно сделан, надо попробовать
          0
          Я это понял. Суть вопроса — могу ли я эту веб морду прикрутить к, уже работающему постфиксу, с уже существующими ящиками и пользователями?
            0
            да без проблем, если текущая система берет данные пользователей из БД
        0
        Хорошая статья, расписаны конфиг.
        Но интерфейс, как я понял, ничего нового по сравнении с heidisql (вариант SQL клиента) он не даст, за исключением использования вкладок «хосты», «юзеры» вместо одноименных таблиц. Какой смысл на него переходить, если ручная админка 4-5 табличек не напряжка и наглядна?
          0
          А если у вас не 10 юзеров, а хотя бы две сотня-другая?
            0
            Скажу честно, если придется оперировать или заводить сотню другую, то буду использовать update и insert без граф интерфейса.
            Судя по картинке поиск есть, и наверное можно отфильтровать например всех бухгалтеров %buh%, но править массово кликая по ним… ну уж нет. Только через базу. Одиночные правки, вероятно и удобны (из-за наличия окошек), но GUI программок-клиентов или phpmyadmin очень наглядны. Меньше кликов приходится делать. Нужно кому-то что-то поменять, кликнул в поле (phpmyadmin по ajax сразу работает, «Изменить» нажимать не обязательно) и изменил.

            Пример из heidisql
            image

            Пример из phpmyadmin
            image

            В любом случае, для кого-то удобен и вариант из статьи.

            З.Ы, замазанные пароли — хеши:)
              0
              Я не говорю про массовое добавление, я говорю про поиск нужного юзера среди толп других.
          –1
          Первый взгляд на интерфейс, первая мысль — клон PostfixAdmin
            0
            read the title, please!
              0
              А я так и не понял, это форк или нет?
                0
                это абсолютно новая модель, читайте как сделано на сайте разработчика.
            0
            Крайне рекомендую в конце таких посланий «REJECT Invalid hostname (client)» Писать имя файла. Например «REJECT Invalid hostname ( helo_checks )» Потом по логам будет понятно по какому правилу нужный сервер попал в бан.
            PS
            мне очень помогает… ;)

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое