Назад | Перейти на главную страницу

qmail ограничивает количество писем, отправляемых пользователем или доменом в час

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

Я хотел бы установить ограничение в qmail для ограничения скорости исходящей электронной почты для каждого пользователя / домена / времени, но до сих пор не смог найти для этого встроенных функций.

Были бы полезны любые известные вам техники. Один из вариантов, с которым я столкнулся, - это отправка исходящей электронной почты через SpamAssassin, но меня беспокоит блокировка законных сообщений.

Также вы можете отслеживать исходящую почту с помощью Swatch, когда Swatch обнаруживает, что qmail-send на максимум (например, удаленный 30/30), отправляет вам предупреждение.

Вы можете использовать патч ограничений tcpserver: дает tcpserver возможность отклонять соединения, когда средняя загрузка сервера превышает определенное число, когда с одного IP-адреса получено более определенного числа соединений или когда более определенного числа соединения принимаются от машин в одном блоке класса C (т.е. «первые три числа» в их IP-адресах совпадают. «1.2.3.4» и «1.2.3.100» находятся в одном блоке класса C). https://qmail.jms1.net/ucspi-tcp/

Сработало отлично, спасибо!

Вы также должны включить следующую строку после первого grep:

grep "$ (date +"% b% d ")" / var / log / maillog | представление grep: | awk -Fsuccess {'print $ 2'} | awk -F: {'print $ 1'} | сортировать | uniq -c | sort -n | grep -v (неизвестно) | awk {'print $ 1 "|" $ 2'}

Таким образом, вы также можете блокировать простые незашифрованные отправления smtp.

Приветствую!

Есть какая-то патч дроссельной заслонки доступен для Qmail, который соответствует вашему описанию. Я сомневаюсь, что есть встроенная функциональность без исправления Qmail, поскольку Qmail, кхм, отлично закодирован как есть.

Пожалуйста, взгляните на это обсуждение различных MTA, особенно примечание о Qmail. Имейте в виду, что это обсуждение началось 6 лет назад, и то, что было сказано тогда о Qmail, еще более верно. Возможно, это не входит в ваше краткосрочное или среднесрочное планирование, но переход с Qmail должен быть чем-то, что следует учитывать, особенно если вам нужно применить кучу случайных исправлений, чтобы заставить его делать то, что вы хотите.

Хм, обсуждение того, как сделать что-то подобное в Postfix, заключается в использовании политический добавить. Взглянув на этот проект, можно предположить, что его можно использовать с разными MTA, так что, возможно, вы сможете убедить Qmail использовать его.

Этот сценарий ограничивает количество писем, отправляемых на пользователя в день. Если пользователь достиг максимальной предустановки, сценарий изменит пароль, и администратору будет отправлено электронное письмо.

Установить:

  1. У вас должен быть установлен qmt с установленным spamdyke.
  2. Сохраните и выполните разрешения для этого скрипта как: / home / vpopmail / bin / qmail-antispam
  3. Создайте этот файл: / etc / qmailadmin / qmail-spam / blacklist
  4. В crontab добавьте

    */5 * * * * /home/vpopmail/bin/qmail-antispam >> /var/log/maillog 2>&1
    

Просмотрите журналы, чтобы проверить, работает ли он:

tail -f /var/log/maillog | grep "qmail-antispam"

#!/bin/sh
#Qmail Toaster AntiSpam - qmail limit number of emails sent by user by day
#PseudoAntiSpam - Fake Antispam - Toxic Antispam - LogBased Antispam
#Prevent when an attacker steal a user password and abuse the server.
#
#Español Spanish
#Script para limitar la cantidad de envios realizados por usuario por dia. Si el usuario alcanzo un maximo prefijado se la cambia el password y se envia un correo al administrador.
#Este script previene los casos en los que un atacante roba una clave y abusa de nuestro server haciendo envios masivos. Normalmente estos envios masivos implican multiples autenticaciones y contando la cantidad de envios con autenticacion se identifica el ataque, y se le cambia el password para frenar esos envios.
#
#Para instalar:
#1- Guardar y dar permisos de ejecucion a este script como: /home/vpopmail/bin/qmail-antispam
#2- Crear este archivo: /etc/qmailadmin/qmail-antispam/blacklist
#3- En el crontab agregar
#*/5 * * * * /home/vpopmail/bin/qmail-antispam >> /var/log/maillog 2>&1
#
#
#Revisar los logs asi para verificar que este funcionando
#tail -f /var/log/maillog | grep "qmail-antispam"
#
#English Ingles
#Google translate:
#
#This script limit the number of emails sent ​​per user per day. If the user reached a maximum preset, the script will change the password and an email is sent to the administrator.
#
# To install:
# 1 - Save and execute permissions to this script as: /home/vpopmail/bin/qmail-antispam
# 2 - Create this file: /etc/qmailadmin/qmail-spam/blacklist
# 3 - In the crontab add
# * / 5 **** /home/vpopmail/bin/qmail-antispam >> /var/log/maillog 2>&1
#
#
# Review the logs so to check if it works:
# tail-f / var / log / maillog | grep "qmail-antispam"
#
#
#Author: 3.14
#Contact: 3.141592x5@gmail.com

#Configuracion / Config
MAILLOG="/var/log/maillog"
MAX_CORREOS=3000
ID_SERVER="ID_SERVER"
CONTACTO=admin@server.com
LISTA_NEGRA=/etc/qmailadmin/qmail-antispam/blacklist
VUSERINFO="/home/vpopmail/bin/vuserinfo"
VPASSWD="/home/vpopmail/bin/vpasswd"
AUX=$(mktemp)

echo "$(date) qmail-antispam : Revisando logs"

function LstUsers
{
    grep "$(date +"%b %d")" /var/log/maillog| grep auth: | grep ALL| awk -Fauth: {'print $2'} | awk {'print $1'} | sort | uniq -c | sort -n | grep -v \(unknown\) | awk {'print $1"|"$2'}
}

LstUsers >$AUX

#cat $AUX

for i in $(cat $AUX); do

    cantidad=$(echo $i | awk -F\| {'print $1'})
    usuario=$(echo $i | awk -F\| {'print $2'})

    if [ $cantidad -gt $MAX_CORREOS ]; then

        #echo "$(date) Limite de autenticaciones exedido: $usuario"
        #echo "$(date) Verificando si $usuario se encuentra suspendido"

        if [ "$(cat $LISTA_NEGRA | grep "$(date +"%b %d %Y")" | grep $usuario)" == "" ]; then
            echo "$(date) qmail-antispam : Suspendiendo al usuario: $usuario envios: $cantidad maximo_permitido: $MAX_CORREOS" >> $MAILLOG
            password_capturado=$($VUSERINFO $usuario | grep "clear passwd" | awk -F: {'print $2'})
            echo "$(date +"%b %d %Y")" $usuario $password_capturado>>$LISTA_NEGRA
            echo -e "Fecha: $(date) \nUsuario: $usuario \nPassword: $password_capturado \nEnvios: $cantidad" | mail -s "Aviso de spam en el $ID_SERVER" "$CONTACTO"
            $VPASSWD $usuario -r                
        fi

    fi

done

echo "$(date) qmail-antispam : Fin de revision"

Также добавьте эту строку, чтобы защитить свой сервер от пользователей, прошедших локальную аутентификацию:

grep "$(date +"%b %_d")" /var/log/maillog |
grep auth: |
grep ALL |
grep '127.0.0.1' |
awk -Ffrom\: {'print $2'} |
awk -Fto\: {'print $1'} |
sort | uniq -c | sort -n | grep -v bounce |
awk {'print $1"|"$2'}

Приветствую!