До последнего врeмени в качестве pop-сервера я использовал старый добрый Qpopper. Пока не возникла новая задача: web-интерфейс для почтового сервера (вот любит начальство кататься по стране). И опять благодаря Ginger мои взоры были направлены на интересный secure IMAP server - Dovecot. IMAP-сервер, рассчитанный на максимальную безопасность и надежность, способный обслуживать клиентов по протоколам imap, imaps, pop3, pop3s.
Ты заинтригован? Тогда вперед. Забираем последнюю версию с сайта http://dovecot.org (на момент написания - версия 0.99.14).
$ cd $HOME/install
$ links http://dovecot.org
$ tar xzfv dovecot-0.99.14.tar.gz
$ cd dovecot-0.99.14
Для конфигурации создадим файл config.sh
$ ee config.sh
следующего содержания:
./configure \
--with-ssl=openssl \
--with-mysql \
--with-pop3d \
--without-passwd \
--without-passwd-file \
--without-shadow \
--without-pam \
--without-ldap \
--without-vpopmail \
--without-static-userdb
|
Теперь скомпилируем и установим наш Dovecot.
$ sh config.sh
$ make
$ su
# make install
Теперь для работы Dovecot создадим два конфигурационных файла: /usr/local/etc/dovecot.conf и /etc/dovecot-mysql.conf.
# ee /usr/local/etc/dovecot.conf
base_dir = /var/run/dovecot/
protocols = imaps pop3s imap pop3
ssl_cert_file = /etc/ssl/certs/mail.pem
ssl_key_file = /etc/ssl/certs/mail.pem
login = imap
login_executable = /usr/local/libexec/dovecot/imap-login
login_user = exim
login = pop3
login_executable = /usr/local/libexec/dovecot/pop3-login
mail_extra_groups = mail
default_mail_env = maildir:/var/mail/%d/%n
imap_executable = /usr/local/libexec/dovecot/imap
pop3_executable = /usr/local/libexec/dovecot/pop3
auth = default
auth_mechanisms = plain
auth_userdb = mysql /etc/dovecot-mysql.conf
auth_passdb = mysql /etc/dovecot-mysql.conf
first_valid_uid = 1
auth_user = exim
auth_verbose = yes
|
# ee /etc/dovecot-mysql.conf
db_unix_socket = /tmp/mysql.sock
db = exim
db_user = sqlmail
db_passwd = my_password
db_client_flags = 0
default_pass_scheme = CRYPT
password_query = SELECT password FROM users WHERE login = '%n' AND domain = '%d' AND status = '1'
user_query = SELECT uid, gid FROM users WHERE login = '%n' AND domain = '%d'
|
Изменим права на наши конфигурационные файлы:
# chown root:mail /etc/dovecot-mysql.conf /usr/local/etc/dovecot.conf
# chmod 640 /etc/dovecot-mysql.conf /usr/local/etc/dovecot.conf
И создадим скрипт для запуска нашего IMAP-POP-сервера:
# ee /usr/local/etc/rc.d/dovecot.sh
#!/bin/sh
prog=/usr/local/sbin/dovecot
conf=/usr/local/etc/dovecot.conf
case "$1" in
start)
[ -x ${prog} ] && ${prog} -c ${conf}
echo -n " dovecot"
;;
stop)
kill -TERM `cat /var/run/dovecot/master.pid`
echo -n " "
;;
restart)
$0 stop
$0 start
;;
reload)
kill -HUP `cat /var/run/dovecot/master.pid`
;;
*)
echo "Usage: `basename $0` {start|stop|restart|reload}" >&2
exit 1
esac
exit 0
|
# chmod +x /usr/local/etc/rc.d/dovecot.sh
Осталось его запустить.
# /usr/local/etc/rc.d/dovecot.sh start
# exit
Будем проверять, как он работает?
Проверяем работу POP3.
$ telnet localhost 110
Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost.ru. Escape character is '^]'. +OK dovecot ready. |
user admin@mydomain.ru
+OK |
pass my_password
+OK Logged in. |
list
+OK 0 messages: . |
quit
+OK Logging out. Connection closed by foreign host. |
Если ошибок нет (откуда им взяться), идем дальше. Проверяем работу IMAP.
$ telnet localhost 143
Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost.ru. Escape character is '^]'. * OK dovecot ready. |
* LOGIN admin@mydomain.ru my_password
* OK Logged in. |
* STATUS Inbox (MESSAGES)
* STATUS "Inbox" (MESSAGES 0) * OK Status completed. |
* LOGOUT
* BYE Logging out * OK Logout completed. Connection closed by foreign host. |
Если проблем не возникло, проверяем защищенное сединение POP3S.
$ openssl
OpenSSL> s_client -host localhost -port 995
CONNECTED(00000003) depth=0 /C=RU/ST=RU/L=Stavropol/O=Example/CN=mydomain.ru/emailAddress=postmaster @mydomain.ru verify error:num=18:self signed certificate verify return:1 depth=0 /C=RU/ST=RU/L=Stavropol/O=Example/CN=mydomain.ru/emailAddress=postmaster @mydomain.ru verify return:1 --- Certificate chain 0 s:/C=RU/ST=RU/L=Stavropol/O=Example/CN=mydomain.ru/emailAddress=postmaster@my domain.ru i:/C=RU/ST=RU/L=Stavropol/O=Example/CN=mydomain.ru/emailAddress=postmaster@my domain.ru --- Server certificate -----BEGIN CERTIFICATE----- MIIEADCCA2mgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBtzELMAkGA1UEBhMCUlUx MDYxNTQ5MzhaMIG3MQswCQYDVQQGEwJSVTEcMBoGA1UECBMTU3RhdnJvcG9sIFRl bDE3MDUGA1UEChQuRWRpdG9yaWFsIG9mIE5ld3NwYXBlciAiU3RhdnJvcG9sc2th eWEgUHJhdmRhIjEVMBMGA1UEAxMMc3RhcHJhdmRhLnJ1MSYwJAYJKoZIhvcNAQkB Fhdwb3N0bWFzdGVyQHN0YXByYXZkYS5ydTAeFw0wNTA0MjIxNTQ5MzhaFw0zMjA5 MDYxNTQ5MzhaMIG3MQswCQYDVQQGEwJSVTEcMBoGA1UECBMTU3RhdnJvcG9sIFRl cnJpdG9yeTESMBAGA1UEBxMJU3RhdnJvcG9sMTcwNQYDVQQKFC5FZGl0b3JpYWwg b2YgTmV3c3BhcGVyICJTdGF2cm9wb2xza2F5YSBQcmF2ZGEiMRUwEwYDVQQDEwxz MDYxNTQ5MzhaMIG3MQswCQYDVQQGEwJSVTEcMBoGA1UECBMTU3RhdnJvcG9sIFRl LnJ1MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNFT87/U4Y/isxCQR2aD0n LgJ9DvOwWBFs72R1ciYvOUOQVWGAhMCeGjVkiPtysjFtRRdgKjGvKrKmx9C3pH3w ZN5fXFcZBqUtiLzQ0VKcdw3utAvRM4gzICSlktpjPtxfoYYSC4CUHA1/0+WDC7HO HVyM7oBL+pRZyQT0A/8k7QIDAQABo4IBGDCCARQwHQYDVR0OBBYEFIVHLfnzpOO5 ub9oTTvksXmf9F7gMIHkBgNVHSMEgdwwgdmAFIVHLfnzpOO5ub9oTTvksXmf9F7g oYG9pIG6MIG3MQswCQYDVQQGEwJSVTEcMBoGA1UECBMTU3RhdnJvcG9sIFRlcnJp dG9yeTESMBAGA1UEBxMJU3RhdnJvcG9sMTcwNQYDVQQKFC5FZGl0b3JpYWwgb2Yg HVyM7oBL+pRZyQT0A/8k7QIDAQABo4IBGDCCARQwHQYDVR0OBBYEFIVHLfnzpOO5 MDYxNTQ5MzhaMIG3MQswCQYDVQQGEwJSVTEcMBoGA1UECBMTU3RhdnJvcG9sIFRl ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAA4EghSwza0gbNcik HVyM7oBL+pRZyQT0A/8k7QIDAQABo4IBGDCCARQwHQYDVR0OBBYEFIVHLfnzpOO5 eWEyOMmOGQbx/++XLU35CFrdiqEwdZTVfZscoefyhp9shsG1Dw8zbVK+im7wmmA1 zokwLdwUQZGVBRTefUivYOSOJ9c= -----END CERTIFICATE----- subject=/C=RU/ST=RU/L=Stavropol/O=Example/CN=mydomain.ru/emailAddress=postmaster @mydomain.ru issuer=/C=RU/ST=RU/L=Stavropol/O=Example/CN=mydomain.ru/emailAddress=postmaster@ mydomain.ru --- No client certificate CA names sent --- SSL handshake has read 1190 bytes and written 340 bytes --- New, TLSv1/SSLv3, Cipher is AES256-SHA Server public key is 1024 bit SSL-Session: Protocol : TLSv1 Cipher : AES256-SHA Session-ID: FF415922B742484BA13B84FAD575C528B3549B742484BA13AB1393C4AB3D8010 Session-ID-ctx: Master-Key: 8A39B36BFDB180ED55F829DBC420D675F0ECAF1B07FBBED3A1632A3AA8ECCE96 4CAACF8CDAE5F829DBC420D3F5AE9BA8 Key-Arg : None Start Time: 1114190806 Timeout : 300 (sec) Verify return code: 18 (self signed certificate) --- +OK dovecot ready. |
Соединение получили. Если у тебя есть желание, то можешь проделать операции, описанные при проверке POP3, а мне лень. Но не спеши выходить из openssl. Сразу проверим IMAPS - защищенный IMAP
quit
OpenSSL> s_client -host localhost -port 993
CONNECTED(00000003) depth=0 /C=RU/ST=RU/L=Stavropol/O=Example/CN=mydomain.ru/emailAddress=postmaster @mydomain.ru verify error:num=18:self signed certificate verify return:1 depth=0 /C=RU/ST=RU/L=Stavropol/O=Example/CN=mydomain.ru/emailAddress=postmaster @mydomain.ru verify return:1 --- Certificate chain 0 s:/C=RU/ST=RU/L=Stavropol/O=Example/CN=mydomain.ru/emailAddress=postmaster@my domain.ru i:/C=RU/ST=RU/L=Stavropol/O=Example/CN=mydomain.ru/emailAddress=postmaster@my domain.ru --- Server certificate -----BEGIN CERTIFICATE----- MIIEADCCA2mgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBtzELMAkGA1UEBhMCUlUx MDYxNTQ5MzhaMIG3MQswCQYDVQQGEwJSVTEcMBoGA1UECBMTU3RhdnJvcG9sIFRl bDE3MDUGA1UEChQuRWRpdG9yaWFsIG9mIE5ld3NwYXBlciAiU3RhdnJvcG9sc2th eWEgUHJhdmRhIjEVMBMGA1UEAxMMc3RhcHJhdmRhLnJ1MSYwJAYJKoZIhvcNAQkB Fhdwb3N0bWFzdGVyQHN0YXByYXZkYS5ydTAeFw0wNTA0MjIxNTQ5MzhaFw0zMjA5 MDYxNTQ5MzhaMIG3MQswCQYDVQQGEwJSVTEcMBoGA1UECBMTU3RhdnJvcG9sIFRl cnJpdG9yeTESMBAGA1UEBxMJU3RhdnJvcG9sMTcwNQYDVQQKFC5FZGl0b3JpYWwg b2YgTmV3c3BhcGVyICJTdGF2cm9wb2xza2F5YSBQcmF2ZGEiMRUwEwYDVQQDEwxz MDYxNTQ5MzhaMIG3MQswCQYDVQQGEwJSVTEcMBoGA1UECBMTU3RhdnJvcG9sIFRl LnJ1MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNFT87/U4Y/isxCQR2aD0n LgJ9DvOwWBFs72R1ciYvOUOQVWGAhMCeGjVkiPtysjFtRRdgKjGvKrKmx9C3pH3w ZN5fXFcZBqUtiLzQ0VKcdw3utAvRM4gzICSlktpjPtxfoYYSC4CUHA1/0+WDC7HO HVyM7oBL+pRZyQT0A/8k7QIDAQABo4IBGDCCARQwHQYDVR0OBBYEFIVHLfnzpOO5 ub9oTTvksXmf9F7gMIHkBgNVHSMEgdwwgdmAFIVHLfnzpOO5ub9oTTvksXmf9F7g oYG9pIG6MIG3MQswCQYDVQQGEwJSVTEcMBoGA1UECBMTU3RhdnJvcG9sIFRlcnJp dG9yeTESMBAGA1UEBxMJU3RhdnJvcG9sMTcwNQYDVQQKFC5FZGl0b3JpYWwgb2Yg HVyM7oBL+pRZyQT0A/8k7QIDAQABo4IBGDCCARQwHQYDVR0OBBYEFIVHLfnzpOO5 MDYxNTQ5MzhaMIG3MQswCQYDVQQGEwJSVTEcMBoGA1UECBMTU3RhdnJvcG9sIFRl ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAA4EghSwza0gbNcik HVyM7oBL+pRZyQT0A/8k7QIDAQABo4IBGDCCARQwHQYDVR0OBBYEFIVHLfnzpOO5 eWEyOMmOGQbx/++XLU35CFrdiqEwdZTVfZscoefyhp9shsG1Dw8zbVK+im7wmmA1 zokwLdwUQZGVBRTefUivYOSOJ9c= -----END CERTIFICATE----- subject=/C=RU/ST=RU/L=Stavropol/O=Example/CN=mydomain.ru/emailAddress=postmaster @mydomain.ru issuer=/C=RU/ST=RU/L=Stavropol/O=Example/CN=mydomain.ru/emailAddress=postmaster@ mydomain.ru --- No client certificate CA names sent --- SSL handshake has read 1190 bytes and written 340 bytes --- New, TLSv1/SSLv3, Cipher is AES256-SHA Server public key is 1024 bit SSL-Session: Protocol : TLSv1 Cipher : AES256-SHA Session-ID: FF415922B742484BA13B84FAD575C528B3549B742484BA13AB1393C4AB3D8010 Session-ID-ctx: Master-Key: 8A39B36BFDB180ED55F829DBC420D675F0ECAF1B07FBBED3A1632A3AA8ECCE96 4CAACF8CDAE5F829DBC420D3F5AE9BA8 Key-Arg : None Start Time: 1114190806 Timeout : 300 (sec) Verify return code: 18 (self signed certificate) --- * OK dovecot ready. |
И здесь получили соединение.
* LOGOUT
OpenSSL> quit
Все у нас прекрасно работает. Но это не все наши героические поступки. Далее мы приступим к построению оборонительных сооружений для нашего почтового сервера. Начнем с антивируса.