Приветствую...
Общий момент: я получатель всей рутовой почты.Последнее время кол-во спама начало раздражать... Ранее сделал самописные правила для spamassassin (autolearn у меня не используется)- кол-во спама упало до приемлемых размеров (1-2 письма в сутки). Я был счастлив. Но последние недели/месяцы ситуация изменилась в худшую сторону. По этому поводу написал скриптик, анализирующий maillog - выявил все сети класса B и C, рассылающие спам (бразильцы, азиаты, африканцы). Мой скриптик кидает эти "нехорошие" ip с соответствующей маской (/16, /24) в файлик, который я решил скармливать iptables'ам.
Принцип такой:
анализирую maillog. Выбираю все ip, откуда приходит ОДНОЗНАЧНЫЙ спам (т.е. score просто ужасающий, в моем случае > 9)
Если из сети класса B пришло более 5 спам-писем, смотрю на сеть класса C.
Если кол-во разных ip (класса C) для ip (класса B) > 3 - использую маску /16. Else - /24.
Эти ip/mask кидаю в файл.
----
Пояснительный пример:
из сети 10.10.0.0 пришло > 5 спам-писем.
Если количество сетей, 10.10.X. > 2 -> для сети 10.10.0.0 использую маску /16. Т.е. Игнорирую все почтовые запросы из сети 10.10.0.0/16.
Если кол-во сетей <=2, то использую маски: 10.10.X1.0/24, 10.10.X2.0/24...Все эти ip/mask складываю в файлик. Кол-во строк получается ок. 1000... (Так мало - потому, что я для некоторых "бразильских" и т.п. сетей сразу ввожу правило с маской /8. Напр.: 189.0.0.0/8)
Потом напускаю на этот файлик iptables:
for i in `cat <file>`;do iptables -I... 10 .... -s $i --dport 25 -j REJECT;doneВот у меня вопросы: Насколько такое решение "нормальное" - блокировать целые сети? Не загнется ли iptables при кол-ве правил > 5000?
>[оверквотинг удален]
>
>Все эти ip/mask складываю в файлик. Кол-во строк получается ок. 1000... (Так
>мало - потому, что я для некоторых "бразильских" и т.п. сетей
>сразу ввожу правило с маской /8. Напр.: 189.0.0.0/8)
>
>
>Потом напускаю на этот файлик iptables:
>for i in `cat <file>`;do iptables -I... 10 .... -s $i --dport 25 -j REJECT;done
>
>Вот у меня вопросы: Насколько такое решение "нормальное" - блокировать целые сети? Не загнется ли iptables при кол-ве правил > 5000?Загнется, однозначно :) Тогда уж лучше юзать iptables-{save|restore} :) Сетки добавлять в bl, это скажем так, немного сурово :) Я некоторое время назад юзал для этих целей ipset и "скармливал" ему ip адреса спамеров, которые получал парсером maillog. ipset работает в kernel-space, поэтому если в нем содержатся программные ошибки, то это очень плохо может сказаться на системе в целом. Если интересно, вот мой старый пост: http://www.opennet.me/openforum/vsluhforumID1/79530.html. Сейчас у меня стоит фильтрующий мост между почтовый сервером и его гейтом, на котором я фильтрую спамеров по ip адресам через iplist (user-space) (http://sourceforge.net/projects/iplist).
#Bridge UP
/sbin/brctl addbr br0
/sbin/brctl addif br0 eth0
/sbin/brctl addif br0 eth1
/sbin/ifconfig eth0 0.0.0.0
/sbin/ifconfig eth1 0.0.0.0
/sbin/ifconfig br0 x.x.x.248 netmask 255.255.255.240 broadcast x.x.x.255
/sbin/route add default gw x.x.x.241 dev br0
Конфигурация сервера:uname -a
Linux s03 2.6.20.21-smp #3 SMP Wed Apr 16 16:24:27 VLAST 2008 i686 Pentium II (Deschutes) GenuineIntel GNU/Linux
cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 5
model name : Pentium II (Deschutes)
stepping : 2
cpu MHz : 397.353
cache size : 512 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 mmx fxsr
bogomips : 795.45
clflush size : 32processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 5
model name : Pentium II (Deschutes)
stepping : 2
cpu MHz : 397.353
cache size : 512 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 mmx fxsr
bogomips : 794.75
clflush size : 32
lspci | grep Ethernet
00:0f.0 Ethernet controller: Intel Corporation 82557/8/9 Ethernet Pro 100 (rev 05)
00:10.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8169 Gigabit Ethernet (rev 10)free -m
total used free shared buffers cached
Mem: 883 875 8 0 121 222
-/+ buffers/cache: 530 352
Swap: 1458 5 1453В блек листе сейчас 6.950.831 ip адресов спамеров. Бывает в сутки прибавляется по 100.000 адресов. Учитывая что количество ящиков 20.000, это не удивительно..Работает все это без сбоев, проблем не замечено.
>Загнется, однозначно :) Тогда уж лучше юзать iptables-{save|restore} :) Сетки добавлять в
>bl, это скажем так, немного сурово :) Я некоторое время назад
>юзал для этих целей ipset и "скармливал" ему ip адреса спамеров,
>которые получал парсером maillog. ipset работает в kernel-space, поэтому если в
>нем содержатся программные ошибки, то это очень плохо может сказаться на
>системе в целом. Если интересно, вот мой старый пост: http://www.opennet.me/openforum/vsluhforumID1/79530.html. Сейчас
>у меня стоит фильтрующий мост между почтовый сервером и его гейтом,
>на котором я фильтрую спамеров по ip адресам через iplist (user-space)
>(http://sourceforge.net/projects/iplist).У меня простой корпоративный почтовый сервачок :). До 50 юзеров. Почта - исключительно для деловых нужд. Ставить доп. шлюз - смысла не имеет, а геморроя прибавит. Блокировать "миллионы" ip - тоже нужды особой нет. Все-таки не все так плохо...
Вопросы можно переформулировать так:
1. Какое кол-во правил "выдержит" iptables (напр. 1000 он съел и не подавился)?
2. Кто-нибудь пытался блокировать именно целые сети? Где может быть засада...?
Логика блокировки сетей такова:
СОБИРАЕМ список ip рассылающих спам. Анализ:
Если некая сеть класса C (mask=/24) представлена Более чем Двумя разными ip, делается вывод, что вся эта сеть "недостойна" доверия. Делаем mask=/24.
PS. Как правило сеть класса C принадлежит 1-му провайдеру. И в его силах/интересах обеспечить отсутствие спама из его сети. Напр. мой пров не дают простым юзерам доступ к 25-му порту. И это правильно.
...
Если некая сеть класса B имеет > чем N (число можно регулировать) спамерских подсетей - то, вероятно, вся эта сеть (класса B) отдана на откуп "безответственным" товарищам. Блокируем всю сеть- mask=/16.
Это, конечно, натяжка большая. Подобного (mask=/16) можно и не делать, а блокировать только сети класса C, - но тогда резко возрастает кол-во правил для iptables...PPS. тетушке из бразилии отвечу след. постом...
>[оверквотинг удален]
>PS. Как правило сеть класса C принадлежит 1-му провайдеру. И в его
>силах/интересах обеспечить отсутствие спама из его сети. Напр. мой пров не
>дают простым юзерам доступ к 25-му порту. И это правильно.
>...
>Если некая сеть класса B имеет > чем N (число можно регулировать) спамерских подсетей - то, вероятно, вся эта сеть (класса B) отдана на откуп "безответственным" товарищам. Блокируем всю сеть- mask=/16.
>Это, конечно, натяжка большая. Подобного (mask=/16) можно и не делать, а блокировать
>только сети класса C, - но тогда резко возрастает кол-во правил
>для iptables...
>
>PPS. тетушке из бразилии отвечу след. постом...Все Ваши рассуждения основаны на "классовости" сети, провайдеры уже давно применяют VLSM. Блокировать целые сети это заблуждение. К примеру, есть сеть класса C: 88.225.114.0/24, эта сеть разбита на 64 подсети с префиксом /30. Если допустить, что у каждого клиента этого провайдера в этих подсетях есть свой почтовый сервер, тогда Вы принимая решение о блокировании данной сети класса С, будете блокировать 64 почтовых сервера, которые может быть ничего плохого вам и не сделали. :)
[root@sproot tmp]# iptables -L -n | wc -l
59
[root@sproot tmp]# iptables-save -c -t filter | grep -v ^COMMIT > ipt.save
[root@sproot tmp]# for idx in `seq 1000 1 30000`; do
> echo "[0:0] -A RH-Firewall-1-INPUT -s 1.1.1.1 -p tcp -m tcp --dport $idx -j DROP" >> ipt.save
> done;[root@sproot tmp]# echo "COMMIT" >> ipt.save
[root@sproot tmp]# cat ipt.save | wc -l
29057
[root@sproot tmp]# time iptables-restore -c -n < ipt.savereal 0m0.921s
user 0m0.530s
sys 0m0.391s[root@sproot tmp]# iptables -L -n | wc -l
2906229062 правил за 1 секунду.
Да, для вас iptables-{save|restore} вполне подойдет, раз 50 юзеров :) Для enterprise уровня - нет. Народ не даст соврать, насколько я знаю iptables-restore не может обрабатывать больше 65536 правил
>Все Ваши рассуждения основаны на "классовости" сети, провайдеры уже давно применяют VLSM.
>Блокировать целые сети это заблуждение. К примеру, есть сеть класса C:
>88.225.114.0/24, эта сеть разбита на 64 подсети с префиксом /30. Если
>допустить, что у каждого клиента этого провайдера в этих подсетях есть
>свой почтовый сервер, тогда Вы принимая решение о блокировании данной сети
>класса С, будете блокировать 64 почтовых сервера, которые может быть ничего
>плохого вам и не сделали. :)Вот именно это момент ключевой. Здесь я рассуждаю так:
Такие провайдеры (которые раздают диапазоны /30), раздают их, как правило, корпоративным клиентам (небольшим компаниям). Спам из этих сетей возможен лишь в том случае, если кто-то схватит определенную вирусяку и местный сисадмин вовремя не отреагирует на ситуацию. А в моем случае, запретные правила на 25 порт будут не постоянными, а время от времени (раз в неделю, например) iptables будут перегружаться, а динамически подгружаться УЖЕ НОВЫЕ запреты...
Кстати, из сетей в маской /30 спама практически не бывает. Анализ ip показывает, что спам идет из сетей с маской минимум /24...----
ПО поводу гео-расизма...
Ну не нужна нам почта из Бразилии :)
>[оверквотинг удален]
>если кто-то схватит определенную вирусяку и местный сисадмин вовремя не отреагирует
>на ситуацию. А в моем случае, запретные правила на 25 порт
>будут не постоянными, а время от времени (раз в неделю, например)
>iptables будут перегружаться, а динамически подгружаться УЖЕ НОВЫЕ запреты...
>Кстати, из сетей в маской /30 спама практически не бывает. Анализ ip
>показывает, что спам идет из сетей с маской минимум /24...
>
>----
>ПО поводу гео-расизма...
>Ну не нужна нам почта из Бразилии :)А как Вы узнали что из сетей с маской /30 спама практически не бывает ? :) В почтовых логах нет маски ip адреса. А в whois сервисе, объект inetnum предоставляет общую информацию о подсети принадлежащей провайдеру.
>А как Вы узнали что из сетей с маской /30 спама практически
>не бывает ? :) В почтовых логах нет маски ip адреса.
>А в whois сервисе, объект inetnum предоставляет общую информацию о подсети
>принадлежащей провайдеру.Тут я был не прав... Действительно inetnum покажет лишь провайдерские данные...
Буду думать дальше.
PS. За последние 2 суток, с тех пор как начали работать эти правила, только 2 письма-спама до меня дошли (и то помеченные)... Это ли не счастье :)
>>А как Вы узнали что из сетей с маской /30 спама практически
>>не бывает ? :) В почтовых логах нет маски ip адреса.
>>А в whois сервисе, объект inetnum предоставляет общую информацию о подсети
>>принадлежащей провайдеру.
>
>Тут я был не прав... Действительно inetnum покажет лишь провайдерские данные...
>Буду думать дальше.
>PS. За последние 2 суток, с тех пор как начали работать эти
>правила, только 2 письма-спама до меня дошли (и то помеченные)... Это
>ли не счастье :)Счастье было бы абсолютным, если бы еще знать что все нормальные письма дошли :)
>У меня простой корпоративный почтовый сервачок :). До 50 юзеров. Почта -
>исключительно для деловых нужд.Тогда может стоит использовать sendmailacl
прописать все разрешенные (и запрещенные) адреса, и спама вы больше не увидите.Но это. конечно, при условии , что ваши деловые нужды не требуют
засвечивания адресов в сетихотя и для этого случая можно предусмотреть один-два-три выделенных адреса
>PS. Как правило сеть класса C принадлежит 1-му провайдеру. И в его
>силах/интересах обеспечить отсутствие спама из его сети. Напр. мой пров не
>дают простым юзерам доступ к 25-му порту. И это правильно.Ошибочное мнение. Я например хочу пользоваться релеем почтовой службы. Сервис требует авторизации, почему же вы решаете себе позволить фильтровать 25 порт, по которому я соберусь соединяться с почтовой службой ?
Когда вы начнете мыслить не только о себе, а о других, вот тогда и сможете представлять на суд общественности мысли, которые общественность сможет широко применять. А пока - ваши решения несерьезны и однобоки.
А чем DNSBL не подходит? Поднимите собственную зону, заносите туда айпишники и используйте как чёрный список
>А чем DNSBL не подходит? Поднимите собственную зону, заносите туда айпишники и
>используйте как чёрный списокда потому что долбятся они, долбятся, процессы занимают, траффик качают...
файрволлить надо.
>>А чем DNSBL не подходит? Поднимите собственную зону, заносите туда айпишники и
>>используйте как чёрный список
>
>да потому что долбятся они, долбятся, процессы занимают, траффик качают...
>файрволлить надо.Поддерживаю.. Единственное спасение от DDOS атак на сервисы, это фильтрация файерволом, т.к. сервис тогда не будет обрабатывать паразитный трафик. А DNSBL это еще и лишняя нагрузка на dns сервер.
Если кто-нибудь скажет тебе, что знает человека, который блокирует сети всяких "бразильцев, азиатов и африканцев", то оставь всякое сомнение о том, что в мире не осталось идиотов.
>Если кто-нибудь скажет тебе, что знает человека, который блокирует сети всяких "бразильцев,
>азиатов и африканцев", то оставь всякое сомнение о том, что в
>мире не осталось идиотов.Просьба не флудить, а если Ваше сообщение имеет смысл, то сделать его (смысл) доступным для простых смертных.
Специально для Вас потратил 3 с половиной часа и создал грандиозный скрипт, коим и делюсь с Вами:# анализируем диапазон: 189.0.0.0 - 189.199.0.0
for z in 0 1;do for i in 0 1 2 3 4 5 6 7 8 9;do for y in 0 1 2 3 4 5 6 7 8 9;do echo -n 189.$z$i$y...;whois 189.$z$i$y.0.0 | grep "\[whois";done;done;done
# анализируем диапазон: 189.200.0.0 - 189.255.0.0
for z in 2;do for i in 0 1 2 3 4 5;do for y in 0 1 2 3 4 5 6 7 8 9;do echo -n 189.$z$i$y...;whois 189.$z$i$y.0.0 | grep "country";done;done;doneNB. эти скрипты все равно не отработают из-за "% Query rate limit exceeded."- но надеюсь сумеете разобраться сами...
Будет скучно: вместо 189. подставьте 41. Вам понравиться. Заодно идиотов в Вашем окружении поубавится.
Не обижайся, друг. Просто не надо наказывать невиновных, и даже, если среди наказанных окажешься ты сам :)Ну и, конечно, скрипт у тебя написан, скажем, не очень умно, зато польза от потраченных трёх часов на программирование несомненна.
Если хочешь определить какой стране принадлежит ip-адрес (это ведь была цель твоего скрипта, не так ли), то обрати внимание на geo-ip. Только меня очень расстраивает твой почтовый расизм.