FreeBSD UFA.FREEBSDNEWS.RU | RSS | ДОБАВИТЬ В ИЗБРАННОЕ Ξ ВХОД
50.17.109.248
  • Релиз интерпретатора языка программирования Perl 5.18
    20.05.2013 @05.05
    После года разработки представлена новая стабильная ветка языка программирования - Perl 5.18. В рамках подготовки нового выпуска было изменено около 400 тыс. строк кода, изменения затронули 2100 файлов, в разработке приняли участие 113 разработчиков.
  • Вышел Mageia 3, развиваемый сообществом форк Mandriva Linux
    20.05.2013 @02.05
    После года разработки представлен третий релиз Linux-дистрибутива Mageia, в рамках которого независимым сообществом энтузиастов развивается форк проекта Mandriva. Для загрузки доступны 32- и 64-разрядные DVD-сборки (3.7 Гб), универсальная CD-сборка (699 Мб), минималистичный образ для установки по сети (40 Мб) и набор LiveCD- и LiveDVD-сборок на базе GNOME и KDE с различными наборами локализации. Выпуск посвящён Евгению Додонову, трагически погибшему в результате дорожно-транспортного происшествия в июле прошлого года.
  • Увидела свет операционная система NetBSD 6.1
    19.05.2013 @03.05
    После семи месяцев разработки анонсирован релиз операционной системы NetBSD 6.1, в котором реализована очередная порция новых возможностей. Одновременно доступен корректирующий выпуск 6.0.2, содержащий только исправление ошибок. Для загрузки подготовлены установочные образы, размером 330 Мб.
Главная > Избранное > PF межсетевой экран

Firewall - это система, управляющая прохождением пакетов данных через систему на основе заданных админом правил и информации, содержащейся в заголовках пакетов. Обычное использование firewall - запрещение прохождения нежелательных пакетов, например, отключение абонента, не оплатившего услуги связи, или закрытие части сервисов локальной сети от внешнего мира. В системе FreeBSD firewall - это гораздо больше, чем просто турникет в метро - это мощный инструмент управления сетью, позволяющий, например, подсчитывать трафик по любым разумным правилам, основывающимся на данных заголовков пакетов протоколов стека TCP/IP, обрабатывать пакеты внешними программами, прятать за одним компьютером целую сеть и т.п.

В отличие от разнообразных систем firewall для операционных систем семейства Windows, во FreeBSD firewall является частью самой операционной системы, поэтому работает значительно быстрее и надежнее своих не-UNIX конкурентов (исключая, конечно, системы, созданные специально для обработки сетевого трафика, такие как Cisco IOS)

В FreeBSD обычно используют один из трех пакетных фильтров IPFW, IP-FILTER (родной Firewall для FreeBSD который появился самым первым) или PF.

Какой выбрать? Ответом может служить пожалуй только практика использования и личный опыт.

Вот одно из высказываний на хабре sky_lord с которым лично я согласен:

"...natd сейчас практического смысла по сути не имеет — если стоит задача по быстрому дать интернет в офисе, то проще вообще не трогать ipfw, а сделать все сразу на pf — там две строчки написал и уже работает.

ipfilter — его вообще хоть кто-нибудь использует? Такой же привет из прошлого, как natd…

pf — как уже сказано выше — легок и прост в первом приближении. Но т.к. сделан не на libalias — не умеет проксировать активный FTP и еще кое-чего по мелочи — это создает излишний геморрой. Плюс на серьезных нагрузках сильно грузит проц — я его профилировал через hwpmc — там пробег по всем state'ам очень много времени занимает и это не лечится.

ng_nat — все-таки вещь не массовая, ИМХО. Хотя я его использовал из любопытства на паре серверов — работал и каши не просил. Но человеку без подготовки netgraph вообще лучше не трогать…

ipfw nat (kernel nat) — на мой взгляд для серьезных нагрузок оптимальный вариант. Вся мощь libalias'а, никаких заморочек с настройками… Единственная проблема, с которой пришлось в свое время столкнуться — для того, чтобы создать больше сотни (примерно, точно не помню) редиректов пришлось немного патчить ядро — размер буфера там одного увеличить… Но, возможно, в последних версиях Фри это уже поправили — не проверял.

Резюмируя, я бы остановился на двух типичных сценариях использования и, соответственно, оптимальных файрволлах/натах:

PF — для использования не в телекоммуникациях, а просто с корпоративе, где нет феерических объемов трафика (ipfw не использовать вообще — делать все на pf). Синтаксис очень простой и понятный, мониторинг — удобный, производительность — достаточная для указанных целей.

IPFW — для серьезного применения. Благо теперь в нем есть все-все-все и это нормально работает. Синтаксис, конечно, сложнее, но это издержки фич. Если pf можно сравнить с языком программирования высокого уровня, то ipfw — ассемблер. :-) Однако, в достаточно большом количестве случаев это все не особенно нужно и не требуется..."

Packet Filter (PF) - файрвол, разрабатываемый в рамках проекта OpenBSD

В июле 2003 программный межсетевой экран OS OpenBSD, известный как PF, был портирован в FreeBSD и стал доступен из коллекции портов FreeBSD. Первый раз миру открытых систем был дан продукт, который даёт возможность без изнурительной и кропотливой настройки, защитить своё виртуальное пространство от всяческих атак.

Первым релизом, где PF был интегрирован в основную систему, стала FreeBSD 5.3 в ноябре 2004 и так даже он был признан лучшим пакетным фильтром года.

PF это полноценный межсетевой экран с широким набором возможностей, в котором есть опциональная поддержка ALTQ (Alternate Queuing). ALTQ предоставляет управление пропускной способностью Quality of Service (QoS). PF Превосходит многие коммерческие продукты, и даже способен составить достойную конкуренцию таким всемирным продуктам как CHECK-POINT. Перечисление всех его достоинств может не вместится в толстую книгу.

Пример

Типичный конфиг (файл /etc/pf.conf) для пакетного фильтра рабочей станции вполне может выглядеть вот так:

#PF:2012-01-01
#-------------------
#1/Macros
# Сетевой интерфейс
ext_if="net0"
# Разрешенные типы icmp сообщений
allowed_icmp_types="{ echoreq, unreach }"
# Разрешённые сервисы
# 1. разрешить запросы к серверу NFS и RPCBIND только из локальной сети
# 2. обеспечить запуск с флагами mountd -p 883, rpc.lockd -p 884, rpc.statd -p 885 в rc.conf
# 3. выделенные порты для torrent и http/https/ssh-серверов доступны всем
allowed_lan_tcp_services="{ ssh, www, http, https, ntp, nfsd, rpcbind, 883, 884, 885, 6881:6991, 8080 }"
allowed_lan_udp_services="{ ntp, nfsd, rpcbind, 883, 884, 885, 6881:6991 }"
allowed_wan_tcp_services="{ ssh, www, 6881:6991, 8080, 8081 }"
allowed_wan_udp_services="{ ntp, 5501, 6881:6991 }"
#-------------------
#2/Tables
#-------------------
#3/Options
# ведение лога
#--set loginterface $ext_if
# тем, кто лезет туда, куда не нужно, - бить по рукам
set block-policy drop
# на интерфейсах петли пакеты не фильтровать
set skip on { lo }
# укороченный таймаут для состояния установленного tcp соединения
set timeout { frag 10, tcp.established 24000, icmp.first 10, icmp.error 5 }
#-------------------
#4/Scrub
# Нормализовать все входящие пакеты
scrub in all
#-scrub on $ext_if random-id max-mss 1452 reassemble tcp fragment reassemble
#-------------------
#5/Queueing
#-------------------
#6/Translations
# Перенаправить tcp трафик с порта 80 на порт 8080 для пользовательского Web-сервера
rdr proto tcp from any to any port http -> self port 8080
#-------------------
#7/Filter Rules
# Антиспуффинг
#-antispoof for $ext_if
# Блокировать всё, что не разрешено
block all
#-------------------
# Разрешить входящий ICMP (ping)
pass inet proto icmp all icmp-type $allowed_icmp_types
# Разрешить трафик IGMP для IP-TV
pass quick on $ext_if inet proto igmp from any to any allow-opts
# Разрешающий доступ откуда угодно (ограниченные службы)
pass in quick on $ext_if proto tcp to port $allowed_wan_tcp_services
pass in quick on $ext_if proto udp to port $allowed_wan_udp_services
# Разрешающий доступ из локальной сети (ограниченные службы)
pass in quick on $ext_if proto tcp from $ext_if:network to port $allowed_lan_tcp_services
pass in quick on $ext_if proto udp from $ext_if:network to port $allowed_lan_udp_services
# Разрешить исходящий трафик
pass out all

Перед тем как использовать стоит проверить синтаксис файла конфигурации:

pfctl -nf /etc/pf.conf

Добавим в rc.conf необходимые параметры и запустим:

echo 'pf_enable="YES"' >> /etc/rc.conf
echo 'pf_rules="/etc/pf.conf"' >> /etc/rc.conf
pfctl -ef /etc/pf.conf

Проверка действующих правил и прочей статистики:

pfctl -sa

Выключение:

pfctl -d

Во FreeBSD Начиная с 7.0 и в OpenBSD с 4.1 ко всем правилам по умолчанию используется опция keep-state. Поэтому, если не нужно, что бы файервол создавал ответное динамическое правило, добавляем к правилу no state.

Документация и полная версия статей по теме

Официальная документация

Введение в работу с пакетным фильтром OpenBSD

Сравнение 3 Пакетных фильтров FreeBSD 5.3 (IPFW, PF, IPFILTER)

Разбираем простой конфиг PF (лисяра)

Обзор и сравнение способов настройки NAT на FreeBSD (Хабрахабр)

Огненный блокпост: cравнительный обзор файрволов FreeBSD (журнал Хакер)

Метки: ,

Похожие ¬

Новости 157 | Статьи 11 | Tips & tricks 37 | Избранное 1 | F.A.Q. | О проекте | Контакты | Ссылки
^Наверх