Вы находитесь на странице: 1из 6

ОДЕСЬКА НАЦІОНАЛЬНА АКАДЕМІЯ ЗВ’ЯЗКУ ім. О.С.

ПОПОВА
Навчально-науковий інститут інфокомунікацій і програмної інженерії
Кафедра комп’ютерних наук

Лабораторна робота №6
курс: «Системне адміністрування»

Виконав:
студент групи КН-3.02
Корхов А.Ю.
Перевірили:
Нікітченко В.В., Яворська О.М.

Одеса 2020 р.
Тема: Построение защищенного окружения средствами пакетного фильтра PF.
Базовые возможности

Цель работы:
1.1 Изучение функций программных брандмауэров на примере программного
обеспечения сетевого экрана PF.
1.2 Выполнение настройки сетевого защитного экрана на основе пакетного
фильтра PF.
Контрольные вопросы

1. Пакетный фильтр является главным модулем системы, который


принимает решения, разрешить или запретить конкретному пакету пройти через
межсетевой экран. Пакетный фильтр отвечает за решение, относящееся к
действию, производимому с пакетом.
2. Пакетный фильтр способен сдерживать нежелательный сетевой трафик.
Кроме того, он может помочь контролировать сетевой трафик вашей
собственной внутренней сети. PF позволяет администратору создавать
собственные критерии фильтрации для контроля сетевого трафика, основываясь
на содержимом пакета или параметрах подключения, в том числе адресах
источника и назначения, интерфейсе, протоколе, портах и направлении.
3. FreeBSD со стандартным ядром GENERIC содержит модуль pf.ko,
загружая который, вы добавляете возможности PF в ядро. Возможна также
автоматическая загрузка PF в момент запуска операционной системы. Для

4. Файл /etc/pf.conf по смысловому содержанию можно разделить на семь


частей, каждая из которых отвечает за определенную группу функций.

1. Макросы. Это определяемые пользователем переменные, которые могут


содержать IP-адреса, имена сетевых интерфейсов и др.
2. Таблицы. Они применяются для хранения списков IP-адресов.
3. Опции. Это параметры, влияющие на работу pf.
4. Scrub. Подготовка пакета к нормализации и дефрагментации.
5. Очереди. Они обеспечивают управление полосой пропускания, и
установку приоритетов пакетов.
6. Трансляция. Здесь располагается контроль NAT и перенаправление
пакетов.
7. Правила фильтрации. Осуществляют выборочную фильтрацию пакетов на
интерфейсах.

5. Список позволяет задавать несколько похожих критериев в правиле, таких


как названия протоколов, номера портов, адреса, и др. Так, взамен написания по
одному правилу для каждого IP-адреса, который должен быть заблокирован,
может быть написано одно единственное правило, с указанием IP-адресов в
списке. В одном правиле может быть указано несколько списков, также списки
не ограничиваются использованием только в правилах фильтрации.
Макросы - это определяемые пользователем переменные, которые могут
содержать IP-адреса, номера портов, названия интерфейсов, и пр. Макросы
уменьшают запутанность правил PF, и могут сделать поддержку правил более
простой и интуитивно понятной. Имена макросов должны начинаться с буквы,
и могут содержать цифры, буквы и символы подчёркивания.
6. Таблицы используются для хранения групп IPv4 и/или IPv6-адресов.
Поиск по таблице осуществляется очень быстро, и потребляет меньше памяти и
процессорного времени, чем поиск по спискам. По этой причине таблица
является идеальным местом для хранения больших групп адресов, поскольку
поиск по таблице, содержащей 50000 адресов, занимает ненамного больше
времени, чем поиск по таблице содержащей 50 адресов.
В pf.conf, таблицы создаются с помощью директивы table.
7. Фильтрация пакетов - это выборочное пропускание или блокирование
пакетов с данными, во время их прохождения через сетевой интерфейс.
Критерии, которыми пользуется pf, когда проверяет пакеты, основываются на 3-
м уровне (IPv4 и IPv6), и 4-м уровне (TCP, UDP, ICMP, и ICMPv6) заголовков.
Наиболее часто применяемые критерии - это используемый протокол, исходный
адрес и адрес назначения, исходный порт и порт
назначения.
8. Проверка состояния соединений возможна благодаря способности PF
следить за состоянием, или развитием сетевого соединения. Храня информацию
о каждом соединении в таблице состояний, PF способен быстро определить,
принадлежит ли проходящий через брандмауэр пакет уже установленному
соединению. Если это так, то он пройдёт через брандмауэр без проверки
правилами. Правило state сохраняет информацию о состояние соединения.
9. Проверка TCP пакетов, основанная на флагах, активно используется для
фильтрации TCP пакетов, которые совершают попытку установить новое
соединение. Для проверки TCP флагов в процессе оценки правилами,
используется ключевое слово flags. Для разрешения любых комбинаций флагов
можно использовать ключевое слово any.
10. Злоумышленник может подделывать IP-адреса в пакетах, после чего они
либо передаются в оболочку своих реальных адресов, либо изображают другой
узел в сети. Такой процесс получил название «спуфинг». Посредством спуфинга
можно запустить сетевую атаку без разоблачения реального источника атаки,
или попытаться получить доступ к сетевым сервисам, которые ограничены
определенными IP-адресами. PF предлагает защиту против спуфинга через
ключевое слово antispoof:
antispoof [log] [quick] for interface [af]

Ход работы
5.1 В домашнем каталоге пользователя создайте файл ~/pf.conf, для
последующей записи в него директив пакетного фильтра PF.
touch /home/student/pf.conf

5.2 Определите необходимые макросы, которые сделают вашу работу с


PF более удобной и продуктивной.
ext_if = "em0"
int_if = "rl0"
lan_net = "168.172.0.0/24"
ip_add = “168.172.1.1”
allowed_icmp_types="{ echoreq, unreach }"

5.3 Отмените все виды проверок для интерфейса loopback.


set skip on lo0

5.4 Нормализуйте все входящие пакеты на всех интерфейсах.


scrub in all

5.5 Реализуйте стандартную для PF защиту от спуфинга на основном


интерфейсе.
antispoof for em0 inet

5.6 Правилом по умолчанию установите запрет прохождения всех


пакетов.
block in all
block out all
5.7 Разрешите работу процедур rpc.bind.
Порт rpc.bind: 111
pass out on $ext_if proto { tcp, udp } from any to any port 111

5.8 Установите динамическое правило, которое позволит вашему


сетевому узлу обмениваться пакетами по протоколу NFS с избранным сервером.
Адрес сервера должен быть предварительно указан преподавателем.
Порт протокола NFS: 2049
Произвольный адрес сервера: 168.172.1.8
pass out on $ext_if proto{ tcp, udp } from $ip_add to 168.172.1.8 port 2049

5.9 Разрешите работу для вашего сетевого узла в качестве клиента по


протоколу TFTP.
Порт протокола TFTP: 69
pass in on $ext_if proto{ tcp, udp } from any to $ip_add port 69

5.10 Разрешите прохождение пакетов «nfs client status info» и «nfs lockd».
5.11 Разрешите работу для вашего сетевого узла в качестве клиента по
протоколу DHCP.
Порт протокола DHCP: 68
pass in on $ext_if proto{ tcp, udp } from any to $ip_add port 68

5.12 Обеспечьте возможность работы со службой DNS.


Порт протокола DNS: 53
pass in on $ext_if proto { tcp, udp } from any to any port 53 keep state

5.13 Разрешите работу для вашего сетевого узла в качестве клиента по


протоколу HTTP.
Порт протокола HTTP: 80
pass in on $ext_if proto{ tcp, udp } from any to $ip_add port 80

5.14 Разрешите работу для вашего сетевого узла в качестве клиента по


протоколу FTP.
Порт протокола FTP: 21
pass in on $ext_if proto{ tcp, udp } from any to $ip_add port 21
5.15 Разрешите прохождение входящих ICPM-пакетов echoreq и unreach.
(с помощью макроса, определенного ранее:
allowed_icmp_types="{ echoreq, unreach }")
pass in on $ext_if inet proto icmp all icmp-type $allowed_icmp_types
pass in on $int_if inet proto icmp all icmp-type $allowed_icmp_types

5.16 Подключите созданный конфигурационный файл ~/pf.conf к


пакетному фильтру, перед этим проверив его на корректность. Убедитесь в
работоспособности ваших установок.
Проверить /etc/pf.conf на наличие ошибок, но сами наборы правил не
загружать: pfctl -vnf /etc/pf.conf

pf_enable="YES"
pf_rules="/etc/pf.conf"
pf_flags=""
pflog_enable="YES"
pflog_logfile="/var/log/pflog"
pflog_flags=""