LINUX.ORG.RU
ФорумAdmin

Postfix SASL - «супер авторизация»


0

0

Во время отправки почты The BAT-ом когда запрашивается пароль, если пароль не указать то появляется сообщение:

"Сервер сообщает об ошибке 8BITMIME"

И письмо естественно не отправляется. Но если указать не доставерные данные, вместо пароля 123 указать 1234 или не правильный логин (которого просто нет) - письмо отправляется а в логах

Aug 26 00:07:59 gw postfix/smtpd[21537]: warning: SASL authentication failure: Password verification failed Aug 26 00:07:59 gw postfix/smtpd[21537]: warning: lx.domain.ru[192.168.100.4]: SASL PLAIN authentication failed

При этом в логах mysql ни чего нет, да и в логах postfix-a кроме выше описанного тоже ни чего нету.

Если указать правильные логин и пароль в логах всё чисто.

I. Как собирал

_____________________________________________________________________

CyrusSASL

1) Собирался

./configure --prefix=/usr/local/sasl2 --with-openssl=/usr/local/ssl --with-mysql=/usr/include/mysql --with-bdb-libdir=/usr/local/BerkeleyDB.4.1/lib --with-bdb-incdir=/usr/local/BerkeleyDB.4.1/include --with-plugindir=/usr/local/sasl2/lib/sasl2 --with-gnu-ld --with-pwcheck --enable-sql --enable-login --enable-plain --enable-cram --disable-otp

2) Ссылки

а) /usr/lib/sasl2 -> /usr/local/sasl2/lib/sasl2

b) /usr/local/lib/sasl2 -> /usr/lib/sasl2

3) Связи

echo /usr/lib/sasl2 > /etc/ld.so.conf

#ldconfig

________________________________________________________________________

POSTFIX

1) Собирался

make -f Makefile.init makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql/ -DUSE_SASL_AUTH -I/usr/local/sasl2/include/sasl' 'AUXLIBS=-L/usr/lib/mysql -lmysqlclient -lz -lm -L/usr/local/sasl2/lib -lsasl2'

________________________________________________________________________

MySQL

1) Ставилась rpm с www.mysql.com

2) Логирование Запускается: safe_mysqld --user=mysql --log=/var/log/mysql.log ________________________________________________________________________

anonymous

II. КОНФИГИ

1) SASL (/usr/lib/sasl2)

pwcheck_method: auxprop

auxprop_plugin: sql

sql_engine: mysql

mech_list: plain login

sql_engine: mysql

sql_hostnames: 127.0.0.1

sql_user: postfix

sql_passwd: ...

sql_database: mail

sql_verbose: yes

sql_select: SELECT password FROM aliases WHERE alias = '%u@%r' and enabled = '1'

2) Postfix (/etc/postfix/main.cf)

queue_directory = /var/spool/postfix

command_directory = /usr/sbin

daemon_directory = /usr/libexec/postfix

html_directory = /etc/postfix/html_dir

manpage_directory = /usr/local/man

sample_directory = /etc/postfix

readme_directory = /etc/postfix/readme_dir

sendmail_path = /usr/sbin/sendmail

newaliases_path = /usr/bin/newaliases

smtpd_banner = hi

mailq_path = /usr/bin/mailq

setgid_group = postdrop

mail_owner = postfix

default_privs = nobody

myhostname = xxx.ru

mydomain = xxx.ru

myorigin = $mydomain

inet_interfaces = all

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

unknown_local_recipient_reject_code = 550

mynetworks_style = host

mynetworks = 127.0.0.0/8, 192.168.100.0/24

transport_maps = mysql:/etc/postfix/transport.cf

alias_maps = mysql:/etc/postfix/aliases.cf

#alias_database = mysql:/etc/postfix/aliases.cf

relay_domains = $transport_maps

broken_sasl_auth_clients = yes

enable_sasl_authentication = yes

smtpd_sasl_auth_enable = yes

smtpd_sasl_security_options = noanonymous

smtpd_sasl_local_domain =

smtpd_sasl_application_name = smtpd

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_relay_domains

smtpd_etrn_restrictions = permit_mynetworks, reject

smtpd_recipient_limit = 128

smtpd_timeout = 180

message_size_limit = 5242880

bounce_size_limit = 65536

header_size_limit = 32768

virtual_maps = mysql:/etc/postfix/remote_aliases.cf

virtual_mailbox_base = /

virtual_mailbox_maps = mysql:/etc/postfix/aliases.cf

virtual_mailbox_limit = 5242880

virtual_uid_maps = mysql:/etc/postfix/ids.cf

virtual_gid_maps = mysql:/etc/postfix/gids.cf

disable_vrfy_command = yes

______________________________________________________________________

3) MySQL

Создание базы mail и таблиц

4)# postconf -m

static

sdbm

cidr

pcre

nis

regexp

environ

mysql

proxy

btree

unix

hash

5) telnet 192.168.100.1 .... ....

ehlo ....ru

250-.....ru

250-PIPELINING

250-SIZE 5242880

250-ETRN

250-AUTH LOGIN PLAIN

250-AUTH=LOGIN PLAIN

250 8BITMIME

______________________________________________________________________

III. ЗАПУСК

1) 1-ым MySQL

/usr/sbin/safe_mysqld --user=mysql --log=/var/log/mysql.log

2) 2-ым Postfix

#postfix start _______________________________________________________________________

После проделанного всего выше, почта отправляется и приходит. Но автаризация не проходит полностью (как описывалось выше), хотя если делать выборку пароля ручками из базы

SELECT password FROM aliases WHERE alias = 'p@dm.ru' and enabled = '1'

то пароль выбирается. И это событие заносится в лог но не в

/var/log/mysql.log а в

/root/.mysql_history

Как сделать так чтобы отправить почту можно было только после авторизации даже если письмо отправляется из доверенной сети.

anonymous
()
Ответ на: комментарий от anonymous

> Как сделать так чтобы отправить почту можно было только после авторизации даже если письмо отправляется из доверенной сети.

> smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_relay_domains

Ну так убери отсюда permit_mynetworks и тогда всем нужна будет авторизация.

UncleAndy ★★★
()

На счет неработы авторизации - очень внимательно проверь все параметры mysql - слушает-ли он 127.0.0.1 (netstat -nlp|grep mysql), те-ли имя и пароль используешь в конфиге, что и в mysql.

Т.к. соединение вообще не идет в лог, проблемы похоже именно на этапе подключения к mysql. Возможно, у тебя в mysql запрещен TCP порт и работа идет только через UNIX сокет.

UncleAndy ★★★
()
Ответ на: комментарий от UncleAndy

Да нет всё вроде нормально:

netstat -nlp | grep mysql

tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 21257/mysqld

unix 2 [ ACC ] STREAM LISTENING 442036 21257/mysqld /var/lib/mysql/mysql.sock

Да и по логину тоже пускает

# mysql -u postfix -h 127.0.0.1 -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 999 to server version: 3.23.58-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> exit

anonymous
()
Ответ на: комментарий от anonymous

Вот по telnet пускает.

$ telnet 127.0.0.1 3306

Trying 127.0.0.1...

Connected to localhost (127.0.0.1).

Escape character is '^]'. , 3.23.58-log°-5cp--:x

Connection closed by foreign host.

anonymous
()
Ответ на: комментарий от anonymous

И попытка коннекта не пишется в log? Тогда посмотри внимательнее - дейстивтельно-ли у тебя sasl2 скомпилился с поддержкой mysql? Лучше всего убери куда-нибудь статические библиотеки libmysqlclient и скомпиль заново. Затем ldd /usr/lib/sasl2/libsql.so. Если в списке будет присуствовать что-нибудь типа libmysqlclient.so - все нормально. Если нет - компилиться без mysql.

UncleAndy ★★★
()
Ответ на: комментарий от UncleAndy

Я разабрался почему не писало в mysql.log - был не правильный владелец. Теперь всё пишет.

Вот этом посте лог при правильной авторизации:

LOG Postfix-a

warning и error - пустые

LOG MySQL

#cat mysql.log

040827 0:31:59 34 Connect postfix@localhost on mail

34 Quit

35 Connect postfix@localhost on mail

35 Query BEGIN

35 Query SELECT password FROM users WHERE email = 'kropov@lancronix.ru' and enabled = '1'

35 Query SELECT password FROM users WHERE email = 'kropov@lancronix.ru' and enabled = '1'

35 Query COMMIT

36 Connect postfix@localhost on mail

36 Quit

35 Quit

37 Connect postfix@localhost on mail

37 Quit

38 Connect postfix@localhost on mail

38 Query select transport from transport where domain = '*'

38 Query select transport from transport where domain = '*'

39 Connect postfix@localhost on mail

39 Query select rcpt from remote_aliases where alias = 'lancronix.ru'

40 Connect postfix@localhost on mail

40 Query select maildir from users where email = 'lancronix.ru'

38 Query select transport from transport where domain = 'kropov@lancronix.ru'

38 Query select transport from transport where domain = 'lancronix.ru'

39 Query select rcpt from remote_aliases where alias = 'inbox.ru'

40 Query select maildir from users where email = 'inbox.ru'

38 Query select transport from transport where domain = 'inbox.ru'

38 Query select transport from transport where domain = 'ru'

38 Query select transport from transport where domain = 'gladko@inbox.ru'

38 Query select transport from transport where domain = 'inbox.ru'

38 Query select transport from transport where domain = '.ru'

41 Connect postfix@localhost on mail

41 Query select rcpt from remote_aliases where alias = 'gladko@inbox.ru'

41 Query select rcpt from remote_aliases where alias = '@inbox.ru'

42 Connect postfix@localhost on mail

42 Query select rcpt from remote_aliases where alias = 'gladko@inbox.ru'

42 Query select rcpt from remote_aliases where alias = '@inbox.ru'

040827 0:32:00 41 Query select rcpt from remote_aliases where alias = 'gladko@inbox.ru'

41 Query select rcpt from remote_aliases where alias = '@inbox.ru'

42 Query select rcpt from remote_aliases where alias = 'gladko@inbox.ru'

42 Query select rcpt from remote_aliases where alias = '@inbox.ru'

anonymous
()
Ответ на: комментарий от anonymous

Postfix SASL - супер авторизация

А вот при не правильной авторизации (не существующий логин и пароль):

Что заметил странного. Есть в The BAT акаунт скажем kropov@lancronix.ru

Обратный емаил такойже.

Логин: kropov@lancronix.ru

Пароль: пароль

Но когда я в настройках ящика изменил логин на pupkin и поставил галочку в SMTP авторизация как на pop/imap то при авторизации вначале идёт попытка авторизоваться как pupkin а потом от кудато происходит авторизация как kropov. Это видно в логах (в следующем посте).

anonymous
()
Ответ на: Postfix SASL - супер авторизация от anonymous

___LOG Postfix____

1) errors - пусто

2) info :

Aug 27 00:47:01 gw postfix/smtpd[5056]: connect from stels.lancronix.ru[192.168.1.4]

Aug 27 00:47:04 gw postfix/smtpd[5056]: 1A951BF471: client=stels.lancronix.ru[192.168.1.4]

Aug 27 00:47:04 gw postfix/smtpd[5056]: 86879BF471: client=stels.lancronix.ru[192.168.1.4]

Aug 27 00:47:04 gw postfix/cleanup[5064]: 86879BF471: message-id=<561802436.20040827004806@lancronix.ru>

Aug 27 00:47:04 gw postfix/qmgr[4753]: 86879BF471: from=<kropov@lancronix.ru>, size=624, nrcpt=1 (queue active)

Aug 27 00:47:05 gw postfix/smtp[5066]: 86879BF471: to=<gladko@inbox.ru>, relay=mxs.mail.ru[194.67.23.20], delay=1, status=sent (250 OK id=1C0RAF-000AJq-00)

Aug 27 00:47:05 gw postfix/qmgr[4753]: 86879BF471: removed

Aug 27 00:47:06 gw postfix/smtpd[5056]: disconnect from stels.lancronix.ru[192.168.1.4]

3) warnings

Aug 27 00:47:04 gw postfix/smtpd[5056]: warning: SASL authentication failure: Password verification failed

Aug 27 00:47:04 gw postfix/smtpd[5056]: warning: stels.lancronix.ru[192.168.1.4]: SASL PLAIN authentication failed

___mysql.log____

040827 0:45:02 87 Connect postfix@localhost on mail

87 Quit

88 Connect postfix@localhost on mail

88 Query BEGIN

88 Query SELECT password FROM users WHERE email = 'pupkin@gw.lancronix.ru' and enabled = '1'

88 Query SELECT password FROM users WHERE email = 'pupkin@gw.lancronix.ru' and enabled = '1'

88 Query COMMIT

89 Connect postfix@localhost on mail

89 Quit

88 Quit

90 Connect postfix@localhost on mail

90 Query select rcpt from remote_aliases where alias = 'lancronix.ru'

91 Connect postfix@localhost on mail

91 Query select maildir from users where email = 'lancronix.ru'

92 Connect postfix@localhost on mail

92 Query select transport from transport where domain = 'kropov@lancronix.ru'

92 Query select transport from transport where domain = 'lancronix.ru'

90 Query select rcpt from remote_aliases where alias = 'inbox.ru'

91 Query select maildir from users where email = 'inbox.ru'

92 Query select transport from transport where domain = 'inbox.ru'

92 Query select transport from transport where domain = 'ru'

92 Query select transport from transport where domain = 'gladko@inbox.ru'

92 Query select transport from transport where domain = 'inbox.ru'

92 Query select transport from transport where domain = '.ru'

93 Connect postfix@localhost on mail

93 Query select rcpt from remote_aliases where alias = 'gladko@inbox.ru'

93 Query select rcpt from remote_aliases where alias = '@inbox.ru'

94 Connect postfix@localhost on mail

94 Query select rcpt from remote_aliases where alias = 'gladko@inbox.ru'

94 Query select rcpt from remote_aliases where alias = '@inbox.ru'

93 Query select rcpt from remote_aliases where alias = 'gladko@inbox.ru'

93 Query select rcpt from remote_aliases where alias = '@inbox.ru'

94 Query select rcpt from remote_aliases where alias = 'gladko@inbox.ru'

94 Query select rcpt from remote_aliases where alias = '@inbox.ru'

anonymous
()
Ответ на: комментарий от anonymous

КОНФИГИ

1) /etc/lib/sasl2/smtpd.conf

pwcheck_method: auxprop

auxprop_plugin: sql

sql_engine: mysql

mech_list: plain login

sql_engine: mysql

sql_hostnames: 127.0.0.1

sql_user: postfix

sql_passwd: xxxxx

sql_database: mail

sql_verbose: yes

sql_select: SELECT password FROM users WHERE email = '%u@%r' and

enabled = '1'

2) /etc/postfix/main.cf

queue_directory = /var/spool/postfix

command_directory = /usr/sbin

daemon_directory = /usr/libexec/postfix

html_directory = /etc/postfix/html_dir

manpage_directory = /usr/local/man

sample_directory = /etc/postfix

readme_directory = /etc/postfix/readme_dir

sendmail_path = /usr/sbin/sendmail

newaliases_path = /usr/bin/newaliases

smtpd_banner = hi

mailq_path = /usr/bin/mailq

setgid_group = postdrop

mail_owner = postfix

default_privs = nobody

myhostname = name.domain.ru

mydomain = domain.ru

myorigin = $mydomain

inet_interfaces = all

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

unknown_local_recipient_reject_code = 550

mynetworks_style = host

mynetworks = xx.xx.x.xxx, 127.0.0.0/8, 192.168.100.0/24

relay_domains = $transport_maps

broken_sasl_auth_clients = yes

enable_sasl_authentication = yes

smtpd_sasl_auth_enable = yes

smtpd_sasl_security_options = noanonymous

#smtpd_sasl_local_domain =

smtpd_sasl_application_name = smtpd

smtpd_recipient_restrictions = permit_mynetworks,

permit_sasl_authenticated, check_relay_domains

smtpd_etrn_restrictions = permit_mynetworks, reject

smtpd_recipient_limit = 128

smtpd_timeout = 180

message_size_limit = 5242880

bounce_size_limit = 65536

header_size_limit = 32768

transport_maps = mysql:/etc/postfix/transport.cf

alias_maps = mysql:/etc/postfix/users.cf

#alias_database = mysql:/etc/postfix/users.cf

virtual_maps = mysql:/etc/postfix/remote_aliases.cf

virtual_mailbox_base = /

virtual_mailbox_maps = mysql:/etc/postfix/users.cf

virtual_mailbox_limit = 5242880

virtual_uid_maps = mysql:/etc/postfix/uids.cf

virtual_gid_maps = mysql:/etc/postfix/gids.cf

disable_vrfy_command = yes

Из-за того что сообщение большое пришлось его писать в несколько постеров. Начинается собщение 26.08.2004 22:08:06

СО СЛОВ: "Я разабрался почему не писало в mysql.log "

anonymous
()
Ответ на: комментарий от anonymous

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

mtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_relay_domains

smtpd_etrn_restrictions = permit_mynetworks, reject

UncleAndy ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.