Как я настраивал себе сервер на FreeBSD (часть 6)

Продолжение предыдущей статьи - Как я настраивал себе сервер на FreeBSD (часть 5). В ней мы настроили Postifx, сейчас же займемся настройкой Dovecot. Для него нам нужно будет создать отдельного пользователя, группу, немного подправить конфиг /usr/local/mail/dovecot.conf и сменить владельца директории /usr/mail. Кроме того, нам нужно будет настроить шифрование.
Что ж, перейдем непосредственно к настройке.

Добавим группу в /etc/group. В самом конце файла дописываем:

sermail:*:150:

При этом смотря, чтобы gid больше нигде не значился. Если он уже существует, то просто меняем его на свободный. Сразу же добавляем и пользователя:

adduser
Username: sermail
Full name:   
Uid (Leave empty for default): 150
Login group [sermail]:
Login group is sermail. Invite sermail into other groups? []:
Login class [default]:
Shell (sh csh tcsh nologin) [sh]:
Home directory [/home/sermail]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username   : sermail
Password   : *****
Full Name  :
Uid        : 150
Class      :
Groups     : sermail
Home       : /home/sermail
Home Mode  :
Shell      : /bin/sh
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (sermail) to the user database.
Add another user? (yes/no): no
Goodbye!

Вот. Теперь у нас есть и группа и пользователь для dovecot. Теперь перейдем к правке конфигурационного файла, приводя его к следующему виду:

base_dir = /var/run/dovecot/
protocols = imap pop3 imaps pop3s
disable_plaintext_auth = no
shutdown_clients = yes
log_path = /var/log/dovecot.log
log_timestamp = "%b %d %H:%M:%S "
auth_debug = yes
ssl = no
#ssl_cert_file = /etc/ssl/certs/dovecot.pem
#ssl_key_file = /etc/ssl/private/dovecot.pem

mail_location = maildir:/usr/mail/%d/%n/
namespace private {
   separator = .
   prefix = INBOX.
   inbox = yes
}

mail_privileged_group = sermail

dotlock_use_excl = yes
verbose_proctitle = yes

mail_uid = 150
mail_gid = 150
first_valid_uid = 150
first_valid_gid = 150
maildir_copy_with_hardlinks = yes

protocol imap {

  imap_client_workarounds = delay-newmail netscape-eoh tb-extra-mailbox-sep
}
 
protocol pop3 {
  pop3_uidl_format = %08Xu%08Xv
  pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}

protocol lda {
postmaster_address = admin@domain.ru
  sendmail_path = /usr/sbin/sendmail
  auth_socket_path = /var/run/dovecot/auth-master
}
auth_username_format = %Lu

auth default {
  mechanisms = plain login

  passdb sql {
  args = /usr/local/etc/dovecot-sql.conf
  }
#  userdb static {
#      args = uid=500 gid=500 home=/var/mail/%d/%n allow_all_users=yes
#  }

#  userdb sql {
#    args = /usr/local/etc/dovecot-sql.conf
#  }

  user = sermail
  socket listen {
    master {
      path = /var/run/dovecot/auth-master
      mode = 0666
    }
    client {
      path = /var/spool/postfix/private/auth
      mode = 0660
      user = postfix
      group = postfix
    }
  }
}

dict {
}

plugin {
}

Сменим владельца директории /usr/mail:

sudo chown -R sermail:sermail /usr/mail

Перезапустим dovecot:

sudo /usr/local/etc/rc.d/dovecot stop
sudo /usr/local/etc/rc.d/dovecot start

Теперь можно попробовать залогиниться при помощи telnet:

telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Dovecot ready.
user total@domain.ru
+OK
pass 074dimchel
+OK Logged in.
quit
+OK Logging out.
Connection closed by foreign host.

Ну вот, в основном все работает. Теперь самое время добавить немного безопасности. Предлагаю настроить шифрование.

Создадим две папки - certs и private для сертификатов в директории /etc/ssl:

sudo mkdir /etc/ssl/certs
sudo mkdir /etc/ssl/private

Ну и, собственно, сами сертификаты:

sudo openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/dovecot.pem -keyout /etc/ssl/private/dovecot.pem
Generating a 1024 bit RSA private key
.......++++++
......................................++++++
writing new private key to '/etc/ssl/private/dovecot.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Russia
Locality Name (eg, city) []:chel
Organization Name (eg, company) [Internet Widgits Pty Ltd]:domail.ru
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:mail.domain.com
Email Address []:postmaster@domail.com

Также создадим сертификаты для postifx:

sudo openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/postfix.pem  -keyout /etc/ssl/private/postfix.pem
Generating a 1024 bit RSA private key
...++++++
..............................++++++
writing new private key to '/etc/ssl/private/postfix.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Russia
Locality Name (eg, city) []:chel
Organization Name (eg, company) [Internet Widgits Pty Ltd]:domain.ru
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:mail.domain.ru
Email Address []:postmaster@domain.ru

Поменяем права доступа:

chmod o= /etc/ssl/private/postfix.pem
chmod o= /etc/ssl/private/dovecot.pem

Когда готовы сертификаты, раскомментируем две строчки в конфигурационном файле dovecot.conf, приведя их к следующему виду:

ssl_cert_file = /etc/ssl/certs/dovecot.pem
ssl_key_file = /etc/ssl/private/dovecot.pem

А в конфиг postfix, main.cf, добавим эту строчку:

smtpd_use_tls=yes

Последнее, что надо сделать, это поменять права доступа на лог dovecot.log:

sudo chown sermail:sermail /var/log/dovecot.log

Теперь перезапускаем postfix и dovecot и проверяем работоспособность ssl, отправки и принятия почтовых сообщений.

sudo /usr/local/etc/rc.d/dovecot stop && sudo /usr/local/etc/rc.d/dovecot start
sudo postfix reload
telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 home-server ESMTP Postfix
helo domain.ru
250 home-server
mail from: test@domain2.ru
250 2.1.0 Ok
rcpt to: total@domain.ru
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
test/test/testPP
.
250 2.0.0 Ok: queued as D387A5BCACC
quit    
221 2.0.0 Bye
Connection closed by foreign host.

openssl s_client -host localhost -port 995

+OK Dovecot ready.
user total@domain.ru
+OK
pass 074dimchel
+OK Logged in.
list
+OK 2 messages:
1 408
2 397
.
retr 2
+OK 397 octets
Return-Path: <test@domain2.ru>
Delivered-To: total@domain.ru
Received: from domain.ru (localhost [127.0.0.1])
by home-server (Postfix) with SMTP id D387A5BCACC
for <total@domain.ru>; Sat,  9 Feb 2013 00:41:12 +0600 (YEKT)
Message-Id: <20130208184121.D387A5BCACC@home-server>
Date: Sat,  9 Feb 2013 00:41:12 +0600 (YEKT)
From: test@domain2.ru

test/test/testPP
.
quit

Как видно, письмо было отправлено и оно дошло. При этом работает и ssl шифрование. На этом все. Оставляйте ваши вопросы и пожелания в комментариях.

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