BASH Programming - Введение

         

Обработка фрагментов


Иногда пакет слишком большой, чтобы пересылаться одним куском. Когда это случается, пакет делится на фрагменты, и посылается как несколько пакетов. Другой конец собирает несколько фрагментов в один целый пакет.

Проблема с фрагментами состоит в том, что некоторые из спецификаций, перечисленных выше (в частности порта источника, порта назначения, тип ICMP, код ICMP, или SYN флажок TCP) требуют, чтобы ядро анализировало начало пакета, которое содержится только в первом фрагменте.

Если ваша машина - единственое соединение со внешней сетью, то вы можете сообщить Linux ядру, что надо собирать все фрагменты, которые проходят через него, компилируя ядро с установкой IP: always defragment "Y". Это аккуратное решение проблемы.

В любом случае, важно понять, как фрагменты обрабатываются правилами фильтрации. Любое правило фильтрации, которое запрашивает информацию, не будет срабатывать, если не будет соответствия. Это означает, что первый фрагмент обработается подобно любому другому пакету. Второй и далее фрагментя не будут обрабатываться. Таким образом правило "-p TCP -s 192.168.1.1 www' (указание исходного порта "www") никогда не будет соответствовать фрагменту (не первому фрагменту). Обратное правило "-p TCP -s 192.168.1.1 ! www' тоже не сработает.

Однако, вы можете определить правило специально для второго и далее фрагментов, используя флажок "-f". Ясно-понятно, что его нельзя применять при указании TCP или UDP порта, типа ICMP, кода ICMP или TCP SYN, так как эта информация во вторых и последующих фрагментах отсутствует.

Можно также указать, что правило не применяется ко второму и последующим фрагментам, указав '!' перед '-f'.

Обычно это считается безопасным для получения второго и дальнейших фрагментов, так как фильтр отбросит при необходимости первый фрагмент, и таким образом все остальные фрагменты, однако, сейчас стало известно об ошибках, которые могут повесить машину простой посылкой фрагментов. Учтите это.

Обратите внимание: пакеты некорректного формата (TCP, UDP и ICMP пакеты, слишком короткие для обработки firewalling кодом, настолько короткие, что из них нельзя получить информацию о портах или коде и типе ICMP) тоже обрабатываются как фрагменты. Только TCP фрагменты, начинающиеся с позиции 8 явно отбрасываются firewall кодом (в syslog отправляется соответствующее сообщение).

Например, следующее правило отбросит любые фрагменты, приходящие на 192.168.1.1:

# ipchains -A output -f -d 192.168.1.1 -j DENY #



Содержание раздела