четверг, 11 сентября 2014 г.

FreeBsd 10 + postfix + mysql + postfixadmin + dovecot 2 + clamav

На firewall'е открываем 25 порт. На DNS-сервере прописываем 3 записи (A, PTR, MX) для почтовика. В файле /etc/resolv.conf почтовика указываем правильный домен и сервер имен.
MySQL сервер , Apache, php - должны быть установлены.


Postfix

!!! Чтобы почтовик мог принимать почту для домена, необходим статический IP-адрес и зарегистрированое доменное имя !!!

cd /usr/ports/mail/postfix
make install clean
(выбираем mysql, sasl, dovecot2)

в /etc/rc.conf
postfix_enable="YES" 
sendmail_enable="NO" 
sendmail_submit_enable="NO" 
sendmail_outbound_enable="NO" 
sendmail_msp_queue_enable="NO"

в /etc/periodic.conf
daily_clean_hoststat_enable = "NO"
daily_status_mail_rejects_enable = "NO"
daily_status_include_submit_mailq = "NO"
daily_submit_queuerun = "NO"


конфиг. файл находится /usr/local/etc/postfix/main.cf
пример:
myhostname = mail.home.local
mydomain = home.local
mydestination = $mydomain     (куда адресована почта, если используем виртуальные почтовые ящики эта инструкция не нужна !)
myorigin = $mydomain              (добавляем домен к адресу отправителя или получателя)
mynetworks = 10.0.0.0/24       (сети из которых можно отсылать сообщения)
inet_interfaces = all                (разрешаем подключение не только локальным клиентам)
smtpd_helo_required = yes       (требовать указать имя хоста клиента)

Ограничения
#триггеры ограничений в порядке их отработки на передачу сообщений (для каждого этап)
1. smtpd_client_restrictions = (применяется к хосту клиента)
2 .smtpd_helo_restrictions =   (к аргументу HELO/EHLO клиента)
3. smtpd_sender_restrictions =  (к отправителю)
4. smtpd_recipient_restrictions =  (к получателю)
5. smtpd_data_restrictions =  (к содержимому письма)
(!Каждое последующее этапное ограничение влияет на предыдущее, т.е. например, ограничение smtpd_recipient_restrictions применяется к получателю, к отправителю, к HELO/EHLO и к клиенту)
Каждое этапное ограничение состоит из правил. Некоторые правила не имеют никакого смысла на определенных этапах. Правила выполняются последовательно друг за другом.
   пример ограничения:
   smtpd_recipient_restrictions =                   
           reject_non_fqdn_sender                  (проверка на полное имя отправителя) 
           reject_non_fqdn_recipient               (проверка на полное имя получателя) 
           reject_unknown_sender_domain     (проверка на домен отправителя) 
           reject_unknown_recipient_domain  (проверка на домен получателя) 
           permit_mynetworks                          (!выше для внутренней и внешней сети, ниже для внешней сети) 
           permit_sasl_authenticated            (аутентификация)
           reject_unauth_destination             (не открытый сервер) 
           reject_non_fqdn_hostname           (проверка на полное доменное имя клиента) 
           reject_invalid_hostname               (требование к символам имя хоста клиента) 
           check_helo_access hash:/usr/local/etc/postfix/helos  (карта проверки клиентов) 
           check_client_access hash:/usr/local/etc/postfix/clients          
           check_sender_access hash:/usr/local/etc/postfix/senders          
           check_recipient_access hash:/usr/local/etc/postfix/aссounts   (карта проверки получателей) 
           reject_multi_recipient_bounce     (отказать отправителю с пустым именем множественную рассылку)
           permit

Разрешаем получателей
создаем в каталоге postfix файл accounts, добавляем пользователей
postmaster@      OK
abuse@               OK
hostmaster@      OK
webmaster@      OK
и т.д.
далее создаем карту (индексированную версию) accounts.db:
postmap hash:/usr/local/etc/postfix/aссounts
и добавляем правило в необходимое этапное ограничение:
...
check_recipient_access hash:/usr/local/etc/postfix/aссounts
...

Перенаправление почты.
создаем в каталоге postfix файл aliases, добавляем пользователей
root:     admin
и т.д.
далее создаем индексированную версию - файл aliases.db:
postalias hash:/usr/local/etc/postfix/aliases

Проверка содержимого сообщений.
header_checks                 (проверка заголовка сообщения)
body_checks                     (проверка тела сообщения)
mime_header_checks      (проверка mime-заголовков)
nested_header_checks    (проверка не mime-заголовков)

пример:
Создаем файл карт header_checks.
Файл выглядит из строк вида
<шаблон(рег.выр)><действие(REJECT,IGNORE,WARN,HOLD,DISCARD,FILTER,REDIRECT)><текст>:
/^Subject:.*something/       WARN warning to something 
/^To:.*another/                     REJECT reject another
и т.д.
в файл конфигурации main.cf  добавляем: 
header_checks = regexp:/usr/local/etc/postfix/header_checks


Виртуальные пользователи
     Чтобы не заводить системных пользователей для каждого нового email адреса, настроим postfix для работы с виртуальными пользователями, в /usr/local/etc/postfix/main.cf добавим
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP $mail_name
virtual_alias_maps = mysql:/usr/local/etc/postfix/mysql_valias.cf
virtual_gid_maps = static:125
virtual_uid_maps = static:125     
(узнаем командой id postfix)
virtual_minimum_uid = 125
virtual_mailbox_base = /var/mail
virtual_mailbox_domains = mysql:/usr/local/etc/postfix/mysql_vdomains.cf
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/mysql_vbox.cf
virtual_transport = virtual


создаем файлы в каталоге /usr/local/etc/postfix/
 mysql_valias.cf  с таким содержимым
      user = postfix                       (пользователь для подключения к mysql)
      password = postfix              
(пароль)
      hosts = 127.0.0.1                
(где крутится mysql сервер)
      dbname = postfix                
(база данных)
      table = alias                        
(таблица)
      select_field = goto
      where_field = address

  
 mysql_vdomains.cf
      user = postfix
      password = postfix
      hosts = 127.0.0.1
      dbname = postfix
      table = domain
      select_field = domain
      where_field = domain
      additional_conditions = and backupmx = '0' and active = '1'


 mysql_vbox.cf
      user = postfix
      password = postfix
      hosts = 127.0.0.1
      dbname = postfix
      table = mailbox
      select_field = maildir
      where_field = username



запускаем /usr/local/sbin/postfix start (reload)

почта находится в каталоге /var/mail 
изменим права и владельца
chmod -R 777 /var/mail
chown postfix /var/mail

логи находятся в каталоге /var/log/maillog


 
Postfixadmin
cd /usr/ports/mail/postfixadmin
make install clean

     Ставится в каталог /usr/local/www/postfixadmin соответственно в виртуальные хосты апача добавляем алиас:
Alias /postfixadmin/ "/usr/local/www/postfixadmin/"
      <Directory "/usr/local/www/postfixadmin/">
             Options None
             AllowOverride Limit
             Require local  
(доступ к postfixadmin только с localhost)
      </Directory>


для полного доступа в секции directory добавляем
            Options None
            Require all granted
            Allow from all

далее выполняем setup (webserverip/postfixadmin/setup.php).

Внизу страницы вводим пароль для управления настройкой PostfixAdmin. Дальше генерируем хэш пароль.  Далее создаем аккаунт суперадмина: вводим пароль (задавали ранее), почтовый ящик (логин) и пароль к доступу PostfixAdmin.
Далее выполняем вход в PosfixAdmin (webserverip/postfixadmin/login.php).
Также предварительно надо создать базу данных для postfix'а и пользователя для этой базы с полными правами. Далее в конфигурационном файле /usr/local/www/postfixadmin/config.inc.php изменить опции:
$CONF['configured'] = true;
$CONF['setup_password'] = '';     (сюда вводим сгенерированный хэш пароль)
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';    (!!!хост с сервером mysql)
$CONF['database_user'] = 'user';
$CONF['database_password'] = 'password';
$CONF['database_name'] = 'base';
$CONF['database_prefix'] = '';

$CONF['admin_email'] = 'admin@home.local';
$CONF['smtp_server'] = 'localhost';    (имя почтового сервера, пр. mail.home.local)
$CONF['smtp_port'] = '25'; (порт)
$CONF['encrypt'] = 'md5crypt';
$CONF['transport_default'] = 'virtual';


Dovecot 2
Dovecot выполняет роль POP/IMAP почтового сервера.
устанавливаем если не стоит:
cd /usr/ports/mail/dovecot2
make install clean
(выбираем mysql, ssl)

Конфигурационный файл /usr/local/etc/dovecot/dovecot.conf
 
простой пример:
base_dir = /var/run/dovecot/
protocols = imap pop3 

listen = * (слушать на всех интерфейсах)
disable_plaintext_auth = no
ssl = no (отключаем ssl)
log_path = /var/log/dovecot.log (лог)
mail_location = maildir:/var/mail/%u (каталог с почтой)
shutdown_clients = yes 

mail_uid = postfix 
mail_gid = postfix 
first_valid_uid = 125 
last_valid_uid = 125
first_valid_gid = 125 

last_valid_gid = 125
 

auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@

login_greeting = POP3/IMAP Server. (приветствие)
 

protocol imap { 
   imap_client_workarounds = delay-newmail tb-extra-mailbox-sep 


protocol pop3 { 
   pop3_client_workarounds = outlook-no-nuls oe-ns-eoh 


protocol lda { 
   postmaster_address = admin@home.local 
}

auth_verbose = yes
auth_mechanisms = plain login

passdb {
args = /usr/local/etc/dovecot/dovecot-mysql.conf
driver = sql
}

userdb {
args = /usr/local/etc/dovecot/dovecot-mysql.conf
driver = sql
}
service auth { 

   unix_listener auth-master { 
       mode = 0660
   } 

   unix_listener auth-client { 
      mode = 0660
      user = postfix
      group = postfix
   } 
}
 

dict { 


plugin { 
}
 
 
создаем файл /usr/locale/etc/dovecot/dovecot-mysql.conf (подключение к базе)
driver = mysql connect = host=localhost port=3306 dbname=postfix user=postfix password=postfix
default_pass_scheme = MD5-CRYPT
password_query = SELECT password FROM mailbox WHERE username='%u'
user_query = SELECT maildir, 125 AS uid, 125 AS gid FROM mailbox WHERE username='%u'
 
в /etc/rc.conf добавляем
dovecot_enable="YES" 


ClamAv (антивирус)
устанавливаем
cd /usr/ports/security/clamav
make install clean
(выбираем ARC, ARJ, LHA, UNZOO)

конф. файл /usr/local/etc/clamd.conf
LogFile /var/log/clamav/clamd.log (логи) 
LogClean yes 
LogTime yes 
PidFile /var/run/clamav/clamd.pid 
DatabaseDirectory /var/db/clamav 
LocalSocket /var/run/clamav/clamd.sock 
FixStaleSocket yes 
User clamav 
AllowSupplementaryGroups yes 
ScanPE yes 
ScanOLE2 yes 
ScanMail yes (проверяем почту) 
ScanHTML yes 
ScanArchive yes
 
конф. файл /usr/local/etc/freshclam.conf
DatabaseDirectory /var/db/clamav 
UpdateLogFile /var/log/clamav/freshclam.log 
PidFile /var/run/clamav/freshclam.pid 
DatabaseOwner clamav 
AllowSupplementaryGroups yes
DatabaseMirror database.clamav.net 
Checks 12
NotifyClamd /usr/local/etc/clamd.conf


в /etc/rc.conf добавляем
clamav_clamd_enable="YES" 
clamav_freshclam_enable="YES"

freshclam (обновляем)
/usr/local/etc/rc.d/clamav-clamd start (запускаем)



1 комментарий:

  1. Спасибо за статью надеюсь она рабочая.
    Попробую отпишусь.
    Хотелось бы увидеть ещё и настройку mysql, apache,php

    ОтветитьУдалить