Удалить IP-фрагменты определенного протокола

1092
Lorenzo Pistone

Когда conntrackактивен, стек iptables никогда не видит фрагментированный IP-пакет, только повторно собранный ( исходный ), поэтому -fтест никогда не совпадает.

Если я хочу заблокировать любой фрагмент, я мог бы установить ipfrag_high_threshили ipfrag_time0 ( источник ), но это отбросило бы любой вид фрагмента. Что я могу сделать, если я хочу отбросить фрагменты определенного протокола IP?

2

2 ответа на вопрос

2
Matyas Koszik

I see two ways to achieve your goal, depending on your needs.

You can let reassembly run its course, then, after successful reassembly, drop the whole packet. This works only if the reassembled packet is over the interface MTU (otherwise you won't be able to distinguish between reassembled and “normal” packets). If the packets can’t be successfully reassembled they’ll get dropped anyway, but with a larger CPU overhead.

The other way is to modify the source, and make nf_defrag_ipv4 ignore packets from the protocol(s) you want to handle directly. A quick glance suggests this should work, since there's already an option (IP_NODEFRAG) available for RAW sockets that lets you bypass the reassembly code.

To be honest, I too would love to have more control over this part of the filtering, so I’ll try to get a patch in to remedy the situation.

Я думаю, что вы должны смотреть на входную фильтрацию `tc`. Вы можете сделать что-то еще до того, как пакеты попадут в ловушки сетевого фильтра. Lorenzo Pistone 9 лет назад 1
Это интересный подход, но я не могу портировать свой набор правил на tc, чтобы избежать обязательной дефрагментации - в конце концов, фильтрация с учетом состояния является основной частью моей настройки. Я также использую другие функции сетевого фильтра для дальнейшей классификации пакетов, недоступных в tc. Кстати, вы решили свою первоначальную проблему? Ты использовал tc для этого? Matyas Koszik 9 лет назад 1
На самом деле я использовал `tc`. Также есть минимальные улучшения производительности при ранней фильтрации в `tc`, см. Http://meat.pisto.horse/2014/10/iptables-microbenchmark-tc-performance.html Lorenzo Pistone 9 лет назад 0
Если вы просто хотите отбросить пакеты, основанные на простой классификации, на чрезвычайно высоких скоростях, вам следует взглянуть на `netmap` - он может с легкостью обрабатывать 10-битный интерфейс, заполненный пакетами минимального размера, на одном ядре современного ПК. Matyas Koszik 9 лет назад 1
1
Steven K

Интересно, можно ли использовать «сырую» таблицу netfilter, которая предшествует большинству хуков отслеживания соединений. У него есть цель «NOTRACK», которую вы можете использовать для освобождения определенных пакетов от conntrack, или, возможно, само -fусловие будет работать --table raw.

Пока загружен `conntrack`,` -f` всегда ложен, потому что пакет всегда восстанавливается. Lorenzo Pistone 10 лет назад 0