Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия | |||
— | packet_filter_firewall_pf [2025/07/06 12:39] (текущий) – внешнее изменение 127.0.0.1 | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== Packet Filter Firewall (PF) межсетевой экран FreeBSD | ||
+ | {{htmlmetatags> | ||
+ | metatag-description=(Настройки и использование Packet Filter Firewall (PF). Синтаксис и очередность правил PF. Подборка руководств по настройке PF FreeBSD.) | ||
+ | }} | ||
+ | |||
+ | Packet Filter Firewall (PF) — это межсетевой экран, разрабатываемый в рамках проекта OpenBSD. Обладает высокой скоростью работы, | ||
+ | |||
+ | <text type=" | ||
+ | ====== Версии pf ====== | ||
+ | |||
+ | Различные версии FreeBSD содержат разные версии pf. Таблица соответствий версий pf: | ||
+ | * In RELENG_5 - pf is at OpenBSD 3.5 | ||
+ | * In RELENG_6 - pf is at OpenBSD 3.7 | ||
+ | * In RELENG_7 - pf is at OpenBSD 4.1 | ||
+ | * In HEAD - pf is at OpenBSD 4.1 - at this time. | ||
+ | **PF** состоит из двух частей: | ||
+ | |||
+ | **/ | ||
+ | |||
+ | {{ :: | ||
+ | ====== Синтаксис pf.conf. Очередность правил. ====== | ||
+ | # man pf.conf | ||
+ | Файл pf.conf состоит из семи частей: | ||
+ | |||
+ | * **[[PF Макросы]]**: | ||
+ | * **PF Таблицы**: | ||
+ | - **const** - содержимое таблицы не может быть изменено, | ||
+ | - **persist** - заставляет ядро держать таблицу в памяти, | ||
+ | * **[[PF Опции]]**: | ||
+ | * **[[PF Scrub (Packet Normalization)]]**: | ||
+ | * **PF Очереди** Bandwidth control (шейпер) [[ALTQ]].: Контроль над полосой пропускания и приоритезацией пакетов. | ||
+ | * **[[PF NAT Преобразование]]**: | ||
+ | |||
+ | **Трансляция осуществляется до фильтрации. Правила фильтра увидят уже оттранслированные пакеты.** | ||
+ | - NAT. | ||
+ | - IP forward, проброс пакетов. | ||
+ | **Преобразование ICMP пакетов происходит без модификации исходного порта**. | ||
+ | |||
+ | * **Правила фильтрации**: | ||
+ | - Борьба со спуфингом (antispoof). Спуфинг (spoofing) — в заголовке IP пакета подделывается адрес источника. | ||
+ | - Unicast Reverse Path Forwarding | ||
+ | - Пассивное детектирование операционной системы. Особенности работы стека приведены в файле pf.os. | ||
+ | - [[Балансировка нагрузки исходящего трафика между двумя и более внешними каналами Internet.]] | ||
+ | |||
+ | **За исключением макросов и таблиц, | ||
+ | |||
+ | Пустые строки игнорируются, | ||
+ | |||
+ | |||
+ | * **Синтаксис написания правил PF pf.conf(5)**: | ||
+ | <code bash> | ||
+ | {pass, | ||
+ | from SRC_IP to DSP_IP port = PORT_NUM {keep stat, flags S/SA ...} | ||
+ | pass -разрешить | ||
+ | block - запретить | ||
+ | далее если нужно на вход или выход in/out | ||
+ | далее параметр quick - если присутсвует, | ||
+ | правил далее не просматривается и пакет останавливается на данном правиле | ||
+ | proto - протокол | ||
+ | from - откуда, | ||
+ | Дополнительные опции: keep stat, флаги соединения и т.д. | ||
+ | </ | ||
+ | ====== Просмотр статистики лог - файлов PF ====== | ||
+ | * Просмотр лог - файлов Packet Filter Firewall (PF): | ||
+ | <code bash> | ||
+ | # tcpdump -nettti pflog0 | ||
+ | # tcpdump -netttr / | ||
+ | </ | ||
+ | * Вывести отсортированный список заблокированных IP | ||
+ | <file bash> | ||
+ | > tcpdump -netttr / | ||
+ | ... | ||
+ | 58 79.126.82.217 | ||
+ | 61 94.180.10.118 | ||
+ | 74 195.26.95.226 | ||
+ | 81 89.254.227.14 | ||
+ | 86 62.133.191.44 | ||
+ | 133 95.27.11.27 | ||
+ | 198 94.180.54.247 | ||
+ | </ | ||
+ | Протокол [[Pfsync]] - это протокол, | ||
+ | |||
+ | ===== Запуск PF в ОС FreeBSD ===== | ||
+ | * Оригинал: | ||
+ | Для активации PF во время загрузки в / | ||
+ | < | ||
+ | pf_enable=" | ||
+ | pf_rules="/ | ||
+ | pf_flags="" | ||
+ | pflog_enable=" | ||
+ | pflog_logfile="/ | ||
+ | pflog_flags="" | ||
+ | </ | ||
+ | Если за межсетевым экраном находится локальная сеть и необходимо передавать пакеты для компьютеров этой сети, или использовать NAT, включите также следующий параметр: | ||
+ | < | ||
+ | gateway_enable=" | ||
+ | </ | ||
+ | |||
+ | ===== Основные команды pfctl ===== | ||
+ | ^Полная команда ^ Кратко^ Пояснение | ||
+ | ^# pfctl -e ||Включить фильтр | | | ||
+ | ^# pfctl -d ||Выключить фильтр | | | ||
+ | ^# pfctl -F all -f / | ||
+ | @daily /sbin/pfctl -F all -f / | ||
+ | </ | ||
+ | ^# pfctl -f FILE_PATH ||Перечитать правила из файла FILE_PATH | Все предыдущие параметры и таблицы сбросятся.| | ||
+ | ^# pfctl -Rf FILE_PATH ||Перечитать правила только фильтра из файла FILE_PATH | | | ||
+ | ^# pfctl -Nf FILE_PATH ||Перечитать только NAT правила из файла FILE_PATH | | | ||
+ | ^# pfctl -t название таблицы -T add 204.92.77.111 ||Добавить в таблицу | Работа с таблицами.| | ||
+ | ^# pfctl -t название таблицы -T delete ||Удалить из таблицы | Работа с таблицами.| | ||
+ | ^# pfctl -t название таблицы -T show ||Вывести на экран содержимое таблицы (IP адреса)| Работа с таблицами.| | ||
+ | ^# pfctl -s info | # pfctl -si|Статистика из pfctl |< | ||
+ | ^# pfctl -s rules | # pfctl -sr |Просмотреть все правила | | | ||
+ | ^# pfctl -s rules -v| # pfctl -sr -v |Просмотреть все правила и счетчики обработки.|Вместо того, чтобы гадать, | ||
+ | ^# pfctl -s nat | # pfctl -sn |Просмотреть все правила для [[NAT]] | | | ||
+ | ^# pfctl -s state | # pfctl -ss |Просмотреть установившиеся сессии | | | ||
+ | ^# pfctl -s all | # pfctl -sa |Показать все что можно | | | ||
+ | ^# pfctl -sm ||Показать предельные значения |< | ||
+ | ^# pfctl -x level , например # pfctl -xm||Включить отладочный режим. |Отладочные сообщения по умолчанию попадают на консоль, | ||
+ | ^# pfctl -x none||Отключить отладочный режим.| | | ||
+ | |||
+ | Наилучший способ проверить, | ||
+ | < | ||
+ | $ pfctl -nvf / | ||
+ | $ pfctl -oonvf / | ||
+ | $ diff -u before after | ||
+ | </ | ||
+ | |||
+ | |||
+ | ====== Примеры ====== | ||
+ | * Оригинал файла на OpenBSD.ru [[http:// | ||
+ | * [[Пример настройки PF для двух каналов с симметричной маршрутизацией]] | ||
+ | * Оригинал файла на OpenBSD.ru [[http:// | ||
+ | * Оригинал файла на OpenBSD.ru [[http:// | ||
+ | * [[Балансировка нагрузки исходящего трафика между двумя и более внешними каналами Internet.]] | ||
+ | * Прозрачный прокси для Windows компьютеров:< | ||
+ | ## | ||
+ | #rdr on $int_if inet proto tcp from < | ||
+ | # port www -> $proxy_server port 3128 | ||
+ | #rdr on $int_if inet proto tcp from 192.168.2.1/ | ||
+ | # port www -> $proxy_server port 3128 | ||
+ | </ | ||
+ | ====== Примеры: | ||
+ | * Защита портов от входящего трафика< | ||
+ | ext_if=" | ||
+ | lo_if=" | ||
+ | lo_ip=" | ||
+ | |||
+ | table < | ||
+ | |||
+ | set require-order no | ||
+ | |||
+ | pass quick on $ext_if inet proto icmp all icmp-type 8 code 0 keep state | ||
+ | pass quick from < | ||
+ | pass on $lo_if all | ||
+ | pass out all keep state | ||
+ | |||
+ | pass in log on $ext_if proto tcp from any to ($ext_if) port 21 flags S/SA keep state (max-src-conn 200, max-src-conn-rate 10/60, overload < | ||
+ | pass in log on $ext_if proto tcp from any to ($ext_if) port 22 flags S/SA keep state (max-src-conn 100, max-src-conn-rate 6/30, overload < | ||
+ | pass in log on $ext_if proto tcp from any to ($ext_if) port 23 flags S/SA keep state (max-src-conn 30, max-src-conn-rate 3/30, overload < | ||
+ | pass in log on $ext_if proto tcp from any to ($ext_if) port 80 flags S/SA keep state (max-src-conn 500, max-src-conn-rate 200/60, overload < | ||
+ | pass in log on $ext_if proto tcp from any to ($ext_if) port 443 flags S/SA keep state (max-src-conn 1000, max-src-conn-rate 400/60, overload < | ||
+ | pass in log on $ext_if proto tcp from any to ($ext_if) port 1720 flags S/SA keep state (max-src-conn 1750, max-src-conn-rate 500/10, overload < | ||
+ | pass in log on $ext_if proto tcp from any to ($ext_if) port 3306 flags S/SA keep state (max-src-conn 750, max-src-conn-rate 500/60, overload < | ||
+ | pass in log on $ext_if proto tcp from any to ($ext_if) port 3307 flags S/SA keep state (max-src-conn 1000, max-src-conn-rate 500/30, overload < | ||
+ | # | ||
+ | block drop in log quick on $ext_if from < | ||
+ | </ | ||
+ | |||
+ | Пример: | ||
+ | < | ||
+ | table < | ||
+ | block in quick from < | ||
+ | |||
+ | pass in on $ext_if proto tcp to $web_server \ | ||
+ | port www flags S/SA keep state \ | ||
+ | (max-src-conn 100, max-src-conn-rate 15/5, overload < | ||
+ | </ | ||
+ | | ||
+ | Эти правила делают следующее: | ||
+ | |||
+ | * max-src-conn: | ||
+ | * max-src-conn-rate: | ||
+ | * Адреса хостов, | ||
+ | * Для каждого «проштрафившегося» адреса удаляются все записи из таблицы состояний появившиеся там благодаря данному правилу. Если задать flush global - будут уничтожены все записи в таблице состояний соответствующие соединениям с данного IP-адреса. При указании опции global записи в таблице состояний сбрасываются независимо от того, какое правило её создало. | ||
+ | |||
+ | |||
+ | |||
+ | ====== Ссылки ====== | ||
+ | Руководства: | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | Статьи: | ||
+ | * [[http:// | ||
+ | * [[http:// |
📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.
📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Nginx простые примеры конфигурации
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах
7 Самых Популярных Обзоров
- Хостинг для Python-скриптов и приложений
- ТОП 4 лучших антидетект браузеров (Бесплатные & Платные)
- Подборка купонов (промокоды) на хостинг, антидетект браузеры
- Обзор THE.Hosting (PQ Hosting): надежный хостинг с профессиональной поддержкой
- Хостинг в России
- Хостинг в Европе
- Обзор браузера Dolphin {anty} для мультиаккаунтинга