Статья о PF. Пинайте

Вопросы настройки и работы с этой ОС.
Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Grishun_U_S
сержант
Сообщения: 221
Зарегистрирован: 2008-04-12 18:26:54
Откуда: Samara
Контактная информация:

Статья о PF. Пинайте

Непрочитанное сообщение Grishun_U_S » 2008-05-18 17:20:33

Настройка pf. (обзор возможностей + разбор конфига + пример ip spoofing'a)

Часть 1. Обзор возможностей, установка.

Что умеет PF :
  • - транслировать адреса Network Address Translation (NAT);
    - позволяет строить отказоустойчивый кластер фаерволлов с использованием Common Address Redundancy Protocol (CARP);
    - поддерживает несколько видов приоритезации трафика (ALTernate Queuing);
    - пробрасывать определенный порт на определенный комп в локальной сети (Port Forwarding);
    - выступать в качестве прокси для входящих соединений, защищая внутренний сервер от атак SYN-flood (SYN-proxy);
    - передавать нагрузку на пул серверов, отслеживая их состояние. Получается, опять же, отказоустойчивый кластер + балансировка нагрузки несколькими способами (Load balancing);
    - фильтровать пакеты по типам (tcp, udp, icmp) и подтипам (icmp echoreq, icmp unreach);
    - поддерживает макросы и таблицы. Например, можно завести таблицу брутфорсеров и динамически ее пополнять;
    - выступать в роли низкоуровнего Ethernet моста, не имеющего собственного IP адреса (Bridging Firewall);
    - метить пакеты специальными метками. Полезно когда нельзя принять решение о судьбе пакета основываясь только лишь на адресе подсети и номере порта (tags);
    - фиксировать любую сетевую активность и рисовать графики в различных разрезах с помощью утилиты pfstat (смотрим тут http://www.benzedrine.cx/pfstat.html какая красота получается);
    - нормализовать пакеты. Полезно от некоторых видов dos атак; (scrub).
Вроде все, ничего не забыл.

Установка :

OpenBSD.
OpenBSD является материнской платформой для PF (именно на ней он появился впервые, а потом был портирован на остальные BSD), поэтому он присутствует во всех ее версиях. Для включения PF в OpenBSD требуется :

/etc/rc.conf.local и можно еще указать конфиг файл

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

pf_rules=/etc/pf.conf 

FreeBSD.
Во всех свежих версиях FreeBSD он уже присутствует в качестве загружаемого модуля. Но я включил его в ядро явно (это необязательно) :

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

device pf
device pflog
device pfsync
и ОБЯЗАТЕЛЬНО включите следующие опции в ядро Вы хотите использовать приоритезацию и очереди ALTQ

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

options         ALTQ
options         ALTQ_CBQ        # Class Bases Queuing (CBQ)
options         ALTQ_RED        # Random Early Detection (RED)
options         ALTQ_RIO        # RED In/Out
options         ALTQ_HFSC       # Hierarchical Packet Scheduler (HFSC)
options         ALTQ_PRIQ       # Priority Queuing (PRIQ)
options         ALTQ_NOPCC      # Required for SMP build
Все опции файла rc.conf, касающиеся PF:

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

pf_enable="NO" 
pf_rules="/etc/pf.conf"
pf_program="/sbin/pfctl" 
pf_flags="" 
pflog_enable="NO" 
pflog_logfile="/var/log/pf.log" 
pflog_program="/sbin/pflogd" 
pflog_flags="" 
pfsync_enable="NO"
pfsync_syncdev=""
pfsync_ifconfig="" 
включим PF

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

pf_enable="YES" 
и ведение лога (как смотреть лог - файл читайте в конце этой части)

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

pflog_enable="YES"
Изменения вступят после перезагрузки. Чтобы не перезагружать компьютер можно дать команду (требует рутовых прав)

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

# pfctl -e
должно появиться pf enabled. А после перезагрузки он будет запускаться согласно rc.conf

NetBSD
О том, как заставить PF работать в NetBSD читайте в [1].

Часть 2. Разбор конфигурационного файла.

Вообще говоря, конфиг делится на несколько секций, которые должны иметь строгий порядок и не должны пересекаться. Порядок следующий :
  • 1) макросы
    2) таблицы
    3) опции
    4) параметры нормализации
    5) приоретизация и очереди ALTQ
    6) правила трансляции
    7) правила фильтра
Ниже приведен конфиг с моего домашнего шлюза, не претендует на полноту, т.к. здесь нет таблиц и очередей ALTQ, но в качестве примера сойдет, тем более что я буду комментировать :

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

##### BEGIN CONFIG
##################################################################################
##              The gateway1's pf ruleset BASIC v. 0.02a                        ##
##################################################################################
# СЕКЦИЯ макросы, (фактически макросами называется то же самое что в языках программирования называется переменной)
## интерфейсы
int_if="xl0" # внутренний интерфейс, который "смотрит" ко мне в домашнюю локалку.
ext_if_cheap="tun0"     ## виртуальный pppoe интерфейс, безлимит. Здесь берется адрес интерфейса tun0. Это удобно, т.к. провайдер может назначать динамический адрес. Используя этот макрос нам не придется корректировать файл правил pf когда провайдер по какой - то причине станет выдавать нам другой IP адрес.
ext_if_expensive="tun1" ## виртуальный pppoe интерфейс, помегабайтная оплата
game_ports="7777" ## порт игры Unreal Tournament
icmp_types="{ echoreq, unreach}" ## разрешенные типы icmp сообщений. Первое необходимо для работы UNIX traceroute (для win tracert этого не требуется), а второе нужно когда пытаемся коннектиться к хосту, который в дауне.
udp_services="{ domain, ntp }" ## разрешенные типы udp сервисов

# сети и хосты
trusted_lan="192.168.0.0/24" ## доверенная домашняя локалка
untrusted_lan="10.0.0.0/8" ## внешняя локалка провайдера, будем называть ее WAN
localnet="127.0.0.0/8" ## сеть интерфейса петли, ну это понятно
game_server="192.168.0.15/32" ## адрес игрового сервера в домашней локалке
wan_services="{ 85.113.63.251/32, 85.113.59.8/32, 85.113.62.200/32 }" ## серверы в WAN провайдера (игровые, файловые). Если мы захотим добавить в этот список еще несколько серверов, например 1.1.1.1 и 2.2.2.2, то список будет выглядеть так 
#wan_services="{ 85.113.63.251/32, 85.113.59.8/32, 85.113.62.200/32, 1.1.1.1/32,  2.2.2.2/32}" и править больше ничего не потребуется. Вот оно, удобство макросов.

# СЕКЦИЯ  глобальные опции
set block-policy return ## сбрасываем соединение вежливо, по умолчанию стоит агрессивное drop
set skip on lo0 ## полностью пропускаем проверку на петле (повзоляет сэкономить немного вычислительных ресурсов)
set skip on $int_if ## полностью пропускаем проверку на интерфейсе, к которому подключена домашняя локалка. Вредителей в ней у меня нет. (также повзоляет сэкономить немного вычислительных ресурсов)

# СЕКЦИЯ параметры нормализации
scrub in all ## нормализуем все входящие пакеты на всех интерфейсах. Что это значит? Пакеты приходят частями (фрагментами). scrub сначала собирает пакет у себя на шлюзе и только потом передает его дальше, во внутреннюю сеть. Позволяет защититься от некоторого вида dos атак сбрасывая фрагменты TCP с некорректно установленными флагами.

# СЕКЦИЯ приоретизация и очереди ALTQ
# у меня пустая, т.к. не использую шейпинг и очереди. Всем компам домашней сети доступна полная ширина канала без ограничений.

# СЕКЦИЯ  port forwarding & NAT
rdr on $ext_if_expensive proto { tcp, udp } from $untrusted_lan to $ext_if_expensive port $game_ports -> $game_server port $game_ports
## Здесь пробрасываем всех кто коннектится по интерфейсу ext_if_expensive на порт game_ports НА game_server порт game_ports, т.е. :
## from 10.0.0.0/8 to ext_if_expensive:7777 ПРОБРОСИТЬ НА 192.168.0.15:7777
## вот что получается если посмотреть с точки зрения PF (команда pfctl -sa)
## rdr on tun1 inet proto tcp from 10.0.0.0/8 to 10.[censored] port = 7777 -> 192.168.0.15 port 7777
## rdr on tun1 inet proto udp from 10.0.0.0/8 to 10.[censored] port = 7777 -> 192.168.0.15 port 7777
## И....
## По просьбам трудящихся добавляю нат средствами PF 
nat on $ext_if_cheap from $trusted_lan to any -> ($ext_if_cheap) 
## делаем нат НА внешнем интерфейсе (интерфейс с инетом) от доверенной сети (192.168.0.0/24) ко всем. Параметр после знака -> позволяет подписывать у отправляемых в инет пакетов любой адрес отправителя, но здесь нам нет смысла его менять, поэтому ставим адрес внешнего интерфейса. Т.е. ($ext_if_cheap).

# СЕКЦИЯ правила фильтрации 
antispoof quick for $ext_if_cheap # включает простейший антиспуфинг, который превращается в 2 правила :
## block drop in quick on ! tun0 inet from tun0 to any
## block drop in quick inet from tun0 to any    
## Что означает : сбрасывать все входящие пакеты с адресом отправителя равным нашему
## Самое время рассказать о порядке срабатывания фильтрующих правил и о ключе quick.
## Все правила обрабатываются сверху вниз и приоритет имеет последнее правило, т.е. если написать сначала
## block all ## а потом
## pass all
## то сработает 
## pass all ## как если бы мы кроме него ничего не писали
## Ключ quick указывает на то, то нужно применить текущее правило и прекратить дальнейшую обработку.
antispoof quick for $ext_if_expensive ## тоже самое и для второго интерфейса
## Честно говоря, полноценным антиспуфингом это сложно назвать, от части спуферов, конечно спасает но для реализации путевого антиспуфинга надо смотреть RFC 1918 и 3330 и явно запрещать пакеты с левых сетей типа 127.0.0.0, 240.0.0.0/4, 169.254.0.0/16 и т.д.


block all ## запрет по-умолчанию

##--everithing LOCAL
pass out on $ext_if_cheap from $ext_if_cheap to any keep state  ## разрешаем весь исходящий трафик с локального машины (на ней у меня клиент торент сетей)
##--everithing LOCAL

##--everithing for 192.168.0.0/24 LAN
pass out on $ext_if_cheap from $trusted_lan to any keep state ## разрешаем весь трафик от нашей домашней сети
## здесь хочу сказать, что если бы мы включили фильтрацию для интерфейса xl0, то пришлось бы писать ДВА правила :
## одно на разрешение ВХОДящего трафика по xl0 от сети 192.168.0.0/24 
## другое на разрешение ИСХОДящего трафика по ext_if_cheap от сети  192.168.0.0/24 
##--everithing for 192.168.0.0/24 LAN

##--direct connections from 192.168.0.0/24 LAN to 10.0.0.0/8 WAN
pass out on $ext_if_expensive from $trusted_lan to $untrusted_lan keep state ## разрешаем трафик от локалки 192.168.0.0/24 к сети провайдера по быстрому соединению
##--direct connections from 192.168.0.0/24 LAN to 10.0.0.0/8 WAN

##--WAN services
## out from 192.168.0.0/24 LAN to all WAN servers VIA fast connection
pass out on $ext_if_expensive from $trusted_lan to $wan_services keep state ## разрешаем трафик от локалки 192.168.0.0/24 к серверам провайдера по быстрому соединению
##--WAN services

## и теперь разрешаем входящий трафик по быстрому соединению, которые мы будем пробрасывать на 192.168.0.15:7777
pass in log on $ext_if_expensive proto { tcp, udp } from $untrusted_lan to $game_server port $game_ports keep state
## это локальный трафик, стоит недорого, а для игр очень важна скорость и ширина канала, поэтому трафик пущен именно по быстрому соединению
## ВНИМАНИЕ! Долго ломал голову почему ко мне не могут присоединиться ребята из локальной сети, чтобы поиграть в UT. Методом многочисленных проб удалось установить что в этом правиле требуется указать разрешение трафика к game_server, а не к ext_if_expensive, как сначала может показаться. Убил кучу времени на это, благо товарищ из локалки помог продиагностировать. Спасибо GrayCat ;-)

pass log inet proto icmp all icmp-type $icmp_types ## разрешаем icmp трафик установленных типов.
##### END CONFIG
И пара слов о keep state. Когда программа (например, браузер из доверенной сети) лезет в интернет -- разрешение на исходящий от нас трафик мы указываем явно правилом :

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

pass out on $ext_if_cheap from $trusted_lan to any keep state
мы набираем в строке обозревателя какой - то сайт и запрос от обозревателя поступает на этот сайт. В нашем файрволле устанавливается состояние, означающее что мы ожидаем данных от этого сайта. Так вот если написать

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

pass out on $ext_if_cheap from $trusted_lan to any 
БЕЗ keep state (или указав no state), то запрос на сайт поступит, а ответ наш файрвол зарежет. Вот зачем нужен keep state.
И еще одна особенность keep state. Начиная с FreeBSD версии 7.0 (аналогичная версия pf входит в поставку OpenBSD 4.1) keep state применяется ко всем правилам по умолчанию. Если вы не хотите чтобы к некоторым (или ко всем) правилам применялось keep state -- пишите явно no state.

Пример из конфига выше.

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

pass out on $ext_if_expensive from $trusted_lan to $untrusted_lan
[/b]

FreeBSD версии 7.0 и выше (или OpenBSD версии 4.1 и выше)
воспримет правило как :

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

pass out on $ext_if_expensive from $trusted_lan to $untrusted_lan keep state
а FreeBSD ниже версии 7.0 (или OpenBSD ниже версии 4.1)
воспримет это правило как :

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

pass out on $ext_if_expensive from $trusted_lan to $untrusted_lan no state
в новых версиях BSD (FreeBSD 7.0 и OpenBSD 4.1) лично я предпочитаю все равно явно писать keep state (хотя это необязательно и принимается по умолчанию), потому что особого труда это не составляет, а обратная совместимость со "старыми" версиями PF в наличии. Например, конфиг из пункта 2 взят с сервера по управлением ОС FreeBSD 7.0, но у меня есть сервер и на 6.3, на котором сейчас IPFW в качестве файрвола, потом когда буду переводить все на PF меньше шансов запутаться на такой мелочи как состояния keep state.

По поводу логов. PF пишет лог в бинарном формате, поэтому если смотреть его обычным просмотрщиком Вы увидите сплошные крякозябры. Читать его можно с помощью tcpdump, командой

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

# tcpdump -n -e -ttt -r /var/log/pf.log

Часть 3. IP spoofing.
Несколько месяцев назад у меня была задача организовать ip spoofing под FreeBSD; коротко, ip spoofing -- это подмена ip адреса отправителя. Спуфинг надо сказать планировался в мирных целях, имелось 2 канала :

1) быстрый и помегабайтный (оплата за входящий трафик);
2) медленный и безлимитный (абонемент на 1 месяц);


Изображение

хотелось получить один гибридный ассиметричный канал с большой скоростью на отдачу и при этом платить только за безлимит. Погуглив чутка я выяснил что это можно реализовать с помощью ip spoofing'a сделав следующее :
  • 1) сделать дефолтовым маршрутом интерфейс с быстрым инетом;
    2) отправлять с быстрого канала пакеты с исходным адресом безлимита (тогда пакеты пройдут именно тот путь что отмечен красными стрелками на рисунке);
Мне подсказали что это умеет pf. Вот эта строчка в конфиге позволяет подменить адрес отправителя :

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

nat on $ext_if_expensive from $trusted_lan to any -> $spoofed_addr
где
ext_if_expensive -- внешний быстрый интерфейс;
trusted_lan -- доверенная сеть, это моя внутренняя сеть, что находится за шлюзом
spoofed_addr -- какой адрес отправителя писать. В моем случае, это адрес безлимитного интерфейса.

Настроив маршрутизацию, применив правило и запустив tcpdump на быстром интерфейсе я убедился что пакеты отправляются с подмененным адресом. Правда на цисках провайдера, как оказалось, была включена опция rp_filter, запрещающая спуфинг, поэтому из моей задумки ничего не вышло. Но, говорят, есть еще провайдеры где эта схема работает.

Список литературы :
Последний раз редактировалось Grishun_U_S 2008-05-20 21:32:13, всего редактировалось 4 раза.
Изображение

Хостинговая компания 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/

princeps
майор
Сообщения: 2684
Зарегистрирован: 2007-09-25 10:20:59
Откуда: Сочи, Москва
Контактная информация:

Re: Статья о PF. Пинайте

Непрочитанное сообщение princeps » 2008-05-18 19:28:23

Может быть, стоит написать еще один конфиг - чуть пошире, как в статье лисяры про IPFW. С блокированием исходящего трафика тоже кроме нужного. Например, всякая прорвавшаяся внутрь зараза может спам рассылать изнутри сети или народ может нелегально аську пользовать или еще что запрещенное регламентом. И с пробросом внутрь трафик на почтовый, веб и ftp сервер, и с заворачиванием исходящего http трафика на сквид. Мне сдается, что для большинства мелких-средних офисов такой функционал будет как раз в тему, как считаешь?
Deus quos vult perdere dementat prius
http://www.itforum-sochi.ru

Аватара пользователя
Grishun_U_S
сержант
Сообщения: 221
Зарегистрирован: 2008-04-12 18:26:54
Откуда: Samara
Контактная информация:

Re: Статья о PF. Пинайте

Непрочитанное сообщение Grishun_U_S » 2008-05-18 20:13:45

princeps писал(а):Может быть, стоит написать еще один конфиг - чуть пошире, как в статье лисяры про IPFW. С блокированием исходящего трафика тоже кроме нужного. Например, всякая прорвавшаяся внутрь зараза может спам рассылать изнутри сети или народ может нелегально аську пользовать или еще что запрещенное регламентом.
Это добавлю. Нивапрос.
princeps писал(а): И с пробросом внутрь трафик на почтовый, веб и ftp сервер,
Это тоже.
princeps писал(а): и с заворачиванием исходящего http трафика на сквид.
Транспарентный прокси?
princeps писал(а): Мне сдается, что для большинства мелких-средних офисов такой функционал будет как раз в тему, как считаешь?
А ты хочешь чтобы была такая универсальная болванка? Вообще если честно я не преследовал цели всеобъемлющего примера, но, думаю, смогу сделать.
Изображение

princeps
майор
Сообщения: 2684
Зарегистрирован: 2007-09-25 10:20:59
Откуда: Сочи, Москва
Контактная информация:

Re: Статья о PF. Пинайте

Непрочитанное сообщение princeps » 2008-05-19 8:53:27

Grishun_U_S писал(а):Транспарентный прокси?
Ну типа да. Чтоб хоть кэшировать что-то.
Grishun_U_S писал(а):А ты хочешь чтобы была такая универсальная болванка? Вообще если честно я не преследовал цели всеобъемлющего примера, но, думаю, смогу сделать.
Не, всеобъемлющий не надо. Когда много всякой инфы - оно только путает новичков. Просто я в свое время, когда настраивал ipfw, пользовался статьей Лиса. У него там два конфига - один попроще, типа твоего: с "все можно" изнутри, а второй посложнее, типа того, который я тебе описал. Первый я дома поднял для изучения, но для офиса он у меня не подходил. А тут как раз второй конфиг посложнее в той же статье, который с некоторыми доработками я в офисе и поставил. Очень удобно для новичка. А потом, когда понадобилось ставить pf, то очень жалел, что нет такой удобной статьи, вот потому и предлагаю. Можно, в принципе, вторую статью написать, чтобы не перегружать эту.
Deus quos vult perdere dementat prius
http://www.itforum-sochi.ru

Аватара пользователя
Daywalker
ст. сержант
Сообщения: 326
Зарегистрирован: 2007-03-11 22:28:45
Откуда: г. Котельники, МО
Контактная информация:

Re: Статья о PF. Пинайте

Непрочитанное сообщение Daywalker » 2008-05-19 9:02:40

чтобы включить PF нам нужны только две

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

pf_enable="YES" 
pflog_enable="YES"
Для запуска pf pflog запускать необязательно. pflog нужен для логгирования.
http://blog.volobuev.su - Блог о системном и сетевом администрировании.

Аватара пользователя
Grishun_U_S
сержант
Сообщения: 221
Зарегистрирован: 2008-04-12 18:26:54
Откуда: Samara
Контактная информация:

Re: Статья о PF. Пинайте

Непрочитанное сообщение Grishun_U_S » 2008-05-19 16:37:59

princeps писал(а):
Grishun_U_S писал(а):Транспарентный прокси?
Ну типа да. Чтоб хоть кэшировать что-то.
Grishun_U_S писал(а):А ты хочешь чтобы была такая универсальная болванка? Вообще если честно я не преследовал цели всеобъемлющего примера, но, думаю, смогу сделать.
Не, всеобъемлющий не надо. Когда много всякой инфы - оно только путает новичков. Просто я в свое время, когда настраивал ipfw, пользовался статьей Лиса. У него там два конфига - один попроще, типа твоего: с "все можно" изнутри, а второй посложнее, типа того, который я тебе описал. Первый я дома поднял для изучения, но для офиса он у меня не подходил. А тут как раз второй конфиг посложнее в той же статье, который с некоторыми доработками я в офисе и поставил. Очень удобно для новичка. А потом, когда понадобилось ставить pf, то очень жалел, что нет такой удобной статьи, вот потому и предлагаю. Можно, в принципе, вторую статью написать, чтобы не перегружать эту.
Я то думал этот конфиг совсем не нравится. Ну тогда я вижу самым логичным второй конфиг вынести в отдельную статью, и назвать типа "PF шаблон конфига для офисов". И кстати у PF есть классная фишка под названием SYN-proxy, которая помогает защитить сервера от SYN-flood атак, обязательно включу ее в пример.
Изображение

Аватара пользователя
Grishun_U_S
сержант
Сообщения: 221
Зарегистрирован: 2008-04-12 18:26:54
Откуда: Samara
Контактная информация:

Re: Статья о PF. Пинайте

Непрочитанное сообщение Grishun_U_S » 2008-05-19 16:38:22

Daywalker писал(а):
чтобы включить PF нам нужны только две

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

pf_enable="YES" 
pflog_enable="YES"
Для запуска pf pflog запускать необязательно. pflog нужен для логгирования.
Поправил. СПС.
Изображение

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35454
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Статья о PF. Пинайте

Непрочитанное сообщение Alex Keda » 2008-05-19 19:06:58

публикуй...
мне понравилось =)
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Daywalker
ст. сержант
Сообщения: 326
Зарегистрирован: 2007-03-11 22:28:45
Откуда: г. Котельники, МО
Контактная информация:

Re: Статья о PF. Пинайте

Непрочитанное сообщение Daywalker » 2008-05-19 20:58:13

Еще пара замечаний

В FreeBSD 7.0 keep state писать не надо, автоматом добавляется flags S/SA keep state

Добавил бы строчку про NAT, не все натят встроенными средствами ppp и т.д.
Строчка простая:

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

#nat on $ext_if from $internal_net to any -> ($ext_if)
А так чем больше статей, в которых конфиги с комментариями, тем лучше для всех. Мне например очень помогают статьи на этом сайте именно потому, что опции подробно документируют.
http://blog.volobuev.su - Блог о системном и сетевом администрировании.

Covax
мл. сержант
Сообщения: 131
Зарегистрирован: 2008-04-27 23:54:31
Откуда: Витебск, Беларусь
Контактная информация:

Re: Статья о PF. Пинайте

Непрочитанное сообщение Covax » 2008-05-19 21:26:39

А можно я сюда пну http://forum.lissyara.su/viewtopic.php? ... &sk=t&sd=a
Как насчёт этого?

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

Re: Статья о PF. Пинайте

Непрочитанное сообщение Grishin_U_S_at_work » 2008-05-20 7:01:40

Daywalker писал(а):Еще пара замечаний

В FreeBSD 7.0 keep state писать не надо, автоматом добавляется flags S/SA keep state
Насчет keep state по - умолчанию... Да, я не упомянул об этом, косяк. Поправим. Но его лучше ПИСАТЬ для обратной совместимости файла правил с FreeBSD 6.3 и OpenBSD 4.1
Daywalker писал(а): Добавил бы строчку про NAT, не все натят встроенными средствами ppp и т.д.
Строчка простая:

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

#nat on $ext_if from $internal_net to any -> ($ext_if)
Ок, строку с нат добавлю.
Daywalker писал(а): А так чем больше статей, в которых конфиги с комментариями, тем лучше для всех. Мне например очень помогают статьи на этом сайте именно потому, что опции подробно документируют.
Все так. Потому что читать пространные руководства по 100стр. когда нужно сделать быстро совсем не вариант. А тут зашел пример конфига скопировал, подточил его под себя и уже работает. Удобно.

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

Re: Статья о PF. Пинайте

Непрочитанное сообщение Grishin_U_S_at_work » 2008-05-20 7:02:35

Covax писал(а):А можно я сюда пну http://forum.lissyara.su/viewtopic.php? ... &sk=t&sd=a
Как насчёт этого?
насчет чего именно?

Covax
мл. сержант
Сообщения: 131
Зарегистрирован: 2008-04-27 23:54:31
Откуда: Витебск, Беларусь
Контактная информация:

Re: Статья о PF. Пинайте

Непрочитанное сообщение Covax » 2008-05-20 12:52:24

Grishin_U_S_at_work писал(а):насчет чего именно?
Насчёт использования rdr и altq. При использовании rdr на squid из-за keep state теряем контроль над исходящими к клиенту пакетами. Т.к. все пакеты, согласно таблицы состояния, идут через правило для входящих пакетов минуя pf, т.е. нет возможности завернуть их в очереди altq.

Аватара пользователя
Grishun_U_S
сержант
Сообщения: 221
Зарегистрирован: 2008-04-12 18:26:54
Откуда: Samara
Контактная информация:

Re: Статья о PF. Пинайте

Непрочитанное сообщение Grishun_U_S » 2008-05-20 21:46:00

Covax писал(а):
Grishin_U_S_at_work писал(а):насчет чего именно?
Насчёт использования rdr и altq. При использовании rdr на squid из-за keep state теряем контроль над исходящими к клиенту пакетами. Т.к. все пакеты, согласно таблицы состояния, идут через правило для входящих пакетов минуя pf, т.е. нет возможности завернуть их в очереди altq.
Спасибо за информацию. С Вашего позволения включу ее в следующую статью. Статья будет о разборе конфига - шаблона для небольших контор с DMZ и прочими вкусностями.
Изображение

Covax
мл. сержант
Сообщения: 131
Зарегистрирован: 2008-04-27 23:54:31
Откуда: Витебск, Беларусь
Контактная информация:

Re: Статья о PF. Пинайте

Непрочитанное сообщение Covax » 2008-05-20 23:35:24

Так включай на здоровье! :)
Но вопрос-то остался открытым.

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

Re: Статья о PF. Пинайте

Непрочитанное сообщение Grishin_U_S_at_work » 2008-05-21 6:08:35

Covax писал(а):Так включай на здоровье! :)
Но вопрос-то остался открытым.
Altq планирую осветить в следующей статье, покумекаем над вопросом.

Аватара пользователя
Grishun_U_S
сержант
Сообщения: 221
Зарегистрирован: 2008-04-12 18:26:54
Откуда: Samara
Контактная информация:

Re: Статья о PF. Пинайте

Непрочитанное сообщение Grishun_U_S » 2008-05-22 8:43:09

Статью опубликовал http://www.lissyara.su/?id=1671
всем спасибо!
Изображение

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35454
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Статья о PF. Пинайте

Непрочитанное сообщение Alex Keda » 2008-05-22 9:43:53

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

##### BEGIN CONFIG
начиная отсюда - строчки слишком широкие.
Перенси вамменты сбоку вверх например...
ширина средней колонки должна быть 610 пикселов - иначе не смогут смотреть те, у кго разрешение 1024x768 - а таких не мало...
==========
и короткое название...
оно должно быть короткое =)))
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Grishun_U_S
сержант
Сообщения: 221
Зарегистрирован: 2008-04-12 18:26:54
Откуда: Samara
Контактная информация:

Re: Статья о PF. Пинайте

Непрочитанное сообщение Grishun_U_S » 2008-05-22 12:03:09

lissyara писал(а):

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

##### BEGIN CONFIG
начиная отсюда - строчки слишком широкие.
Перенси вамменты сбоку вверх например...
ширина средней колонки должна быть 610 пикселов - иначе не смогут смотреть те, у кго разрешение 1024x768 - а таких не мало...
==========
и короткое название...
оно должно быть короткое =)))
Так пойдет?
Изображение

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35454
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Статья о PF. Пинайте

Непрочитанное сообщение Alex Keda » 2008-05-22 12:16:02

ага.
публикую.
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Za...
мл. сержант
Сообщения: 105
Зарегистрирован: 2006-08-18 14:18:15
Откуда: Север России
Контактная информация:

Re: Статья о PF. Пинайте

Непрочитанное сообщение Za... » 2008-05-22 13:53:33

Вопросы вот еще с чем
Если в pf такие весчи как:
ipfw tee
ipfw divert

Как pf дружит с натом gre тпафика(pptp)

И как сделать логи наподобие в ipfw, т.е. где что блокируется, я так и не смог этого сделать, приходится догадками...
Стою в очереди За... булкой и кефиром

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

Re: Статья о PF. Пинайте

Непрочитанное сообщение kukulkan » 2008-05-24 22:53:18

Za... писал(а):Вопросы вот еще с чем
Как pf дружит с натом gre тпафика(pptp)
никак не дружит.

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

Re: Статья о PF. Пинайте

Непрочитанное сообщение Allex_nsk » 2008-05-25 11:39:56

1. А теперь представим такую ситуацию. Юзер Петя тащит новый дистрибутив линукса из сети по фтп, юзер Вася пришел с учебы с одной мыслью поскорее добраться до компа и завалить пару тройку террористов в кемпер-страйк. Он судорожно начинает обзванивать соседей с единственной просьбой прервать закачку. Ему и не вдомёк, что во всём виноват админ Grishun_U_S, непожелавший обратить своё внимание в сторону ALTQ.
2. Есть проблема специфичная для АДСЛ каналов. http://misdocumentos.net/wiki/wiki.open ... as_en_adsl
На современных АДСЛ 2+ она не так актуальна, это я понял из реальных измерений нагрузок, но всё же использую, мало ли...
3. > nat on $ext_if_cheap from $trusted_lan to any -> ($ext_if_cheap)
Сдесь вообще ошибка. Вы предлагаете натить трафик из локальной сети адресованный и напрямую серверу тоже. Так часто бывает, что ДСЛ канал ложиться напрочь или восстанавливается через несколько десятков секунд. Что же происходит с доступными сервисами в этот момент? Подумайте...
nat on $ext_if_cheap from $trusted_lan to !(self) -> ($ext_if_cheap:0)
Хотя это спорный вопрос, на интернет канале по витой паре с предлагаемыми настройками "тупит" не значительно.
4. Вместо
> wan_services="{ 85.113.63.251/32, 85.113.59.8/32, 85.113.62.200/32 }"
лучше использовать таблицы, это придаст нужную гибкость конструкции

Аватара пользователя
Grishun_U_S
сержант
Сообщения: 221
Зарегистрирован: 2008-04-12 18:26:54
Откуда: Samara
Контактная информация:

Re: Статья о PF. Пинайте

Непрочитанное сообщение Grishun_U_S » 2008-05-25 20:26:27

Allex_nsk писал(а):1. А теперь представим такую ситуацию. Юзер Петя тащит новый дистрибутив линукса из сети по фтп, юзер Вася пришел с учебы с одной мыслью поскорее добраться до компа и завалить пару тройку террористов в кемпер-страйк. Он судорожно начинает обзванивать соседей с единственной просьбой прервать закачку. Ему и не вдомёк, что во всём виноват админ Grishun_U_S, непожелавший обратить своё внимание в сторону ALTQ.
А теперь представим ситуацию как на форум вваливается Allex_nsk с большим желанием поднакакать. Статью он не читает, зато горазд на хлесткие каменты. Ведь если бы он читал внимательно, то увидел бы :

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

В следующей статье рассмотрим более сложный конфиг с очередями ALTQ, серверами в DMZ, требующими доступ снаружи, и ограниченным списком сервисов, к которым могут обращаться пользователи нашей сети. Ну и если получится, завернем трафик на squid.
И еще, я -- не админ, а программист. BSD мое хобби.
Allex_nsk писал(а):2. Есть проблема специфичная для АДСЛ каналов. http://misdocumentos.net/wiki/wiki.open ... as_en_adsl
На современных АДСЛ 2+ она не так актуальна, это я понял из реальных измерений нагрузок, но всё же использую, мало ли...
По делу, но жаль негде проверить. Может снизойдешь выложить свои "адаптации"?
Allex_nsk писал(а): 3. > nat on $ext_if_cheap from $trusted_lan to any -> ($ext_if_cheap)
Сдесь вообще ошибка. Вы предлагаете натить трафик из локальной сети адресованный и напрямую серверу тоже. Так часто бывает, что ДСЛ канал ложиться напрочь или восстанавливается через несколько десятков секунд. Что же происходит с доступными сервисами в этот момент? Подумайте...
nat on $ext_if_cheap from $trusted_lan to !(self) -> ($ext_if_cheap:0)
Хотя это спорный вопрос, на интернет канале по витой паре с предлагаемыми настройками "тупит" не значительно.
Ты хочешь (на ты можно ведь, правда?) сказать, что при этих настройках,

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

nat on $ext_if_cheap from $trusted_lan to any -> ($ext_if_cheap)
пакеты пришедшие локальным приложениям шлюза с адресом $ext_if_cheap будут перенаправлены дальше в сеть $trusted_lan? В OpenBSD pf FAQ наверно тоже ошиблись, написав to any в нескольких примерах :

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

nat on tl0 from 192.168.1.0/24 to any -> 24.5.0.5
http://www.openbsd.org/faq/pf/nat.html
Allex_nsk писал(а): 4. Вместо
> wan_services="{ 85.113.63.251/32, 85.113.59.8/32, 85.113.62.200/32 }"
лучше использовать таблицы, это придаст нужную гибкость конструкции
В этом конфиге -- без разницы.
PS : не подскажешь какую оценку статье ты поставил что до тебя рейтинг был 9.33(3), а после тебя стал меньше 8.4 ? Впрочем можешь не отвечать, твой моральный облик мне ясен.
Изображение

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35454
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Статья о PF. Пинайте

Непрочитанное сообщение Alex Keda » 2008-05-25 22:07:30

про оценки...
помню сильно сокрушался, когда какую-то статью оценили совсем плохо...
а потом понял - нельзя всем понраиться и угодить.
также как если у тебя нет врагов - значит нет и друзей.
=========
забей на оценку. Камменты рулят =)))
Убей их всех! Бог потом рассортирует...