The OpenNET Project
 
Поиск (ключи):    ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
  WIKI НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

Блокировка отброшенных SMTP сервером IP адресов/подсетей.
#!/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
fi

chmod +0755 $SCRIPTDIR/rejectspammers.run.iptables.block.*
 
Раздел:    Корень / Администратору / Сетевые сервисы / Mail, почта / Борьба со спамом, фильтрация почты

Обсуждение [ RSS ]
 
  • 1.1, Аноним, 10:48, 20/12/2007 [ответить] [смотреть все]
  • +/
    хм скрипт плох тем что много раз зовёт iptables, вместо того чтобы пользовать... весь текст скрыт [показать]
     
     
  • 2.2, andrey, 11:43, 20/12/2007 [^] [ответить] [смотреть все]  
  • +/
    >хм... скрипт плох тем что много раз зовёт iptables, вместо того чтобы
    >пользоваться iptables-save/iptables-restore.

    согласен, еще бы приделать статистику, чтобы оставлять к примеру адреса которые засветились только определенный промежуток времени

     
  • 1.3, Аноним, 11:08, 21/12/2007 [ответить] [смотреть все]  
  • +/
    а по каким критериям у вас почтовик отбрасыват эти айпи спамлисты ... весь текст скрыт [показать]
     
  • 1.4, greg, 12:18, 23/12/2007 [ответить] [смотреть все]  
  • +/
    Чего только люди не придумают, чтобы нормальными решениями не пользоваться...
     
     
  • 2.5, lizard, 15:32, 23/12/2007 [^] [ответить] [смотреть все]  
  • +/
    greg, а какими решениями советуете пользоваться вы? например postfix рвет сессию по причине отсутствия DNS-записей для конкретного ip, но письма с этого ip регулярно идут, как с этим бороться сократив количество проверок?   помнится в mdaemon был механизм ip screening когда после определенного числа regect'ов ip заносился в базу на определенное время, но для постфикса я не могу найти такого решения..
     
  • 2.6, КУКУ, 21:05, 26/12/2007 [^] [ответить] [смотреть все]  
  • +/
    нормальным это каким?
     
     
  • 3.7, Andrey Y. Ostanovsky, 16:48, 27/12/2007 [^] [ответить] [смотреть все]  
  • +/
    Ну, хотя бы с помощью вот такой оценки активности:
    http://home.nuug.no/~peter/pf/en/long-firewall.html#BRUTEFORCE
     
     
  • 4.8, lizard, 12:51, 28/12/2007 [^] [ответить] [смотреть все]  
  • +/
    а есть порты PF под linux? или решение только под bsd?
     
  • 1.9, Евгений, 12:59, 13/12/2008 [ответить] [смотреть все]  
  • +/
    Зачем PF под Linux? Вот смотри...
    http://kevin.vanzonneveld.net/techblog/article/block_brute_force_attacks_with
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:

     Добавить заметку
     Версия для печати
     
     Поиск заметки:
     

    Последние заметки
    - 12.05 Организация шифрованного бэкапа с помощью rdiff-backup, encfs и Dropbox
    - 11.05 Настройка беспроводного соединения в Debian GNU/Linux
    - 07.05 Использование Google Drive в Linux
    - 18.04 Использование нескольких сетевых стеков в Linux
    - 15.04 Восстановление стандартного KDE меню после его удаления (например, wine)
    - 11.04 Настройка gmirror при использовании GPT во FreeBSD 9
    - 09.04 Маршрутизатор на базе FreeBSD с приоритизация трафика средствами PF и ALTQ
    - 02.04 Частичное восстановление данных MySQL из бэкапа, созданного с использованием LVM
    - 21.03 Настройка DNSSEC в BIND 9.9
    - 17.03 Набор номера на Cisco IP Phone 7960/7940 из скрипта
    RSS | Следующие 15 записей >>


    ПОДПИШИСЬ НА ЖУРНАЛ Linux Format 2012!

    Журнал "Linux Format" (Линукс Формат)- Единственный в России и странах СНГ журнал на русском языке, посвящённый Linux и свободному ПО. Журнал для IT-директоров, IT-менеджеров, программистов, системных администраторов, учителей школ и преподавателей ВУЗов и всех пользователей ПК. В каждом выпуске: Новости индустрии OpenSource, обзоры новинок свободного ПО, обучающие и методические статьи.

    Каждый, кто оформит подписку, получает бонусы и подарки- объёмные наклейки на системный блок, диск с архивом номеров за 2005-2011 г.г. и ежемесячно электронную версию журнала в pdf-формате.

    Оформить подписку на год


      Закладки на сайте
      Проследить за страницей
    Created 1996-2012 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    RUNNet TopList