04.11.08
antispam: dynamic/dialup subnets.
Учитывая масштабы спама одолевающего в последнее время - все больше задумываюсь над разными алгоритмами блокировки этой гадости. К примеру, на одном из хостинговых серверов по работе статистика следующая: По совокупным усилиям всех rbl листов и черных списков за сутки
заблокирован прием почты с 200283 уникальных ip, которые пытались
отправить почту 3263992 раз. Больше трех миллионов…
В последнее время получило довольно широкое распространение блокировка всех non-MTA customer ranges, то бишь тех диапазонов, которые предполгают лишь доступ в интернет, а отправку почты только через smtp сервер интернет-провайдера. Весьма целесообразное решение, но весь впорос в его конкретном вооплощении.
Можно использовать rbl листы:
pbl.spmahaus.org ( за удовольствие стянуть полностью зону rsync’ом нужно будет платить)
dul.dnsbl.sorbs.net
dul.ru
Минус - некоторое, но постоянное отставание от реального положения дел, так как постоянно добавляются новые подсети,
существующие меняются и переодически появляется некоторое
количество хостов в таких подсетях, которые используются как почтовые сервера отдельных организаций и у частных лиц.
В некоторых куроводствах в интернете можно встретить рекомендации блокировать по паттернам в обратной зоне по примерному регекспу:
pool|modem|dial|cable|client|dsl|dhcp|dyn|ppp.
Основная мысль - если человек хочет отправлять почту со сервера, размещенного да adsl канале или в домашней сети, то он сделает нормальную обратную запись. Остальные идут лесом. То есть, в отличии от rbl листов - не надо никакого выносить из какого-то блок-листа. Как только администратор сделал нормальную обратную запись - все в порядке, почта ходит.
Естественно, что для того, чтобы не блокировать почту с нормальных хостов нужны более конкретные регекспы, пусть даже они будут значительно более сложными. Добавлю сюда свои несколько копеек. В качестве эксперимента собрал по этому регекспу список хостов за сутки на одном из серверов. Получилось 66571 уников:
#wc -l uniqhosts
66571 uniqhosts
#head uniqhosts
dsl88.241-38078.ttnet.net.tr
adsl-598433fb.monradsl.monornet.hu
pool-71-115-197-105.spknwa.dsl-w.verizon.net
82.200.213.84.dial.online.kz
dsl88-226-60417.ttnet.net.tr
8-219-112-92.pool.ukrtel.net
bl4-220-22.dsl.telepac.pt
96.89.220.87.dynamic.jazztel.es
201-92-50-50.dsl.telesp.net.br
201-34-151-6.jvece702.dsl.brasiltelecom.net.br
По количеству вхождений получилась следующая статистика:
#grep modem uniqhosts | wc -l
236
#grep client uniqhosts | wc -l
1448
#grep dhcp uniqhosts | wc -l
1667
#grep dial uniqhosts | wc -l
3470
#grep cable uniqhosts | wc -l
4045
#grep pppoe uniqhosts | wc -l
4756
#grep pool uniqhosts | wc -l
7820
#grep ppp uniqhosts | wc -l
8139
#grep adsl uniqhosts | wc -l
12105
#grep dynamic uniqhosts | wc -l
15091
#grep dyn uniqhosts | wc -l
19182
#grep dsl uniqhosts | wc -l
29025
Если делать более точными регекспы во избежание блокировки
нормальных хостов, типа pppoe.org и *dsl*, то кол-во совпадений
естественно снизится. Кто-то этим может пренебречь, но для предоставляемых сервисов клиентам это недопустимо. В принципе, по всех обратным зонам проcлеживается некоторая тенденция, которая наверняка описана в этом документе: http://www.tools.ietf.org/html/draft-msullivan-dnsop-generic-naming-schemes-00, но мне его было лень читать, поэтому нашел сам.
По получившимуся регекспу улов получается значительно более весомый:
#cat uniqhosts | perl -lane ‘print if m/(\d+(\.|-)){3}[a-zA-Z]/’ | wc -l
47878
Рекомендую
Конечно, лучше использовать все в совокупности, поскольку ни одно из средств не дает стопроцентного результата.
Ну и под конец опишу еще один вариант поддержания информации о таких сетях в актуальном состоянии. Этот вариант будет работать только с добросовестными интернет-провайдерами, которые не ленятся прописывать названия сеток и как-то это дело структурировать:
$ whois -h whois.ripe.net PIPEX-DSL-DYNAMIC| grep inet | awk ‘{ print $2 ” ” $4 }’ | while read net; do ipcalc -r $net; done | grep -v de
81.178.128.0/17
81.179.64.0/18
81.179.128.0/18
81.179.192.0/18
85.210.64.0/18
85.210.0.0/18
85.210.128.0/18
85.210.192.0/18
85.211.0.0/16
81.178.70.0/23
81.178.72.0/21
81.178.80.0/20
81.178.96.0/19
Несколько полезных ссылок:
http://www.senderbase.org/
http://www.db.ripe.net/whois
http://ipindex.homelinux.net/index.php
viliar said,
April 13, 2008 at 2:34 am
Для тех, кто хочет все “здесь и сейчас”. Базу ripe.net, как мне подсказали, можно целиком выкачать у них с ftp: ftp://ftp.ripe.net/ripe/dbase/
К сожалению не нашел варианта с rsync.
viliar said,
July 29, 2008 at 8:46 pm
Более точный регексп выглядит для postfix так
/(\d+(\.|x|-)){2}[a-z]/i
или так в общем:
(\d+(\.|x|-)){2}[a-zA-Z]
# wc -l nonip
56349 nonip
# cat nonip | perl -lane ‘next unless m/((\d+(\.|x|-)){2}[a-z]+)/i; print $_’ | wc -l
43934
Что у нас получается около 78 процентов.
grep на mail|mx|smtp не дал среди отсеянных таким образом хостов ни одного нормального почтовика.
viliar said,
October 13, 2008 at 12:07 pm
Вот еще полезная ссылка, хотя я бы именно так фильтровать не стал:
http://www.gabacho-net.jp/en/anti-spam/