Баним взломщиков Exim с помощью ipfw
Среда, сентября 16, 2015 | Автор:

Меня в достали попытки подбора пароля в логах exim, например такие

2015-09-16 12:54:29 auth_login authenticator failed for 212-83-147-83.rev.poneytelecom.eu (User) [212.83.147.83]:58970 I=[xxxxxxxxxx]:25: 535 Incorrect authentication data (set_id=somebody)

Вначале пытался делать все вручную, добавляя правила в ipfw. В конце-концов надоело.

Выборку забаненных будем создавать с помощью grep

Создаем файл mail.deny со следующим содержанием:

#!/bin/sh
fwcmd=»/sbin/ipfw »
# выбираем из файла все неудачные попытки аутентификации
cat /var/log/exim/mainlog |grep -i «Incorrect auth» > /var/log/exim/deny/log
# вырезаем из получившегося файла все ip-адреса
grep -oE «[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}» /var/log/exim/deny/log >> /var/log/exim/deny/d1
# убираем собственные ip (WAN, LAN, 127.0.0.1)  Был такой случай, что в HELO совали localhost. Пришлось добавить строчку.
cat /var/log/exim/deny/d1 |grep -v «xxx.xxx.xxx.xxx» | grep -v «192.168.0.» | grep -v «127.0.0.1» > /var/log/exim/deny/table1
# Сортируем и убираем повторяющиеся значения
cat /var/log/exim/deny/table1 |sort | uniq > /var/log/exim/final
## Добавляем правила в ipfw, создавая таблицу table1 из значений файла final
${fwcmd} table 1 flush
cat /var/log/exim/final |
while read ip;
do
${fwcmd} table 1 add $ip
done

Осталось только вписать в rc.ipfw  правило

${fwcmd} add 27111 deny log logamount 100 tcp from table\(1\) to me 25

!!! Обратите внимание на экранирование скобок. И правило должно располагаться ДО  разрешающего правила на электронку, т.е.

${fwcmd} add 27111 deny log logamount 100 tcp from table\(1\) to me 25
${fwcmd} add 27112 allow tcp from any to me 25

Добавляем mail.deny в crontab

P.S. Чистить список забаненных можно руками или написать опять команду в crontab, удаляющую файлы в директории /var/log/exim/deny, допустим, с периодичностью раз в неделю.

rm /var/log/exim/deny/*

Рубрика: FreeBSD  | Теги: , , ,