#!/bin/sh
#
#REJECTSPAMMERS v0.1b Lev Zabudkin. zabudkin@mail.ru
#
#Описание:
# Данный скрипт аккумулирует (создаёт/пополняет) уникальный список IP адресов,
# которые были отброшены SMTP сервером.
# Скрипт создан с той целью, чтобы REJECT'ить в дальнейшем все пакеты с таких адресов.
#
#Действие:
# После выполнения будут созданы файлы в папке указанной в SCRIPTDIR (см. ниже):
# rejectspammers.run.iptables.block.byip.add - Блокировать IP адреса
# rejectspammers.run.iptables.block.byip.delete - Убрать прежнюю блокировку IP адресов
# rejectspammers.run.iptables.block.byip.subnet24.add - Блокировать всю подсеть 255.255.255.0 IP адресов
# rejectspammers.run.iptables.block.byip.subnet24.delete - Убрать прежнюю блокировку подсети 255.255.0.0
# rejectspammers.run.iptables.block.byip.subnet16.add - Блокировать всю подсеть 255.255.0.0 IP адресов
# rejectspammers.run.iptables.block.byip.subnet16.delete - Убрать прежнюю блокировку подсети 255.0.0.0
# rejectspammers.run.iptables.block.byip.subnet8.add - Блокировать всю подсеть 255.0.0.0 IP адресов
# rejectspammers.run.iptables.block.byip.subnet8.delete - Убрать прежнюю блокировку подсети 255.0.0.0
#
# Соответственно для нужной блокировки запустите нужный файл.
##Создавать ли файлы с цепочками DELETE
MAKEDELETEOLD=yes#Файл с логами SMTP сервера
MAILLOG=/var/log/maillog#Каталог, в котором создавать скрипты iptables
SCRIPTDIR=/#Временный каталог
TEMPDIR=/tmp
cat $MAILLOG | grep rejected >$TEMPDIR/rejectedspammers
awk '{user[tolower($10)]=$10} END {for(i in user) {print i}}' $TEMPDIR/rejectedspammers >$TEMPDIR/rejectedspammers.list
cat $TEMPDIR/rejectedspammers.list |cut -d '[' -f2|cut -d ']' -f1 | uniq >$TEMPDIR/rejectspammers.ips
awk --field-separator=. '{print "iptables -A INPUT -s "$1"."$2"."$3"."$4" -p tcp --dport 25 -j REJECT";}' \
$TEMPDIR/rejectspammers.ips>>$SCRIPTDIR/rejectspammers.run.iptables.block.byip.add
awk --field-separator=. '{print "iptables -A INPUT -s "$1"."$2"."$3".".0/24" -p tcp --dport 25 -j REJECT";}' \
$TEMPDIR/rejectspammers.ips>>$SCRIPTDIR/rejectspammers.run.iptables.block.bysubnet24.add
awk --field-separator=. '{print "iptables -A INPUT -s "$1"."$2".".0/16" -p tcp --dport 25 -j REJECT";}' \
$TEMPDIR/rejectspammers.ips>>$SCRIPTDIR/rejectspammers.run.iptables.block.bysubnet16.add
awk --field-separator=. '{print "iptables -A INPUT -s "$1".".0/8" -p tcp --dport 25 -j REJECT";}' \
$TEMPDIR/rejectspammers.ips>>$SCRIPTDIR/rejectspammers.run.iptables.block.bysubnet8.add
cat $SCRIPTDIR/rejectspammers.run.iptables.block.byip.add | sort | uniq \
>$TEMPDIR/rejectspammers.run.iptables.block.byip.add.temp
cat $TEMPDIR/rejectspammers.run.iptables.block.byip.add.temp >$SCRIPTDIR/rejectspammers.run.iptables.block.byip.add
cat $SCRIPTDIR/rejectspammers.run.iptables.block.bysubnet24.add | sort | uniq \
>$TEMPDIR/rejectspammers.run.iptables.block.bysubnet24.add.temp
cat $TEMPDIR/rejectspammers.run.iptables.block.bysubnet24.add.temp >$SCRIPTDIR/rejectspammers.run.iptables.block.bysubnet24.add
cat $SCRIPTDIR/rejectspammers.run.iptables.block.bysubnet16.add | sort | uniq \
>$TEMPDIR/rejectspammers.run.iptables.block.bysubnet16.add.temp
cat $TEMPDIR/rejectspammers.run.iptables.block.bysubnet16.add.temp >$SCRIPTDIR/rejectspammers.run.iptables.block.bysubnet16.add
cat $SCRIPTDIR/rejectspammers.run.iptables.block.bysubnet8.add | sort | uniq \
>$TEMPDIR/rejectspammers.run.iptables.block.bysubnet8.add.temp
cat $TEMPDIR/rejectspammers.run.iptables.block.bysubnet8.add.temp >$SCRIPTDIR/rejectspammers.run.iptables.block.bysubnet8.add
if [ "$MAKEDELETEOLD" == "yes" ]; then
awk --field-separator=. '{print "iptables -D INPUT -s "$1"."$2"."$3"."$4" -p tcp --dport 25 -j REJECT";}' \
$TEMPDIR/rejectspammers.ips>>$SCRIPTDIR/rejectspammers.run.iptables.block.byip.delete
awk --field-separator=. '{print "iptables -D INPUT -s "$1"."$2"."$3".".0/24" -p tcp --dport 25 -j REJECT";}' \
$TEMPDIR/rejectspammers.ips>>$SCRIPTDIR/rejectspammers.run.iptables.block.bysubnet24.delete
awk --field-separator=. '{print "iptables -D INPUT -s "$1"."$2".".0/16" -p tcp --dport 25 -j REJECT";}' \
$TEMPDIR/rejectspammers.ips>>$SCRIPTDIR/rejectspammers.run.iptables.block.bysubnet16.delete
awk --field-separator=. '{print "iptables -D INPUT -s "$1".".0/8" -p tcp --dport 25 -j REJECT";}' \
$TEMPDIR/rejectspammers.ips>>$SCRIPTDIR/rejectspammers.run.iptables.block.bysubnet8.delete
cat $SCRIPTDIR/rejectspammers.run.iptables.block.byip.delete | sort | uniq \
>$TEMPDIR/rejectspammers.run.iptables.block.byip.delete.temp
cat $TEMPDIR/rejectspammers.run.iptables.block.byip.delete.temp >$SCRIPTDIR/rejectspammers.run.iptables.block.byip.delete
cat $SCRIPTDIR/rejectspammers.run.iptables.block.bysubnet24.delete | sort | uniq \
>$TEMPDIR/rejectspammers.run.iptables.block.bysubnet24.delete.temp
cat $TEMPDIR/rejectspammers.run.iptables.block.bysubnet24.delete.temp >$SCRIPTDIR/rejectspammers.run.iptables.block.bysubnet24.delete
cat $SCRIPTDIR/rejectspammers.run.iptables.block.bysubnet16.delete | sort | uniq \
>$TEMPDIR/rejectspammers.run.iptables.block.bysubnet16.delete.temp
cat $TEMPDIR/rejectspammers.run.iptables.block.bysubnet16.delete.temp >$SCRIPTDIR/rejectspammers.run.iptables.block.bysubnet16.delete
cat $SCRIPTDIR/rejectspammers.run.iptables.block.bysubnet8.delete | sort | uniq \
>$TEMPDIR/rejectspammers.run.iptables.block.bysubnet8.delete.temp
cat $TEMPDIR/rejectspammers.run.iptables.block.bysubnet8.delete.temp >$SCRIPTDIR/rejectspammers.run.iptables.block.bysubnet8.delete
fichmod +0755 $SCRIPTDIR/rejectspammers.run.iptables.block.*
URL:
Обсуждается: http://www.opennet.me/tips/info/1525.shtml
хм... скрипт плох тем что много раз зовёт iptables, вместо того чтобы пользоваться iptables-save/iptables-restore.
>хм... скрипт плох тем что много раз зовёт iptables, вместо того чтобы
>пользоваться iptables-save/iptables-restore.согласен, еще бы приделать статистику, чтобы оставлять к примеру адреса которые засветились только определенный промежуток времени
а по каким критериям у вас почтовик отбрасыват эти айпи?
спамлисты?
Чего только люди не придумают, чтобы нормальными решениями не пользоваться...
greg, а какими решениями советуете пользоваться вы? например postfix рвет сессию по причине отсутствия DNS-записей для конкретного ip, но письма с этого ip регулярно идут, как с этим бороться сократив количество проверок? помнится в mdaemon был механизм ip screening когда после определенного числа regect'ов ip заносился в базу на определенное время, но для постфикса я не могу найти такого решения..
нормальным это каким?
Ну, хотя бы с помощью вот такой оценки активности:
http://home.nuug.no/~peter/pf/en/long-firewall.html#BRUTEFORCE
а есть порты PF под linux? или решение только под bsd?
Зачем PF под Linux? Вот смотри...
http://kevin.vanzonneveld.net/techblog/article/block_brute_f.../