Небольшой скрипт по предупреждению спама с локальных станций сети

Материал из Wiki МИАЦ ВО
Перейти к навигации Перейти к поиску

Предистория

Попал IP адрес нашего сервера в RBL список 2 раза подряд, вот и решил сделать небольшой скрипт по определению есть ли спам машина в сети или нет, что бы сразу реагировать.

Файл фаервола

Добавляем в правила фаевола следующие строки

iptables -A FORWARD -p tcp --dport 25 -j LOG

Что бы все пакеты с отправляемые на 25 порт, попадали в лог файл (/var/log/mesages)

Сам скрипт

Тк все пользователи ходят в инет через VPN канал, то проверяем пакеты с интерфейсов ppp.
Берем файл messages, ищем строки с "DPT=25", затем строки с сегодняшней датой, строки с интерфейсами ppp, считаем их по порядку, берем последнюю строку и первый ее столбец.
Файл /etc/scripts/spam.sh

#!/bin/bash
#set -x
NUMMAX=1000 # Макс кол-во SMTP пакетов, после которых выдается предупреждение.
DATEM=`date +%b`
#DATEM="May" # Для проверки работы скрипта из командной строки, заменяем на текущий месяц на английском
DATED=`date +%e`
NUMSMTP=`cat /var/log/messages | grep "DPT=25"  | grep "$DATEM $DATED" | grep "ppp" | cat -b  | tail -1| cut -d "	" -f1`
if [ "$NUMSMTP" == ""  ]; # Если нет строк, то присваиваем 0
    then NUMSMTP=0;
fi    
if [ $NUMMAX -le "$NUMSMTP" ];
   then echo "Количество отправленных SMTP пакетов с ppp интерфейсов  за сегодня $NUMSMTP 
Похоже завелся спамер!!!"
fi

Тк у меня установлен почтовый сервер, то все что выведет скрипт в консоль, запущенный из под cron, попадет в почтовый ящик root, те мне.

Запуск

Добавляем строку в /etc/crontab

# Проверка на спам ботов в локальной сети.
59 7,11,15,19,23 * * * root /etc/scripts/spam.sh

Те каждые 4 часа будет проверяться количество пакетов, и если их будет больше NUMMAX, то будет отсылаться письмо.