LINUX.ORG.RU

iptables reset tcp connect


0

0

Есть в iptables ресет для tcp-соединения

iptables .... -p tcp ... -j REJECT --reject-with tcp-reset

Как я понимаю, его можно применять только для новых соединений ( т.е. на --syn ). Если такое использовать для установленного соединения, то приемной стороне можно легко устроить DoS ? (ресет отправляется передающей стороне).

Что мешает посылать ресеты в обе стороны ( ведь номера последовательностей известны )?

К чему этот вопрос: для iptables есть layer7-extension (кернельный, замечательно работающий уже несколько лет и поддерживаемый для всех версий ядер).

Дописать туда паттерн (regexp) для блокировки некой последовательности символов не сложно. Дальше, если последовательность нашлась, то соединение можно разорвать. В сочетании с ipset получаем неплохую систему блокировки нежелательных запросов. Но получается, что ресет толком не сделать.

★★★★★

то приемной стороне можно легко устроить DoS ?

Устраивать DoS с помощью iptables?

Что мешает посылать ресеты в обе стороны ( ведь номера последовательностей известны )?

Вроде как не известны, точнее ядро их не держит в таблице conntrack, с которой работает iptables. Но можно написать патч и свой модуль iptables.

Дальше, если последовательность нашлась, то соединение можно разорвать. В сочетании с ipset получаем неплохую систему блокировки нежелательных запросов. Но получается, что ресет толком не сделать.

Основная проблема DoS это просто возможность установления соединения, каждый tcp-сокет, по которому сервер готов принимать запрос, берёт какую-то часть далеко не бесконечных ресурсов системы. Уж лучше просто DROP всё с плохих ip-адресов, чтобы tcp-соединения с этих адресо вобще не устанавливались.

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

Что мешает посылать ресеты в обе стороны ( ведь номера последовательностей известны )?

Вроде как не известны, точнее ядро их не держит в таблице conntrack, с которой работает iptables. Но можно написать патч и свой модуль iptables.

К нам пришел tcp-шный пакет относящийся к установленному соединению, в нем есть оба номера последовательности!

Основная проблема DoS это просто возможность установления соединения, каждый tcp-сокет, по которому сервер готов принимать запрос, берёт какую-то часть далеко не бесконечных ресурсов системы. Уж лучше просто DROP всё с плохих ip-адресов, чтобы tcp-соединения с этих адресо вобще не устанавливались.

тех кому нельзя подключаться дропают на этапе SYN, а я говорю про ситуацию, когда нужно разорвать соединение в процессе обмена данными.

Сейчас ситуация такова:

  • клинент подключился к серверу (установлено tcp соединение)
  • клиент посылает запрос. По содержимому запроса мы понимаем, что этот запрос нельзя передавать на сервер и делаем REJECT с tcp-reset.
  • Клиент получает его и благополучно завершает соединение, а сервер так и сидит с открытым коннектом, пока на кончится таймаут + таймауты tcp на закрытие соединения. Т.е. защищаемому серверу организовывается DoS.
vel ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.