Остановить 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
, Таким образом, это должно снять некоторое давление за счет сокращения объема обработки, поскольку каждое сброшенное соединение освобождает драгоценные ресурсы для обработки следующего соединения. Да, спаммер сможет определить, какие адреса являются недействительными, но лучше, если спамер тратит свое время на отправку (и отклоняется, тратит пропускную способность), чем на ваш (отгоняя атаку).