Всем здравствуйте!
Суть моей проблемы такова: почему-то не срабатывают правила, которые я добавляю в iptables.
А теперь подробнее:
у меня в коридоре на антресолях стоит сервер из старого Pentium III, на котором крутится игровой сервер "World Of Padman" (игруля такая на движке Quake III). Роль роутера у меня исполняет примерно такой-же компьютер, на котором установлен IPFIRE. Работает, кстати, очень хорошо и надежно, уже много лет. На роутере у меня проброшен порт 27960 на сервер.
С недавних пор я обнаружил паразитный трафик на игровом сервере - игроков на нем нет, а светодиод на свитче и на сетевухе сервера активно и непрерывно мигает. Стал разбираться и обнаружил, что среверу извне, с периодически меняющихся адресов, почти постоянно посылается команда "getstatus". Кто знает, эта команда позволяет получить статистику игрового сервера, не подключаясь к нему. Но всякие сайты, которые мониторят игровые сервера (типа http://gametracker.com/) делают это интелигентно, не более одного-двух раз в минуту, а тут - десятки раз в секунду, да еще и с разных IP. Чтобы это пресечь, я написал простейший скрипт на перле, который отлавливает появление такого трафика. Этот скрипт должен также добавлять в таблицы iptables записи, блокирующие трафик с ip-адресов-источников этого трафика. Я никогда ранее не пробовал работать с iptables, поэтому решил сначала попробовать выполнять команды добавления правил вручную. Для ручного редактирования в IPFIRE предусмотрена специальная таблица CUSTOMINPUT в которую можно вносить правила блокировки трафика с тех или иных ip-адресов.
Я выполнял команды такого типа:
iptables -A CUSTOMINPUT -i red0 -s 93.115.210.160 -j DROP
В списке правил новое правило появлялось, но трафик с этого IP не прекращался. В веб-интерфейсе роутера можно посмотреть правила iptables, там оно есть, но число пакетов, попавших в него - нулевое.
Пробовал добавлять это правило прямо в таблицу INPUT - результат тот-же. :(
Если есть мастера в iptables - просветите меня пожалуйста, что я делаю неправильно?
указанные задачи решаются fail2ban который есть в репах уже давно.
и писать свое - ну я не вижу смысла.
Если я не ошибаюсь, fail2ban занимается анализом логов, а не трафика непосредственно. Поэтому в данном случае его применить не удастся.
очень ошибаешься. ибо как он иначе у меня банит любителей лазить на ссх?
Точнее, он конечно занимается анализом логов, и на основе их генерит правила запрета, согласно указаниям в конфиге.
Заодно там можно посмотреть как правильно сгенерить правила запрета входящего трафика.
Как-как? Читает и разбирает лог отказов ssh и банит, добавляя правила в iptables.
вопрос на другую тему - а кто такой red0? что это такое?
что-то так погуглить попытался, нет внятной информации.
red0 - внешний интерфейс, выставленный в роутере наружу (в роутерах еще именуется wan). Разработчики IPFIRE так назвали внешний кабельный интерфейс, WIFI они назвали blue0, локальную сеть - green0 и т. д. Но это не принципиально, как я понимаю...
ага понятно, извращенцы. :-)
просто там есть обычные eth, или они их всех переделали?
А зачем? Так понятнее, ибо интерфейсов может быть много, и так нагляднее, какую сеть обслуживает интерфейс.
Ага, сеть красных.. сеть голубых...
iptables-persistent не пробовали ставить? И через него настраивать?
Даже оранжевые есть! :)
Там довольно ограниченный список пакетов, которые можно поставить - свой список, свой формат.
нуу... тут уж я ничего не подскажу.
впрочем f2b по моему не требует компиляции, его можно ручками развернуть, если питон(ежели мне склероз не изменяет) стоит, или можно поставить.
Дык в общем-то у меня вопрос-то был про iptables, почему не работает, а не про f2b.
Но все равно спасибо за неравнодушие! :)
шашечки, или ехать? нужна реализация защиты или как оно по твоим мыслям должно работать? :-)
И потом, если я правильно понял, интерфейс можно и не указывать, тогда должен блокироваться весь трафик со всех интерфейсов на этот IP и с него на любой интерфейс.
Ну я так, из любопытства.
IPFire?
А вообще у тебя нет простого понимания работы iptables.
Да я и не спорю, что нет понимания. Если бы были знания - я бы не спрашивал.
А чем IPFIRE не катит?
Ну почему не катит?
Вполне себе рабочая штука. Забросил только из за того, что не умеет работать с 2-мя операторами (на тот момент когда пользовался).
А так запомни, что если твой пакет попал под какое то правило то он выходит из дальнейшей обработки, если только не указано обратное(-j RETURN).
Т.е. из этого следует, что в iptables очень важен порядковый номер правила в цепочке. Так же важна и таблица, а за ней цепочка, в которой обрабатывается трафик.
Т.е., к примеру, зарубив трафик в таблице mangle в цепочке PREROUTING или FORWARD в таблице filter ты его уже не получишь.
О. точно, склероз... :-(
Автору нужно не
iptables -A CUSTOMINPUT -i red0 -s 93.115.210.160 -j DROP
что является добавлением Append
а
iptables -I CUSTOMINPUT -i red0 -s 93.115.210.160 -j DROP
что являться вставкой, INSERT в начало, если, конечно, мне не изменяет мой склероз.
Самому рыться сейчас лень, но автор поста, я думаю, сам прочтет мануал по iptables без моей помощи. :-)
Большое спасибо!
Честно говоря, я уже нашел это-же решение вчера вечером, просто я не успел его проверить и отписаться об этом здесь.
Еще раз, всем большое спасибо за участие! :)
Однако, все на тех-же позициях. :( Так и не заработало.
Еще не проверял, но просветление, похоже, наступило на 2-й секунде созерцания - блокировать надо в цепочке FORWARD, а иначе получается, что форвардинг пакетов на другой сетевой интерфейс происходит, а с самого роутера доступ на блокируемый IP пропадает. :)
Огромное спасибо за классную схему, Flameflower! :)
Отправить комментарий