Делаем почтовик. EXIM + Dovecot + Postfixadmin + ClamAV. Печать

Столкнулся с такой задачей, как установка и настройка почтового сервера на базе FreeBSD, перелопатив кучу, информации в сети, решил остановиться на почтовике Exim и привязать к нему MUA Dovecot, плюс настроить все это дело через СУБД , привязать postfixadmin, ну и антивирус поставить, чтоб нашу почту фильтровал. Все вроде просто, но стало так, что та информация, которую я нашел в сети по вопросу установки всего этого добра, уже не актуальна, а новых конфигов нет, пришлось брать словарь и переводить многое самому. Ну и чтоб не забыть, т.к. много чего пришлось менять, выкладываю конфиги. Итак, начнем.

Все действия проводились на FreeBSD 8.2.

Данный материал рассчитан на то, что уже на сервере уже крутится Apache+PHP+MySQL.

Обновили порты и устанавливаем postfixadmin:

  1. mail# whereis postfixadmin
  2. postfixadmin: /usr/ports/mail/postfixadmin
  3. mail# cd /usr/ports/mail/postfixadmin
  4. mail# make install clean

У меня установилась версия 2.3.5

image002

Все основные настройки postfixadmin задаются в файле config.inc.php в корне, настройки думаю проблем вызвать не должны, единственно на что обращу внимание это на открытые данные подключения к БД, я исправил это так

config.inc.php

  1. $CONF['database_user'] = $_SERVER['DB_USER'];
  2. $CONF['database_password'] = $_SERVER['DB_PASS'];

А в Apache в файле httpd.conf добавить в конце

  1. #for postfixadmin
  2. SetEnv DB_USER "ваш пользователь"
  3. SetEnv DB_PASS "пароль"

Запускаем postfixadmin, если все нормально везде будут галочки и вам предложат создать суперадмина и хеш пароля придется скопировать вручную в config.inc.php, после первого подключения таблицы в базе создадутся автоматически. Просто зайдите и проверьте так ли это!?)

После создания базы, таблиц и пользователя можно ставить dovecot:

  1. #whereis dovecot
  2. dovecot: /usr/ports/mail/dovecot
  3. # cd /usr/ports/mail/dovecot
  4. # make install clean

Далее отмечаем то что нужно

image004

и ставим.

После установки приводим конфиг /usr/local/etc/dovecot.conf к такому виду:

  1. protocols = pop3 pop3s
  2. listen = *
  3. disable_plaintext_auth = no
  4. log_timestamp = "%b %d %H:%M:%S "
  5. syslog_facility = mail
  6. ssl = no
  7. login_dir = /var/run/dovecot/login
  8. login_chroot = yes
  9. login_user = dovecot
  10. login_process_size = 64
  11. login_process_per_connection = yes
  12. login_processes_count = 3
  13. login_max_processes_count = 128
  14. login_greeting = Dovecot ready.
  15. mail_location = maildir:/var/vmail/%d/%u
  16. mail_privileged_group = mail
  17. dotlock_use_excl = yes
  18. verbose_proctitle = yes
  19. first_valid_uid = 25
  20. first_valid_gid = 0
  21. maildir_copy_with_hardlinks = yes
  22.  
  23. # Если что-то пойдет не так, раскомментируйте эти строки и смотрите лог по указанному пути
  24. # mail_debug = yes
  25. # auth_debug = yes
  26. # auth_debug_passwords = yes
  27. # info_log_path = /var/log/dovecot_info.log
  28.  
  29. protocol pop3 {
  30. pop3_uidl_format = %08Xu%08Xv
  31. pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
  32. }
  33.  
  34. protocol lda {
  35. postmaster_address = support@tihset.ru
  36. auth_socket_path = /var/run/dovecot/auth-master
  37.  
  38. }
  39.  
  40. auth_username_format = %Lu
  41.  
  42. auth default {
  43. mechanisms = plain
  44. passdb sql {
  45. args = /usr/local/etc/dovecot-sql.conf
  46. }
  47.  
  48. userdb sql {
  49. args = /usr/local/etc/dovecot-sql.conf
  50. }
  51.  
  52. user = root
  53.  
  54. socket listen {
  55. master {
  56. path = /var/run/dovecot/auth-master
  57. user = mailnull
  58. group = mailnull
  59. mode = 0600
  60. }
  61. client {
  62. path = /var/run/dovecot/auth-client
  63. mode = 0660
  64. }
  65. }
  66. }
  67. }
  68.  
  69. dict {
  70. }
  71.  
  72. plugin {
  73. }

Данный конфиг для версии 1.2.17

Далее там же создадим файл dovecot-sql.conf следующего вида

  1. driver = mysql
  2. connect = host=localhost dbname=название базы user=имя пользователя password=пароль к базе
  3. default_pass_scheme = PLAIN
  4. password_query = SELECT `username` as `user`, `password` FROM `mailbox` //
  5. WHERE `username` = '%n@%d' AND `active`='1'
  6. user_query = SELECT 26 AS `uid`, 26 AS `gid` FROM `mailbox`//
  7. WHERE `username` = '%n@%d' AND `active`='1'

После проделанных действий пробуем его запустить, для этого пропишем в /etc/rc.conf строчку

dovecot_enable="YES"

 и запускаем

  1. mail# /usr/local/etc/rc.d/dovecot start
  2. Starting dovecot.

Далее устанавливаем EXIM

  1. mail# whereis exim
  2. exim: /usr/ports/mail/exim
  3. mail# cd /usr/ports/mail/exim
  4. mail# make install clean

После установки exim отрубаем стандартный sendmail в /etc/rc.conf пишем

sendmail_enable="NONE"

и заносим exim в /etc/mail/mailer.conf

  1. sendmail /usr/local/sbin/exim
  2. send-mail /usr/local/sbin/exim
  3. mailq /usr/local/sbin/exim -bp
  4. newaliases /usr/local/sbin/exim -bi
  5. hoststat /usr/local/sbin/exim
  6. purgestat /usr/local/sbin/exim

Конфигурацию Exim приводим к такому виду

  1. primary_hostname =ваш домен
  2. hide mysql_servers = localhost/имя базы/имя пользователя/пароль к базе
  3. domainlist local_domains = ${lookup mysql{SELECT `domain` FROM `domain` WHERE //
  4. `domain`='${domain}' AND `active`='1'}}
  5. domainlist relay_to_domains = ${lookup mysql{SELECT `domain` FROM `domain` WHERE //
  6. `domain`='${domain}' AND `active`='1'}}
  7. hostlist relay_from_hosts = localhost
  8. acl_smtp_rcpt = acl_check_rcpt
  9. acl_smtp_data = acl_check_data
  10. av_scanner = clamd:/var/run/clamav/clamd.sock
  11. allow_domain_literals = false
  12. exim_user = mailnull
  13. exim_group = mail
  14. never_users = root
  15. rfc1413_query_timeout = 0s
  16. sender_unqualified_hosts = +relay_from_hosts
  17. recipient_unqualified_hosts = +relay_from_hosts
  18. ignore_bounce_errors_after = 45m
  19. timeout_frozen_after = 7d
  20. helo_accept_junk_hosts =
  21. auto_thaw = 1h
  22. smtp_banner = $smtp_active_hostname ESMTP Ready
  23. smtp_accept_max = 50
  24. smtp_accept_max_per_connection = 25
  25. smtp_connect_backlog = 30
  26. smtp_accept_max_per_host = 20
  27. split_spool_directory = true
  28. remote_max_parallel = 15
  29. return_size_limit = 70k
  30. message_size_limit = 15M
  31. helo_allow_chars = _
  32. smtp_enforce_sync = true
  33. log_selector = \
  34. +all_parents \
  35. +connection_reject \
  36. +incoming_interface \
  37. +lost_incoming_connection \
  38. +received_sender \
  39. +received_recipients \
  40. +smtp_confirmation \
  41. +smtp_syntax_error \
  42. +smtp_protocol_error \
  43. -queue_run
  44. syslog_timestamp = no
  45. begin acl
  46. acl_check_rcpt:
  47. accept hosts = :
  48. deny message = "incorrect symbol in address"
  49. domains = +local_domains
  50. local_parts = ^[.] : ^.*[@%!/|]
  51. deny message = "incorrect symbol in address"
  52. domains = !+local_domains
  53. local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
  54. accept local_parts = postmaster
  55. domains = +local_domains
  56. deny message = "HELO/EHLO require by SMTP RFC"
  57. condition = ${if eq{$sender_helo_name}{}{yes}{no}}
  58. accept authenticated = *
  59. deny message = "Your IP in HELO - access denied!"
  60. hosts = * : !+relay_from_hosts
  61. condition = ${if eq{$sender_helo_name}{$sender_host_address}{true}{false}}
  62. deny condition = ${if eq{$sender_helo_name}{$interface_address}{yes}{no}}
  63. hosts = !127.0.0.1 : !localhost : *
  64. message = "main IP in your HELO! Access denied!"
  65. deny condition = ${if match{$sender_helo_name}{\N^\d+$\N}{yes}{no}}
  66. hosts = !127.0.0.1 : !localhost : *
  67. message = "can not be only number in HELO!"
  68. deny message = "your hostname is bad (adsl, poll, ppp & etc)."
  69. condition = ${if match{$sender_host_name}{adsl|dialup|pool|peer|dhcp}{yes}{no}}
  70. warn
  71. set acl_m0 = 10s
  72. warn
  73. hosts = +relay_from_hosts:
  74. set acl_m0 = 0s
  75. warn
  76. logwrite = Delay $acl_m0 for $sender_host_name [$sender_host_address]//
  77. with HELO=$sender_helo_name. Mail from $sender_address to $local_part@$domain.
  78. delay = $acl_m0
  79.  
  80. accept domains = +local_domains
  81. endpass
  82. message = "In my mailserver not stored this user"
  83. verify = recipient
  84. accept domains = +relay_to_domains
  85. endpass
  86. message = "main server not know how relay to this address"
  87. verify = recipient
  88.  
  89. deny message = you in blacklist: $dnslist_domain \n $dnslist_text
  90. dnslists = opm.blitzed.org : \
  91. cbl.abuseat.org : \
  92. bl.csma.biz : \
  93. dynablock.njabl.org
  94.  
  95. accept hosts = +relay_from_hosts
  96.  
  97. deny message = "This is closed SMTP. Access denied!"
  98.  
  99. acl_check_data:
  100.  
  101. deny malware = *
  102. message = "In e-mail found VIRUS - $malware_name"
  103.  
  104. accept
  105.  
  106. begin routers
  107.  
  108. dnslookup:
  109. driver = dnslookup
  110. domains = ! +local_domains
  111. transport = remote_smtp
  112. ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
  113. no_more
  114.  
  115. # смотрим альясы
  116. system_aliases:
  117. driver = redirect
  118. allow_fail
  119. allow_defer
  120. data = ${lookup mysql{SELECT `goto` FROM `alias` WHERE //
  121. `address`='${quote_mysql:$local_part@$domain}' OR `address`='${quote_mysql:@$domain}'}}
  122.  
  123. dovecot_user:
  124. driver = accept
  125. condition = ${lookup mysql{SELECT `goto` FROM `alias` WHERE //
  126. `address`='${quote_mysql:$local_part@$domain}' OR `address`='${quote_mysql:@$domain}'}{yes}{no}}
  127. transport = dovecot_delivery
  128.  
  129. begin transports
  130.  
  131. remote_smtp:
  132. driver = smtp
  133.  
  134. dovecot_delivery:
  135. driver = pipe
  136. command = /usr/local/libexec/dovecot/deliver -d $local_part@$domain
  137. message_prefix =
  138. message_suffix =
  139. delivery_date_add
  140. envelope_to_add
  141. return_path_add
  142. log_output
  143. user = mailnull
  144.  
  145. address_pipe:
  146. driver = pipe
  147. return_output
  148.  
  149. address_reply:
  150. driver = autoreply
  151.  
  152. begin retry
  153.  
  154. * * F,2h,15m; G,16h,1h,1.5; F,4d,6h
  155.  
  156. begin rewrite
  157. begin authenticators
  158.  
  159. auth_plain:
  160. driver = plaintext
  161. public_name = PLAIN
  162. server_condition = ${lookup mysql{SELECT `username` FROM `mailbox` WHERE //
  163. `username` = '${quote_mysql:$auth2}' AND `password` = '${quote_mysql:$auth3}'}{yes}{no}}
  164. server_prompts = :
  165. server_set_id = $auth2
  166.  
  167. auth_login:
  168. driver = plaintext
  169. public_name = LOGIN
  170. server_condition = ${lookup mysql{SELECT `username` FROM `mailbox` WHERE //
  171. `username` = '${quote_mysql:$auth1}' AND `password` = '${quote_mysql:$auth2}'}{yes}{no}}
  172. server_prompts = Username:: : Password::
  173. server_set_id = $auth1
  174.  
  175. auth_cram_md5:
  176. driver = cram_md5
  177. public_name = CRAM-MD5
  178. server_secret = ${lookup mysql{SELECT `password` FROM `mailbox` WHERE //
  179. `username` = '${quote_mysql:$auth1}'{$value}fail}
  180. server_set_id = $auth2

Exim у меня установился 4.77

Ну и на последок ставим антивирус, я выбрал ClamAV

  1. mail# whereis clamav
  2. clamav: /usr/ports/security/clamav
  3. mail# cd /usr/ports/security/clamav
  4. mail# make install clean

 Также неплохобы воткнуть строку про обновление антивирусных баз в рутовый планировщик - пару раз в сутки.

Вот вроде и все. Теперь можно создавать виртуальные домены и ящики. Пробуем отправить письмо:

Смотрим лог, почта ходит.

Обсудить и спросить можно на форуме.

Обновлено 13.10.2016 22:27
 

Комментарии 

 
0 #3 Chantal 09.08.2019 22:24
Not օnly tһis process allоws you tо remove аll of the unwanted fats wіthin ykur body іt aⅼso allows yoᥙ to eliminate
all tһose dangerous toxinss аnd wastes that ԝere iin youг
ѡay of а prolonged tіmе aⅼready. Followers oof
tһe Slim-Fast diet eat 3 snacks, 2 shakes oor bars аnd 1 "proper"
healthy meal peг day. Whilst mοst people understand tһe hazards οf fatty foods, it might bе hard to try and lessen yօur intake ߋf
them.

Takke a look ɑt my web рage ... Bob: https://www.chefdonpepe.com/product/aged-italian-balsamic-vinegar-from-modena/
Цитировать
 
 
0 #2 Gilberto 08.06.2019 05:40
Thankѕ ffor posting "Делаем почтовик. EXIM + Dovecot + Postfixadmin + ClamAV." -
wasn't a waxte of time!
Цитировать
 
 
+11 #1 Пузо 19.06.2012 11:26
круто, попробую сделать :)
отличная статья
Цитировать
 

Добавить комментарий