Для создания интерфейса используется функция PfCreatelnterface, которая описывается следующим образом:

function PfCreateInterface( dwName: DWORD:
inAction: PFFORWARD_ACTION;
OutAction: PFFORWARD_ACTION;
DUseLog: BOOL;
bMustBeUmque: BOOL.
var pplnterface: INTERFACE_HANDLE): DWORD ; stdcall: external IPHLPAPI name '_PfCreateInterface@24':

Рассмотрим параметры функции PfCreatelnterface:

• dwName - это имя интерфейса. Если указать 0, то будет создан новый уникальный интерфейс;
• i nAction - действие по умолчанию для входящего пакета. Запись PFACTI0NF0R-WARD означает, что пакет, не имеющий правил, будет принят, a PF_ACTION_DR0P - пакет будет удален. Для серверов сетевой экран должен быть настроен так, чтобы все, что не разрешено, было запрещено и по умолчанию удалялось;
• outAction - действия по умолчанию для выходящего пакета. Здесь значения те же, что и для параметра inAction, только доступ к исходящим пакетам можно по умолчанию разрешить;
• bUseLog - если параметр имеет значение true, то к интерфейсу будет привязан журнал, по которому легко определяется активность;

• bMustBeUni que - если параметр имеет значение true, то интерфейс уникальный и его правила не могут разделяться с другими; \

• pplnterface - указатель на созданный интерфейс. Через этот параметр мы получим результат выполнения функции. v

Если функция отработала нормально, то результатом будет N0ERR0R.

После создания интерфейса можно добавлять правила, устанавливающие запрет или разрешение на использование определенных портов или на подключение с определенных адресов. Функция Р fAddFil ter sToInter face служит для этих целей и описывается следующим образом:

function PfAddFiltersToInterfaceC
ih: INTERFACE_HANDLE;
с InFilters: DWORD ;
pfiltln: PPF_FILTER_DESCRIPTOR:
cOutFiIters: DWORD ;
pfiltOut: PPF_FILTER_DESCRIPTOR;
pfHandle: PFILTER_HANDLE
): DWORD ; stdcall;
external IPHLPAPI name '_PfAddFiltersToInterface@24':

Функция PfAddFiltersToInterface имеет такие параметры:

• ih - указатель на интерфейс фильтров, созданный с помощью функции PfCreatelnterface;
• clnFilters - количество входных правил, описанных в параметре pfiltln;
• pfiltln - указатель на структуру, содержащую входные правила;
• cOutFi Iters - количество выходных правил, описанных в параметре pfiltOut;
• pfi 1 tOut - указатель на структуру, содержащую выходные правила;

• pfHandle - буфер, через который можно получить массив указателей фильтров. Если это не нужно, то можно установить nil.

При создании фильтра с помощью функции PfAddFiltersToInterface правила задаются в структуре PFFILTERDESCRIPTOR. Эта структура выглядит следующим образом:

_PF_FILTER_DESCRIPTOR = packed record dwFilterFlags: DWORD: dwRule: DWORD: pfatType: PFADDRESSTYPE: SrcAddr PByteArray;
SrcMask: PByteArray;
DstAddr: PByteArray. DstMask: PByteArray: dwPrOtOCOl: DWORD;
fLateBound- DWORD: wSrcPort: Word;
wDstPort: Word;
wSrcPortHighRange- Word: wDstPortHighRange: Word:
end;

Рассмотрим основные параметры структуры PFFILTERDESCRIPTOR:

• dwFi 1 terFl ags - флаги. Сейчас поддерживается только FD_FLAGS_NOSYN;
• dwRul e - определяет роль для фильтра;
• pfatType - тип адреса для фильтра. Здесь можно указывать PF_I PV4 или PFIPV6;
• SrcAddr, SrcMask и wSrcPort - IP-адрес, маска и порт источника пакета;
• DstAddr, DstMask и wDstPort - IP-адрес, маска и порт получателя пакета;
• dwProtocol - протокол. Здесь можно указать одно из следующих значений: О FILTERJ>R0T0_ANY - любой протокол;

О FILTER_PROTO_ICMP - протокол ICMP; О FILTER_PROTO_TCP - протокол TCP; О FILTER_PROTO_UDP - протокол UDP.

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

Созданный интерфейс и правила связываются с сетевым интерфейсом. Для защиты сетевого соединения используется функция PfBindlnterfaceToIPAddress:

function PfBindInterfaceToIPAddress(
plnterface: INTERFACE_HANDLE;
pfatLinkType: PFADDRESSTYPE:
IPAddress: PByteArray): DWORD: stdcall;
external IPHLPAPI name 1 PfBmdInterfaceToIPAddress@12';

Рассмотрим параметры функции PfBindlnterfaceToIPAddress:

• plnterface - указатель на созданный нами интерфейс;
• pfatLinkType - указывает на тип адреса. В настоящее время используется 4-байтная IP-адресация, поэтому указывается PFIPV4. Но библиотека уже готова к использованию шестой версии адресации, и в ближайшем будущем можно будет указывать PFIPV6;

• IPAddress - массив байтов, определяющий IP-адрес интерфейса, который надо защитить.

Чтобы отключить защиту, нужно сначала отсоединить интерфейс с фильтрами, а потом удалить его. Для отсоединения используется функция PfUnBindlnterface. У нее только один параметр - указатель на созданный нами ранее интерфейс.

Для удаления применяется функция PfDeletelnterface. Здесь тоже один параметр в виде указателя на интерфейс, который надо найти и "уничтожить".

5.1. Сетевой экран || Оглавление || 5.1.2. Пример использования фильтрации


Delphi в шутку и всерьез: что умеют хакеры



Новости за месяц

  • Январь
    2022
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс