[Exim-users] SMTP protocol error in "AUTH LOGIN"

194 views
Skip to first unread message

Mikhail Golub

unread,
Sep 25, 2018, 2:11:48 AM9/25/18
to exim-...@mailground.net
Доброго времени суток.

Подскажите, пожалуйста, где (в каких acl) отловить события чтобы их
заблокировать (событие указано ниже)?

Exim собран без авторизации:
Exim version 4.91 #3 (FreeBSD 11.2) built 27-Aug-2018 11:58:37
Copyright (c) University of Cambridge, 1995 - 2018
(c) The Exim Maintainers and contributors in ACKNOWLEDGMENTS file, 2007
- 2018
Probably Berkeley DB version 1.8x (native mode)
Support for: iconv() use_setclassresources Expand_dlfunc OpenSSL PRDR
Lookups (built-in): lsearch wildlsearch nwildlsearch iplsearch cdb dbm
dbmjz dbmnz dnsdb dsearch passwd
Authenticators:
Routers: accept dnslookup ipliteral manualroute queryprogram redirect
Transports: appendfile/mbx autoreply pipe smtp
Fixed never_users: 0
Configure owner: 0:0
Size of off_t: 8
Configuration file is /usr/local/etc/exim/configure


Подобные коннекты напрягают (не мешают, но лог забивают):
2018-09-25 05:04:18 SMTP connection from [182.38.95.137] (TCP/IP
connection count = 1)
2018-09-25 05:04:19 SMTP protocol error in "AUTH LOGIN"
H=(vcuawmzrqq.com) [182.38.95.137] AUTH command used when not advertised
2018-09-25 05:04:20 SMTP connection from (vcuawmzrqq.com)
[182.38.95.137] lost D=1s


Хочу через такое правило добавлять хост в таблицу firewall-а:
continue = ${run{SHELL -c "/usr/local/bin/sudo -u root /sbin/pfctl -t
blocksmtp -T add $sender_host_address"}}

Но в какой ACL его добавить ..?

_______________________________________________
Exim-users mailing list
Exim-...@mailground.net
http://mailground.net/mailman/listinfo/exim-users

George L. Yermulnik

unread,
Sep 25, 2018, 3:57:28 AM9/25/18
to exim-...@mailground.net
Hello!

On Tue, 25 Sep 2018 at 09:11:07 (+0300), Mikhail Golub wrote:

> Подскажите, пожалуйста, где (в каких acl) отловить события чтобы их
> заблокировать (событие указано ниже)?

> Подобные коннекты напрягают (не мешают, но лог забивают):


> 2018-09-25 05:04:18 SMTP connection from [182.38.95.137] (TCP/IP
> connection count = 1)
> 2018-09-25 05:04:19 SMTP protocol error in "AUTH LOGIN"
> H=(vcuawmzrqq.com) [182.38.95.137] AUTH command used when not advertised
> 2018-09-25 05:04:20 SMTP connection from (vcuawmzrqq.com)
> [182.38.95.137] lost D=1s

> Хочу через такое правило добавлять хост в таблицу firewall-а:
> continue = ${run{SHELL -c "/usr/local/bin/sudo -u root /sbin/pfctl -t
> blocksmtp -T add $sender_host_address"}}

> Но в какой ACL его добавить ..?

Если я правильно понял (а могу понять и неправильно), то нету такого
acl'я, чтобы "словить" использование auth, если он не был предложен.
Поэтому, вероятно нужно смотреть в сторону fail2ban и иже с ним.

--
George L. Yermulnik
[YZ-RIPE]

Vladimir Sharun

unread,
Sep 25, 2018, 4:00:43 AM9/25/18
to Exim MTA на русском
Привет,

tail на логи и ловить/парсить нужную строку.

Ты не попадёшь ни в один из ACL'ей, потому что это кейс - syntax error:
If the connection is not using extended SMTP (that is, HELO was used rather than EHLO), the use of AUTH= is a syntax error.

И да, вариант с run shell - это перебор. Лучше уж сделать кондишн с sql запросом, который положит нужный ip/дату_время в базу, а внешний скрипт раз в секунду поллит изменения в таблице - забирает оттуда новеньких и пушит в файрвольную таблицу новый айтем. Держать в базе также полезно, потому что у тебя всегда есть доказательства, когда какой хост накосячил.

У нас таких странных на 12 часов в бан, потом бан снимается до след. инцидента.

25 вересня 2018, 09:11:52, від "Mikhail Golub" <g...@gmn.org.ua>:

Mikhail Golub

unread,
Sep 25, 2018, 4:19:35 AM9/25/18
to exim-...@mailground.net
Спасибо.

Я как-то раньше задавался этим вопросом, но ответа не нашел.
Искал в англоязычной рассылке - там тоже предлагали парсить логи,
использовать fail2ban ...

Хотелось попроще.
Описанный вариант (run shell) работает уже для некоторых правил.

Вариант с SQL - вариант. Но ...


"Лучше уж сделать кондишн с sql запросом, который положит нужный

ip/дату_время в базу" - вопрос тот же - где этот конфишн (в каком acl)
разместить?


25.09.2018 11:00, Vladimir Sharun пишет:


> Привет,
>
> tail на логи и ловить/парсить нужную строку.
>
> Ты не попадёшь ни в один из ACL'ей, потому что это кейс - syntax error:
> https://www.exim.org/exim-html-current/doc/html/spec_html/ch-smtp_authentication.html

> *If the connection is not using extended SMTP (that is, HELO was used
> rather than EHLO), the use of AUTH= is a syntax error.*


>
> И да, вариант с run shell - это перебор. Лучше уж сделать кондишн с sql
> запросом, который положит нужный ip/дату_время в базу, а внешний скрипт
> раз в секунду поллит изменения в таблице - забирает оттуда новеньких и
> пушит в файрвольную таблицу новый айтем. Держать в базе также полезно,
> потому что у тебя всегда есть доказательства, когда какой хост накосячил.
>
> У нас таких странных на 12 часов в бан, потом бан снимается до след.
> инцидента.
>

> /25 вересня 2018, 09:11:52, від "Mikhail Golub" <g...@gmn.org.ua
> <mailto:g...@gmn.org.ua>>:/


>
> Доброго времени суток.
>
> Подскажите, пожалуйста, где (в каких acl) отловить события чтобы их
> заблокировать (событие указано ниже)?
>
> Exim собран без авторизации:
> Exim version 4.91 #3 (FreeBSD 11.2) built 27-Aug-2018 11:58:37

> Copyright (c) University of Cambridge,1995 - 2018

> Exim-...@mailground.net <mailto:Exim-...@mailground.net>
> http://mailground.net/mailman/listinfo/exim-users

Vladimir Sharun

unread,
Sep 25, 2018, 4:22:16 AM9/25/18
to Exim MTA на русском
Привет,

Это syntax error - я не думаю, что оно будет отсвечивать где-то в ACL. Как вместо RCPT написать RPCT.

25 вересня 2018, 11:19:55, від "Mikhail Golub" <g...@gmn.org.ua>:

Mikhail Golub

unread,
Oct 5, 2018, 8:11:16 AM10/5/18
to exim-...@mailground.net
Всем спасибо за помощь.

Решил простеньким скриптом на Perl (честно взятым на просторах Интернет
и переделанным под мои потребности), который запускается по расписанию и
добавляет в таблицу pf провинившиеся IP.
Может кому будет полезно ...

#!/usr/local/bin/perl

use strict;
use warnings;

# Options to set up here.
#
# $conf is where to store the current state file.
# $maillog is the latest Exim main log.

my $conf = "/var/spool/exim/mainlog-state";
my $mainlog = "/var/log/exim/mainlog";

my $seek = 0;
my $inode = inode_number($mainlog);
my $cantseek = 0;

if (-r $conf) {
open CONF, "< $conf";
while (<CONF>) {
chomp;
s/^\s*//;
s/\s*$//;
next if /^$/;
if (/^inode=(\d+)$/) {
$inode = $1;
}
if (/^seek=(.*)$/) {
$seek = $1;
}
}
close CONF;
}

my @ips = ();


# see if we can seek to current position in the mainlog. If not, then
# it has most likely been rotated
open LOG, "< $mainlog" or die "cannot open exim log file $mainlog!";
if (!seek(LOG, $seek, 0)) {
$cantseek = 1;
}
close LOG;

if ($inode != inode_number($mainlog) or $cantseek) {
$inode = inode_number($mainlog);
$seek = 0;
}

$seek = read_log($mainlog, $seek, \@ips);

# output
if (@ips) {
@ips = uniq(@ips);
foreach my $ip (@ips) {
`/sbin/pfctl -t blocksmtp -T add $ip > /dev/null 2>&1`;
}
}


# create config file
open CONF, "> $conf";
print CONF "inode=$inode\n";
print CONF "seek=$seek\n";
close CONF;

exit;

sub inode_number
{
my $file = shift;
my ($dummy, $inode) = stat($file);
return $inode;
}

sub read_log
{
my ($file, $seek, $stats) = @_;
my $prevline = undef;
my $line;
my ($prevpos, $pos);
local *LOG;

open LOG, "< $file" or die "cannot open exim log file $file!";
if (!seek(LOG, $seek, 0)) {
close LOG;
return $seek;
}
while ($line = <LOG>) {
if (defined $prevline) {
if ($line =~ m/\[(.*)\] AUTH command used when not advertised/) {
push @ips, $1;
}
}
$prevline = $line;
$prevpos = $pos;
$pos = tell LOG;
}
close LOG;

$prevpos = $seek unless defined $prevpos;

return $prevpos;
}

sub uniq {
my %seen;
grep !$seen{$_}++, @_;
}

25.09.2018 11:21, Vladimir Sharun пишет:


> Привет,
>
> Это syntax error - я не думаю, что оно будет отсвечивать где-то в ACL.
> Как вместо RCPT написать RPCT.
>

> /25 вересня 2018, 11:19:55, від "Mikhail Golub" <g...@gmn.org.ua
> <mailto:g...@gmn.org.ua>>:/

> > Exim-...@mailground.net <mailto:Exim-...@mailground.net> <mailto:Exim-...@mailground.net>

Victor Ustugov

unread,
Nov 27, 2018, 6:18:58 PM11/27/18
to exim-...@mailground.net
приветствую

George L. Yermulnik wrote on 25.09.2018 10:56:

>> Подскажите, пожалуйста, где (в каких acl) отловить события чтобы их
>> заблокировать (событие указано ниже)?
>
>> Подобные коннекты напрягают (не мешают, но лог забивают):
>> 2018-09-25 05:04:18 SMTP connection from [182.38.95.137] (TCP/IP
>> connection count = 1)
>> 2018-09-25 05:04:19 SMTP protocol error in "AUTH LOGIN"
>> H=(vcuawmzrqq.com) [182.38.95.137] AUTH command used when not advertised
>> 2018-09-25 05:04:20 SMTP connection from (vcuawmzrqq.com)
>> [182.38.95.137] lost D=1s
>
>> Хочу через такое правило добавлять хост в таблицу firewall-а:
>> continue = ${run{SHELL -c "/usr/local/bin/sudo -u root /sbin/pfctl -t
>> blocksmtp -T add $sender_host_address"}}
>
>> Но в какой ACL его добавить ..?
>
> Если я правильно понял (а могу понять и неправильно), то нету такого
> acl'я, чтобы "словить" использование auth, если он не был предложен.
> Поэтому, вероятно нужно смотреть в сторону fail2ban и иже с ним.

этот же вопрос подняли в англоязычном листе.

можно описать hostlist, в котором указать, кому мы анонсируем SMTP
аутентификацию. его уже указать в auth_advertise_hosts.

потом в acl_check_quit и acl_check_notquit проверить, входит ли адрес
хоста отправителя в hostlist.

если не входит, то проверить значение $smtp_command_history.

т. о. можно выловить попытку аутентифицироваться тогда, когда
аутентификация не анонсирована.

ну а дальше - дело вкуса каждого, где сохранять информацию о таком хосте
и что с ним делать в следующий раз в acl_check_connect.

--
Best wishes
Victor Ustugov mailto:vic...@corvax.kiev.ua
public GnuPG/PGP key: https://victor.corvax.kiev.ua/corvax.asc
Skype ID: corvax_nb JID: vic...@corvax.kiev.ua

Reply all
Reply to author
Forward
0 new messages