Решением данной задачи я хочу добиться проходом по всем шагам ручного исполнения по установки малого почтового сервера в малой компании под управлением Postfix, где в качестве управления им будет использоваться Web–интерфейс или не забываем кто хочет использовать обычную консоль командной строки.
Обновляю систему до актуального состояни:
ekzorchik@srv-serv:~$ sudo apt-get update && sudo apt-get upgrade -y
Корректирую полное (FQDN) имя системы:
ekzorchik@srv-serv:~$ sudo nano /etc/hostname
srv-serv.polygon.local
ekzorchik@srv-serv:~$ sudo nano /etc/hosts
192.168.1.50 srv-serv.polygon.local srv-serv
ekzorchik@srv-serv:~$ sudo service hostname start
hostname stop/waiting
После делаю Logoff / Logon для принятия изменений
Проверяю:
ekzorchik@srv-serv:~$ hostname
srv-serv.polygon.local
Т.к. данная система будет являться почтовым сервером, то понадобиться правильно настроить DNS с этой задачей в малой сети прекрасно справится пакет dnsmasq:
ekzorchik@srv-serv:~$ sudo apt-get install dnsmasq -y
ekzorchik@srv-serv:~$ sudo nano /etc/dnsmasq.conf
interface=eth1
domain=polygon.local
server=/polygon.local/192.168.1.50
server=/1.168.192.in-addr.arpa/192.168.1.50
mx-host=polygon.local,srv-serv.polygon.local,10
ptr-record=50.1.168.192.in-addr.arpa,"srv-serv.polygon.local"
ekzorchik@srv-serv:~$ sudo service dnsmasq restart
* Restarting DNS forwarder and DHCP server dnsmasq [ OK ]
ekzorchik@srv-serv:~$ nslookup srv-serv.polygon.local
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: srv-serv.polygon.local
Address: 192.168.1.50
Устанавливаем простую конфигурацию почтового сервере на базе postfix:
ekzorchik@srv-serv:~$ sudo apt-get install mail-server^ -y
General type of mail configuration: Internet Site
System mail name:srv-serv.polygon.local
После приводим настройки Postfix к адаптированному виду для работы в локальной сети:
ekzorchik@srv-serv:~$ sudo dpkg-reconfigure postfix
General type of mail configuration: Internet Site
System mail name:srv-serv.polygon.local
Root and postmaster mail recipient:postmaster
Other destinations to accept mail for (blank for none):srv-serv.polygon.local,polygon.local, localhost.polygon.local, , localhost
Force synchronous updates on mail queue? No
Local networks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.1.0/24
Use procmail for local delivery? Yes
Mailbox size limit (bytes): 0
Local address extension character: +
Internet protocols to use:ipv4
Далее нужно указать какой формат почтовых ящиков будет использоваться:
ekzorchik@srv-serv:~$ sudo postconf -e 'home_mailbox = Maildir/'
Далее настроим SMTP аутентификацию используя SASL (saslauthd), либо через утилиту postconf либо внося изменения посредством правки:
ekzorchik@srv-serv:~$ sudo nano /etc/postfix/main.cf
либо так:
ekzorchik@srv-serv:~$ sudo postconf -e 'smtpd_sasl_local_domain ='
ekzorchik@srv-serv:~$ sudo postconf -e 'smtpd_sasl_auth_enable = yes'
ekzorchik@srv-serv:~$ sudo postconf -e 'smtpd_sasl_security_options = noanonymous'
ekzorchik@srv-serv:~$ sudo postconf -e 'broken_sasl_auth_clients = yes'
ekzorchik@srv-serv:~$ sudo postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
ekzorchik@srv-serv:~$ sudo postconf -e 'inet_interfaces = eth1'
Далее добавим следующие строки:
ekzorchik@srv-serv:~$ sudo nano /etc/postfix/sasl/smtpd.conf
pwcheck_method: saslauthd
mech_list: plain login
Далее задействуем сертификаты — создаю TLS сертификат:
ekzorchik@srv-serv:~$ touch smtpd.key
ekzorchik@srv-serv:~$ chmod 600 smtpd.key
ekzorchik@srv-serv:~$ openssl req -newkey rsa:2048 -keyout smtpd.key -x509 -days 3650 -out smtpd.crt
Generating a 2048 bit RSA private key
……………..+++
…………………………+++
unable to write ‘random state’
writing new private key to ‘smtpd.key’
Enter PEM pass phrase:712mbddr@
Verifying – Enter PEM pass phrase:712mbddr@
—–
Common Name (e.g. server FQDN or YOUR name) []:srv-serv.polygon.local
ekzorchik@srv-serv:~$ openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
Generating a 1024 bit RSA private key
….++++++
………….++++++
unable to write ‘random state’
writing new private key to ‘cakey.pem’
Enter PEM pass phrase:712mbddr@
Verifying – Enter PEM pass phrase:712mbddr@
Common Name (e.g. server FQDN or YOUR name) []:srv-serv.polygon.local
ekzorchik@srv-serv:~$ sudo mv smtpd.key /etc/ssl/private/
ekzorchik@srv-serv:~$ sudo mv smtpd.crt /etc/ssl/certs/
ekzorchik@srv-serv:~$ sudo mv cakey.pem /etc/ssl/private/
ekzorchik@srv-serv:~$ sudo mv cacert.pem /etc/ssl/certs/
Донастраиваю Postfix на использованием TLS шифрования как для входящих так и исходящих сообщений:
ekzorchik@srv-serv:~$ sudo postconf -e 'smtpd_tls_security_level = may'
ekzorchik@srv-serv:~$ sudo postconf -e 'smtpd_tls_auth_only = no'
ekzorchik@srv-serv:~$ sudo postconf -e 'smtp_tls_note_starttls_offer = yes'
ekzorchik@srv-serv:~$ sudo postconf -e 'smtpd_tls_key_file = /etc/ssl/private/smtpd.key'
ekzorchik@srv-serv:~$ sudo postconf -e 'smtpd_tls_cert_file = /etc/ssl/certs/smtpd.crt'
ekzorchik@srv-serv:~$ sudo postconf -e 'smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem'
ekzorchik@srv-serv:~$ sudo postconf -e 'smtpd_tls_loglevel = 1'
ekzorchik@srv-serv:~$ sudo postconf -e 'smtpd_tls_received_header = yes'
ekzorchik@srv-serv:~$ sudo postconf -e 'smtpd_tls_session_cache_timeout = 3600s'
ekzorchik@srv-serv:~$ sudo postconf -e 'tls_random_source = dev:/dev/urandom'
ekzorchik@srv-serv:~$ sudo postconf -e 'myhostname = srv-serv.polygon.local'
Перезапускаю демон Postfix:
ekzorchik@srv-serv:~$ sudo service postfix restart
* Stopping Postfix Mail Transport Agent postfix postmulti: fatal: config variable inet_interfaces: host not found: eth1
[ OK ]
* Starting Postfix Mail Transport Agent postfix postmulti: fatal: config variable inet_interfaces: host not found: eth1
Правлю:
ekzorchik@srv-serv:~$ sudo nano /etc/postfix/main.cf
inet_interfaces = all
ekzorchik@srv-serv:~$ sudo service postfix restart
* Stopping Postfix Mail Transport Agent postfix [ OK ]
* Starting Postfix Mail Transport Agent postfix
Следующим шагом настраиваю POSTFIX использовать SASL для SMTP аутентификации:
(Saslauthd требуется для того, чтобы устанавливать безопасные соединения с вашим почтовым сервером)
ekzorchik@srv-serv:~$ sudo apt-get install libsasl2-2 sasl2-bin libsasl2-modules
ekzorchik@srv-serv:~$ sudo nano /etc/default/saslauthd
START=yes
PWDIR="/var/spool/postfix/var/run/saslauthd"
PARAMS="-m ${PWDIR}"
PIDFILE="${PWDIR}/saslauthd.pid"
MECHANISMS="pam"
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
ekzorchik@srv-serv:~$ sudo dpkg-statoverride --force --update --add root sasl 755 /var/spool/postfix/var/run/saslauthd
dpkg-statoverride: warning: –update given but /var/spool/postfix/var/run/saslauthd does not exist
это сообщение о том, что не существует такой директории просто игнорируем, потому как при следующем запуске saslauthd необходимые каталоги будут созданы
ekzorchik@srv-serv:~$ ls -l /var/spool/postfix/var
ls: cannot access /var/spool/postfix/var: No such file or directory
ekzorchik@srv-serv:~$ sudo /etc/init.d/saslauthd start
* Starting SASL Authentication Daemon saslauthd
Проверяю что каталоги созданы:
ekzorchik@srv-serv:~$ sudo apt-get install tree
ekzorchik@srv-serv:~$ tree /var/spool/postfix/var
/var/spool/postfix/var
└── run
└── saslauthd
├── cache.flock
├── cache.mmap
├── mux
├── mux.accept
└── saslauthd.pid
2 directories, 5 files
Теперь проверяем что отрабатываем SMTP-AUTH и TLS:
ekzorchik@srv-serv:~$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 srv-serv.polygon.local ESMTP Postfix (Ubuntu)
ehlo localhost → набираем эту строку
250-srv-serv.polygon.local
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
Connection closed by foreign host.
Если нужно использовать порт для SMTP 587 вместо 25, то (со строки 16 снимаем символ комментария):
ekzorchik@srv-serv:~$ sudo nano +16 /etc/postfix/master.cf
submission inet n - - - - smtpd
Перезапускаю Postfix для принятия настроек:
ekzorchik@srv-serv:~$ sudo service postfix restart
ekzorchik@srv-serv:~$ telnet localhost 587
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 srv-serv.polygon.local ESMTP Postfix (Ubuntu)
ehlo localhost
250-srv-serv.polygon.local
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
Connection closed by foreign host.
ekzorchik@srv-serv:~$ sudo netstat -tulpn | grep master
tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN 1156/master
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 1156/master
Следом устанавливаем пакет dovecot который даст возможность осуществлять клиентам доступ к почтовому ящику через IMAP, IMAPS, POP3, и POP3S.
ekzorchik@srv-serv:~$ sudo apt-get install dovecot-postfix -y
ekzorchik@srv-serv:~$ dovecot --version
2.0.19
ekzorchik@srv-serv:~$ sudo nano /etc/dovecot/dovecot.conf
login_trusted_networks = 192.168.1.0/24
ekzorchik@srv-serv:~$ sudo service dovecot restart
dovecot stop/waiting
dovecot start/running, process 2618
ekzorchik@srv-serv:~$
Далее устанавливаю Web-сервер Apache2 на систему в связке с LAMP (Linux,Apache,Mysql,PHP):
ekzorchik@srv-serv:~$ sudo apt-get install lamp-server^ -y
New password for the MySQL “root” user: 712mbddr@
Repeat password for the MySQL “root” user: 712mbddr@
Уменьшаем болтливость Web-сервера Apache 2:
ekzorchik@srv-serv:~$ sudo nano /etc/apache2/conf.d/security
ServerTokens Prod
ServerSignature Off
ekzorchik@srv-serv:~$ sudo service apache2 restart
С официального сайта скачиваю самую последнюю версия deb пакета postfixadmin
ekzorchik@srv-serv:~$ wget -c http://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin-2.92/postfixadmin_2.92-1_all.deb
ekzorchik@srv-serv:~$ file postfixadmin_2.92-1_all.deb
postfixadmin_2.92-1_all.deb: Debian binary package (format 2.0)
Устанавливаю, но в процессе получаю сообщение в консоль что в системе отсутствуют некоторые зависимые пакеты:
ekzorchik@srv-serv:~$ sudo dpkg -i postfixadmin_2.92-1_all.deb
[sudo] password for ekzorchik:
Selecting previously unselected package postfixadmin.
(Reading database … 50122 files and directories currently installed.)
Unpacking postfixadmin (from postfixadmin_2.92-1_all.deb) …
dpkg: dependency problems prevent configuration of postfixadmin:
postfixadmin depends on dbconfig-common; however:
Package dbconfig-common is not installed.
postfixadmin depends on wwwconfig-common; however:
Package wwwconfig-common is not installed.
postfixadmin depends on php5-imap; however:
Package php5-imap is not installed.
dpkg: error processing postfixadmin (–install):
dependency problems – leaving unconfigured
Errors were encountered while processing:
postfixadmin
Устанавливаю их:
ekzorchik@srv-serv:~$ sudo apt-get install -f -y
в процессе установки понадобиться ответить на вопрос:
Web server to reconfigure automatically: apache2
Configure database for postfixadmin with dbconfig-common? Yes
Database type to be used by postfixadmin: mysql
Password of the database’s administrative user: 712mbddr@
MySQL application password for postfixadmin: 712mbddr@
Password confirmation: 712mbddr@
Если посмотреть основной конфиг /etc/postfixadmin/config.inc.php, то увидим что в нем используются переменные описанные в файле:
ekzorchik@srv-serv:~$ sudo nano /etc/postfixadmin/dbconfig.inc.php
$dbuser='postfixadmin';
$dbpass='712mbddr@';
$basepath='';
$dbname='postfixadmin';
$dbserver='';
$dbport='';
$dbtype='mysql';
это те переменные которые я указывал в процессе ответов на вопросы мастера установки.
По умолчанию если открыть браузер в качестве URL адреса указать полное FQDN имя сервера, то увидем надпись, что Web-сервер Apache 2 работает,
http://srv-serv.polygon.local
It works!
This is the default web page for this server.
The web server software is running but no content has been added, yet.
Поправим настройки чтобы в качестве главной страницы был Web–интерфейс администрирования почтовым сервером:
ekzorchik@srv-serv:~$ sudo ln -s /usr/share/postfixadmin/ /var/www/postfixadmin
ekzorchik@srv-serv:~$ sudo nano /etc/apache2/sites-available/default
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/postfixadmin
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
ekzorchik@srv-serv:~$ sudo service apache2 restart
Теперь обновим Web страницу с открытым адресом: http://srv-serv.polygon.local получаем:
, но пока нам нечего вводить в требуемые поля, поэтому в строке URL указываем путь до элемента настройки:
http://srv-serv.polygon.local/postfixadmin/setup.php
в самом низу страницы указываем пароль, к примеру пусть будет: 712mbddr@ и нажимаем кнопку Generate password hash
после чего полученный хеш нужно добавить в конфигурационный файл config.inc.php:
ekzorchik@srv-serv:~$ sudo nano +35 /etc/postfixadmin/config.inc.php
$CONF['setup_password'] = 'fd3e70c9a0666ee014b2e588099a277a:ddf1a6e2809fea767c1d4c48bbba4f2233d02eae'
;
после чего создаем администратора по управлению почтовым сервером:
Setup password: 712mbddr@
Admin: ekzorchik@ekzorchik.ru
Password: 712mbddr@
Password (again): 712mbddr@
И нажимаем кнопку — Add Admin
и получаю сообщение, что администратор с почтовым ящиком ekzorchik@ekzorchik.ru и паролем 712mbddr@ успешно стал Администратором почтового сервера:
The admin ekzorchik@ekzorchik.ru has been added!
Теперь в целях безопасности ограничим доступ к скрипту к панели настройки setup.php создадим файл .htaccess следующего содержания:
ekzorchik@srv-serv:~$ sudo nano /var/www/postfixadmin/.htaccess
<Files "setup.php">
deny from all
</Files>
ekzorchik@srv-serv:~$ sudo service apache2 reload
Теперь при обращении с панели настройки обратившийся получит сообщение:
Forbidden
You don’t have permission to access /postfixadmin/setup.php on this server.
А вот теперь можно и зайти на URL управления почтовым сервером, для этого в строке адреса браузера указываем: http://srv-serv.polygon.local/login.php вводим аутентификационные данные:
Login (email): ekzorchik@ekzorchik.ru
Password: 712mbddr@
Language: выбираю Русский — Russian
и нажимаю Login (Войти) и в случае правильного указания вы увидите сам Web–интерфейс администрирования.
Первым делом создаю домен:
Список доменов — Новый домен –
После нажатия «Добавить домен» на основе указанной информации выше получаю хорошую новость: – Домен был добавлен! (polygon.local)
Теперь перейдя в список доменов можно управлять созданным почтовым доменом или завести новый домен:
Список доменов
Далее создадим еще один почтовый ящик в домене Polygon.local
Обзор — Создать ящик и заполняем поля:
Название: ekzorchik
домен: polygon.local
Пароль: (для POP3/IMAP) 712mbddr@
Пароль (еще раз, для POP3/IMAP): 712mbddr@
Имя: 712mbddr@
Квота: 2048Mb
Активен: да
Отправить приветственное письмо: да
По окончанию нажимаю “Создать ящик» – Почтовый ящик был успешно создан! (ekzorchik@polygon.local)
Теперь настрою почтовый клиент (Outlook 2010) на доступ к созданному почтовому ящику ekzorchik@polygon.local на системе Windows XP x86
Не забываю указать через “Другие Настройки…” некоторые дополнения настроек
Указываю что почта будет хранится на сервере
Теперь проверяю что настройки верны:
Через Web–интерфейс управления почтовым сервером отправляю письмо
http://srv-serv.polygon.local/ – послать письмо
на созданный выше ящик и наблюдаю его в клиенте Outlook 2010, видно из скриншота ниже что было успешно доставлено письмо отправленное через Web–интерфейс, а клиент Outlook 2010 успешно его загрузил.
и что ещё хорошо, если настраивать подключение к почтовому ящику через IMAP то тоже все нормально происходит.
Данной заметкой я подробно насколько возможно показал, как сделать простенький почтовый сервер на базе моей любимой операционной системе Ubuntu 12.04.5 Server amd64. Такой заметкой я поднимаюсь еще на один шаг к пониманию всего то что можно сделать работая в системе Ubuntu и способствованию стандартизации применяемых сервисов в малой компании где системный администратор, как правило преимущественно он один всю работу должен стандартизировать, чтобы обслуживать было проще. Не стоит разводить зоопарк различных операционных систем, я к примеру за легкость и единообразие. На этом все, не смею Вас задерживать — с уважением, автор блога — ekzorchik.