Как да филтрирате TCP пакети въз основа на флагове с помощта на филтър за пакети в OpenBSD

Е, не знаех как точно да задам този въпрос, но знам, че можете да използвате ключовата дума flags, за да посочите кои флагове искате да филтрирате.

Според документацията на пакетния филтър:

За да може PF да проверява TCP флаговете по време на оценка на правило, ключовата дума flags се използва със следния синтаксис:

флагове проверка/маска
флагове всякакви

Частта за маска казва на PF да проверява само посочените флагове, а частта за проверка указва кой флаг(а) трябва да бъде "включен" в заглавката, за да възникне съвпадение. Използването на ключовата дума any позволява всяка комбинация от флагове да бъдат зададени в заглавката.

предаване на fxp0 proto tcp от всеки към всеки порт ssh флагове S/SA
предаване на fxp0 proto tcp от всеки към всеки порт ssh

Тъй като флаговете S/SA са зададени по подразбиране, горните правила са еквивалентни. Всяко от тези правила пропуска TCP трафик с зададен флаг SYN, докато разглежда само флаговете SYN и ACK. Пакет с флаговете SYN и ECE ще отговаря на горните правила, докато пакет със SYN и ACK или само ACK не би отговарял.

И така, разбрах примера и защо пакетът с флаговете S и E може да премине (тъй като флагът E не се взема предвид поради маската SA) и защо пакетът само с флага Ack не може да премине защитната стена.

Това, което не разбрах, е защо пакетът с флаговете S и A не може да премине правилото S/SA, ако флагът S е "включен" в заглавката на пакета. Може би документацията е двусмислена? Съжалявам, ако това е глупав въпрос или неразбран английски.

Предполагам, че може да премине само ако ТРЯБВА ДА ИМА САМО флага S. В наборната аритметика ще бъде нещо подобно:

флаг(ове) трябва да бъде(т) включен(и) в заглавката -> флаг(а) се отнася до маскираното подмножество [pf doc]
само флага (s) трябва да бъде „включено“ в заглавката -> флагът(ите) е еднакъв с маскираното подмножество [това, което разбрах от дадения пример]

Благодаря предварително!


person Davi Sampaio    schedule 18.04.2013    source източник
comment
между другото това вероятно трябва да се мигрира към serverfault.   -  person ramrunner    schedule 20.04.2013


Отговори (1)


Това, което не разбрах, е защо пакетът с флаговете S и A не може да премине правилото S/SA, ако флагът S е включен в заглавката на пакета. Може би документацията е двусмислена?

От секцията с флагове в pf.conf(5)

знамена (A)/(B) | всякакви

Това правило се прилага само за TCP пакети, които имат флаговете (A), зададени извън набора (B).

Ако (B) := SA и (A) := S -› Това правило се прилага само за TCP пакети, които имат флаговете S, зададени извън набора SA.

Това означава, че няма набор A. Перифразирайки малко:

Това правило се прилага само за TCP пакети, които имат точно флаговете (A), зададени извън набора (B)

Или както страницата с ръководството изяснява по-късно:

знамена S/SA

Това е настройката по подразбиране за връзки със състояние.

От SYN и ACK може да се зададе точно SYN

person ramrunner    schedule 19.04.2013
comment
Това си помислих, след като разгледах примера @ramrunner. Не сте ли съгласни, че документацията е двусмислена? Той казва, че флагът(овете) в частта за проверка трябва да бъде „включен“ в заглавката. Така че случаят, който посочихте, когато имате S и A, също ще съвпада. Не се казва, че само флагът(овете) в частта за проверка трябва да съвпадат - person Davi Sampaio; 24.06.2013