Предстоит следующая задача:
- Настроить почтовый сервер на FreeBSD чтоб клиенты могли работать с ним по протоколам pop3, smtp (тоесть забирать почту клиентами The Bat, Outlook и т.п.).
- Сервер должен обслуживать почту 3 доменов причем пользователи должны иметь одноименную почту в разных доменах т.е. (dima@domain.ru
dima@mail.domain.ru dima@domain2.ru должен быть одним и ткм же пользователем и почта для него должна складываться в один ящик.)
- Почтовый сервер должен иметь дублирующий сервер которй мог бы принимать на себя почту этих 3-х доменов в случае выхода из строя основного сервера и затем пересылать почту на основной сервер когда восстановится основной сервер.
- Доступ к серверу должен осуществляться только с определенных адресов (локальная сеть офиса) как для отправки так и для приема почты.
- Пользователи старого почтового сервера (sendmail on FreeBSD 4.6) должны быть перенесены на новый сервер без изменения пароля.
В качестве сервера выбрана следующая конфигурация.
CPU: 2xPIII 1133 Mhz 512k кэш
RAM: 2x512 DIMM ECC
HDD: Seagate Barracuda IV 7200 rpm 40 Gb
MB: Intel Server Board SAI2 ServerWorks ServerSet III LE chipset+LAN 100Mbit(Intel 82559)+Video
Для установки скачиваем полседнию версию Sendmail:
Sendmail
sendmail-8.12.7.tar.gz
http://www.sendmail.org
ftp://ftp.sendmail.org
Разархивирую пакет
#cd /
#mkdir src
#tar xvfz sendmail-8.12.7.tar.gz
Компилирую и инсталирую новую версию вместо старой, шедшей в составе дистрибутива.
#cd sendmail.8.12.7
#sh Build
#sh Build install
#cd ./mailstats
#sh Build install
#cd ../makemap
#sh Build install
#cd ../praliases
#sh Build install
#cd ..
#install -d -m 755 /var/spool/mqueue
#ln -fs /usr/sbin/sendmail /usr/lib/sendmail
Приступаю к конфигурированию. /src/sendmail-8.12.7/cf/cf/sendmail.mc
divert(-1)
divert(0)dnl
define(confDEF_USER_ID 26:26)dnl
OSTYPE(freebsd4)dnl # Если у вас FreeBSD 5.0 то пишем freebsd5
если Linux то пишем linux
DOMAIN(generic)dnl
define(confTRY_NULL_MX_LIST,true)dnl
define(confDONT_PROBE_INTERFACES,true)dnl
define(PROCMAIL_MAILER_PATH,/usr/local/bin/procmail)dnl
define(LOCAL_MAILER_FLAGS,ShPfn)dnl
define(LOCAL_MAILER_ARGS,procmail -a $h -d $u)dnl
FEATURE(mailertable)dnl
FEATURE(virtusertable,hash -o /etc/mail/virtusertable)dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(local_procmail)dnl
FEATURE(access_db)dnl
Следующие семь строк следует добавлять если сервер будет испольхзовать публичные антиспамовые базы данных.
**********************
FEATURE(blacklist_recipients)dnl
FEATURE(dnsbl)dnl
FEATURE('dnsbl', 'relays.ordb.org', 'Spam bloked - see http://ordb.org/')
FEATURE(dnsbl,'inputs.orbz.org', 'Input Spam bloked - see http://orbz.org/')
FEATURE(dnsbl,'bl.spamcop.net', 'Spam blocked - see http://spamcop.net/bl.shtml?$&{client_addr}')
FEATURE(dnsbl,'ex.dnsbl.org', 'Spam bloked - see http://www.dnsbl.org/')
FEATURE(dnsbl, 'relays.osirusoft.com', 'Spam bloked - see http://relays.osirusoft.com/')
**********************
MAILER(local)dnl
MAILER(smtp)dnl
MAILER(procmail)dnl
Генерирование конфигурационного файла sendmail.cf из sendmail.mc с помощью m4
#m4 ../m4/cf.m4 sendmail.mc > /etc/mail/sendmail.cf
#cd /usr/ports/mail/procmail
#make
#makeinstall
#cd /etc/mail
Составление файла access и создания хэш базы.
/etc/mail/access
localhost.localdomain RELAY
localhost RELAY
uni12.ru RELAY
uni12.ac.ru RELAY
193.215.78 RELAY
informs12.ru RELAY
#makemap hash access.db < access
Составления файла в котором сождержатся те домены для которых будет приниматься почта сервером.
/etc/mail/local-host-names
uni12.ru
data.uni12.ru
system.uni12.ac.ru
Создание пустых хэш баз. В моем случае их конфигурирование не нужно было.
#ee virtusertable
#makemap hash virtusertable.db < virtusertable
#ee mailertable
#makemap hash mailertable.db < mailertable
#ee domaintable
#makemap hash domaintable.db < domaintable
Редактирование файла rc.conf
/etc/rc.conf
defaultrouter="193.215.78.xxx"
hostname="data.uni12.ru"
ifconfig_xl0="inet 193.215.78.xxx netmask 255.255.255.0"
kern_securelevel_enable="NO"
nfs_reserved_port_only="NO"
sendmail_enable=\\\\\\\"YES\\\\\\\" # Включаю sendmail
sendmail_flags="-bd -q30m"
sshd_enable="YES"
usbd_enable="NO"
inetd_enable="YES" #Для работы pop3 используется qpopper работающий под inetd
firewall_enable="YES" #Включаю поддержку firewall
firewall_type="filename" #Для его поддержки нужно перекомпилировать ядро с поддержкой
firewall_script="/etc/firewall.conf" # firewall.
firewall_quiet="NO" # Настройки firewall хранятся в отдельном файле firewall.conf
Файл настроек firewall /etc/firewall.conf
/sbin/ipfw add 1 allow tcp from any to 193.233.78.37 80 in # Открываю 80 порт для веб сервера
/sbin/ipfw add 2 allow tcp from 193.233.78.33 to 193.233.78.37 22 in # 22 порт для ssh
/sbin/ipfw add 3 allow tcp from 193.233.78.33 to 193.233.78.37 110 in # 110 порт для pop3
/sbin/ipfw add 4 allow tcp from any to 193.233.78.37 25 in # 25 порт для приема почты с интернета
/sbin/ipfw add 5 allow udp from any to 193.233.78.37 25 in
/sbin/ipfw add 6 allow tcp from any to 193.233.78.37 443 in # 443 для вебсервера работающего по https
/sbin/ipfw add 7 allow tcp from 193.233.78.33 to 193.233.78.37 20-21 in # открываю ftp
/sbin/ipfw add 50 reset tcp from any to 193.233.78.37 1-1024 in # дальше все блокирую
/sbin/ipfw add 60 deny udp from any to any 1-1024 in
/sbin/ipfw add 70 unreach port tcp from any to 193.233.78.37 1025-65535 in setup
/sbin/ipfw add 65000 allow ip from any to any
Переношу файла спаролями и пользователями со старого сервера. Обьеденяю их с новым и стираю лишние записи из получившегося файлаю. Затем заменяю им оригинал.
#cat master.passwd ./old/master.passwd > master
#cp master master.passwd
Создаю базу паролей из файла master.passwd
#pwd_mkdb master.passwd
Устанавливаю qpopper из портов
#cd /usr/ports/mail/qpopper
#make
#make install
На этом конфигурирование почтового сервера закончена. Перезагружаю сервер и смотрю что из этого получилось.
Все используемые адреса в статье заменены на несуществующие.
Статья посвящена моему новому другу.
(с) Дрезюля Дмитрий http://freeunix.unicor.ru