Я размещаю почтовый сервер для пары разных доменов. Недавно был угадан / взломан пароль одного из пользователей, и учетная запись использовалась для отправки пары сотен тысяч сообщений, прежде чем я заметил и смог закрыть ее, в результате чего весь сервер был помещен в черный список.
Я хотел бы установить ограничение в 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 использовать его.
Этот сценарий ограничивает количество писем, отправляемых на пользователя в день. Если пользователь достиг максимальной предустановки, сценарий изменит пароль, и администратору будет отправлено электронное письмо.
Установить:
В 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'}
Приветствую!