Рейтинг:1

iptables hashlimit rate не работает должным образом

флаг in

Я написал следующее правило брандмауэра:

iptables -A INPUT -m hashlimit --hashlimit 1/час --hashlimit-burst 3 --hashlimit-mode srcip,dstport --hashlimit-name ssh -j ПРИНЯТЬ

Я ожидал, что вспышка будет перезаряжена на 1 через час, но на самом деле она перезаряжается на единицу даже раньше, чем за одну минуту. Я отправляю сообщения с одного и того же исходного IP-адреса и одного и того же порта назначения, поэтому я ожидал, что он будет принимать 3 соединения, а затем 1 в час. Но принимает больше (по одному каждые 20-30 секунд). Если я использую --limit 1/час Я могу наблюдать ожидаемое поведение, но мне нужно использовать хэшлимит, потому что мне нужно фильтровать по srcip и dstport. Что я делаю не так? Спасибо!

флаг it
Попробуйте добавить `-p tcp --syn --dport 22` к правилу - на данный момент вы сопоставляете все, что вам, вероятно, нужно только сопоставлять пакеты TCP SYN, предназначенные для порта 22. Если это ваше намерение, отбросьте `dstport` в `hashlimit-mode`, потому что он лишний.
Рейтинг:0
флаг kz

Я думаю, что вы работаете с истекающими записями. Исключение из справочной страницы:

  --hashlimit-всплеск суммы
         Максимальное начальное количество пакетов для сопоставления: это число перезаряжается
         по одному каждый раз, когда указанный выше предел не достигнут, до этого числа;
         значение по умолчанию равно 5. Когда запрашивается сопоставление скорости на основе байтов, это
         Опция указывает количество байтов, которые могут превышать заданную скорость.
         Эту опцию следует использовать с осторожностью — если срок действия записи истечет,
         значение также сбрасывается.

И количество времени, в течение которого сохраняется любая хэш-запись, указывается опцией --hashlimit-htable-expire. Я не знаю, каково значение по умолчанию для этой записи, но я думаю, что оно намного короче одного часа, что объясняет, почему вы можете подключаться быстрее, чем ожидалось.

Вам следует рассмотреть возможность дополнительной настройки этих значений, допустим, например, по одному в минуту - в этом случае ваш сервер должен помнить только IP-адреса за последнюю минуту, а не IP-адреса за последний час.

Harry avatar
флаг in
Спасибо вам большое за ваш ответ. Я просто попытался указать `--hashlimit-htable-expire 999999999`, чтобы время истечения срока действия составляло 16 минут, но он по-прежнему принимает соединение каждые 20-30 секунд.
Martin avatar
флаг kz
Я протестировал это с ```--hashlimit-abore 1/minute --hashlimit-burst 3 --hashlimit-htable-expire 300000```, и это сработало, как и ожидалось. Так что либо ваше ядро ​​глючит, либо я понятия не имею, почему ваш пример не работает... Пожалуйста, попробуйте с 1/минутой вместо 1/час и посмотрите, останется ли оно таким же.
Harry avatar
флаг in
Я попытался использовать то, что вы предложили, но он все еще не работает должным образом (все еще принимает 1 соединение каждые ~ 30 секунд). В любом случае мне нужно было бы ограничить соединения намного больше, чем 1 минуту, поэтому мне нужно очень большое число в качестве значения срока действия, поскольку оно находится в миллисекундах.
Martin avatar
флаг kz
есть ли причина, по которой вы предпочитаете hashlimit limit? если последний работает должным образом, я бы рекомендовал использовать его вместо этого. Довольно сложно понять, почему он не работает, я думаю, что мы уже исключили ошибки использования - то, как вы его используете, должно работать, а раз это не работает - используйте вместо этого что-то другое.
Рейтинг:0
флаг cn

Одна проблема --hashlimit 1/час должно быть --hashlimit-до 1/час при использовании -j ПРИНЯТЬ

видеть man iptables-расширения

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.