02.11.2011 09:48
OlegON
 
В один прекрасный вечер, за просмотром средненького фильма стал приводить в порядок свой скрипт для iptables. Надо сказать, что обращался я с ним достаточно жестоко, просто прописывая новое правило по необходимости. В результате - несколько NAT даже на внутренние подсетки и т.п. помойки. Выкинул один NAT, пакеты завалились на второй, в результате чего вчера были проблемы с авторизацией. Но это отступление. Суть в следующем, у меня стоят ловушки, банящие адреса при подключении на стандартные порты различных приложений. За неделю набегает так конкретно адресов, в результате чего линейное их сравнение на каждом пакете тоже начинает подтормаживать, приходилось генерировать кучу правил вида:
Код:
iptables -I PREROUTING -t mangle -s $REMOTE_HOST/32 -j DROP
под руку попалось упоминание ipset. Грубо говоря, это списки адресов, сравнение с которым идет, во-первых, в одно правило, во-вторых - значительно быстрее. Взводится моментально, emerge ipset. В ядре так же включается поддержка ipset. И тут я сел в лужу.
Цитата:
iptables -A INPUT -i $INET -m set --match-set badip src -j DROP
iptables: No chain/target/match by that name.
как я только не танцевал, как только не переиначивал правило... Убился. В дебаговом режиме было, что target все же кривой. Это было на ipset-4.5 6.8. Размаскировал, обновился - фиг. В общем, неизвестно, какой бубен надоумил, но поставил ipset-6.9.1-r2 c флагом modules (в ядре поддержку пришлось отключить), заработало... В использовании этот фильтр очень прост.
Создаем список адресов:
Код:
ipset create badip iphash
после чего в общий конфиг можно добавить строку
Код:
iptables -t mangle -A PREROUTING -i $INET -m state --state NEW -p tcp -m set --match-set badip src -j DROP
которая обозначает, что все новые соединения с инет-интерфейса от списка badip будут сбрасываться. Все! Осталось только поправить ловушки, чтобы они выполняли команду
Код:
ipset -A badip $REMOTE_HOST
список жертв теперь просто посмотреть командой
Код:
ipset -L badip
, раньше я взрывал мозг, листая правила и фильтруя кучу ненужного текста. Теперь работает правильно, быстро, красиво... Сбрасывать можно отдельно от общего списка правил...
P.S. при установке ipset в ebuild ругается, что нужен netlink.patch, на эту надпись можно забить. Я потратил много времени на выяснения, но патч нужен только на старые ядра.
22.04.2012 10:38
OlegON
 
Обнаружил интересную особенность
Цитата:
ipset -! restore <badip
если badip нулевой, вешает всю машину начисто :(
24.04.2012 20:20
OlegON
 
Еще раз развлекся, но оказалось, что не нулевой файлик виноват, а то, что он лежит на сетевой шаре. И не вешает машину начисто, а просто напросто стоит долго при попытке остановить машину и скинуть незаписанное на ту же сетевую шару. Magic SysRq-S и поприбивать задачки и перезагрузка прошла безболезненно. Просто сегодня не поленился клаву и монитор к Эллочке подключить.
10.12.2012 18:55
OlegON
 
Немного стал напрягать Китай, очередное письмо-уведомление послужило поводом разобраться с баном подсетей. Проще простого.
создание сета
Код:
box scripts # /usr/sbin/ipset -! create badnet nethash
добавляем пачку китайцев по whois
Код:
box local.d # ipset -A badnet 27.153.128.0-27.153.255.255
сохраняем
Код:
box scripts # /usr/sbin/ipset save badnet >/scripts/badnet
Часовой пояс GMT +3, время: 02:18.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.