Остановить postfix от поглощения ресурсов во время атак спаммерских словарей?

Когда спаммер использует свой ботнет из тысяч компьютеров-зомби для рассылки спама по случайным несуществующим адресам @example.com с очень высокой скоростью, postfix исчерпывает ограничения ресурсов нашего провайдера VPS, пытаясь с ним справиться. В частности, он исчерпывает количество не-TCP сокетов, которое ограничено 900 VPS. Я использую постфикс 2.3.3-2.1.el5_2 в CentOS 5 на VPS Virtuozzo Linux.

/var/log/maillog says:
Feb 23 06:26:22 postfix/smtpd[3938]: warning: connect #1 to subsystem private/proxymap: Cannot allocate memory
Feb 23 06:26:22 postfix/smtpd[3936]: fatal: socket: Cannot allocate memory
Feb 23 06:26:48 postfix/qmgr[17702]: fatal: socket: Cannot allocate memory

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

Поставщик VPS предложил настроить следующие параметры, но не дал рекомендаций относительно их установки:

max_idle = 100s (default)
max_use = 100 (default)

Я обнаружил другого человека, имеющего ту же проблему с атаками по словарю постфикса и спаммера:

http://forums.vpslink.com/linux/394-you-hitting-socket-resource-limits-2.html

Он изменился:

default_process_limit from 100 (default) to 10

... который решил проблему, но ввел снижение производительности.

Я не уверен, какой именно параметр должен быть безопасно настроен здесь, даже после скимминга postfix.org/TUNING%5FREADME.html Может ли помочь какой-либо эксперт по постфиксам?

2 ответа

Решение

К сожалению, поскольку Postfix следует модели, управляемой процессами, большое использование памяти под нагрузкой является одним из побочных эффектов. Вы можете попробовать это

Из /etc/postfix/master.cf

# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       n       -       5       smtpd

в maxproc столбец, вы можете заменить - с меньшим числом, чтобы ограничить количество одновременных smtpd процессы, это должно обеспечить некоторые ворота на количество входящей почты.

Другой альтернативой будет посмотреть на fail2ban который можно настроить на разбор /var/log/maillog и поднять блоки iptables для адресов, которые отправляют большое количество недоставленных писем.

Возможно, вы захотите добавить что-то похожее на:

smtpd_recipient_restrictions =
        permit_auth_destination,
        permit_mynetworks,
        reject_unauth_destination,
        reject_unlisted_recipient

...на ваш main.cf файл, который должен заставить postfix сбрасывать некоторые соединения, как только выясняется, что пользователь не может их доставить. Магия в reject_unlisted_recipient, что приведет к отклонению для пользователей, которые не действительны в вашей системе при использовании с local_recipient_maps, Таким образом, это должно снять некоторое давление за счет сокращения объема обработки, поскольку каждое сброшенное соединение освобождает драгоценные ресурсы для обработки следующего соединения. Да, спаммер сможет определить, какие адреса являются недействительными, но лучше, если спамер тратит свое время на отправку (и отклоняется, тратит пропускную способность), чем на ваш (отгоняя атаку).

Другие вопросы по тегам