[exim-conf] Feature request
Andrey N. Oktyabrski
ano на bestmx.ru
Ср Фев 2 13:55:18 EET 2011
У меня вот такое работает. Логи посуточные. То есть, время жизни адреса
в чёрном списке регулируется количеством анализируемых логов.
$ pcregrep -A4 'Brute force' ANOlizer.awk
### Brute force password recognition ###
/ authenticator failed for \([^[:space:]]+\) \[[[:digit:]\.]+\]/ {
khost = $8; gsub(/(\[|\]\:)/, "", khost);
bfrc[khost]++;
}
--
### Brute force password recognition ###
BFORCE_HOSTS = DBSRC "/bruteforce";
for (k in bfrc) {
if (bfrc[k] > BFORCE_LIM) print k ":\t" bfrc[k] > BFORCE_HOSTS;
}
Подключение:
acl_check_connect:
...
### Bruteforcers goes out immediately ###
# cron: ANOlizer.sh
defer hosts = !+relay_from_hosts
condition = ${lookup{$sender_host_address} \
dbm{DB/bruteforce.db} {yes}{no}}
log_message = BFORCE
Запуск анализатора:
$ sudo crontab -l | grep ANOlizer
* * * * * /usr/pkg/etc/exim/bin/ANOlizer.sh
$ less ANOlizer.sh
#! /bin/sh
LOG='/var/log/exim/mainlog'
ETC='/usr/pkg/etc/exim'
DB='/usr/pkg/etc/exim/db'
BIN='/usr/pkg/etc/exim/bin'
DBSRC='/usr/pkg/etc/exim/src/db'
ZCAT='/bin/zcat'
DBMBUILD='/usr/pkg/sbin/exim_dbmbuild -nolc'
#$ZCAT $LOG.3.gz $LOG.2.gz $LOG.1.gz \
# | cat - $LOG \
# | $BIN/ANOlizer.pl
ALL_LOGS=''
LOGS_COUNT=3
while [ x$LOGS_COUNT != x0 ]; do
LOGS_COUNT=$((LOGS_COUNT - 1))
[ -f "$LOG.$LOGS_COUNT.gz" ] && ALL_LOGS="$ALL_LOGS
$LOG.$LOGS_COUNT.gz"
done
$ZCAT $ALL_LOGS \
| cat - $LOG \
| $BIN/ANOlizer.awk
for db in disconnect dict_hosts lastmxconnect mh_hosts mh_helo
bruteforce wh_hosts bad_froms bad_hosts; do
$DBMBUILD $DBSRC/$db $DB/$db.db >/dev/null
done
Подробная информация о списке рассылки exim-conf