Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: SSL_accept error при получении почты от некоторых серверов  (Прочитано 6051 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Belyaev Nikolay

  • Автор темы
  • Активист
  • *
  • Сообщений: 734
    • Просмотр профиля
    • моя работа- дробилки, грохота...
Доброго времени

Сервер mail.dsp-sgm.ru. Обнаружил, что с ограниченным количеством отправителей у меня проблемы с получением почты. Мою почту получают.
я не понимаю куда хоть копать-то!?
пример лога недошедшего до меня послания
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 05 Декабря 2014, 15:33:44 от Belyaev Nikolay »
"Сначала они вас игнорируют, потом смеются над вами, потом борются с вами, а потом вы побеждаете"
Махатма Ганди

Оффлайн Belyaev Nikolay

  • Автор темы
  • Активист
  • *
  • Сообщений: 734
    • Просмотр профиля
    • моя работа- дробилки, грохота...
postconf smtpd_discard_ehlo_keyword_address_maps=cidr:/opt/zimbra/postfix/conf/smtpd_keyword_maps

cat /opt/zimbra/postfix/conf/smtpd_keyword_maps
# smtpd_keyword_maps
xxx.xxx.xxx.xxx STARTTLS
yyy.yyy.yyy.yyy STARTTLS

xxx.xxx.xxx.xxx - провинившиеся сервера

добавяем в cron
#!/bin/bash
source_log="/var/log/zimbra.log"
error_ip=`cat $source_log | grep "SSL_accept error" | egrep -o "[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}" | sort | uniq -c | egrep "[[:digit:]]{2,}\ " `
error_ip=`echo echo $error_ip | egrep -o "[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}"`
if [[ $error_ip ]]; then
echo $error_ip" " | sed -e "s/ / STARTTLS\n/g" >> /opt/zimbra/postfix/conf/smtpd_keyword_maps
cat /opt/zimbra/postfix/conf/smtpd_keyword_maps | sort | uniq > /opt/zimbra/postfix/conf/smtpd_keyword_maps_
cp /opt/zimbra/postfix/conf/smtpd_keyword_maps_ /opt/zimbra/postfix/conf/smtpd_keyword_maps
fi;
« Последнее редактирование: 13 Марта 2015, 16:03:02 от Belyaev Nikolay »
"Сначала они вас игнорируют, потом смеются над вами, потом борются с вами, а потом вы побеждаете"
Махатма Ганди

Оффлайн Karl500

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 2267
    • Просмотр профиля
А зачем Вы со сторонних серверов принимаете почту с SSL? Вы этим способом (весьма костыльным) просто отказались от SSL для конкретных хостов. Почему Вы хотите SSL для других?
« Последнее редактирование: 13 Марта 2015, 18:14:05 от Karl500 »

Оффлайн Belyaev Nikolay

  • Автор темы
  • Активист
  • *
  • Сообщений: 734
    • Просмотр профиля
    • моя работа- дробилки, грохота...
честно. я не сильно понимаю, что я сделал. Насколько я понял, для некоторых серверов я делаю менее безопасной передачу почты (только startssl). Но тут выбор или получать её или нет.
я очень хочу разобраться в проблеме и сделать чтобы всё ходило нормально
"Сначала они вас игнорируют, потом смеются над вами, потом борются с вами, а потом вы побеждаете"
Махатма Ганди

Оффлайн Karl500

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 2267
    • Просмотр профиля
Вопрос был такой: зачем Вы заставляете сторонние сервера передавать Вам почту с использованием SSL? Не все (мягко говоря) серверы готовы на это, и просто отказываются передавать Вам почту.

Тем более, что:

"You can ENFORCE the use of TLS, so that the Postfix SMTP server announces STARTTLS and accepts no mail without TLS encryption, by setting "smtpd_tls_security_level = encrypt". According to RFC 2487 this MUST NOT be applied in case of a publicly-referenced Postfix SMTP server. This option is off by default and should only seldom be used. "

Короче говоря: если хотите, чтобы сторонние серверы _могли_ посылать Вам почту через SSL, используйте "smtpd_tls_security_level = may". В этом случае сервер будет принимать любую почту (именно это и предписывает делать RFC 2487).
« Последнее редактирование: 09 Июня 2015, 11:21:19 от Karl500 »

Оффлайн Belyaev Nikolay

  • Автор темы
  • Активист
  • *
  • Сообщений: 734
    • Просмотр профиля
    • моя работа- дробилки, грохота...
в секции submission inet n  и smtp inet уже стоит smtpd_tls_security_level = may
"Сначала они вас игнорируют, потом смеются над вами, потом борются с вами, а потом вы побеждаете"
Махатма Ганди

Оффлайн Karl500

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 2267
    • Просмотр профиля
submission ни при чем (этот порт используется для посылки почты с вашего сервера клиентами), а вот в smtpd попробуйте поставить none
И, кстати, если есть - какое значение этого параметра стоит в main.cf ?
« Последнее редактирование: 09 Июня 2015, 12:37:11 от Karl500 »

Оффлайн MrDimarius

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Слегка модернизировал скрипт, а то он вывод с ошибками давал и слишком длинный был:
#!/bin/bash
source_log=/var/log/mail.log
key_file=/etc/postfix/smtpd_keyword_maps
error_ip=`cat $source_log | grep "SSL_accept error" | egrep -o "[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}" | sort | uniq -c | egrep -o "[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}"`
if [[ $error_ip ]]; then
echo $error_ip" " | sed -e "s/ / STARTTLS\n/g" >> $key_file
cat $key_file | sort | uniq > "$key_file"_sort
mv -f "$key_file"_sort $key_file
fi;

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28365
    • Просмотр профиля
cat $source_log | grep "SSL_accept error"
http://porkmail.org/era/unix/award.html

(Я уже молчу о том, что сам код небезопасен.)
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн MrDimarius

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
cat $source_log | grep "SSL_accept error

А можно правильный вариант в студию? Чем такое решение плохо?

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28365
    • Просмотр профиля
Потому что вызов cat тут бессмысленен. Вдвое бессмысленен, поскольку следующим пунктом идёт grep, который сам в состоянии прочесть файл, не нуждаясь в редиректе.

error_ip="$( grep "SSL_accept error" "$source_log" | egrep -o "[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}" | sort | uniq -c )"
Пользователь добавил сообщение 13 Февраля 2018, 14:55:02:
И переменные надо кавычить везде, где это может повлиять на результаты исполнения скрипта.
У вас - может везде.
Особенно доставила строка "if [[ $error_ip ]]; then" - подумайте, что будет, если $error_ip пуста.
« Последнее редактирование: 13 Февраля 2018, 14:55:02 от AnrDaemon »
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн MrDimarius

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
cat точно лишний, че-то не приметил, спасибо.
С кавычками переменных наплясался уже, лишние их ставить совершенно не нужно, можно вместо значения название получить.
error_ip - пусто, запускаем if [[ $error_ip ]]; then и:
$ error_ip=
$ if [[ $error_ip ]]; then echo 0; fi;
$
Ничего не происходит. А что-то разве должно?

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6725
  • 20% Cooler
    • Просмотр профиля
if [[ $error_ip ]]; then" - подумайте, что будет, если $error_ip пуста.
а что будет?.

Код: (text) [Выделить]
$: echo $n

$: [ $n ] && echo notnull || echo null
null

$: [[ $n ]] && echo notnull || echo null
null

$: ls -l $(which bash)
-rwxr-xr-x 1 root root 861424 янв 30 10:11 /usr/bin/bash

$: bash --version
GNU bash, версия 4.4.18(1)-release (x86_64-unknown-linux-gnu)


Пользователь добавил сообщение 13 Февраля 2018, 16:12:41:
MrDimarius, кстати, насчет "выдергивания" айпишников:
зачем грепать два раза (после sort-uniq)?
и более лаконичный вариант:
egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"
« Последнее редактирование: 13 Февраля 2018, 16:12:41 от ALiEN175 »
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн MrDimarius

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
error_ip="$( grep "SSL_accept error" "$source_log" | egrep -o "[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}" | sort | uniq -c )"

Так мне больше нравится:
error_ip=`grep "SSL_accept error" "$source_log" | egrep -o "[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}" | sort | uniq -c | egrep -o "[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}"`

Ну и итоговый вариант:
#!/bin/bash
source_log=/var/log/mail.log
key_file=/etc/postfix/smtpd_keyword_maps
error_ip=`grep "SSL_accept error" "$source_log" | egrep -o "[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}" | sort | uniq -c | egrep -o "[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}"`
if [[ $error_ip ]]; then
echo $error_ip" " | sed -e "s/ / STARTTLS\n/g" >> $key_file
cat $key_file | sort | uniq > "$key_file"_sort
mv -f "$key_file"_sort $key_file
fi;

Победа )))

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28365
    • Просмотр профиля
Так мне больше нравится:
Так неправильно.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

 

Страница сгенерирована за 0.043 секунд. Запросов: 25.