понедельник, 29 июня 2009 г.

Установка и настройка почтового сервера Postfix + Cyrus-imapd в Fedora

Итак, хочу наконец собрать всё в одну кучу.
Платформа - Fedora 11.
Обслуживаем вирт.домены, раздаём почту по POP3, IMAP, HTTP.


Сначала база:

1. Поставить Postfix, Сyrus-sasl, Сyrus-imapd

2. Подготовка:
Создать каталог для почты /var/mail/vhosts/домен
Создать пользователя и группу virtual, uid/gid 5000, сделать владельцем /var/mail/vhosts/


# mkdir /etc/mail/vhosts
# mkdir /etc/mail/vhosts/домен
# groupadd -r virtual -g 5000
# useradd -r -M virtual -u 5000 -g 5000
# chown -R virtual:virtual /var/mail/vhosts/


3. Настроить виртуальный домен:
Прописать вирт.домен в /etc/postfix/main.cf:

#Virtual domain
virtual_mailbox_domains = домен
virtual_mailbox_base = /var/mail/vhosts
# файл с адресами
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 100
# пользователь virtual, от которого доставляется почта
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
# файл с алиасами
virtual_alias_maps = hash:/etc/postfix/virtual
Внимание! Виртуальный домен не может быть указан в mydestination!!!

4. Настроить Cyrus-imapd:
добавить в /etc/imapd.conf

allowplaintext: 1
# sasl пользователь-админ
admins: cyrusadmin
sasl_pwcheck_method: auxprop
sasl_auxprop_plugin: sasldb
sasl_sasldb_path: /etc/sasldb2
virtdomains: userid
# обслуживаемый виртуальный домен
loginrealms: домен
Прописать транспорт в /etc/postfix/main.cf:


# передача писем сайрусу
virtual_transport = lmtp:unix:/var/lib/imap/socket/lmtp


5. Настроить SASL:
В /usr/lib/sasl2/smtpd.conf вписать:

pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: plain login cram-md5
(этим мы сказали, что используем плагин, смотрящий в базу /etc/sasldb2)

Прописать настройки SASL в /etc/postfix/main.cf:

#SASL
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain =
smtpd_sasl_security_options = noanonymous
#Restrictions
# Это начальные разграничения, потом усилим
smtpd_recipient_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_unauth_destination
6. Создать ящики и SASL пользователей вирт.домена:
Ящики и алиасы (в т.ч. для создания групп):
в файле /etc/postfix/vmailbox указать ящики в формате

юзер@домен домен/юзер
в файле /etc/postfix/virtual указать алиасы в формате

юзер@домен адрес1 адрес2
SASL пользователи и ящики Cyrus-imapd:


создать sasl пользователей

# saslpasswd2 -c -u домен юзер


отдельно создать админа

# saslpasswd2 -c -u cyrusadmin


сделать ящики:

# cyradm --user cyrusadmin localhost
Password:
localhost.localdomain> cm user.юзер@домен
localhost.localdomain> sam user.юзер@домен cyrusadmin c

Таким образом создаётся ящик и даются права на него админу.


7. Создание сертификатов и ключей.

Создание сертификата центра сертификации:



cd /etc/pki/tls/
misc/CA -newca


Указываем неск. параметров, самый главный - Common name, там должно быть имя сервера.
Получим сертификат /etc/CA/cacert.pem
и закрытый ключ /etc/CA/private/cakey.pem

Создание закрытого ключа и сертификата для Postfix:


# openssl req -new -nodes -keyout postfix_private_key.pem -out postfix_private_key.pem -days 730
# openssl ca -policy policy_anything -out postfix_public_cert.pem -infiles postfix_private_key.pem
Теперь создаём каталог под ключи и кидаем туда ключи и права выставляем на закрытый ключ:


# mkdir /etc/postfix/certs
# mv postfix_private_key.pem /etc/postfix/certs/
# mv postfix_public_cert.pem /etc/postfix/certs/
# cp /etc/CA/cacert.pem /etc/postfix/certs
# chmod 600 /etc/postfix/certs/postfix_private_key.pem

Закидываем CA сертификат в хранилище:

cat /etc/CA/cacert.pem >> /etc/pki/tls/certs/ca-bundle.crt
Настраиваем Postfix - пишем в /etc/postfix/main.cf:

# TLS
smtpd_use_tls = yes
smtpd_tls_key_file = /etc/postfix/certs/postfix_private_key.pem
smtpd_tls_cert_file = /etc/postfix/certs/postfix_public_cert.pem
smtpd_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt
tls_random_source = dev:/dev/urandom
smtpd_tls_loglevel = 2
smtpd_tls_received_header = yes

# разрешить auth plain только под TLS, при необходимости раскомментить:
#smtpd_tls_auth_only = yes

# для оптимизации TLS
smtpd_tls_session_cache_database = sdbm:/etc/postfix/smtpd_scache
smtpd_tls_session_cache_timeout = 3600s
Обращаю внимание на "smtpd_tls_auth_only = yes" - её лучше включить.


Проверка:

# openssl s_client -starttls smtp -connect localhost:25

Если выскочит что-то типа:

CONNECTED(00000005)
5552:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:601:
То проверяем в первую очередь правильность имён и пути в main.cf!


8. Теперь антивирус и спаморез.
Ставим Amavis, ClamAV и spamassassin.

В /etc/postfix/main.cf пишем:

# передача писем амавису на проверку
content_filter = amavisd-new:[127.0.0.1]:10024
В /etc/postfix/master.cf:


# amavisd-new LMTP
amavisd-new unix - - n - 2 lmtp
-o lmtp_data_done_timeout=1200s
-o disable_dns_lookups=yes


# smtpd демон, принимающий проверенную почту
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o strict_rfc_envelopes=yes


Качаем eicar и проверяем всё эту красоту, отправив вирь простым sendmail'ом.
Смотрим логи - там должно быть сообщение о пойманном вире.

Для автообновления баз антивируса:
в /etc/freshclam.conf комментим строку

#Example
в /etc/sysconfig/freshclam комментим:

#FRESHCLAM_DELAY=disabled-warn


Сам сервер готов. Остался веб интерфейс.

воскресенье, 28 июня 2009 г.

Ещё одна сессия...

почти позади ))) все экзы сданы, ни одного потерянного очка))
Осталась курсовая.. в принципе, примерно понятно, как резать поток на части и перечитывать их, но всё равно как-то уж больно запутанно получается. Зато, после реализации код будет красивый))

среда, 3 июня 2009 г.

ВПНки и головоломки.

Утром поступила жалоба, что в одной клинике, хостящейся в НИИ, перестала работать очень важная софтина. Оказалось, что возник конфликт ip'шника сервера БД, с которым эта прога работает, с каким-то неопознанным компом (причём недоменным). Полез на DHCP серваки - ip, используемый серваком, никому не назначен и, собственно, не забит за ним (а просто вбит на серваке руками, что не труЪ). Вывод - какой-то мудак (по другому не скажешь) притащил ноут или комп и руками забил ему адрес.
Сделал резервацию - сервак не хочет адрес получать. Зато в пуле появляется забавная штука - адрес вяжется к нереальному маку из 6 знаков!!! Косяк...
Ладно, забили за сервером другой ip'шник, перенастроили клиенты.
Решил довести дело до конца и покарать террориста. Мак виновного компа привёл меня через 2 свича к... НИИ'шному фаеру. Смотрю в RRaS'е - а это один наш врач из дома кинул впнку )) По всей видимости, либо ему кто-то из наших вбил адрес руками, либо это глюк - врач получил адрес, а DHCP сервак это не зафиксировал.
Вот так - человек кинул впнку и положил сервак )))
Это из разряда: выкрутил свечи - спустились шины )

понедельник, 1 июня 2009 г.