FastNetMon

Wednesday, 29 April 2009

Генерация UUID и MAC для Xen DomU

Сабж. В конфиг файлах Xen есть два параметра, которые я не совсем понимал как генерировать.

uuid = "31714e2e-4433-4163-d9e9-9480d1a619c9"
vif = [ "mac=00:16:3e:60:ce:6d,bridge=xenbr0" ]


Из документации по Xen выяснилось, что uuid генерируется программой uuidgen.
А вот как сгенерировать уникальный в пределах системы Mac ? Для этого есть спецовый скрипт: http://www.easyvmx.com/software/easymac.sh запускаем так: ./easymac.sh xen и на выходе получаем МАК адрес :)

Monday, 27 April 2009

Как скачать файл по sftp ?

Вот так:
sftp root@ip.ad.dr.es:/home/centos53_xen_domu.tar.gz
Преимущество sftp в том, что для работы ему достаточно только ssh доступа :)

Как забэкапить целый раздел?

Леххко!
dd if=/dev/hosting_vps_disks/disk_backup_xen1 | gzip > backup11_apr.gz

Saturday, 25 April 2009

Речь Махмуда Ахмадинежада

Уважаемые читатели! Я, конечно, понимаю, что блог мой сугубо технически ориентированный, но я попросту не могу не дать ссылку на потрясающие слова Махмуда Ахмадинежада, который им были высказаны на конференции по расизму, прошедшей не так давно в Женеве. Чем они меня так задели? Тем, что это, пожалуй, первое публичное выступление политика за последние десятки лет, где все названо СВОИМИ именами, а не сдобрено кучей файльша и лжи. Вот ссылка, очень рекомендую прочесть всем мыслящим людям: http://khazin.livejournal.com/10015.html

Расширенный мониторинг подсистемы ввода-вывода в Linux

Давно заворачиваюсь идеей, как же посмотреть и измерить нагрузку на дисковую систему в Linux? Вот прочитал про iostat, она находится в пакете со следующим описанием "sysstat.x86_64 : The sar and iostat system monitoring commands", ставим:
yum install sysstat


Запускаем: iostat и видим табличку с кучей метрик, из которых самой важной, пожалуй, является следующая:

tps
Indicate the number of transfers per second that were issued to the
device. A transfer is an I/O request to the device. Multiple logical
requests can be combined into a single I/O request to the device. A
transfer is of indeterminate size.

P.S. попутно убедился, что под openvz iostat не работает: http://forum.openvz.org/index.php?t=msg&goto=25749&

Кратенькая шпаргалка по установке Centos 53 в DomU через virt-install

Вот примерно так :)
virt-install
Would you like a fully virtualized guest (yes or no)? This will allow you to run unmodified operating systems. no
What is the name of your virtual machine? isp_primary_dns
How much RAM should be allocated (in megabytes)? 512
What would you like to use as the disk (file path)? /dev/hosting_vps_disks/isp_primary_dns
Would you like to enable graphics support? (yes or no) no
What is the install location? http://mirror.yandex.ru/centos/5.3/os/x86_64/


Starting install...

Friday, 24 April 2009

Как примонтировать определенный раздел с дампа диска?

Сабж довольно странный и я честно не знаю, как это "называется правильно".

Задача следующая: есть XEN DomU, у которого в качестве жесткого диска(не раздела) указан LVM том /dev/hosting_vps_disks/isp_primary_dns, имеющий следующую структуру:

fdisk -l /dev/hosting_vps_disks/isp_primary_dns
Disk /dev/hosting_vps_disks/isp_primary_dns: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/hosting_vps_disks/isp_primary_dns1 * 1 652 5237158+ 83 Linux


Надо примонтировать раздел как папку /dev/hosting_vps_disks/isp_primary_dns1 :)


Как это сделать?
1. Выключаем виртуальную машину, использующую этот раздел: xm destroy isp_primary_dns
2. Создаём точку монтирования mkdir /mnt/isp_primary_dns1
3. Идём в выдачу fdisk и считаем смещение: perl -e 'print 63 * 512 * 1' ответ: 32256 (63 -- sectors/track, 1 -- Start, 512 тоже понимаем откуда). Если хотите более подробного объяснения, то прошу в статью, указанную в самом низу -- там все описано просто суперски, за что большое спасибо автору.
4. Используя полученное смещение, монтируем диск: mount -o loop,offset=32256 /dev/hosting_vps_disks/isp_primary_dns /mnt/isp_primary_dns1/
5. Радуемся результату:

cd /mnt/isp_primary_dns1/
[root@host1 isp_primary_dns1]# ls -la
total 184
drwxr-xr-x 22 root root 4096 Apr 17 03:13 .
drwxr-xr-x 4 root root 4096 Apr 25 05:55 ..
-rw-r--r-- 1 root root 0 Apr 17 03:13 .autofsck
-rw-r--r-- 1 root root 0 Apr 17 03:13 .autorelabel
drwxr-xr-x 2 root root 4096 Apr 17 03:06 bin
drwxr-xr-x 3 root root 4096 Apr 17 03:11 boot
drwxr-xr-x 2 root root 4096 Apr 17 03:04 dev
drwxr-xr-x 46 root root 4096 Apr 17 04:43 etc
drwxr-xr-x 2 root root 4096 Mar 11 20:56 home
drwxr-xr-x 10 root root 4096 Apr 17 03:06 lib
drwxr-xr-x 7 root root 4096 Apr 17 03:11 lib64
drwx------ 2 root root 16384 Apr 17 03:04 lost+found
drwxr-xr-x 2 root root 4096 Mar 11 20:56 media
drwxr-xr-x 2 root root 4096 Mar 11 20:56 mnt
drwxr-xr-x 2 root root 4096 Mar 11 20:56 opt
drwxr-xr-x 2 root root 4096 Apr 17 03:04 proc
drwxr-x--- 2 root root 4096 Apr 17 03:28 root
drwxr-xr-x 2 root root 4096 Apr 17 03:11 sbin
drwxr-xr-x 2 root root 4096 Apr 17 03:04 selinux
drwxr-xr-x 2 root root 4096 Mar 11 20:56 srv
drwxr-xr-x 2 root root 4096 Apr 17 03:04 sys
drwxrwxrwt 3 root root 4096 Apr 17 03:19 tmp
drwxr-xr-x 14 root root 4096 Apr 17 03:05 usr
drwxr-xr-x 19 root root 4096 Apr 17 03:19 var


источник идей: http://forum.opennet.ru/tips/info/1687.shtml?skip=40

UPDATE:

А есть намного более простой метод определения смещения:

parted /dev/hosting_vps_disks/isp_primary_dns
GNU Parted 1.8.1
Using /dev/mapper/hosting_vps_disks-isp_primary_dns
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit
Unit? [compact]? B
(parted) print

Model: Linux device-mapper (dm)
Disk /dev/mapper/hosting_vps_disks-isp_primary_dns: 5368709119B
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number Start End Size Type File system Flags
1 32256B 5362882559B 5362850304B primary ext3 boot

(parted)



основано на: http://www.andremiller.net/content/mounting-hard-disk-image-including-partitions-using-linux

Установка Perl модулей со свалившимися тестами

Нередко при установке Perl модулей с CPAN можно увидеть следующее:
Failed 2/13 test scripts

и установка на этом прекращается.

Что это означает? Это означает, что автор либо забыл исправить тесты, внеся новую функционалньость, либо в коде на самом деле баг, чаще всего все же первое (баг в тестах) и можно не особо беспокоясь поставить модуль насильно, для этого:

sudo cpan # запускаем оболочку CPAN
force install DBIx::Class::Schema::Loader


Если же вы довольно хорошо знаете Перл, то очень хорошим тоном будет сообщить о падении тестов для модуля через rt.cpan.org и в идеале прислать патч авторам, исправляющий косяк :)

Xen, диски и надежность

Вот недавно писал мануал, как ставить Xen DomU через virt-install и предлагал ставить в LVM раздел как в блочное устройство (т.е. создавать таблицу разделов, там создавать разделы и прочее), а не как в обычный раздел. Как бэ проблема-то фигня, но сразу возникает ряд косяков -- очень неудобно монтировать, когда в дамп сунут целый диск, а не раздел (да, да, надо считать offset и так криво монтировать) + неудобство проверки тулзами типа fsck + неудобство копирования, нельзя просто легко примонтировать бэкап раздел и слить файлы, надо юзать dd и перетаскивать весь диск.

Т.о. сейчас у меня две машинки пойдут в реинсталл "как правильно", дада, за тупость и недальновидность мышления надо платить рутиной.

Да, кстати, вот обалденный мануал: http://wiki.centos.org/HowTos/Xen/InstallingCentOSDomU но он тоже "не как надо" :(

Tuesday, 21 April 2009

Zabbix ошибки

ERROR at home.c:149: Unable to find or create ELinks config directory. Please check if you have $HOME variable set correctly and if you have write permission to your home directory.


Думал, поможет sudo yum install elinks, но нет -- не помогло.


И вот такое: Can't find shared memory for collector. [No such file or directory]

У кого есть идеи?

Заархировать папку в zip? Проще простого!

zip -r backup.zip httpdocs/

Friday, 17 April 2009

Исправление [error] [client ::1] Directory index forbidden by Options directive

sudo tail -f /var/log/httpd/error_log
[Fri Apr 17 13:57:01 2009] [error] [client ::1] Directory index forbidden by Options directive: /var/www/html/
[Fri Apr 17 13:57:02 2009] [error] [client ::1] Directory index forbidden by Options directive: /var/www/html/
[Fri Apr 17 13:57:03 2009] [error] [client ::1] Directory index forbidden by Options directive: /var/www/html/
[Fri Apr 17 13:57:04 2009] [error] [client ::1] Directory index forbidden by Options directive: /var/www/html/
[Fri Apr 17 13:57:05 2009] [error] [client ::1] Directory index forbidden by Options directive: /var/www/html/
[Fri Apr 17 13:57:06 2009] [error] [client ::1] Directory index forbidden by Options directive: /var/www/html/
[Fri Apr 17 13:57:07 2009] [error] [client ::1] Directory index forbidden by Options directive: /var/www/html/
[Fri Apr 17 13:57:08 2009] [error] [client ::1] Directory index forbidden by Options directive: /var/www/html/


Исправляется очень просто:
touch /var/www/html/index.html
или просто напишем там то-нибудь.

Thursday, 16 April 2009

Способ освободить парочку гигов на сервере с Centos

sudo yum clean all

Получить список пакетов, доступных к апдейту

В Центос это делается очень легко:
sudo yum check-update
В идеале засунуть в крон чекер, который при наличие апдейтов кидает мессадж на мыло админу.

Thursday, 9 April 2009

Краткий мануал по LVM2

Допустим, создадим LVM на логическом разделе sda3.

В терминах LVM сейчас нам надо создать "Physical volume", т.е. диск / раздел, на котором будет жить LVM (следует заметить, что ЛВМ может жить на большом количестве разделов / дисков).

pvcreate /dev/sda3 (инициализируем логический раздели или целый диск для использования в LVM)
pvscan (должен выдать список наших дисков, доступных для использования в LVM)
PV /dev/sda5 lvm2 [136,90 GB]
Total: 1 [136,90 GB] / in use: 0 [0 ] / in no VG: 1 [136,90 GB]

Теперь создаём Volume Group.
vgcreate hosting_vps_disks /dev/sda3 (создаём группы томов)
# Volume group "hosting_vps_disks" successfully created
pvscan (теперь наш раздел в группе томов)
# PV /dev/sda3 VG hosting_vps_disks lvm2 [125.38 GB / 125.38 GB free]
# Total: 1 [125.38 GB] / in use: 1 [125.38 GB] / in no VG: 0 [0 ]


vgdisplay # смотрим существующие группы томов
--- Volume group ---
VG Name hosting_vps_disks
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 125.38 GB
PE Size 4.00 MB
Total PE 32096
Alloc PE / Size 0 / 0
Free PE / Size 32096 / 125.38 GB
VG UUID LtFwMI-UAb3-ow74-VvDs-Zd0U-Gy4E-vhnbAB
Т.е. иными словами, сейчас у нас есть кусок дискового пространства, слитый из несколькиз физически х разделов (в нашем случае правда он только один, но не суть), на котором мы уже будем создавть наши рабочие рабочие разделы. Вообще, группа томов ЛВМ очень близка к "немного необычному" жесткому диску, которые позволяет несколько жестких дисков сливать воедино и уже на базе

Ну а теперь поверх всего этого чуда создадим раздел, который будем юзать нашей впской
lvcreate -i3 -I4 -L10G -nxenhosting101 hosting_vps_disks # размер блока 4байта, а -i3 я пока не понял, вроде, число разбиений.
У меня было одно физическое устройство и при попытке создать с -i3 получил отлуп:
"Number of stripes (3) must not exceed number of physical volumes (1)"
Убрал параметр -i и всё заработало.

Но выдало:
"Ignoring stripesize argument with single stripe Logical volume "xenhosting101" created", надо разбираца, не понимаю я этот stripesize.

посмотрим результат нашей работы: lvdisplay

--- Logical volume ---
LV Name /dev/hosting_vps_disks/xenhosting101
VG Name hosting_vps_disks
LV UUID qSHcGv-y4w2-Eb1x-cAnu-MpHC-3h0h-RYPjLY
LV Write Access read/write
LV Status available
# open 0
LV Size 110,00 GB
Current LE 28160
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0



Ну вот и всё, у нас появилось новое блочное устройство: /dev/hosting_vps_disks/xenhosting101 ! Ура, ура, ура!

Люблю линукс, теперь тупо указываем наш LVM раздел как "диск" нового XEN домена:
virt-install
What is the name of your virtual machine? xenhosting2
How much RAM should be allocated (in megabytes)? 1024
What would you like to use as the disk (file path)? /dev/hosting_vps_disks/xenhosting101
Would you like to enable graphics support? (yes or no) no
What is the install location? http://mirror.yandex.ru/centos/5.3/os/x86_64/

Ну и всо =))

Мелкие ремарки.
[-A|--autobackup {y|n}] -- Whether or not to metadata should be backed up automatically after a change. You are strongly advised not to disable this! See vgcfgbackup (8).

[-c|--chunksize] -- это размер поблочного разбиения, но чего именно, я так и не понял :/

Добавляем бэкап раздел:
lvcreate -L5G -s -n disk_backup_xen1 /dev/hosting_vps_disks/xenhosting101
и снимаем бэкапы наживую)
потом удаляем бэкап раздел: lvremove /dev/hosting_vps_disks/disk_backup_xen1

Более удобно и безопасно делать вот так:
mount -o ro /dev/hosting_vps_disks/disk_backup_server1 /mnt/backup/

Просто сбэкапит диск так:
dd if=/dev/vps_disks/disk_backup | gzip > /backup/disk_archive.gzip

Источник: http://tldp.org/HOWTO/LVM-HOWTO/recipethreescsistripe.html
просто хороший мануал по командам Линукса: http://www.pixelbeat.org/cmdline_ru_RU.html

Monday, 6 April 2009

Postfix + MySQL

Вот такая ересь в логах:
warning: mysql query failed: MySQL server has gone away
warning: mysql:/etc/postfix/mysql-psa-smtp_poplocks.cf: table lookup problem

Чинится в /etc/my.cnf строчкой в блоке [mysqld]:
wait_timeout = 86400

Plesk + Postfix + входящая почта

Добрый день! В прошлом посте мы обсуждали, как же поставить Постфикс рядом с Плесковым qmail. В итоге мы пришли к тому, что проверяем: есть ли айпи в списке "доверенных" и только в этом случае пускаем. Гениальная, безусловно, схема, если забыть про то, что релей для локальных доменов должен быть разрешён. Нафик? А входящая почта как приниматься будет, а? То-то же!

Например, есть у нас домен uvedomi.su, поддерживаемый на нашем хостинг сервере и есть некто, желающий скинуть ему почту:


telnet hosting.ru 25
Trying xx.xx.xx.xx...
Connected to hosting.ru.
Escape character is '^]'.
220 mailhosting.ru ESMTP Postfix
HELO
501 Syntax: HELO hostname
HELO 111
250 mailhosting.ru
MAIL FROM: 1111@111.ru
250 2.1.0 Ok
RCPT TO: nrg@uvedomi.su
530 5.7.1 : Client host rejected: Authentication required


Вот такая оказия у меня вышла впервые с гуглом, который не смог доставить почту, получив такой отлуп.

Решение.
Вот мануал http://rupp.de/howto_install_postfix_before_qmail.html, где нас интересует часть про configure postfix и relay domains.

Итак, стандартно с Postfix идёт мегаскрипт /etc/postfix/dumpqmail, который конвертирует файл разрешенных для релея доменов из qmailовского /var/qmail/control/rcpthosts в Постфиксовый /etc/postfix/relaydomains. Запускаем: sudo /etc/postfix/dumpqmail, чтобы синхронизировать базы. После этого мой домен появился в Постфиксовом релей файле:

cat /etc/postfix/relaydomains | grep uvedo -i
uvedomi.su RELAY


Теперь, как понимаете, нам надо настроить запуск этой команды по крону :) Для этого в /etc/crontab добавляем:

*/5 * * * * root /etc/postfix/dumpqmail


А теперь в конфиг /etc/postfix/main.cf добавляем строчку (оно на данный момент есть там, но закомменчено, добавляем прямо там):

relay_domains = hash:/etc/postfix/relaydomains


Таким образом, Постфикс будет чекать, доверен ли домен для релея и в случае успеха будет пропускать почту без проверки по айпи.


Итого, если для дебага сейчас отключить проверку айпи (в main.cf комментим строку с smtpd_recipient_restrictions):
Наша почта снаружи до uvedomi.su пройдет успешно, а попытка релейнуть чужой домен будет отбита: [nrg@test.ru]: Relay access denied; from= to= proto=SMTP helo=<1>

А теперь самое интересное... как не обращать внимания на айпи, если домен разрешен к релею? Сейчас я НЕ знаю, как это сделать. Помогайте :(

Решение найдено, модифицируем ограничения на получателя следующим образом:

smtpd_recipient_restrictions = permit_auth_destination, check_client_access mysql:/etc/postfix/mysql-psa-smtp_poplocks.cf, reject


Итого, логика такова: если домен доступен к релею, то почта принимается (permit сразу же); если недоступен, то переходим следующему правилу (это проверка валидности айпи) и если уж и оно сваливается, то отбрасываем клиента с ошибкой "Recipient address rejected: Access denied".

Да. Постфикс написали гениальные люди, такого мощного движка управления я не видел ни в одном почтовике!

Sunday, 5 April 2009

suexec + ISPmanager

Такая неприятная ситуация происходит, когда меняешь дефалтную папку клиента на /home c /var/www, а suexec в это время жестко привязан к папке /var/www и это не перенастраивается.

Сейчас имеем следующее:
dpkg --list | grep suexe
ii apache2-suexec 2.2.9-10+lenny2 Standard suexec program for Apache 2 mod_suexec


apt-cache search suexec
apache2-suexec - Standard suexec program for Apache 2 mod_suexec
apache2-suexec-custom - Configurable suexec program for Apache 2 mod_suexec


Provides a customizable version of the suexec helper program for mod_suexec. This is not the version from upstream, but can be configured with a configuration file.

If you do not need non-standard document root or userdir settings, it is recommended that you use the standard suexec helper program from the apache2-suexec package instead.


Иными словами, хотите конфигурировать userdir / docroot, то юзайте *-custom.

Конфиг файл его вот такой: /etc/apache2/suexec/www-data и стандартно имеет вид:

/var/www
public_html/cgi-bin
# The first two lines contain the suexec document root and the suexec userdir
# suffix. Both features can be disabled separately by prepending a # character.
# This config file is only used by the apache2-suexec-custom package.


Приводим в вид:
/home
data/php-bin
# The first two lines contain the suexec document root and the suexec userdir
# suffix. Both features can be disabled separately by prepending a # character.
# This config file is only used by the apache2-suexec-custom package.


И ребутим Апач, после этого нормально будет работать php_cgi.

Thursday, 2 April 2009

И тебя поймут хакеры...

Вот нашёл такую прелесть, не мог не опубликовать :)

Если кодить в Linux, то лучше на C? Если написать программу на Java, например, архиватор, он не сможет получить распространения?
Можно написать на Java - но зачем?
пиши на C++
и тебя поймут профессионалы
Ну например, по душе.
пиши на Perl, и тебя поймут хакеры
пиши на PHP, и тебя поймут ламеры
пиши на брейнфаке и тебя никто не поймёт

стащено с: http://shtirlizn.livejournal.com/596341.html

Wednesday, 1 April 2009

Postfix перед Plesk

Ставим блокировку 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/