Настройка почтового сервера

Тут описывается нелёгкий путь настройки ОС FreeBSD, начиная с установки дистрибутива и заканчивая настройкой каждого сервиса
RomA
Сообщения: 358
Зарегистрирован: 05 авг 2008, 14:53
Контактная информация:

Настройка почтового сервера

Сообщение RomA »

Задача - поднять почтовый сервер для домена sarhleb.ru
Реализация:
Для начала поставим программу, которая будет заниматься нашей почтой.

Код: Выделить всё

server# cd /usr/ports/mail/postfix
server# make install clean

                      ┌────────────────────────────────────────────────────────────────────┐
                      │                   Options for postfix 2.6.5,1                      │  
                      │ ┌────────────────────────────────────────────────────────────────┐ │  
                      │ │[X] PCRE      Perl Compatible Regular Expressions               │ │  
                      │ │[X] SASL2     Cyrus SASLv2 (Simple Auth. and Sec. Layer)        │ │  
                      │ │[ ] DOVECOT   Dovecot SASL authentication method                │ │  
                      │ │[ ] SASLKRB   If your SASL req. Kerberos select this option     │ │  
                      │ │[ ] SASLKRB5  If your SASL req. Kerberos5 select this option    │ │  
                      │ │[ ] SASLKMIT  If your SASL req. MIT Kerberos5 select this option│ │  
                      │ │[ ] TLS       Enable SSL and TLS support                        │ │  
                      │ │[ ] BDB       Berkeley DB (choose version with WITH_BDB_VER)    │ │  
                      │ │[X] MYSQL     MySQL maps (choose version with WITH_MYSQL_VER)   │ │  
                      │ │[ ] PGSQL     PostgreSQL maps (choose with DEFAULT_PGSQL_VER)   │ │  
                      │ │[ ] OPENLDAP  OpenLDAP maps (choose ver. with WITH_OPENLDAP_VER)│ │  
                      │ │[ ] CDB       CDB maps lookups                                  │ │  
                      │ │[ ] NIS       NIS maps lookups                                  │ │  
                      │ │[ ] VDA       VDA (Virtual Delivery Agent 32Bit)                │ │  
                      │ │[ ] TEST      SMTP/LMTP test server and generator               │ │  
                      ├─└────────────────────────────────────────────────────────────────┘─┤  
                      │                       [  OK  ]       Cancel                        │  
                      └────────────────────────────────────────────────────────────────────┘  


                      ┌────────────────────────────────────────────────────────────────────┐
                      │                  Options for cyrus-sasl 2.1.23                     │  
                      │ ┌────────────────────────────────────────────────────────────────┐ │  
                      │ │   [ ] BDB           Use Berkeley DB                            │ │  
                      │ │   [X] MYSQL         Use MySQL                                  │ │  
                      │ │   [ ] PGSQL         Use PostgreSQL                             │ │  
                      │ │   [ ] SQLITE        Use SQLite                                 │ │  
                      │ │   [ ] DEV_URANDOM   Use /dev/urandom                           │ │  
                      │ │   [ ] ALWAYSTRUE    Enable the alwaystrue password verifier    │ │  
                      │ │   [ ] KEEP_DB_OPEN  Keep handle to Berkeley DB open            │ │  
                      │ │   [X] AUTHDAEMOND   Enable use of authdaemon                   │ │  
                      │ │   [X] LOGIN         Enable LOGIN authentication                │ │  
                      │ │   [X] PLAIN         Enable PLAIN authentication                │ │  
                      │ │   [ ] CRAM          Enable CRAM-MD5 authentication             │ │  
                      │ │   [ ] DIGEST        Enable DIGEST-MD5 authentication           │ │  
                      │ │   [ ] OTP           Enable OTP authentication                  │ │  
                      │ │   [ ] NTLM          Enable NTLM authentication                 │ │  
                      │ │                                                                │ │  
                      ├─└────────────────────────────────────────────────────────────────┘─┤  
                      │                       [  OK  ]       Cancel                        │  
                      └────────────────────────────────────────────────────────────────────┘  

                                                                                           
Два раза он меня о чем то спрашивал, и оба раза я ему сказал "Y" - он отстал и все поставилось. Сразу не забываем в файле /etc/rc.conf разрешить загрузку postfix_enable="YES" вновь установленного приложения. Дальше редактирование конфигов - буду писать только точ, что я менял - все остальное осталось по умолчанию.
Сначала создаю группу и пользователя, от которого все это будет крутиться - ну привычнее всего это сделать через sysinstall.

Код: Выделить всё

─────────────────────────────────────── User and Group Management ───────────────────────────┐
        │                                                                                                │
        │       ┌───────────── Add a new group ─────────────────────────────────────────────────┐        │
        │       │                                                                               │        │
        │       │  Group name:                 GID:                                             │        │
        │       │ ┌──────────────────┐        ┌────────┐                                        │        │
        │       │ │vmail             │        │1002    │                                        │        │
        │       │ └──────────────────┘        └────────┘                                        │        │
        │       │                                                                               │        │
        │       │                                                                               │        │
        │       │                                                                               │        │
        │       │  Group members:                                                               │        │
        │       │ ┌──────────────────────────────────────┐                                      │        │
        │       │ │                                      │                                      │        │
        │       │ └──────────────────────────────────────┘                                      │        │
        │       │                                                                               │        │
        │       │                                                                               │        │
        │       │                                                                               │        │
        │       │      ┌──────┐            ┌──────────┐                                         │        │
        │       │      │ [OK] │            │  CANCEL  │                                         │        │
        │       │      └──────┘            └──────────┘                                         │        │
        │       │                                                                               │        │
        │       │                                                                               │        │
        │       │                                                                               │        │
        │       └───────────────────────────────────────────────────────────────────────────────┘        │
        │                                                                                                │
        │                                                                                                │
        │                                                                                                │
        │                                                                                                │
        │                                                                                                │
        └────────────────────────────────────────────────────────────────────────────────────────────────┘

        ┌────────────────────────────────────────── User and Group Management ───────────────────────────┐
        │  ┌────────────────── Add a new user ────────────────────────────────────────────────────────┐  │
        │  │                                                                                          │  │
        │  │   Login ID:        UID:      Group:    Password:                                         │  │
        │  │  ┌──────────────┐ ┌──────┐  ┌──────┐  ┌─────────────┐                                    │  │
        │  │  │vmail         │ │1004  │  │vmail │  │********     │                                    │  │
        │  │  └──────────────┘ └──────┘  └──────┘  └─────────────┘                                    │  │
        │  │                                                                                          │  │
        │  │   Full name:                           Member groups:                                    │  │
        │  │  ┌───────────────────────────────┐    ┌─────────────┐                                    │  │
        │  │  │Mail System Group              │    │             │                                    │  │
        │  │  └───────────────────────────────┘    └─────────────┘                                    │  │
        │  │                                                                                          │  │
        │  │   Home directory:        Login shell:                                                    │  │
        │  │  ┌──────────────────┐   ┌───────────────────────────┐                                    │  │
        │  │  │/home/mail        │   │/sbin/nologin              │                                    │  │
        │  │  └──────────────────┘   └───────────────────────────┘                                    │  │
        │  │                                                                                          │  │
        │  │           ┌──────┐            ┌──────────┐                                               │  │
        │  │           │ [OK] │            │  CANCEL  │                                               │  │
        │  │           └──────┘            └──────────┘                                               │  │
        │  │                                                                                          │  │
        │  │                                                                                          │  │
        │  │                                                                                          │  │
        │  │                                                                                          │  │
        │  └──────────────────────────────────────────────────────────────────────────────────────────┘  │
        │                                                                                                │
        │                                                                                                │
        │                                                                                                │
        │                                                                                                │
        └────────────────────────────────────────────────────────────────────────────────────────────────┘

/usr/local/etc/postfix/main.cf

Код: Выделить всё

mynetworks = 127.0.0.0/8
relayhost = [192.168.1.7]
alias_maps = hash:/etc/mail/aliases
alias_database = hash:/etc/mail/aliases
mail_spool_directory = /var/mail
smtpd_banner = Zavod im Struzhkina mail system
maps_rbl_reject_code = 554
smtpd_recipient_restrictions =                                                                                    
    permit_sasl_authenticated,                                                                                    
    permit_mynetworks,                                                                                            
    reject_unauth_destination
transport_maps = mysql:/usr/local/etc/postfix/sql/mysql_transport.cf                                              
virtual_mailbox_base = /usr/home/mail/virtual                                                                     
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/sql/mysql_virtual_mailbox_maps.cf                             
virtual_alias_maps = mysql:/usr/local/etc/postfix/sql/mysql_virtual_alias_maps.cf                                 
virtual_mailbox_domains = mysql:/usr/local/etc/postfix/sql/mysql_virtual_domains_maps.cf                          
virtual_uid_maps = static:1004                                                                                    
virtual_gid_maps = static:1002                                                                                    
relay_domains = $transport_maps, $virtual_mailbox_domains                                                         
local_recipient_maps = $virtual_mailbox_maps $virtual_maps $transport_maps                                        
smtpd_sasl_auth_enable = yes                                                                                      
smtp_sasl_security_options = noanonymous                                                                          
broken_sasl_auth_clients = yes                                                                                    
smtp_sasl_password_maps = mysql:/usr/local/etc/postfix/sql/mysql_sasl.cf                                          
always_bcc = copy@stniva.ru   
/usr/local/etc/postfix/sql/mysql_sasl.cf

Код: Выделить всё

user = postfix                                                                                                    
password = postfix                                                                                                
hosts = localhost                                                                                                 
dbname = postfix                                                                                                  
table = mailbox                                                                                                   
select_field = password                                                                                           
where_field = username                                                                                            
additional_conditions = and active = '1'   
/usr/local/etc/postfix/sql/mysql_transport.cf

Код: Выделить всё

user = postfix                                                                                                    
password = postfix                                                                                                
hosts = localhost                                                                                                 
dbname = postfix                                                                                                  
table = domain                                                                                                    
select_field = transport                                                                                          
where_field = domain 
/usr/local/etc/postfix/sql/mysql_virtual_alias_maps.cf

Код: Выделить всё

user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address
/usr/local/etc/postfix/sql/mysql_virtual_domains_maps.cf

Код: Выделить всё

user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = domain
select_field = description
where_field = domain
/usr/local/etc/postfix/sql/mysql_virtual_mailbox_maps.cf

Код: Выделить всё

user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
additional_conditions = and active = '1'
создаем директорию где будут наши почтовые ящики и назначем ей владельца

Код: Выделить всё

server# mkdir /usr/home/mail
server# chown vmail:vmail /usr/home/mail
server# chmod 700 /usr/home/mail
server# mkdir /usr/home/mail/virtual
server# chown vmail:vmail /usr/home/mail/virtual
server# chmod 700 /usr/home/mail/virtual
С настройкой постфикса пока закончили. Попробуем запустить

Код: Выделить всё

server# ./postfix start
postfix/postfix-script: starting the Postfix mail system

server# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 server.sarhleb.ru ESMTP Sendmail 8.14.3/8.14.3; Tue, 19 Jan 2010 15:38:00 +0300 (MSK)
ehlo mail
250-server.sarhleb.ru Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-DELIVERBY
250 HELP
quit
221 2.0.0 server.sarhleb.ru closing connection
Connection closed by foreign host.
server#
Заработало, да и ладно. хотя особого смысла пускать сейчас не было - но просто хочется убедиться что на правильном пути и увидеть какой нить результат. Останавливаем. Теперь мы готовы к новым свершениям.
Ставим базу данных. Хочется сказать что возможно у вас это все уже стоит и работает, но на данном сервере этого не оказалось, а так как я описываю реальный процесс установки сервера - то буду писать все что вижу.

Код: Выделить всё

cd /usr/ports/databases/mysql50-server
make install clean
не забываем опять же разрешить загрузку mysql_enable="YES"
работать с базой из командной строки не наглядно, потому поставим вебмордочку

Код: Выделить всё

cd /usr/ports/databases/phpmyadmin
make install clean
                      ┌────────────────────────────────────────────────────────────────────┐
                      │                   Options for phpMyAdmin 3.3.2                     │  
                      │ ┌────────────────────────────────────────────────────────────────┐ │  
                      │ │            [ ] SUPHP    suPHP support                          │ │  
                      │ │            [X] BZ2      bzip2 library support                  │ │  
                      │ │            [X] GD       GD library support                     │ │  
                      │ │            [ ] MYSQLI   Improved MySQL support                 │ │  
                      │ │            [X] OPENSSL  OpenSSL support                        │ │  
                      │ │            [X] PDF      PDFlib support (implies GD)            │ │  
                      │ │            [X] ZLIB     ZLIB support                           │ │  
                      │ │            [X] MCRYPT   MCrypt library support                 │ │  
                      │ │            [X] ZIP      Zip compression support                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      ├─└────────────────────────────────────────────────────────────────┘─┤  
                      │                       [  OK  ]       Cancel                        │  
                      └────────────────────────────────────────────────────────────────────┘  
                                                                                              
Но ставиться эта штука не захотела, мотивируя это так:

Код: Выделить всё

xglyph.c: In function 'CheckTransform':
xglyph.c:4717: warning: passing argument 1 of 'sscanf' makes pointer from integer without a cast
gmake[1]: *** [xglyph.lo] Error 1
gmake[1]: Leaving directory `/usr/ports/devel/t1lib/work/t1lib-5.1.2/xglyph'
gmake: *** [XXXX] Error 1
*** Error code 1
Бред, но разбираться некогда. ищю решение проще - иду на сайт фри, скачиваю собраный пакет и устанавливаю его в систему

Код: Выделить всё

fetch ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-8-stable/All/t1lib-5.1.2_1,1.tbz
cd /usr/ports/x11-toolkits/libXaw
make install clean
pkg_add t1lib-5.1.2_1,1.tbz
Поосле чего опять продолжил ставить вебмордочку. На этот раз она вела себя хорошо и у меня все получилось. при этом она даже выдала рекомендации по своему запуску.
Итак, первое что делаю - это пишу себе в блокнотик что у меня как-то криво обновлена ось и надо будет на досуге заняться этим - скорее всего как нить на выходных попробую пересобрать все пакеты - это так же как обновить, но посжно просто взять перекомпилировать уже стоящее - практически наверняка поможет
Теперь можно и запустить вебмордочку. Апачь у меня стоял - для прокси использовался, но тут php, потому немного модифиципуем файл апача - в /usr/local/etc/apache22/httpd.conf нахожу index.html и добавляю рядом index.php в результате чего я получил вот такую конструкцию

Код: Выделить всё

<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>
далее ищу AddType application/x-gzip .gz .tgz и ниже добавляю следующие две строки

Код: Выделить всё

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
Теперь надо перечитать файл конфига апача

Код: Выделить всё

server# /usr/local/etc/rc.d/apache22 reload
Performing sanity check on apache22 configuration:
Syntax OK
Performing sanity check on apache22 configuration:
Syntax OK
Performing a graceful restart
Хорошо. но вебмордочка поставилась не в директорию апача... исправляем

Код: Выделить всё

ln -s /usr/local/www/phpMyAdmin /usr/home/www/proxy/phpmyadmin
где /usr/home/www/proxy/ - это пусть до папки с сайтом
После чего заходим по адресу http://192.168.39.2/phpmyadmin/ и любуемся тем, что сделали...

... Продолжение читайте в следующей статье
RomA
Сообщения: 358
Зарегистрирован: 05 авг 2008, 14:53
Контактная информация:

Создаем почтовые ящики

Сообщение RomA »

Итак, теперь уже больше будет конфигурирования, чем установки. Доделываем вебмордочку БД - идем по адресу http://192.168.39.2/phpmyadmin/setup/ и выполняем все требование, которые там выдвигаются

Код: Выделить всё

server# mkdir /usr/local/www/phpMyAdmin/config

server# chmod 777 /usr/local/www/phpMyAdmin/config 
Обновляем страничку и настраиваем, точнее в основном соглашаемся...
пароля у нас пока что нету на скуль, потому ставим гадочку что используем без пароля
правда просто так нас не пустит и нам прийдется в файле /usr/local/www/phpMyAdmin/libraries/config.default.php поправить переменную $cfg['Servers'][$i]['AllowNoPassword'] = true; Теперь входим - пользователь root пароль пустой
Осматриваемся... в первую очередь нам надо поменять пароль на рута - меняем на все записи пароль что бы враг не прошел (выбираем совместимость пароля 4.0)
Если у вас что-то не сложилось с паролем - можете остановить БД, стереть каталог /var/db/mysql/mysql - после запуска калатог опять создастся и пароль на рута будет пустой.
Итак - с БД мы работать можем, теперь давайте двигаться дальше. Ставим вебинтерфейс управления нашей почтой

Код: Выделить всё

cd /usr/ports/mail/postfixadmin
make install clean
                      ┌────────────────────────────────────────────────────────────────────┐
                      │                  Options for postfixadmin 2.3_1                    │  
                      │ ┌────────────────────────────────────────────────────────────────┐ │  
                      │ │   [X] MYSQL   MySQL back-end (use mysql PHP extension)         │ │  
                      │ │   [X] MYSQLI  MySQL 4.1+ back-end (use mysqli PHP extension)   │ │  
                      │ │   [ ] PGSQL   PostgreSQL back-end (use pgsql PHP extension)    │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      ├─└────────────────────────────────────────────────────────────────┘─┤  
                      │                       [  OK  ]       Cancel                        │  
                      └────────────────────────────────────────────────────────────────────┘  
server# ln -s /usr/local/www/postfixadmin postfixadmin
Попробуем настроить - в файле /usr/local/www/postfixadmin/config.inc.php правим $CONF['configured'] = true; и идем на http://192.168.39.2/postfixadmin/setup.php
Что пришлось сделать мне - я поставил порт /usr/ports/mail/php5-imap, не забыл перечитать апачь, и прописал в файл /usr/local/www/postfixadmin/config.inc.php параметры подключения к БД, перед этим не забыв создать в вебмордочке скуля пользователя и пароля - пользователь, пароль, баpа - это все прописано в файлах постфикса - мы их писали в первой части статьи. То есть я создал БД postfix, а так же пользователя postfix с паролем postfix. не забыл дать ему полные права на базу postfix - о как!
Потом он спросил у меня пароль для настройки, создал хеш, который я перенес в конфиг, попросил добавить админа, после чего удалить файл установки. я все это послушно сделал, заодно в конфиге переключил все на русский язык - надо было сделать раньше - и у меня появилось приглашение ввести логин и пароль. Попробовал - все работает - в вебмордочку я зашел, по меню полазил... отлично. Прям там создаем наш домен Список доменов - Новый домен - домен у нас называется sarhleb.ru - я поставил 50 алиасов, 300 ящиков, и поставил галочку "создать стандартные алиасы" после чего сохранил

Код: Выделить всё

Домен был добавлен!
(sarhleb.ru)
Отлично... заведем почтовый ящик Обзор - Создать ящик

Код: Выделить всё

Сообщение отправлено!
Почтовый ящик был успешно создан!
(admin@sarhleb.ru)
Немного лирики:
Почтовый ящик - это реальный ящик, который можно пощупать - увидеть на жёском диске.
Алиас - это вертуальный ящик - когда почта приходит на алиас - сервер принимает её и ложет на реальный ящик, которому соответствует этот алиас

Итак - у нас есть домен, и есть ящик. Давайте же уже настроим почтовый сервер!
Первым делом мы посмотрим в /var/log/maillog дабы понять что есть сейчас... Много там всего... итак - останавливаю постфикс, очищяю лог, запускаю постфикс и смотрю что пишет... пока все чисто... смотрю очередь сообщений - там куча неотправленных сообщений - пробую их отправить и опять смотрю в лог

Код: Выделить всё

/usr/local/etc/rc.d/postfix stop
echo > /var/log/maillog
/usr/local/etc/rc.d/postfix start
cat /var/log/maillog
mailq
postsuper -r ALL
cat /var/log/maillog
Лог ожил я я начал получать информацию. На первый взгляд все хорошо... проверим... когда мы заводили пользователя нам было сказано что ему отправлено сообщение, значит должен был создаться почтовый ящик - убедимся

Код: Выделить всё

server# ls /usr/home/mail/virtual/
admin@sarhleb.ru
Ящик есть - можно там зайти, посмотреть - письмо в нем тоже есть - все хорошо. А раз есть письмо, значит это письмо надо как-то приянять! Но это уже совсем другая история....
RomA
Сообщения: 358
Зарегистрирован: 05 авг 2008, 14:53
Контактная информация:

Настройка приема почты pop3, imap

Сообщение RomA »

Итак, сам mta у нас работает, почту гоняет, по папкам разлаживает - теперь нам надо эту почту отдать клиентам...

Код: Выделить всё

cd /usr/ports/mail/courier-imap
make install clean
                      ┌────────────────────────────────────────────────────────────────────┐
                      │                 Options for courier-imap 4.7.0,2                   │  
                      │ ┌────────────────────────────────────────────────────────────────┐ │  
                      │ │     [ ] FAM          Build in fam support for IDLE command     │ │  
                      │ │     [ ] TRASHQUOTA   Include deleted mails in the quota        │ │  
                      │ │     [ ] GDBM         Use gdbm db instead of system bdb         │ │  
                      │ │     [ ] IPV6         Build with IPv6 support                   │ │  
                      │ │     [ ] AUTH_LDAP    LDAP support                              │ │  
                      │ │     [X] AUTH_MYSQL   MySQL support                             │ │  
                      │ │     [ ] AUTH_PGSQL   PostgreSQL support                        │ │  
                      │ │     [ ] AUTH_USERDB  Userdb support                            │ │  
                      │ │     [ ] AUTH_VCHKPW  Vpopmail/vchkpw support                   │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      ├─└────────────────────────────────────────────────────────────────┘─┤  
                      │                       [  OK  ]       Cancel                        │  
                      └────────────────────────────────────────────────────────────────────┘  
                                                                                              

добавляем в /etc/rc.conf разрешение за запуск

Код: Выделить всё

courier_authdaemond_enable="YES"
courier_imap_imapd_enable="YES"
courier_imap_imapd_ssl_enable="YES"
courier_imap_pop3d_enable="YES"
courier_imap_pop3d_ssl_enable="YES"
Начинаем править файлы (пишу только те строки, что менял)
/usr/local/etc/authlib/authdaemonrc

Код: Выделить всё

authmodulelist="authpam authmysql"
authmodulelistorig="authpam authmysql"
/usr/local/etc/authlib/authmysqlrc - стрелосками тут указаны табы - с пробелами не заработало!

Код: Выделить всё

MYSQL_SERVER<--><------>localhost
MYSQL_USERNAME<><------>postfix
MYSQL_PASSWORD<><------>postfix
MYSQL_PORT<----><------>3306
MYSQL_DATABASE<><------>postfix
MYSQL_USER_TABLE<------>mailbox
MYSQL_CRYPT_PWFIELD<--->`password`
MYSQL_UID_FIELD><------>'1004'
MYSQL_GID_FIELD><------>'1002'
MYSQL_LOGIN_FIELD<----->username
MYSQL_HOME_FIELD<------>'/usr/home/mail/virtual/'
MYSQL_MAILDIR_FIELD<--->maildir
MYSQL_WHERE_CLAUSE<--->active='1'
/usr/local/etc/courier-imap/pop3d

Код: Выделить всё

POP3AUTH="LOGIN PLAIN"
POP3AUTH_TLS_ORIG="LOGIN PLAIN"
POP3DSTART=YES
Остальные протоколы правятся по аналогии - например в конфиге имапа я правил только одно - IMAPDSTART=YES

Пробуем запустить

Код: Выделить всё

server# /usr/local/etc/rc.d/courier-authdaemond start
Starting courier_authdaemond.

server# /usr/local/etc/rc.d/courier-imap-pop3d start
Starting courier_imap_pop3d.
Вроде как заработало - попробуем проверить

Код: Выделить всё

server# telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Hello there.
user roman@sarhleb.ru
+OK Password required.
pass 123
+OK logged in.
list
+OK POP3 clients that break here, they violate STD53.
1 683
.
quit
+OK Bye-bye.
Connection closed by foreign host.
server# 
Итак, у нас в ящике одно письмо - все нормально. Можно настраивать клиента.

Хочу обратить ваше внимание на то, что логином является полностью почтовый ящик, а не только то, что идет до сабаки. Так же когда настраиваем, то ставим галочку "авторизация при отправке" - логином опять же является полный почтовый ящик!
RomA
Сообщения: 358
Зарегистрирован: 05 авг 2008, 14:53
Контактная информация:

Настройка сервера на отправку

Сообщение RomA »

Отдельно хочется сказать про настройку авторизации при отправке почты. В принципе вы можите в переменной mynet в постфиксе указать даипазон ваших IP адресов и все будет работать - но это так называемый опенрелей. У вас заводится вирус, или просто злоумышленик, спамит от вас, и вас начинают везде банить... Вот именно с этим и будем бороться методом авторизации при отправке.

Способ первый
читаем http://www.postfix.ru/viewtopic.php?t=3083 делаем как написано...
Ставим /usr/ports/security/cyrus-sasl2-saslauthd создаем и правим файл /usr/local/lib/sasl2/smtpd.conf

Код: Выделить всё

pwcheck_method: auxprop
mech_list: PLAIN LOGIN
auxprop_plugin: sql
sql_engine: mysql
sql_hostname: localhost
sql_user: postfix
sql_passwd: postfix
sql_database: postfix
sql_select: select password from mailbox where username = '%u@%r'
log_level: 1
Все работает... но тут косяк - при первом же обновлении системы вся эта конструкция слетит и нам прийдется вспоминать как мы это делали... потому

Второй способ:
Ставим /usr/ports/security/cyrus-sasl2-saslauthd

Код: Выделить всё

                      ┌────────────────────────────────────────────────────────────────────┐
                      │                 Options for cyrus-sasl 2.1.23_3                    │  
                      │ ┌────────────────────────────────────────────────────────────────┐ │  
                      │ │   [ ] BDB           Use Berkeley DB                            │ │  
                      │ │   [X] MYSQL         Use MySQL                                  │ │  
                      │ │   [ ] PGSQL         Use PostgreSQL                             │ │  
                      │ │   [ ] SQLITE        Use SQLite                                 │ │  
                      │ │   [ ] DEV_URANDOM   Use /dev/urandom                           │ │  
                      │ │   [ ] ALWAYSTRUE    Enable the alwaystrue password verifier    │ │  
                      │ │   [ ] KEEP_DB_OPEN  Keep handle to Berkeley DB open            │ │  
                      │ │   [X] AUTHDAEMOND   Enable use of authdaemon                   │ │  
                      │ │   [X] LOGIN         Enable LOGIN authentication                │ │  
                      │ │   [X] PLAIN         Enable PLAIN authentication                │ │  
                      │ │   [ ] CRAM          Enable CRAM-MD5 authentication             │ │  
                      │ │   [ ] DIGEST        Enable DIGEST-MD5 authentication           │ │  
                      │ │   [ ] OTP           Enable OTP authentication                  │ │  
                      │ │   [ ] NTLM          Enable NTLM authentication                 │ │  
                      │ │                                                                │ │  
                      ├─└────────────────────────────────────────────────────────────────┘─┤  
                      │                       [  OK  ]       Cancel                        │  
                      └────────────────────────────────────────────────────────────────────┘  
не забываем включить автозагрузку echo "saslauthd_enable="YES"" >> /etc/rc.conf, после чего создаем и правим файл /usr/local/lib/sasl2/smtpd.conf

Код: Выделить всё

pwcheck_method: saslauthd
дальше ставим /usr/ports/security/pam-mysql создаем и правим файл /etc/pam.conf

Код: Выделить всё

smtp auth required /usr/local/lib/pam_mysql.so user=postfix passwd=postfix db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1 where=active=1                                                                                                                                                        
smtp account required /usr/local/lib/pam_mysql.so user=postfix passwd=postfix db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1 where=active=1 
так же надо поправить файл /usr/local/etc/rc.d/saslauthd добавив ключик -r - который будет отвечать за то, что бы логин выглядел не как roman а как roman@sarhleb.ru

Код: Выделить всё

saslauthd_flags=${saslauthd_flags:-"-a pam -r"}
Давайте проверим работает или нет. Для начала сгенирируем информацию, которую хочет видеть сервер - постовый ящик у нас roman@sarhleb.ru пароль 123

Код: Выделить всё

server# perl -MMIME::Base64 -e 'print encode_base64("\0roman\@sarhleb\.ru\000123")'
AHJvbWFuQHNhcmhsZWIucnUAMTIz
Ну а теперь проверим

Код: Выделить всё

server# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 Zavod im Struzhkina mail system
AUTH PLAIN AHJvbWFuQHNhcmhsZWIucnUAMTIz
235 2.7.0 Authentication successful
quit
221 2.0.0 Bye
Connection closed by foreign host.
server# 
А вот так оно пишет, если в конфиге "допустить ошибку" или убрать файл - ну короче сделать что бы не работало

Код: Выделить всё

server# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 Zavod im Struzhkina mail system
AUTH PLAIN AHJvbWFuQHNhcmhsZWIucnUAMTIz
535 5.7.8 Error: authentication failed: authentication failure
quit
221 2.0.0 Bye
Connection closed by foreign host.
server# 
Таким образом, во избежание дальнейших проблем я выбираю второй способ авторизации, хоть он и корявее первого, но причинит нам меньше проблем и обеспечит лучшую выживаемость системы
RomA
Сообщения: 358
Зарегистрирован: 05 авг 2008, 14:53
Контактная информация:

Настройка Вебинтерфейса

Сообщение RomA »

Ну вот - почтовую систему мы уже настроили, но еще не успели всем поставить клиента, и люди по прежнему пользуются сторонними почтовиками... будем исправлять это при помощи вебинтерфейса к почте. Итак, ставим

Код: Выделить всё

cd /usr/ports/mail/roundcube
make install clean
                                                                                ┌────────────────────────────────────────────────────────────────────┐
                                                                                │                  Options for roundcube 0.4.b,1                     │  
                                                                                │ ┌────────────────────────────────────────────────────────────────┐ │  
                                                                                │ │ [X] MYSQL     Use MySQL backend                                │ │  
                                                                                │ │ [ ] PGSQL     Use PostgreSQL backend                           │ │  
                                                                                │ │ [ ] SQLITE    Use SQLite backend                               │ │  
                                                                                │ │ [ ] SSL       Enable SSL support (imaps or google spellcheck)  │ │  
                                                                                │ │ [ ] LDAP      Enable LDAP support (address book)               │ │  
                                                                                │ │ [ ] PSPELL    Enable PSpell support (internal spellcheck)      │ │  
                                                                                │ │ [ ] NSC       Install network spellchecker                     │ │  
                                                                                │ │ [X] AUTOCOMP  Enable autocomplete in login form                │ │  
                                                                                │ │                                                                │ │  
                                                                                │ │                                                                │ │  
                                                                                │ │                                                                │ │  
                                                                                │ │                                                                │ │  
                                                                                │ │                                                                │ │  
                                                                                │ │                                                                │ │  
                                                                                │ │                                                                │ │  
                                                                                ├─└────────────────────────────────────────────────────────────────┘─┤  
                                                                                │                       [  OK  ]       Cancel                        │  
                                                                                └────────────────────────────────────────────────────────────────────┘  
cd /usr/ports/mail/roundcube-air
make install clean                                                                                                                                                        
отдельно выделю

Код: Выделить всё

ln -s /usr/local/www/roundcube /usr/home/www/proxy/mail
Заметь те - я уже второй раз делас ссылку, а не перемещаю, или копирую каталог к чему бы это? а все просто - если я перемещю или скопирую папку, то при обновлении системы моя вебмордочка не обновится - так как то что будет обновляться, и то что будет показываться апачем - разные каталоги. Самый правильный способ - это в конфиге апача указать этот каталог в качестве основного, но мы настраиваем почтовую систему, а не апачь и пока на это нет времени - потому в рамках этой статьи я делаю ссылки. Конечно же в жизни я бы сразу перестроил апачь так как положено. учтите это - не все что тут описано именно так и есть - что-то просто упращено, дабы не затягивать и не отвлекать.

На самом деле было бы не плохо прочитать инструкцию по установки программы, но понадеемся на русский авось, тем более что когда вебморда поставилась - она нам сказала основное что надо сделать... итак - приступаем.
Пошли в нашу вебмордочку БД MySQL - и создадим там БД... Ага, тока я туда не попаду, потому что дома я - выходной... ну что же - будем дальше в консоле сидеть...

Код: Выделить всё

server# mysql -u root -p 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 829
Server version: 5.0.90 FreeBSD port: mysql-server-5.0.90

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE DATABASE roundcubemail /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON roundcubemail.* TO postfix@localhost IDENTIFIED BY 'postfix';
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye
server# 
server# mysql -u root -p roundcubemail < /usr/local/www/roundcube/SQL/mysql.initial.sql
Enter password: 
server#
Я тут не стал заводить своего пользователя для БД и воспользовался уже имеющимся у нас, под которым ходит наш почтовый сервер и вебуправление - смысл плодить пользователей, а потом в них путаться?
теперь надо вебмайлу рассказать о том, что мы сделали - правим файл /usr/local/www/roundcube/config/db.inc.php

Код: Выделить всё

$rcmail_config['db_dsnw'] = 'mysql://postfix:postfix@localhost/roundcubemail';
Теперь было бы не плохо перестартовать апачь, во избежания косяков - приложени на пхп - оно наверняка поставило какой нить модуль, который подключится только после рестарта

Код: Выделить всё

/usr/local/etc/rc.d/apache22 restart
Теперь давайте попробуем зайти в вебмайл, который у нас образовался по адресу http://192.168.39.2/mail/
в качетве логина - наш почтовый ящик, пароль - ну тут понятно, сервер - тут ИП адрес нашего сервера, или его имя - я пишу mail.sarhlrb.ru - войти получилось! :-)

Ну вот - почту я свою получил, попробовать отправить - работает - принять - тоже работает - все хорошо. Дальше все настраиваем под себя.
1) себе я оставил дефолтовый стиль, а вот пользоваптелям в основном air - им функционал не нужен - лиш бы красиво )))
2) дабы пользователь не путался я убрал строчку "сервер" прописал вго в конфиг
3) я не стал убирать сервер - ну там можно что бы сервер сам подставлялся и вход был только по юзеру - не стал этого делать что бы юзер не запоминал 2 написания своего логина и не путался
вот значит что я правил в файле /usr/local/www/roundcube/config/main.inc.php

Код: Выделить всё

$rcmail_config['default_host'] = 'localhost';
$rcmail_config['smtp_server'] = 'localhost';
$rcmail_config['product_name'] = 'WebMail Sarhleb';
Это в кратце... там много настроек и со многими из них стоит поиграться - дабы упростить обращение с вебмордой. но работать с ней уже можно и миссия статьи выполнена :-)
RomA
Сообщения: 358
Зарегистрирован: 05 авг 2008, 14:53
Контактная информация:

Немного теории про почту

Сообщение RomA »

Хочу рассказать немного про почту - так в общих чертах, что бы было понятно как почему и зачем.
Итак, опишу как идет письмо к нам из интернета:
1) user.mail.ru - Отправитель из интернета отправил нам письмо, скажем на admin@sarhleb.ru
2) mail.ru - Сервер отправителя ищет в ДНС домена sarhleb.ru так называемую MX запись, и определяет ИП сервера получателя
3) mail.ru - Сервер отправителя отправляет письмо на наш сервер, который он определил.
4) (тут мы немного обманули сервер отправителя и письмо от него поступает не на сервер mail.sarhleb.ru а на inet.stniva.ru - наш почтовый релей)
5) inet.stniva.ru - Почтовый релей получает почту - тут он её проверяет на спам, вирус, и так далее
6) inet.stniva.ru - теперь почтовый релей по своей внутренней таблице (не по МХ) отправляет письмо куда надо
7) sarhleb.ru - принимает письмо и ложит его в ящик пользователя
8) user.sarhleb.ru - пользователь получает письмо
Письма внутри нашей сети ходят напрямую от сервера к серверу по МХ записям
Касаемо глобального - это все, рассмотрим поближе конкретный почтовый сервер

МТА (mail transfer agent) - Почтовый сервер - он перекладывает почту из папки в папку, пересылает другим МТА и так далее. Так же в его обязанность входит принятие почты.
А вот отдавать почту он не обязан - для этого есть другая программа, и тут все сложней - для принятия почты используется два протокола:
pop3 - по этому протоколу мы можем скачать почту с сервера к себе, после чего почта с сервера удалится. Такой способ хорош для одиночных пользователей - то есть личный почтовый ящик лучше принять так - все письма будут храниться на компе пользователя.
imap - это более продвинутый протокол, теперь мы можем не только забрать почту с сервера, но еще и давать серверу команды что и как делать. Протокол существует для одновременной работы нескольких пользователей с одним почтовым ящиком. Это протокол для ящиков отделов. В этом случае почта хранится и на сервере, а пользователю приходят только заголовки, и только когда он кликнет на письмо - оно загрузится к нему.
Шифрованые соединения. В почте нет смысла сильно шифровать пароль - ну и что что пароль прошел зашифрованый, ну и что что злоумышление его не видит? Зато он видит тело письма и может его прочесть. Потому для защиты почты используется ssl шифрование - то есть тунелирование. Работает это так - вы идете к серверу на защищеный порт, он вам выдает сертификат безопасности и между вами и сервером устанавливается тунель - труба. теперь ваша почта потекла по этой трубе в обычном режиме, но злоумышленик, перехватывающий ваш трафик, не видит что находится внутри трубы. таким образом ваша почта защищена. Этот метод применим ко всем почтовым протоколам.

Отдельно хочется сказать про отправку почту. Не секрет что существуют некие стандарты - так вот по одному из них в ДНС должны быть как прямые так и обратные записи. Для крупных компаний провайдер как правило настраивает обратные записи, а для пользователей нет. Так вот почтовые сервера часто пользуются этим, что бы определить - серьезный вы или нет - они пытаются отрезольвить ваш ИП в обратной зоне ДНС, и если это не получается - почта от вашего сервера не примется. Что бы этого избежать вы должны позвонить провайдеру и попросить его в обратной зоне ДНС ваш IP адрес прикрыть чем нить, например mail.sarhleb.ru для данного примера.
Вложения
Почта.png
Почта.png (169.67 КБ) 22827 просмотров
Scorp
Сообщения: 22
Зарегистрирован: 16 янв 2009, 14:19

Roundcube 04 ошибки

Сообщение Scorp »

После обновлении на 04 версию, когда заводиш адрес получателя в вюбморде выходит ошибка SERVICE CURRENTLY NOT AVAILABLE!
Необходимо создать недостающие таблицы

Код: Выделить всё

CREATE TABLE `contactgroups` (
  `contactgroup_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
  `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
  `del` tinyint(1) NOT NULL DEFAULT '0',
  `name` varchar(128) NOT NULL DEFAULT '',
  PRIMARY KEY(`contactgroup_id`),
  CONSTRAINT `user_id_fk_contactgroups` FOREIGN KEY (`user_id`)
    REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
  INDEX `contactgroups_user_index` (`user_id`,`del`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;

CREATE TABLE `contactgroupmembers` (
  `contactgroup_id` int(10) UNSIGNED NOT NULL,
  `contact_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
  `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
  PRIMARY KEY (`contactgroup_id`, `contact_id`),
  CONSTRAINT `contactgroup_id_fk_contactgroups` FOREIGN KEY (`contactgroup_id`)
    REFERENCES `contactgroups`(`contactgroup_id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `contact_id_fk_contacts` FOREIGN KEY (`contact_id`)
    REFERENCES `contacts`(`contact_id`) ON DELETE CASCADE ON UPDATE CASCADE
) /*!40000 ENGINE=INNODB */;

/*!40014 SET FOREIGN_KEY_CHECKS=1 */;
после этого, все будет хорошо, проверено :)
RomA
Сообщения: 358
Зарегистрирован: 05 авг 2008, 14:53
Контактная информация:

Мультидомен - несколько почтовых серверов

Сообщение RomA »

История:
У нас уже есть настроенная по статьям выше почта, но вот появилось новое предприятие, которое бы хотело иметь собственную почту, отличную от той, которая используется у нас - ну вот например, у меня настроен почтовый сервер который имеет адреса user@stniva.ru а мне надо завести ещё пару организаций, которые пока не имеют своего почтового сервера, но уже хотят иметь свою почту, ну, например, такого вида user@hz5.volfahleb.ru или же user@alex.stniva.ru - не принципиально - главное что домен отличается от нашего. Вот реализацию этого и опишет данная статья.

Задача:
На почтовом сервере stniva.ru поднять почту krhz.volgahleb.ru

Решение:
Первое что нам надо сделать - это описать новую зову в ДНС. Главное не упустить ничего из вида, потому пойдем по порядку - идём в /etc/namedb/named.conf и добавляем наши зоны - сначала корневую а потом и интересующую нас зоны в секции external - то есть опишем их на вход с Интернета

Код: Выделить всё

zone "volgahleb.ru" {
      type master;
      check-names fail;
      allow-update { none; };
      forwarders { /* empty! */ };
      allow-transfer { zone_transfer; };
      allow-query { any; };
      file "master/volgahleb.ru";
};
zone "krhz.volgahleb.ru" {
      type master;
      check-names fail;
      allow-update { none; };
      forwarders { /* empty! */ };
      allow-transfer { zone_transfer; };
      allow-query { any; };
      file "master/krhz.volgahleb.ru";
};
а затем и локальные в нашей сети (секция internal)

Код: Выделить всё

zone "volgahleb.ru" {
      type master;
      check-names fail;
      allow-update { none; };
      forwarders { /* empty! */ };
      allow-transfer { zone_transfer; };
      allow-query { any; };
      file "master/volgahleb.local";
};
zone "krhz.volgahleb.ru" {
      type master;
      check-names fail;
      allow-update { none; };
      forwarders { /* empty! */ };
      allow-transfer { zone_transfer; };
      allow-query { any; };
      file "master/krhz.volgahleb.local";
};
Теперь надо создать эти файлы - как это делается рассказано в статье про ДНС - ничего тут особенного нет, потому что это самые обычные зоны. Приведу для примера часть своих зон:
файл volgahleb.ru

Код: Выделить всё

$ORIGIN .
$TTL 36000	; 10 hours
volgahleb.ru		IN SOA	ns.volgahleb.ru. admin.stniva.ru. (
				2011102901 ; serial
				3600       ; refresh (1 hour)
				900        ; retry (15 minutes)
				3600000    ; expire (5 weeks 6 days 16 hours)
				36000      ; minimum (10 hours)
				)
			NS	inet.stniva.ru.
			NS	voip.stniva.ru.
			NS	ns-msk.stniva.ru.
$TTL 600        ; 10 minutes
			A	83.221.166.33
$TTL 3600       ; 1 hour
			MX	10 mail.stniva.ru.
			MX	20 voip.stniva.ru.
$ORIGIN volgahleb.ru.
ns			A	83.221.166.33
mail			A	83.221.166.33
hz5			A	83.221.166.33
gkhp			A	83.221.166.33
krhz			A	83.221.166.33
$ORIGIN gkhp.volgahleb.ru.
www			A	83.221.166.33
mail			A	83.221.166.33
файл volgahleb.local

Код: Выделить всё

$ORIGIN .
$TTL 36000	; 10 hours
volgahleb.ru		IN SOA	ns.volgahleb.ru. admin.stniva.ru. (
				2011102401	 ; serial
				3600       ; refresh (1 hour)
				900        ; retry (15 minutes)
				3600000    ; expire (5 weeks 6 days 16 hours)
				36000      ; minimum (10 hours)
				)
			NS	inet.stniva.ru.
			NS	voip.stniva.ru.
$TTL 600	; 10 minutes
			A	192.168.1.7
$TTL 3600	; 1 hour
			MX	10 inet.stniva.ru.
			MX	30 voip.stniva.ru.
$ORIGIN volgahleb.ru.
mail			A	192.168.1.7
gkhp			A	192.168.1.7
ns			A	192.168.1.7
hz5			A	192.168.1.7
файл krhz.volgahleb.local

Код: Выделить всё

$ORIGIN .
$TTL 36000	; 10 hours
krhz.volgahleb.ru		IN SOA	ns.volgahleb.ru. admin.stniva.ru. (
				2011102901	 ; serial
				3600       ; refresh (1 hour)
				900        ; retry (15 minutes)
				3600000    ; expire (5 weeks 6 days 16 hours)
				36000      ; minimum (10 hours)
				)
			NS	inet.stniva.ru.
			NS	voip.stniva.ru.
$TTL 600	; 10 minutes
			A	192.168.1.7
$TTL 3600	; 1 hour
			MX	10 192.168.1.8
$ORIGIN krhz.volgahleb.ru.
mail			A	192.168.1.8
ns			A	192.168.1.7
Из последнего файла мы можем заметить, что почта будет уходить на IP адресс 192.168.1.8 - это адрес моего почтового сервера, на котором крутится домен stniva.ru и на котором теперь будет krhz.volgahleb.ru
Не забудьте перестартовать DNS сервер и надо подождать пока это всё прореплицируется в интернет, что бы всемирная сеть узнала о вашем новом домене и маршруте до него. Ну а пока можно приступить к настройке самого почтового сервера.
Идём в вебморду управления почтовиком в административный раздел (у меня это http://192.168.1.8/postfixadmin/admin/) и создаём новый почтовый домен
1.jpg
1.jpg (222.55 КБ) 22388 просмотров
Добавляем пользователя, который будет управлять этим доменом. Обратите внимание, что хоть это и выглядит как почтовый ящик, но это не почтовый ящик, а обычный логин, а вид почтового ящика у него только для того, что бы было понятно от какого он домена
2.jpg
2.jpg (190.89 КБ) 22388 просмотров
Ну а теперь переходим в обычный решим работы (у меня это http://192.168.1.8/postfixadmin/) и заводим почтовых пользователей
3.jpg
3.jpg (183.65 КБ) 22388 просмотров
Вот и всё :-) теперь настраиваем почтовых клиентов и вебморду точно так же как и на обычный реальный сервер - всё будет отлично работать, а пользователи даже и не догадаются, что они такие вертуальные
RomA
Сообщения: 358
Зарегистрирован: 05 авг 2008, 14:53
Контактная информация:

Боремся со спамом

Сообщение RomA »

Введение:
Сервер у нас работает, но чем больше он работает, тем в больше баз спамеров он попал и со временем спама становится больше, чем полезных писем. Ещё через какое-то время это надоедает и начинаешь задумываться что же делать.

Задача:
Отфильтровать неудачных спамеров малой кровью, как как ресурсы сервера не позволяют развернуть полномасштабный эвристический анализ писем...

Реализация:
Будем бороться при помощи утилитки postgrey - она будет встречать спамеров и пытаться из обмануть...

Ставим утилитку:

Код: Выделить всё

cd /usr/ports/mail/postgrey
make install clean
Прописываем в автозапуск в файл /etc/rc.conf

Код: Выделить всё

postgrey_enable="YES"
В файл /usr/local/etc/postfix/main.cf конфигурации поствикса добавляем в правила приёма наш фильтр. У меня это получилась такая конструкция:

Код: Выделить всё

smtpd_recipient_restrictions =                                                                                    
    permit_sasl_authenticated,                                                                                    
    permit_mynetworks,                                                                                            
    reject_unauth_destination,
    check_policy_service inet:127.0.0.1:10023
Теперь надо запустить наш новый сервис и перезапустить постфикс:

Код: Выделить всё

/usr/local/etc/rc.d/postgrey start
/usr/local/etc/rc.d/postfix restart
Посмотри что наша система работает:

Код: Выделить всё

tail -f /var/log/maillog
Видим что-то вроде этого:

Код: Выделить всё

Apr 28 19:22:00 mail postgrey[71796]: action=greylist, reason=new, client_name=barsuk-nas.kvant.if.ua, client_address=91.230.25.106, sender=info@ataylor.com, recipient=gorbachevgromov@cz6.ru
Apr 28 19:22:00 mail postfix/smtpd[72095]: NOQUEUE: reject: RCPT from barsuk-nas.kvant.if.ua[91.230.25.106]: 450 4.2.0 <gorbachevgromov@cz6.ru>: Recipient address rejected: Greylisted, see http://postgrey.schweikert.ch/help/cz6.ru.html; from=<info@ataylor.com> to=<gorbachevgromov@cz6.ru> proto=SMTP helo=<barsuk-nas.kvant.if.ua>
Как видим, клиенту был дан ответ с ссылкой, на которой описано почему сервер не смог принять его письмо... Какраз пришло время поговорить как оно работает. По сути мы запустили скрипт, которому постфикс передаёт все приходящие на его порт соединения. Скрипт отвечает пользователю, что он не может принять его соединение - попробуй, мол, позже. Пользователь уходит. Расчёт на то, что саперу некогда терять время и он уйдет, а нормальный почтовый сервер вернётся, и тогда скрипт занесёт его в белый список и начнётся нормальная работа.

Ну а теперь посмотрим что же скрипт наработал за это время:

Код: Выделить всё

cat /var/log/maillog | postgreyreport --nosingle_line --check_sender=mx,a --show_tries --separate_by_subnet=":===============================================================================================\n"
У меня за 10 минут работы это выглядит так:

Код: Выделить всё

:===============================================================================================
unknown                                                                            4.15.208.6
        1                       astakhova.#@mail.ru                               shop@cz6.ru 
:===============================================================================================
unknown                                                                        181.39.117.227
        1                       astakhova.#@mail.ru                              roman@cz6.ru 
        1                       astakhova.#@mail.ru                               root@cz6.ru 
и вот уже спустя полчаса:
RomA
Сообщения: 358
Зарегистрирован: 05 авг 2008, 14:53
Контактная информация:

Автоответчик из серии "я в отпуске"

Сообщение RomA »

Задача:
Сделать так, что бы пользователи могли ставить автоответчик на почту о том, что в отпуск они уходят.

Реализация:
Такое умеет делать уже установленный postfixAdmin - вот его и будем настраивать. По сути эта же система сможет работать на благо любой подобной идее, так как текст вписывает пользователь, ну или админ, руками, а значит можно извещать о изменении почты сотрудника или же вообще каких-либо акций компании, так как письмо пользователю в ящик то всё равно приходит и суть только в отправке некого уведомления. Спам, одним словом)))

Итак, поехали:

Код: Выделить всё

pw group add vacation -g 65501
pw user add vacation -g vacation -s /sbin/nologin -u 65501
mkdir /var/spool/vacation
cd /var/spool/vacation
cp /usr/local/www/postfixadmin/VIRTUAL_VACATION/vacation.pl .
chown -R vacation:vacation .
chmod 500 vacation.pl
Далее редактируем /var/spool/vacation/vacation.pl на предмет доступа к базе данных:

Код: Выделить всё

my $db_type = 'mysql';
my $db_username = 'postfix';
my $db_password = 'postfix';
my $db_name = 'postfix';

Тут стоит заметить, что просто так работать скрипт не хочет, то ли из-за своей старости, то ли из-за кривых рук настраивающего... в общем пришлось сделать так:

Код: Выделить всё

mysql> use postfix;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> ALTER TABLE `vacation` CHANGE `cache` `cache` TEXT NULL  DEFAULT  NULL;
Query OK, 0 rows affected (0.38 sec)
Records: 0  Duplicates: 0  Warnings: 0
иначе и в логах и на вебе, после добавления сообщения можно увидеть такое:
Invalid query: Field 'cache' doesn't have a default value
[/color]
[/i]


добавляем транспорт в postfix - в файл /usr/local/etc/postfix/master.cf:

Код: Выделить всё

vacation unix - n n - - pipe flags=Rq user=vacation argv=/var/spool/vacation/vacation.pl
  -f ${sender} -- ${recipient}
Создаём если нету, и добавляем в файл /usr/local/etc/postfix/transport следующее (конечно меняя домен на свой):

Код: Выделить всё

autoreply.cz6.ru vacation:
Теперь в файле /usr/local/etc/postfix/main.cf редактируем параметр transport_maps - добавляем путь до нового файла, не удаляя уже имеющийся транспорт - должно получиться следующее:

Код: Выделить всё

transport_maps = mysql:/usr/local/etc/postfix/mysql/transport_maps.conf,
  hash:/usr/local/etc/postfix/transport
Ну и включаем новую опцию в postfixAdmin - в файле /usr/local/www/postfixadmin/config.inc.php редактируем:

Код: Выделить всё

$CONF['vacation'] = 'YES';
$CONF['vacation_domain'] = 'autoreply.cz6.ru';
$CONF['vacation_control'] = 'YES';
$CONF['vacation_control_admin'] = 'YES';

Литература:
https://sergeysl.ru/freebsd-postfixadmin/
http://hghltd.yandex.net/yandbtm?fmode= ... 1f&keyno=0
Ответить