Pull to refresh

PostfixАdmin revamped (ViMbAdmin)

Reading time11 min
Views20K

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
Tags:
Hubs:
+13
Comments13

Articles