Добрый день!
Система FreeBSD 6.2-RELEASE
Почтовик postfix-current-2.6.20090125,4 из портов.
в один из суровых дней, когда в Финляндии перерубили оптоволоконный канал на Европу, посыпались проблемы с провайдерским DNS'ом. и все бы ничего, но Postfix начал в очень маленьком проценте писем давать отлуп пользователям, ссылаясь на то, что не может определить куда деть письмо. (Большинство писем отправляются нормально).
Выглядит это примерно так:
Feb 24 12:44:58 proliantx postfix/smtpd[26456]: connect from unknown[192.168.0.56]
Feb 24 12:44:58 proliantx postfix/smtpd[26456]: BA6682885B: client=unknown[192.168.0.56]
Feb 24 12:45:02 proliantx postfix/smtpd[26456]: disconnect from unknown[192.168.0.56]
Feb 24 12:45:43 proliantx postfix/smtpd[26456]: connect from unknown[192.168.0.17]
Feb 24 12:45:43 proliantx postfix/smtpd[26456]: warning: SASL authentication failure: realm changed: authentication aborted
Feb 24 12:45:43 proliantx postfix/smtpd[26456]: warning: unknown[192.168.0.17]: SASL DIGEST-MD5 authentication failed: authentication failure
Feb 24 12:45:43 proliantx postfix/smtpd[26456]: NOQUEUE: reject: RCPT from unknown[192.168.0.17]: 451 4.3.0 <rvi@ctc-motors.ru>: Temporary lookup failure; from=<rvi@ctc-motors.ru> to=<kuznetsova@kelin.ru> proto=ESMTP helo=<WS383>
Feb 24 12:45:45 proliantx postfix/smtpd[26456]: disconnect from unknown[192.168.0.17]Помогает либо
#postfix stop
#postfix startЧто понятное дело - не вариант, либо (иногда) перезапуск почтового клиента.
Конфигурация postfix:
[root@proliantx /home/phoenix]# postconf -n
address_verify_sender = <>
alias_database = hash:/etc/mail/aliases
alias_maps = hash:/etc/mail/aliases
broken_sasl_auth_clients = yes
command_directory = /usr/local/sbin
config_directory = /usr/local/etc/postfix
daemon_directory = /usr/local/libexec/postfix
data_directory = /var/db/postfix
debug_peer_list = 127.0.0.1, ctc-motors.ru, ctc-c.ru, umgb.ru
default_privs = nobody
disable_vrfy_command = yes
header_checks = regexp:$base/header_checks
html_directory = no
inet_interfaces = all
local_recipient_maps = $virtual_mailbox_maps, $virtual_alias_maps, $alias_maps
mail_owner = postfix
mailq_path = /usr/local/bin/mailq
manpage_directory = /usr/local/man
message_size_limit = 31457280
mydestination = $myhostname, localhost
mydomain = ctc-motors.ru
myhostname = ctc-c.ru
mynetworks = 192.168.0.0/24, 127.0.0.0/8
mynetworks_style = subnet
myorigin = $mydomain
newaliases_path = /usr/local/bin/newaliases
queue_directory = /var/spool/postfix
readme_directory = no
recipient_delimiter = +
sample_directory = /usr/local/etc/postfix
sendmail_path = /usr/local/sbin/sendmail
setgid_group = maildrop
show_user_unknown_table_name = no
smtp_always_send_ehlo = yes
smtp_helo_timeout = 60s
smtp_mail_timeout = 60s
smtp_rcpt_timeout = 90s
smtpd_banner = $myhostname ESMTP
smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated,
check_client_access hash:$base/client_access, reject_unknown_client
smtpd_etrn_restrictions = reject
smtpd_hard_error_limit = 8
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks,
check_helo_access hash:$base/hello_access,
reject_invalid_hostname,
reject_non_fqdn_hostnamesmtpd_recipient_restrictions = permit_mynetworks,
permit_sasl_authenticated,
permit_auth_destination,
check_sender_access hash:$base/sender_access,
check_recipient_access hash:$base/recipient_access,
reject_unauth_destination,
reject_unlisted_recipient,
reject_unknown_recipient_domain,
reject_non_fqdn_recipient,
reject_unverified_recipientsmtpd_reject_unlisted_sender = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sender_restrictions = permit_mynetworks,
permit_sasl_authenticated,
check_sender_access hash:$base/sender_access,
reject_unknown_sender_domain,
reject_unlisted_sender,
reject_unverified_sendersmtpd_timeout = 120s
strict_rfc821_envelopes = yes
transport_maps = mysql:$base/mysqlLookupMaps/transport.conf
unknown_local_recipient_reject_code = 550
virtual_alias_maps = mysql:$base/mysqlLookupMaps/alias.conf
virtual_gid_maps = static:1981
virtual_mailbox_base = /var/spool/mail
virtual_mailbox_domains = mysql:$base/mysqlLookupMaps/domain.conf
virtual_mailbox_maps = mysql:$base/mysqlLookupMaps/mailbox.conf
virtual_minimum_uid = 1000
virtual_uid_maps = static:1981[root@proliantx /home/phoenix]# cat /etc/resolv.conf
options timeout:4 attempts:3
domain ctc-motors.ru
nameserver 127.0.0.1DNS - Кэширующий Bind (Собственно здесь, как мне кажется основная проблема)
хотя не помогали подстановки провайдерских DNS'ов или DNS'а внутри сети.
>Помогает либо
> #postfix stop
> #postfix startподозреваю, что исчерпано количество допустимых соединений с mysql
в студию в момент возникновения ошибки
mysql> show status;
особенно интересует строчка Aborted_connects
и еще
show variables like '%connections'
и заодно уж
cat postfix/main.cf | grep smtpps uawx -U postfix | grep smtp | wc -l
если я прав, то my.cnf нужно прописать соответсвующее значение, по дефолту 100, увеличивайте на 50 до тех пор, пока проблема не исчезнет и накиньте еще 50 как запас
>в студию в момент возникновения ошибкиПопробую отловить, к сожалению, периодичность возникновения ошибки не велика.
>mysql> show status;
>особенно интересует строчка Aborted_connectsAborted_connects | 75
>и еще
>show variables like '%connections'max_connections | 151
max_user_connections | 0>и заодно уж
>cat postfix/main.cf | grep smtpsmtpd_banner = $myhostname ESMTP
smtpd_helo_restrictions = permit_mynetworks,
smtpd_sender_restrictions = permit_mynetworks,
smtpd_recipient_restrictions = permit_mynetworks,
smtpd_client_restrictions = permit_mynetworks,
smtpd_etrn_restrictions = reject
smtpd_reject_unlisted_sender = yes
smtpd_helo_required = yes
smtp_always_send_ehlo = yes
smtpd_hard_error_limit = 8
smtpd_timeout = 120s
smtp_helo_timeout = 60s
smtp_mail_timeout = 60s
smtp_rcpt_timeout = 90s
smtpd_sasl_auth_enable = yes
smtpd_sasl_application_name = smtpd
smtpd_sasl_security_options = noanonymous
>ps uawx -U postfix | grep smtp | wc -l
>27
>если я прав, то my.cnf нужно прописать соответсвующее значение, по дефолту 100,
>увеличивайте на 50 до тех пор, пока проблема не исчезнет и
>накиньте еще 50 как запасmax_connections = 300 поставил
Спасибо за совет!!! судя по всему действительно мускуль выделывался.
Отпишусь как будет себя вести.
>[оверквотинг удален]
>smtpd_helo_required = yes
>smtp_always_send_ehlo = yes
>smtpd_hard_error_limit = 8
>smtpd_timeout = 120s
>smtp_helo_timeout = 60s
>smtp_mail_timeout = 60s
>smtp_rcpt_timeout = 90s
>smtpd_sasl_auth_enable = yes
>smtpd_sasl_application_name = smtpd
>smtpd_sasl_security_options = noanonymousдобавьте сюда
smtpd_client_connection_count_limit = 3
smtpd_client_connection_rate_limit = 10цифры только под себя подгоните, чтобы не резать легитимную корреспонденцию
>добавьте сюдаПоставил
smtpd_client_connection_count_limit = 10
smtpd_client_connection_rate_limit = 30Ждем результатов :)
>в студию в момент возникновения ошибки
>mysql> show status;После установки max_connections = 300
Aborted_clients | 56
>>в студию в момент возникновения ошибки
>>mysql> show status;
>
>После установки max_connections = 300
>
>Aborted_clients
> | 56это не страшно
Aborted_clients
The number of connections that were aborted because the client died without closing the connection properly
>это не страшноСтрашно то, что проблема осталась.
Интересный момент:
Хотя Temporary lookup failure - насколько я понимаю, ошибка определения места назначения, точнее его ip, должно пройти хотя бы какое-то время. но в любом почтовом клиенте этот ответ от сервера приходит моментально. такое ощущение, что он даже не пытается провести этот самый lookup.
>
>>это не страшно
>
>Страшно то, что проблема осталась.
>смотрите лог ошибок mysql. лежит в каталоге с данными
>смотрите лог ошибок mysql. лежит в каталоге с данными[root@proliantx /usr/local/var/db/mysql]# cat /usr/local/var/db/mysql/proliantx.ctc-motors.ru.err | grep 090224
090224 15:15:22 [Note] /usr/local/libexec/mysqld: Normal shutdown
090224 15:15:25 InnoDB: Starting shutdown...
090224 15:15:27 InnoDB: Shutdown completed; log sequence number 0 107356551
090224 15:15:27 [Note] /usr/local/libexec/mysqld: Shutdown complete
090224 15:15:27 mysqld_safe mysqld from pid file /usr/local/var/db/mysql/proliantx.ctc-motors.ru.pid ended
090224 15:15:29 mysqld_safe Starting mysqld daemon with databases from /usr/local/var/db/mysql
090224 15:15:29 InnoDB: Started; log sequence number 0 107356551
090224 15:15:29 [ERROR] Can't open and lock privilege tables: Table 'mysql.servers' doesn't exist
090224 15:15:29 [ERROR] Column count of mysql.event is wrong. Expected 22, found 16. Created with MySQL 50114, now running 50122. Please use mysql_upgrade to fix this error.
090224 15:15:29 [ERROR] Event Scheduler: An error occurred when initializing system tables. Disabling the Event Scheduler.
090224 15:15:29 [Note] /usr/local/libexec/mysqld: ready for connections.Выполнил mysql_upgrade
090224 16:45:08 [Note] /usr/local/libexec/mysqld: Normal shutdown
090224 16:45:10 InnoDB: Starting shutdown...
090224 16:45:12 InnoDB: Shutdown completed; log sequence number 0 107356561
090224 16:45:12 [Note] /usr/local/libexec/mysqld: Shutdown complete
090224 16:45:12 mysqld_safe mysqld from pid file /usr/local/var/db/mysql/proliantx.ctc-motors.ru.pid ended
090224 16:45:14 mysqld_safe Starting mysqld daemon with databases from /usr/local/var/db/mysql
090224 16:45:14 InnoDB: Started; log sequence number 0 107356561
090224 16:45:14 [Note] Event Scheduler: Loaded 0 events
090224 16:45:14 [Note] /usr/local/libexec/mysqld: ready for connections.
090224 17:22:23 [Note] /usr/local/libexec/mysqld: Normal shutdown
090224 17:22:23 [Note] Event Scheduler: Purging the queue. 0 events
090224 17:22:25 InnoDB: Starting shutdown...
090224 17:22:26 InnoDB: Shutdown completed; log sequence number 0 107356561
090224 17:22:26 [Note] /usr/local/libexec/mysqld: Shutdown complete
090224 17:22:26 mysqld_safe mysqld from pid file /usr/local/var/db/mysql/proliantx.ctc-motors.ru.pid ended
090224 17:22:27 mysqld_safe Starting mysqld daemon with databases from /usr/local/var/db/mysql
090224 17:22:27 InnoDB: Started; log sequence number 0 107356561
090224 17:22:27 [Note] Event Scheduler: Loaded 0 events
090224 17:22:27 [Note] /usr/local/libexec/mysqld: ready for connections.
Перезагрузка mysql не помогает, т.е. походу дела проблема всетаки в самом postfix'e
возникает примерно через 30-40 минут после нормальной работы.
>Интересный момент:
>
>Хотя Temporary lookup failure - насколько я понимаю, ошибка определения места назначения,
>точнее его ip, должно пройти хотя бы какое-то время. но в
>любом почтовом клиенте этот ответ от сервера приходит моментально. такое ощущение,
>что он даже не пытается провести этот самый lookup.это означает, что postfix не смог нормально в данный момент обработать данные из внешнего источника - будь то хеш-файл, БД итд. поскольку у Вас все похоже в мускуле, то ответ напрашивается сам - дело именно в настройках сервера/базы, которая не успевает обслуживать postfix. если он при соединении к БД сразу отлуп получил, то естественно он там посмотреть ничего не сможет и будет ощущение "что он даже не пытается провести этот самый lookup"
PS максимальное количество соединений, которое мускул принимает - это еще далеко не все. советую доки почитать на mysql.org и с буферами поиграться. к сожалению конкретного решения сейчас выдать не могу - давно мускул за вымя не трогал.
>это означает, что postfix не смог нормально в данный момент обработать данные
>из внешнего источника - будь то хеш-файл, БД итд.Действительно включил расширенный лог:
090225 11:00:56 [Warning] Aborted connection 61 to db: 'postfix' user: 'postfix' host: 'localhost' (Got an error reading communication packets)и в том же духе пошло поехало.
как это лечится нигде не было током написано, решил обновить порты MySQL server и client'a.
Что-то не помогло.
Пытался вкурить: http://dev.mysql.com/doc/refman/5.1/en/communication-errors....Значения переменных нормальные.
| connect_timeout | 30 |
| delayed_insert_timeout | 300 |
| interactive_timeout | 28800 |
| wait_timeout | 28800 |Причем странно то, что описываются проблемы с подключениями, а postfix и mysql стоят на одном хосте.
> transport_maps = mysql:$base/mysqlLookupMaps/transport.confзакоментировать вообще, если у вас нет никакого релея.
Как вариант посмотреть в сторону http://www.postfix.org/proxymap.8.html
>> transport_maps = mysql:$base/mysqlLookupMaps/transport.conf
>
>закоментировать вообще, если у вас нет никакого релея.Всем спасибо за ответы, что-то помогло, но сказать сложно. Пробовал уже все подряд.
На вскидку заработало после полной пересборки mysql-server, mysql-client, apache22 (тоже иногда с мусклем общался), проверкой всех таблиц, очисткой от мусора, сокращиением числа одновременно запущенных процессов smtpd. Возможно сейчас что-то упустил из виду, но уже 3 дня полет нормальный!
>>> transport_maps = mysql:$base/mysqlLookupMaps/transport.conf
>>
>>закоментировать вообще, если у вас нет никакого релея.
>
>Всем спасибо за ответы, что-то помогло, но сказать сложно. Пробовал уже все
>подряд.
>На вскидку заработало после полной пересборки mysql-server, mysql-client, apache22 (тоже иногда с
>мусклем общался), проверкой всех таблиц, очисткой от мусора, сокращиением числа одновременно
>запущенных процессов smtpd. Возможно сейчас что-то упустил из виду, но уже
>3 дня полет нормальный!с обновленными портами заработало? или все же старые вернул и сделал то что в данном посте?
ЗЫ сдается мне все же дело в "сокращиением числа одновременно запущенных процессов smtpd" - так , что это не нормальное решение проблемы.
>>> transport_maps = mysql:$base/mysqlLookupMaps/transport.conf
>>
>>закоментировать вообще, если у вас нет никакого релея.
>
>Всем спасибо за ответы, что-то помогло, но сказать сложно. Пробовал уже все
>подряд.
>На вскидку заработало после полной пересборки mysql-server, mysql-client, apache22 (тоже иногда с
>мусклем общался), проверкой всех таблиц, очисткой от мусора, сокращиением числа одновременно
>запущенных процессов smtpd. Возможно сейчас что-то упустил из виду, но уже
>3 дня полет нормальный!не - разобраться надо. дай версию постфикса и версию мускула. дай тип движка, который для таблиц в мускуле пользуешь (innodb-таблицы есть?).
>не - разобраться надо. дай версию постфикса и версию мускула. дай
>тип движка, который для таблиц в мускуле пользуешь (innodb-таблицы есть?).hosts = localhost - что есть соединение через UNIX Socket
pkg_info | grep postfix
postfix-current-2.6.20090212,4 A secure alternative to widely-used Sendmailpkg_info | grep mysql
mysql-client-5.1.30 Multithreaded SQL database (client)
mysql-server-5.1.30 Multithreaded SQL database (server)Все таблицы postfix'a - MyISAM
>[оверквотинг удален]
>| connect_timeout
> | 30 |
>| delayed_insert_timeout | 300 |
>| interactive_timeout | 28800 |
>
>| wait_timeout
> | 28800 |
>
>Причем странно то, что описываются проблемы с подключениями, а postfix и mysql
>стоят на одном хосте.а как постфикс к БД лезет - ч/з 127.x.x.x?
[добавил]
прочухал просмотрев в очередной раз пост.localhost и в африке localhost. соединение по tcp/ip к БД твое происходит, следовательно все "кривые" которые сделаны в настройках сетевых сервисов здесь могут проявиться. но твоя ошибка вряд ли вызвана этим. это просто ответ на вопрос о "Причем странно то, что описываются проблемы с подключениями, а postfix и mysql стоят на одном хосте".
в линухе существует еще способ подключения ч/з сокет, т.е. фактически ч/з локальные потоки обмен данными идет. в БСД такой механизм есть (это мне просто ради интереса)?
>localhost и в африке localhost. соединение по tcp/ip к БД твое происходит,
>следовательно все "кривые" которые сделаны в настройках сетевых сервисов здесь могут
>проявиться. но твоя ошибка вряд ли вызвана этим. это просто ответ
>на вопрос о "Причем странно то, что описываются проблемы с подключениями,
>а postfix и mysql стоят на одном хосте".
>
>в линухе существует еще способ подключения ч/з сокет, т.е. фактически ч/з локальные
>потоки обмен данными идет. в БСД такой механизм есть (это мне
>просто ради интереса)?есть. более того, даже если не указывать в постфиксе подключение конкретно через сокет, а просто указать hosts = localhost, он будет подключаться через стандартный сокет, а не tcp (а вот если указать 127,0,0,1 - то по tcp). http://www.postfix.org/mysql_table.5.html