LINUX.ORG.RU
ФорумAdmin

Мистика iptables log


0

1

Здравствуйте!

Не знаю что делать. Очень странно ведет себя лог iptables (он пишется сюда /var/log/kernw.log). Последовательность моих действий:

root@waka ~ # cat /var/log/kernw.log | grep "TEST 56556" | wc -l
0
root@waka ~ # iptables -F
root@waka ~ # iptables -A INPUT -p tcp --dport 555 -m conntrack --ctstate RELATED,ESTABLISHED -m hashlimit --hashlimit-above 10000/sec --hashlimit-mode srcip --hashlimit-name aadd -j LOG --log-prefix='[TEST 56556] '
root@waka ~ # timeout 10 tcpdump -v -n -p -w /var/script/test/123 dst host $ИП_МОЕГО_СЕРВЕРА and dst port 555
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
5714 packets captured
5715 packets received by filter
0 packets dropped by kernel
root@waka ~ # tcpdump -nr /var/script/test/123 | awk '{print $3}' | grep -oE '[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}' | sort | uniq -c | sort -rn | head -5
reading from file /var/script/test/123, link-type EN10MB (Ethernet)
    228 $ТУТ_ИП
    212 $ТУТ_ИП
    185 $ТУТ_ИП
    169 $ТУТ_ИП
    164 $ТУТ_ИП
root@waka ~ # cat /var/log/kernw.log | grep "TEST 56556" | wc -l
94
root@waka ~ #

Если за 10 секунд было получено максимально 228 пакетов с одного ип, тогда как могут в лог попадать записи, если они не удовлетворяют критериям правила (10000/сек)? Помогите разобраться, пожалуйста.

Скорее всего дело в алогоритме hashlimit. Я очень сильно сомневаюсь, что он ведёт очереди, записивая в память время каждого пакета.

И параметры из man --hashlimit-burst явно на это намекает

Скорее всего, этот модуль считает синтетическую величину, как nginx

Посмотри здесь в заголовке темы. я приводил выдержки из кода nginx. Под один ip выделяется всего 2 числа, а не целая очередь

router ★★★★★ ()
Ответ на: комментарий от router

В общем читай код модуля hashlimit, но 99% что я прав.

1000 пакетов в секунду пройдёт только в том идеальном случае, если они будут приходить с интервалом 1/1000 секунды между ними. А поскольку такого не бывает, добавляют burst, который позволяет пропускать всплески.

router ★★★★★ ()
Последнее исправление: router (всего исправлений: 2)

А вообще стоит посмотреть в сторону не iptables, а tc

router ★★★★★ ()

А если не хочется над этим думать и изучать алгоритмы hashlimit и шейпера tc, просто добавь burst равный максимальному числу пакетов, которые могут пройти за указанный тобой интервал ( 1 с ) с указанной скоростью ( 10000 пакетов / с )

Т.е. --hashlimit-above 10000/sec --hashlimit-burst 10000

гарантированно не будет резать скорость ниже, чем ты разрешил.

Но учти, что если здобный хакер будет постоянно слать целый 10001 пакет / сек, то реально этот микробунт начнёт логироваться через 10000 с %) . Более того. Другой мегазлобный хакер сможет целую секунду безнаказанно слать аж 20000 пакетов / сек :)

router ★★★★★ ()
Последнее исправление: router (всего исправлений: 2)
Ответ на: комментарий от router

Ух ты! Спасибо за разъяснение. С iptables начал знакомиться позавчера, столько всего перечитал и был уверен, что hashlimit то что мне нужно ;(

Если моим приложением пользуются 100 человек одновременно, которые посылают не больше 50 пакетов в секунду, тогда каким способом лучше всего ограничить хакера, посылающего > 100 пакетов в секунду?

Я пробовал tcpdump+log+iptables+ipset. Запускаю tcpdump, секунду логирую пакеты, затем парсю лог и выявляю IP тех, кто прислал > 100 пакетов, потом кидаю злюк в ipset и ограничиваю с iptables. Сейчас толку от этого метода никакого, так как хакер успевает послать кучу пакетов бурстом за секунду записи лога, и моё приложение падает. Поэтому мне очень нужно правильно ограничить бурст до 100/сек от каждого IP.

И да, цифра 10000 в правиле - это для наглядного примера.

Xenonaut ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.