Небольшой скрипт по предупреждению спама с локальных станций сети
Содержание
Предистория
Попал 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, то будет отсылаться письмо.