Ставим блокировку SMTP в Plesk
В панели Плеск: сервер - почта -- "POP3 время блокирования" ставим галочку и выставляем минут 30. Т.е. теперь посла забора почты по ПОП3 айпи адрес клиента будет становиться "доверенным" и с него можно будет отправлять почту.
Ставим особый магический Постфикс :)
В /etc/yum.repos.d/CentOS-Base.repo добавляем строку:
[centosplus]
name=CentOS-$releasever - Plus
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
baseurl=http://mirror.yandex.ru/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=1
Ищем особый постфикс в указанном репо:
sudo yum --disablerepo=base,updates,addonse,extrase,rpmforge,addons,extras search postfix
Ставим его: sudo yum --disablerepo=base,updates,addonse,extrase,rpmforge,addons,extras install postfix (среди мелькающих на фоне непонятных букавок должно появицца "2:2.3.3-2.1.centos.mysql_pgsql")
Даём полномочия доступа в БД Плеска юзеру Постфикса:
[root@plesk:~]# mysql -u admin -pmysql -uadmin -p`sudo cat /etc/psa/.psa.shadow`
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 43 to server version: 4.1.20
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.
mysql> grant SELECT on psa.smtp_poplocks to postfix@localhost;
Query OK, 0 rows affected (0.02 sec)
mysql> grant SELECT on psa.misc to postfix@localhost;
Query OK, 0 rows affected (0.02 sec)
mysql> set password for postfix@localhost = password ('oog1Pheo');
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> exit;
Проверим доступ к указанным таблицам: mysql -upostfix -poog1Pheo -Dpsa -e 'select * from smtp_poplocks'
+------------+---------+-----------+
| ip_address | ip_mask | lock_time |
+------------+---------+-----------+
| 127.0.0.0 | 8 | NULL |
+------------+---------+-----------+
На этом этапе давайте создадим тестовый почтовый ящик на сервере и попробуем с него забрать почту (после чего айпи будет "заблокирован" и появится в указанной таблице). Я использовал Thunderbird.
После проверки почты через почтовик, таблица smtp_poplocks стала выглядеть примерно так:
+----------------+---------+---------------------+
| ip_address | ip_mask | lock_time |
+----------------+---------+---------------------+
| 127.0.0.0 | 8 | NULL |
| 94.180.x.x | 32 | 2009-04-01 07:28:56 |
| 94.180.x.x | 32 | 2009-04-01 07:28:58 |
+----------------+---------+---------------------+
Что говорит о правильности настроек Плеска, если у вас не так, то мучаем Плеск дальше.
Теперь создаём конфиг для авторизации по базе: /etc/postfix/mysql-psa-smtp_poplocks.cf
user = postfix
password = oog1Pheo
dbname = psa
query = SELECT CASE WHEN '%s' = (SELECT ip_address FROM smtp_poplocks WHERE ip_address='%s' AND(lock_time > DATE_SUB(NOW(), INTERVAL(SELECT val FROM misc WHERE param=’poplock_time’ LIMIT 1)MINUTE))LIMIT 1)THEN 'OK' END AS response;
После этого пробуем проверить какой-то айпи на возможность доступа: /usr/sbin/postmap -q 96.640.72.378 mysql:/etc/postfix/mysql-psa-smtp_poplocks.cf
Мне вот выдало "postmap: fatal: unsupported dictionary type: mysql", сейчас будем бороться. Проверим список доступных плагинов авторизации: /usr/sbin/postconf -m
/usr/sbin/postconf -m
btree
cidr
environ
hash
ldap
nis
pcre
proxy
regexp
static
unix
Такая ошибка возможна, если вы накосячили и поставили стандартный Постфикс, а не из Центос+, возвращайтесь наверх =) Вот так вывод команды будет выглядеть при корректной установке:
/usr/sbin/postconf -m
btree
cidr
environ
hash
ldap
mysql
nis
pcre
pgsql
proxy
regexp
static
unix
Проверим почту на сервере и сразу проверим свой айпи:
/usr/sbin/postmap -q "94.180.189.254" mysql:/etc/postfix/mysql-psa-smtp_poplocks.cf
OK
А теперь проверим какой-нить мусор:
/usr/sbin/postmap -q "254.254.254.254" mysql:/etc/postfix/mysql-psa-smtp_poplocks.cf
Создадим файлик с отлупом в случае неверных авторизационных (айпи не залочен) данных:
/etc/postfix/regexp-authentication_required.cf
/./ 530 Authentication required
Конфигурируем главный конфиг Постфикса:
sudo /usr/sbin/postconf -e "smtpd_recipient_restrictions = check_client_access mysql:/etc/postfix/mysql-psa-smtp_poplocks.cf, check_client_access regexp:/etc/postfix/regexp-authentication_required.cf, reject"
Теперь осталось настроить Постфикс на релей писем в Кумыло (сначала поставим Постфикс на 325 порт для тестов). Настраиваем форвард всех писем на Кумыло (стоит локально):
sudo /usr/sbin/postconf -e "relayhost = 127.0.0.1:25"
Настроимся на 325 порт.
В файле: /etc/postfix/master.cf
ищем строку:
smtp inet n - n - - smtpd
и заменяем на:
325 inet n - n - - smtpd
Выберем интерфейсы, на которых будет работать Постфикс:
sudo /usr/sbin/postconf -e "inet_interfaces = xx.xx.xx.100, xx.xx.xx.200, 127.0.0.1"
Тут есть особая тонкость, нам нужно ДВА внешних IP адреса для осуществления затеи проброса почты qmail`у, почему именно два я объясню позже.
На и наконец пускаем Постфикс: sudo /etc/init.d/postfix start
Теперь делаем telnet localhost 325 и получаем примерно следующее:
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 sometestserver.ru ESMTP Postfix
Включение логов Постфикса.
Для того, чтобы дальше настроить Постфикс, надо видеть его логи, для их включения идём в файл: /etc/syslog.conf и добавляем строку:
*.* /var/log/syslog.log
после этого все сообщения демона Syslog будут падать в этот файл и нам надо будет за ним следить вот так: tail -f /var/log/syslog.log | grep postfix -i
А теперь о том, нафика два айпи:
После попытки отправить почту через Постфикс видим сие чудо в логе: (delivery temporarily suspended: mail for 127.0.0.1 loops back to myself)
Т.е. Постфикс считает 127.0.0.1 своим родным айпи и не позволяет самому себе кинуть почту несмотря на то, что порты разные. Для этого нам надо убрать один айпи адрес в файле /etc/postfix/main.cf из списка
inet_interfaces = xx.xx.xx.100, xx.xx.xx.200, 127.0.0.1
Допустим, для клиентов Постфикса будет использоваться айпи: xx.xx.xx.200, поэтому .100 удаляем из списка и после этого Постфикс не будет считать его своим родным. В тоже время на .100 висит qmail.
Теперь в том же файле настраиваем:
relayhost = xx.xx.xx.100:25
и рестартим Постфикс =)
Продолжаем устранять зацикливания:
Теперь ошибка вот такая warning: host xx.xx.xx.100:25 greeted me with my own hostname "servername.ru", происходит она по причине, что имя сервера Постфикса совпадает с именем сревера, которое возвращает qmail. Чтобы это исправить, надо указать новое имя для Постфикс сервера выше директивы relayhost:
myhostname = newservernameforpostfix.ru
(оно НЕ должно совпадать с выдачей команды hostname)
Последний шаг -- немного мышковозения. Ошибка такая "said: 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1) (in reply to RCPT TO command)", она возникает по причине, что наш скрытый айпи "xx.xx.xx.100" не указан доверенным для qmail. Открываем Plesk -> Сервер -> Почта -> "Белый список" -> "Добавить сеть" -> xx.xx.xx.100
Пробуем отправить почту ещё раз, она должна заработать на ура! :)
Основано на статье: http://illc0mmunication.org/illc0mm/dustbin/centos-plesk-postfix-mysql-qmail-something-good/