ipfw или pf

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
hizel
дядя поня
Сообщения: 9031
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: ipfw или pf

Непрочитанное сообщение hizel » 2009-04-28 12:41:59

пока в треде сплошная газификация луж, предлагаю соревнование, написание типового фаервола для шлюза с nat, rate limit, access restriction и без squid
надо подготовить тех задание, набор юниттестов, а потом протестить еще производительность на одной машине ^_^
срок неделя, две
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

avicena
проходил мимо

Re: ipfw или pf

Непрочитанное сообщение avicena » 2009-04-28 14:34:40

lissyara писал(а):
iZEN писал(а):PF структурирован. Человеческий синтаксис правил. Абстракции, макросы, чёткая структура файла правил. Работает целиком в ядре (встроенный NAT).

ipfw == "ассемблер", похож на убогий IPTABLES. Множественные вызовы из ядра в юзерспейс и обратно (к natd).

Сравнение 3 Пакетных фильтров FreeBSD 5.3 (IPFW, PF, IPFILTER):
http://www.opennet.ru/docs/RUS/ipfw_pf_ipfilter/
улыбнуло.
кернел нат уже давно шагает по планете. а вы всё никак...
и синтаксис человеческий как раз в ipfw а не ещё где-то.
=====
пишите собственные мысли, а не чужие.
Как по мне так как раз ipfw более удобен и понятен. Вы сравните только его с iptables, так там черт ногу вломит. PF ниразу не настраивал но судя по откликам тоже неплохой фаер. А читая хендбук увидите что использовать надо фаер правильно настроеный.
ipfw+100

mnz_home
проходил мимо

Re: ipfw или pf

Непрочитанное сообщение mnz_home » 2009-04-28 21:18:52

pf, altq. ipfw удобнее имхо, но шейпер хуже...

Аватара пользователя
xelak
сержант
Сообщения: 173
Зарегистрирован: 2007-12-09 16:20:00
Откуда: Украина,Харьков
Контактная информация:

Re: ipfw или pf

Непрочитанное сообщение xelak » 2009-04-28 22:13:10

mnz_home писал(а):pf, altq. ipfw удобнее имхо, но шейпер хуже...
а почему бы не завернуть altq через ipfw?

mnz_work
проходил мимо

Re: ipfw или pf

Непрочитанное сообщение mnz_work » 2009-04-29 7:00:33

xelak писал(а): а почему бы не завернуть altq через ipfw?
У меня так и было раньше. Но двойное решение не очень нравится)

Ocr
проходил мимо

Re: ipfw или pf

Непрочитанное сообщение Ocr » 2009-04-29 11:10:12

Ушел с ipfw на pf и не жалею.
Реально удобнее и синтаксис правил более логичен.
По производительности обходит ipfw немного, но главная особенность это возможность писать правила красиво и лаконично.

mnz_home
проходил мимо

Re: ipfw или pf

Непрочитанное сообщение mnz_home » 2009-05-02 10:12:06

Кстати красноглазие с NAT_BUF_LEN в ipfw в релизе 7.2 так и не поправили... :fool:
Суть проблемы:
http://www.bsdportal.ru/viewtopic.php?p=109755

Аватара пользователя
abanamat
сержант
Сообщения: 255
Зарегистрирован: 2007-03-15 11:24:26
Откуда: Питер
Контактная информация:

Re: ipfw или pf

Непрочитанное сообщение abanamat » 2009-05-02 15:30:41

mnz_home писал(а):Кстати красноглазие с NAT_BUF_LEN в ipfw в релизе 7.2 так и не поправили... :fool:
Суть проблемы:
http://www.bsdportal.ru/viewtopic.php?p=109755
а зачем если ng_nat есть?

_Andy
проходил мимо

Re: ipfw или pf

Непрочитанное сообщение _Andy » 2009-05-02 16:15:13

iZEN писал(а):ipfw == "ассемблер", похож на убогий IPTABLES. Множественные вызовы из ядра в юзерспейс и обратно (к natd).
Ты говоришь "ассемблер" так, будто это что-то плохое. iptables очень хороший файр. Кстати, таки да, между ipfw или pf
надо выбрать iptables, соответственно сменив окружение :)

Аватара пользователя
iZEN
ст. лейтенант
Сообщения: 1089
Зарегистрирован: 2007-09-15 16:45:26
Контактная информация:

Re: ipfw или pf

Непрочитанное сообщение iZEN » 2009-05-02 18:33:25

_Andy писал(а):
iZEN писал(а):ipfw == "ассемблер", похож на убогий IPTABLES. Множественные вызовы из ядра в юзерспейс и обратно (к natd).
Ты говоришь "ассемблер" так, будто это что-то плохое.
Это не плохое, а очень трудоёмкое.
Так, например, в PF правило с макросом выливается в несколько десятков/если не сотню/ простых правил ipfw или iptables. В то время как в ipfw и iptables нужно забивать ВРУЧНУЮ_ИХ_ВСЕ, в pf достаточно правильно написать одно правило с макросом — просто потом оно само "развернётся" фильтром в такую же кучу более подробных правил.
Этим же отличаются языки высокого уровня от ассемблеров.
GNU/Linux — это не Unix и даже никогда им не был, и, что самое смешное, никогда им не станет — GNU's Not Unix

Аватара пользователя
abanamat
сержант
Сообщения: 255
Зарегистрирован: 2007-03-15 11:24:26
Откуда: Питер
Контактная информация:

Re: ipfw или pf

Непрочитанное сообщение abanamat » 2009-05-02 21:27:41

iZEN писал(а):правило с макросом выливается в несколько десятков/если не сотню/ простых правил ipfw или iptables. В то время как в ipfw и iptables нужно забивать ВРУЧНУЮ_ИХ_ВСЕ, в pf достаточно правильно написать одно правило с макросом — просто потом оно само "развернётся" фильтром в такую же кучу более подробных правил.
не вижу разницы написать "макросы" для интерпретатора который ipfw вызывает и написать макросы для pf. Неубедительно.

Аватара пользователя
iZEN
ст. лейтенант
Сообщения: 1089
Зарегистрирован: 2007-09-15 16:45:26
Контактная информация:

Re: ipfw или pf

Непрочитанное сообщение iZEN » 2009-05-02 22:41:43

abanamat писал(а):не вижу разницы написать "макросы" для интерпретатора который ipfw вызывает и написать макросы для pf. Неубедительно.
А вы попробуйте. ;-)
GNU/Linux — это не Unix и даже никогда им не был, и, что самое смешное, никогда им не станет — GNU's Not Unix

Аватара пользователя
abanamat
сержант
Сообщения: 255
Зарегистрирован: 2007-03-15 11:24:26
Откуда: Питер
Контактная информация:

Re: ipfw или pf

Непрочитанное сообщение abanamat » 2009-05-03 1:54:28

iZEN писал(а):
abanamat писал(а):не вижу разницы написать "макросы" для интерпретатора который ipfw вызывает и написать макросы для pf. Неубедительно.
А вы попробуйте. ;-)
а я давно пробую.

Аватара пользователя
LMik
капитан
Сообщения: 1852
Зарегистрирован: 2007-07-17 9:14:39
Откуда: МО
Контактная информация:

Re: ipfw или pf

Непрочитанное сообщение LMik » 2009-05-03 2:04:30

netgraph и bpf рулит, вот там до ассемблера оч близко, летает что не передать словами.
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!

Аватара пользователя
Dorlas
сержант
Сообщения: 257
Зарегистрирован: 2008-07-18 22:17:49

Re: ipfw или pf

Непрочитанное сообщение Dorlas » 2009-05-03 6:33:28

Как по мне - использовал (и использую IPFW) уже лет 5 - за эти годы сформировался приличный шаблонный конфиг, который очень удобно переносить на новые FreeBSD-сервера (поправил 4-5 параметров в начале файла) и все.

В декабре взялся за изучение PF - распечатал 45 листов, пару вечеров почитал - и понял, что в нем есть очень приятные и красивые вещи (route-to, reply-to, round-robin + авто- keep-state везде). Первый конфиг делал на сервере, где есть два интернет-канала (ethernet и wifi), причем шлюз по умолчанию - через Ethernet, НО на IP-ке WiFi-канала должен висеть почтовый сервер (приходит почта + с него должна уходить). PF с этой задачей справился замечательно:

Код: Выделить всё

# Правило для уходящей от сервера почты:
nat on $if_ext inet proto tcp from $if_ext to any port 25 -> $if_wifi

# Правило для входящей почты:
pass in on $if_wifi reply-to ($if_wifi $router_wifi) inet proto tcp to $if_wifi port 25 modulate state
Еще там куда rdr-правил (на этот статический IP) - но к почте это отношение не имеет.

Второй сервер делал - там два разных канала + DMZ с белыми IP (на сервере 4 сетевые карты). Ранее был старый Linux с ядром 2.4.x (mandrake 9.1 вроде) - решили его заменить на FreeBSD. Конфиг iptables был - 182 кбайта (более 1000 правил).
Дня три его пилили, в итоге получили оптимизированный конфиг PF: Правил фильтрации: 47, правил NAT: 17
Конфиг стал понятный и прозрачным. При этом оба канала используются всеми методами (все сервисы сервера доступы по обоим, rdr-службы, round-robin + тестирование основного на доступность)

Итого я для себя сделал вывод: Если сложная структура (3 и более сетевых, несколько каналов) - удобно делать на PF, если сервачок шаблонный (2 сетевые, воткнул, инструкцию дал и счастливо) - удобно использовать IPFW.

Вообще, оба межсетевые экрана очень хорошие в применении - очень доволен, что освоил и умею использовать :)

Аватара пользователя
abanamat
сержант
Сообщения: 255
Зарегистрирован: 2007-03-15 11:24:26
Откуда: Питер
Контактная информация:

Re: ipfw или pf

Непрочитанное сообщение abanamat » 2009-05-03 13:53:38

Dorlas писал(а):и понял, что в нем есть очень приятные и красивые вещи (route-to, reply-to, round-robin + авто- keep-state везде).
убедительно.

Аватара пользователя
iZEN
ст. лейтенант
Сообщения: 1089
Зарегистрирован: 2007-09-15 16:45:26
Контактная информация:

Re: ipfw или pf

Непрочитанное сообщение iZEN » 2009-05-03 15:19:23

Вот для примера простейший файервол с политикой "Запрещено всё, что не разрешено" на PF:

Код: Выделить всё

#1/Macros
allowed_icmp_types="{ echoreq, unreach }"
# Разрешённые сервисы
allowed_services="{ ssh, www, http, https, ntp, nfsd, rpcbind, 883, 884, 885, 6881><6991, 8080 }"
#2/Tables
#3/Options
# тем, кто лезет туда, куда не нужно, - бить по рукам
set block-policy drop
# на интерфейсах петли пакеты не фильтровать
set skip on { lo }
#4/Scrub
# Нормализовать все (входящие) пакеты
scrub in all
#5/Queueing
#6/Translations
#7/Filter Rules
# Блокировать всё, что не разрешено
block all
# разрешить пинг
pass inet proto icmp all icmp-type $allowed_icmp_types keep state
# разрешающий доступ (ограниченные службы)
pass in inet proto { tcp, udp } from any to port $allowed_services modulate state
# Разрешить исходящий трафик
pass out inet proto { tcp, udp, icmp } all keep state
После применения правил это всё выливается в следующие действующие правила PF:

Код: Выделить всё

% pfctl -s all
FILTER RULES:
scrub in all fragment reassemble
block drop all
pass inet proto icmp all icmp-type echoreq keep state
pass inet proto icmp all icmp-type unreach keep state
pass in inet proto tcp from any to any port = ssh flags S/SA modulate state
pass in inet proto tcp from any to any port = http flags S/SA modulate state
pass in inet proto tcp from any to any port = http flags S/SA modulate state
pass in inet proto tcp from any to any port = https flags S/SA modulate state
pass in inet proto tcp from any to any port = ntp flags S/SA modulate state
pass in inet proto tcp from any to any port = nfsd flags S/SA modulate state
pass in inet proto tcp from any to any port = sunrpc flags S/SA modulate state
pass in inet proto tcp from any to any port = 883 flags S/SA modulate state
pass in inet proto tcp from any to any port = 884 flags S/SA modulate state
pass in inet proto tcp from any to any port = 885 flags S/SA modulate state
pass in inet proto tcp from any to any port 6881 >< 6991 flags S/SA modulate state
pass in inet proto tcp from any to any port = 8080 flags S/SA modulate state
pass in inet proto udp from any to any port = ssh keep state
pass in inet proto udp from any to any port = http keep state
pass in inet proto udp from any to any port = http keep state
pass in inet proto udp from any to any port = https keep state
pass in inet proto udp from any to any port = ntp keep state
pass in inet proto udp from any to any port = nfsd keep state
pass in inet proto udp from any to any port = sunrpc keep state
pass in inet proto udp from any to any port = 883 keep state
pass in inet proto udp from any to any port = 884 keep state
pass in inet proto udp from any to any port = 885 keep state
pass in inet proto udp from any to any port 6881 >< 6991 keep state
pass in inet proto udp from any to any port = 8080 keep state
pass out inet proto tcp all flags S/SA keep state
pass out inet proto udp all keep state
pass out inet proto icmp all keep state
No queue in use

INFO:
Status: Enabled for 0 days 00:00:04           Debug: Urgent

State Table                          Total             Rate
  current entries                        0               
  searches                           42069        10517.2/s
  inserts                              450          112.5/s
  removals                             450          112.5/s
Counters
  match                                450          112.5/s
  bad-offset                             0            0.0/s
  fragment                               0            0.0/s
  short                                  0            0.0/s
  normalize                              0            0.0/s
  memory                                 0            0.0/s
  bad-timestamp                          0            0.0/s
  congestion                             0            0.0/s
  ip-option                              0            0.0/s
  proto-cksum                            0            0.0/s
  state-mismatch                         0            0.0/s
  state-insert                           0            0.0/s
  state-limit                            0            0.0/s
  src-limit                              0            0.0/s
  synproxy                               0            0.0/s

TIMEOUTS:
tcp.first                   120s
tcp.opening                  30s
tcp.established           86400s
tcp.closing                 900s
tcp.finwait                  45s
tcp.closed                   90s
tcp.tsdiff                   30s
udp.first                    60s
udp.single                   30s
udp.multiple                 60s
icmp.first                   20s
icmp.error                   10s
other.first                  60s
other.single                 30s
other.multiple               60s
frag                         30s
interval                     10s
adaptive.start             6000 states
adaptive.end              12000 states
src.track                     0s

LIMITS:
states        hard limit    10000
src-nodes     hard limit    10000
frags         hard limit     5000
tables        hard limit     1000
table-entries hard limit   200000

OS FINGERPRINTS:
696 fingerprints loaded
Такое же напишите на IPFW, сравним.
GNU/Linux — это не Unix и даже никогда им не был, и, что самое смешное, никогда им не станет — GNU's Not Unix

Аватара пользователя
abanamat
сержант
Сообщения: 255
Зарегистрирован: 2007-03-15 11:24:26
Откуда: Питер
Контактная информация:

Re: ipfw или pf

Непрочитанное сообщение abanamat » 2009-05-03 16:01:09

вообще я не про то, я про то что генерить несколько тысяч правил для pf и для ipfw директивами для sh к примеру - однойухственно.

По теме.

Код: Выделить всё

ipfw add 10 allow ip from any to any via lo0
ipfw add 20 allow icmp from any to any icmptypes 3,8
ipfw add 30 allow tcp from any to any 22,80,111,443,883-885,1110,6881-6991,8080
ipfw add 40 allow udp from any to any 111,123,1110
ipfw add 50 deny ip from any to any

Аватара пользователя
iZEN
ст. лейтенант
Сообщения: 1089
Зарегистрирован: 2007-09-15 16:45:26
Контактная информация:

Re: ipfw или pf

Непрочитанное сообщение iZEN » 2009-05-03 17:55:10

abanamat писал(а):вообще я не про то, я про то что генерить несколько тысяч правил для pf и для ipfw директивами для sh к примеру - однойухственно.

По теме.

Код: Выделить всё

ipfw add 10 allow ip from any to any via lo0
ipfw add 20 allow icmp from any to any icmptypes 3,8
ipfw add 30 allow tcp from any to any 22,80,111,443,883-885,1110,6881-6991,8080
ipfw add 40 allow udp from any to any 111,123,1110
ipfw add 50 deny ip from any to any
Ну и где здесь "тем, кто лезет туда, куда не нужно, - бить по рукам" и "Нормализовать все (входящие) пакеты"?

Также хотелось бы дать оценку производительности такого фильтра: он что, каждый пакетик будет пропускать через весь список правил, пока не отыщется разрешающее правило, "не отпустит"?
Режим работы фильтра по принципу проверки только первого пакета соединения "keep state" в ipfw вообще есть?
GNU/Linux — это не Unix и даже никогда им не был, и, что самое смешное, никогда им не станет — GNU's Not Unix

Аватара пользователя
LMik
капитан
Сообщения: 1852
Зарегистрирован: 2007-07-17 9:14:39
Откуда: МО
Контактная информация:

Re: ipfw или pf

Непрочитанное сообщение LMik » 2009-05-03 18:10:06

Режим работы фильтра по принципу проверки только первого пакета соединения "keep state" в ipfw вообще есть?
Еслиб там не было всё что нужно, думаешь ipfw был бы основным фаером с рождения системы?
HISTORY
The ipfw utility first appeared in FreeBSD 2.0. dummynet(4) was intro-
duced in FreeBSD 2.2.8. Stateful extensions were introduced in
FreeBSD 4.0. ipfw2 was introduced in Summer 2002.
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!

ev
ст. лейтенант
Сообщения: 1325
Зарегистрирован: 2008-07-27 17:11:30
Откуда: Москва

Re: ipfw или pf

Непрочитанное сообщение ev » 2009-05-03 20:09:36

Еслиб там не было всё что нужно, думаешь ipfw был бы основным фаером с рождения системы?
вот только не подключен по дефолту ;)

Аватара пользователя
abanamat
сержант
Сообщения: 255
Зарегистрирован: 2007-03-15 11:24:26
Откуда: Питер
Контактная информация:

Re: ipfw или pf

Непрочитанное сообщение abanamat » 2009-05-03 20:26:46

iZEN писал(а):Ну и где здесь "тем, кто лезет туда, куда не нужно, - бить по рукам"
последним правилом
"Нормализовать все (входящие) пакеты"?
а этого в ipfw нет
Также хотелось бы дать оценку производительности такого фильтра: он что, каждый пакетик будет пропускать через весь список правил, пока не отыщется разрешающее правило, "не отпустит"?
pf работает иначе? как?
Режим работы фильтра по принципу проверки только первого пакета соединения "keep state" в ipfw вообще есть?
есть. Но согласно результатам моих собственных тестов, использование keep state повышает вероятность ddos-а маршрутизатора на фре в разы в сравнении со статическими правилами.

Отдельно по поводу нормализации пакетов. Мне пока эта фича ни разу не понадобилась. Но в перспективе, если встречусь с необходимостью ее использования, смело и без всяких идеологических угрызений запользую pf.
Кстати кто подкинет примерчик случая, когда без этой фичи не обойтись?

Аватара пользователя
iZEN
ст. лейтенант
Сообщения: 1089
Зарегистрирован: 2007-09-15 16:45:26
Контактная информация:

Re: ipfw или pf

Непрочитанное сообщение iZEN » 2009-05-03 22:07:57

abanamat писал(а):
iZEN писал(а):Также хотелось бы дать оценку производительности такого фильтра: он что, каждый пакетик будет пропускать через весь список правил, пока не отыщется разрешающее правило, "не отпустит"?
pf работает иначе? как?
PF отслеживает соединения (keep state) и проводит проверку только для первого пакета, который устанавливает соединение. Остальные IP-пакеты этого соединения не участвуют в проверках на соответвие всем правилам, а переносятся по установившемуся алгоритму.
abanamat писал(а):
Режим работы фильтра по принципу проверки только первого пакета соединения "keep state" в ipfw вообще есть?
есть. Но согласно результатам моих собственных тестов, использование keep state повышает вероятность ddos-а маршрутизатора на фре в разы в сравнении со статическими правилами.
Наоборот. Отслеживание состояний соединений (stateful inspection) в PF понижает вероятность DDoS и сильно разгружает фильтр от излишней работы.
abanamat писал(а):Отдельно по поводу нормализации пакетов. Мне пока эта фича ни разу не понадобилась. Но в перспективе, если встречусь с необходимостью ее использования, смело и без всяких идеологических угрызений запользую pf.
Кстати кто подкинет примерчик случая, когда без этой фичи не обойтись?
Фрагментация IP-пакетов так же может быть причиной атаки, так и широковещательного шторма с подменой IP-заголовков. Чтобы не нагружать фильтр лишней работой по отсеиванию мелких/нелегитимных пакетиков применяют "очистку" трафика, грубо говоря, прежде чем начать обработку IP-пакета и отправку его приложению, фильтр ждёт прихода всех его частей, в том числе переданных с ошибками. После сборки IP-пакета он может быть либо отброшен в целом как ошибочный, либо пройдёт дополнительный контроль на соответствие правилам фильтра. Это ещё одна возможность "не фильтровать помои" и не тратить ресурсы процессора.
Кстати, в новой версии PF скраблинг пакетов включен по умолчанию — об этом была уже новость.
Последний раз редактировалось iZEN 2009-05-03 22:13:16, всего редактировалось 3 раза.
GNU/Linux — это не Unix и даже никогда им не был, и, что самое смешное, никогда им не станет — GNU's Not Unix

mnz_home
проходил мимо

Re: ipfw или pf

Непрочитанное сообщение mnz_home » 2009-05-03 22:09:14

abanamat писал(а): а зачем если ng_nat есть?
Хорошая вещь, но довольно низкоуровневая => красноглазая. Имхо. Проигрывает в наглядности и прозрачности правил.

Аватара пользователя
abanamat
сержант
Сообщения: 255
Зарегистрирован: 2007-03-15 11:24:26
Откуда: Питер
Контактная информация:

Re: ipfw или pf

Непрочитанное сообщение abanamat » 2009-05-03 22:31:18

mnz_home писал(а):
abanamat писал(а): а зачем если ng_nat есть?
Хорошая вещь, но довольно низкоуровневая => красноглазая. Имхо. Проигрывает в наглядности и прозрачности правил.
зато можно нагенерить не одну сотню нодов и радоваться что все летает.