То ли пользователи в своей массе глупеют, то ли программисты разрабатывающие трояны умнеют, но за последние полгода в ИКС резко увеличилось число машин на которых установлены трояны, используемые для рассылки спама и DDoS-аттак (и другой подобной деятельности).
Когда число зараженных машин (и скорость появления новых членов "ботнета") превысила разумные пределы было принято решение закрыть пользователям 25-й порт. Мера это крайняя, но она было вынуждена. А более мягкие решения, например, автоматическое выявление спам-ботов и блокировка 25-го порта только машин рассылающих спам, с возможностью снятия блокировки через веб-интерфейс, небольшой сети сети с маленьким бюджетом, просто не по карману.
После того как 25-й порт был закрыт, я думал, что о проблеме спамботов у пользователей ИКС можно будет забыть если не на всегда, то на долго.
Однако у них оказался побочный эффект. Несмотря на то, что рассылать спам у них уже не получается они по прежнему пытаются это делать. При этом посылают к ДНС серверу много запросов на MX-записи. Чем вызывают повышенную загрузку сервера (и в небольшой степени внешнего канала).
Отсюда возникло желание зафильтровать запросы на MX-записи. Честные пользователи страдать от этого не должны - им MX-записи не нужны. Даже если кто то отправлял почту через локальный MTA (таких не больше нескольких человек из тысячи), то после закрытия 25-го порта им пришлось прописать relayhost/smarthost. Так что MX-записи не нужны даже им.
Но оказалось это не так просто сделать сделать. Все же в итоге задача была решена с помощью связки ipfw+ng_ipfw+ng_bpf. О том как это можно сделать я написал небольшую заметку у себя на сайте.
Надо сказать, что задача отняла у меня сравнительно много времени (часа два тольк ушло на ручное составление bpf-программы) - в сумме часов 5 наверно (всё ни как не приучу себя учитывать потраченное время). И овчинка не стоила выделки - нагрузка на сервер от спамботов была не на столько большой чтобы довести сервер до состояния 0% idle, можно было было на них просто забить. Но мне давно хотелось разобраться с тем, как фильтровать пакеты по их содержимому с помощью bg_bpf и был хороший повод этим заняться :)
Заодно разобрался с тем как работает bpf и узнал про