Всем спасибо за помощь.

Решил простеньким скриптом на 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" <[email protected] <mailto:[email protected]>>:/

    Спасибо.

    Я как-то раньше задавался этим вопросом, но ответа не нашел.
    Искал в англоязычной рассылке - там тоже предлагали парсить логи,
    использовать 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" <[email protected] <mailto:[email protected]> > <mailto:[email protected]>>:/ > > Доброго времени суток. > > Подскажите, пожалуйста, где (в каких 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
    >     [email protected] <mailto:[email protected]>  
<mailto:[email protected]>
    >     http://mailground.net/mailman/listinfo/exim-users
> > > > _______________________________________________
    > Exim-users mailing list
    > [email protected] <mailto:[email protected]>
    > http://mailground.net/mailman/listinfo/exim-users
>


    _______________________________________________
    Exim-users mailing list
    [email protected] <mailto:[email protected]>
    http://mailground.net/mailman/listinfo/exim-users



_______________________________________________
Exim-users mailing list
[email protected]
http://mailground.net/mailman/listinfo/exim-users




_______________________________________________
Exim-users mailing list
[email protected]
http://mailground.net/mailman/listinfo/exim-users

Ответить