Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
Очумелые Ручки
OpenBSD
  Демоны
  Web
  Packet Filter
  простой конфиг PF
  конфиг для офисов
  Настройка
  Файловая система
Cisco


www.lissyara.su —> статьи —> OpenBSD —> Packet Filter —> простой конфиг PF

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

Автор: Grishun_U_S.


Настройка 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
    (смотрим тут какая красота получается);
  • нормализовать пакеты. Полезно от некоторых видов dos атак; (scrub).
    Вроде все, ничего не забыл.

    Установка :

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

    /etc/rc.conf.local
    
    pf=YES
    

    и можно еще указать конфиг файл
    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" 
    

    и ведение лога (как смотреть лог - файл читайте в конце 2 части)
    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 этого
    ##  не требуется), а второе нужно когда пытаемся коннектиться 
    ## к хосту, который в дауне.
    
    # сети и хосты
    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
    



    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, запрещающая спуфинг, поэтому из моей задумки ничего не вышло. Но, говорят, есть еще провайдеры где эта схема работает.

    В следующей статье рассмотрим более сложный конфиг с очередями ALTQ, серверами в DMZ, требующими доступ снаружи, и ограниченным списком сервисов, к которым могут обращаться пользователи нашей сети. Ну и если получится, завернем трафик на squid.

    Список литературы :

  • [1] The book of pf (лежит на фтп, называется the.book.of.pf.pdf)
  • [2] OpenBSD PF FAQ
  • [3] Vingrad forum, network technologies.

    PS: Якори (anchors) подробно разобраны в статье у BlackCat'a, рекомендую.



    Ссылка на обсуждение: Incorrect URL.

    размещено: 2008-05-22,
    последнее обновление: 2010-08-24,
    автор: Grishun_U_S

    оценить статью:

    greg_b, 2008-05-22 в 14:48:38

    афтару респект. скоро придеться мутить новый сервер. часть помощи оказана

    Morty, 2008-05-22 в 21:36:37

    здорово, вообще - радует появление на сайте статей про PF

    m0ps, 2008-05-23 в 16:49:26

    http://house.hcn-strela.ru/BSDCert/BSDA-course/apc.html
    вот еще хорошая дока по pf. лично я разобрался в pf по ней.

    m0ps, 2008-05-23 в 16:52:13

    и еще... не затронут вопрос об ftp, думаю об нем стоит сдесь упомянуть, сам немного помучился с ним.

    Grishun_U_S, 2008-05-23 в 20:30:21

    ftp рассмотрим в следующей статье

    Allex, 2008-05-25 в 11:01:30

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

    Grishun_U_S, 2008-05-25 в 21:28:49

    А теперь представим ситуацию как на сайт вваливается Allex_nsk с большим желанием поднакакать. Статью он не читает, зато горазд на хлесткие каменты. Ведь если бы он читал внимательно, то увидел бы :
    "В следующей статье рассмотрим более сложный конфиг с очередями ALTQ, серверами в DMZ, требующими доступ снаружи, и ограниченным списком сервисов, к которым могут обращаться пользователи нашей сети. Ну и если получится, завернем трафик на squid."

    Daywalker, 2008-06-16 в 0:20:35

    А где используется udp_services=, который объявлен в начале конфига pf?

    Grishun_U_S, 2008-06-16 в 11:40:28

    Остался с прошлого конфига, в котором использовалось правило :
    pass out on $ext_if_cheap from $ext_if_cheap to any port $udp_services keep state, позже разрешил весь трафик от шлюза (т.к. там торент клиент и качалка wget). В статье сейчас поправлю, спасибо.

    @c Cr@zY, 2008-06-25 в 10:41:09

    Grishun_U_S, ну где же обещанный продвинутый конфиг?? Сервер-то не ждёт.. хочу с ipfw перейти наконец-таки

    Grishun_U_S,, 2008-06-25 в 10:50:55

    скоро будет, уже пишу..

    DALDON, 2008-07-11 в 17:12:18

    Спасибо, разобрался с pf по статье. И разобрался по ссылке http://house.hcn-strela.ru/BSDCert/BSDA-course/apc.html — основное понимание даёт ссылка, а не статья, но там именно документация а тут хау-то — ОЧЕНЬ правильные и ПОНЯТНЫЕ ПРИМЕРЫ, ОЧЕНЬ помогло вот это - БЕЗ 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




    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 — делал на 7 ой ветке, СПАСИБО Автору за Информацию. Помощь опытного коолеги понадобилась один раз, когда запутался с портов в правилах...  Уже и в правду начинаю подумывать уходить дома и сервера переводить с Linux на FreeBSD в самом деле нету каши всё понятно и чётко.

    alexbs, 2008-11-18 в 17:58:29

    С нетерпением ждём продолжения статьи -> pf + squid

    NIP, 2009-10-29 в 13:39:22

    автор забыл про интересный параментр quick

    ttys, 2009-12-15 в 8:39:15

    ссылка не рабочая http://grishin.000webhost.info/spoof2.GIF

    ОЛОЛО, 2010-12-30 в 3:01:07

    На ПФ входящие не шейпятся.
    Галимая хуйгя

    Дмитрий Уфа, 2011-05-26 в 9:50:52

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

    Как вариант, пользовать NAT в ppp.

    chel, 2011-07-20 в 13:04:09

    ОЛОЛО всё шейпится и входящие и исходящие надо уметь настраивать ;)

    Konstantine, 2011-11-21 в 7:25:13

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

    Dmitry, 2012-09-21 в 4:00:40

    ext_if_cheap="tun0"
    int_if="nfe0"
    icmp_types="{ echoreq, unreach}"
    trusted_lan="{ 192.168.1.0/24, 192.168.2.0/24 }"
    untrusted_lan="10.0.0.0/8"
    localnet="127.0.0.0/8"
    set block-policy return
    set skip on lo0
    set skip on $int_if
    scrub in all
    nat on $ext_if_cheap from $trusted_lan to any -> ($ext_if_cheap)
    antispoof quick for $ext_if_cheap
    block all
    pass out on $ext_if_cheap from $ext_if_cheap to any
    pass out on $ext_if_cheap from $trusted_lan to any
    pass log inet proto icmp all icmp-type $icmp_types

    /etc/rc.d/netif restart
    /etc/pf.rules:14: could not parse host specification
    pfctl: Syntax error in config file: pf rules not loaded

    если же просто перезапускать pf,  то все ок (как бы)

    14я строка:
    pass out on $ext_if_cheap from $ext_if_cheap to any

    fbsd 9.0

    Dmitry, 2012-09-22 в 17:13:46

    И кстати. Не знаю, как у кого, но у меня этот pf стартует так, что все извне открыто, вообще. Это, если компьютер загружается.
    если же его рестартануть посредством /etc/rc.d/pf restart, то все ок. То есть, серис понимает откуда читать правила. Ради интереса, можно переименовать pf.conf, что бы убедиться, что он их читает через rc.conf, где видит путь.

    к примеру, вырубили у меня дома свет, а затем включили. имеем:

    Starting Nmap 4.75 ( http://nmap.org ) at 2012-09-22 15:16 Central Europe Daylight Time
    Interesting ports on 91.189.244.22:
    Not shown: 94 closed ports
    PORT STATE SERVICE
    22/tcp open ssh
    53/tcp open domain
    139/tcp open netbios-ssn
    179/tcp filtered bgp
    445/tcp open microsoft-ds
    646/tcp filtered unknown

    Dmitry, 2012-09-22 в 17:13:47

    И кстати. Не знаю, как у кого, но у меня этот pf стартует так, что все извне открыто, вообще. Это, если компьютер загружается.
    если же его рестартануть посредством /etc/rc.d/pf restart, то все ок. То есть, серис понимает откуда читать правила. Ради интереса, можно переименовать pf.conf, что бы убедиться, что он их читает через rc.conf, где видит путь.

    к примеру, вырубили у меня дома свет, а затем включили. имеем:

    Starting Nmap 4.75 ( http://nmap.org ) at 2012-09-22 15:16 Central Europe Daylight Time
    Interesting ports on 91.189.244.22:
    Not shown: 94 closed ports
    PORT STATE SERVICE
    22/tcp open ssh
    53/tcp open domain
    139/tcp open netbios-ssn
    179/tcp filtered bgp
    445/tcp open microsoft-ds
    646/tcp filtered unknown

    carharot, 2012-09-22 в 19:16:57

    исправил на:
    [code]ext_if_cheap="tun0"
    int_if="nfe0"
    icmp_types="{ echoreq, unreach}"
    trusted_lan="{ 192.168.1.0/24, 192.168.2.0/24 }"      
    untrusted_lan="10.0.0.0/8"                            
    localnet="127.0.0.0/8"                                
    set block-policy return                                
    set skip on lo0                                        
    set skip on $int_if                                    
    scrub in all                                          
    nat on $ext_if_cheap from $trusted_lan to any -> ($ext_if_cheap)
    antispoof quick for ($ext_if_cheap)                    
    block all                                              
    pass out on $ext_if_cheap from ($ext_if_cheap) to any  
    pass out on $ext_if_cheap from $trusted_lan to any    
    pass log inet proto icmp all icmp-type $icmp_types[/code]

    работает.

    pfctl -sa
    TRANSLATION RULES:
    nat on tun0 inet from 192.168.1.0/24 to any -> (tun0) round-robin
    nat on tun0 inet from 192.168.2.0/24 to any -> (tun0) round-robin

    FILTER RULES:
    scrub in all fragment reassemble
    block drop in quick on ! tun0 from (tun0:network) to any
    block drop in quick from (tun0) to any
    block return all
    pass out on tun0 inet from 192.168.1.0/24 to any flags S/SA keep state
    pass out on tun0 inet from 192.168.2.0/24 to any flags S/SA keep state
    pass out on tun0 from (tun0) to any flags S/SA keep state
    pass log inet proto icmp all icmp-type echoreq keep state
    pass log inet proto icmp all icmp-type unreach keep state

    блин. ип засветил.
    прийдется менять)))

    Мфынф, 2013-06-19 в 15:58:41

    chel , входящие не шейпятся.
    Ты оЛЕНЬ

    Александр, 2013-11-03 в 14:07:02

    Больше правильних примеров Ты олень ето не пример. Что би понять мне сначало надо поставить рабочий пример.

    На один канал и на два канала

    Eugene, 2015-10-15 в 14:57:07

    Здравсвтуйте!

    Спасибо за статью, внесла ясно по некоторым вопросам.
    Но имеется еще парочку. В частности, каким образом мне ограничить скорость для определенного ethernet порта?

    Уже который день бьюсь - все бес толку.

    Заранее спс!

    greg_b, 2015-10-15 в 15:16:35

    скорость в битах в секунду на порту не режется, можно попоробовать залимититровать число пакетов через max-src-conn, max-src-conn-rate

    Eugene, 2015-10-15 в 15:53:27

    greg_b, спасибо за ответ!

    А то что нельзя ограничить скорость в бит/с на портах это особенность *BSD?
    Просто для других дистрибутивов есть wondershaper, trickle, которые позволяют это делать.

    Вот пример нашел - http://128bitstudios.com/2010/06/13/stopping-ssh-brute-force-attacks-with-pf-on-freebsd/.

    Буду пробовать под себя менять.
    Мне нужно, что бы для всех входящих соединений с любых ip ограничивалась лишь "скорость"(max-src-conn-rate). Я могу просто убрать параметр max-src-conn?



    Оставьте свой комментарий:
    Ваше имя:   *
    e-mail:  
    жирный
    наклонный
    подчёркнутый
    ссылка
    цвет
    Нынешний год:   *
     


  • Хостинг HOST-FOOD

    2014-07-27, lissyara
    gmirror

    Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
    2013-08-20, zentarim
    Scan+Print server FreeBSD 9

    Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
    2011-11-20, BlackCat
    Разъём на WiFi-карту

    Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
    2011-09-14, manefesto
    Настройка git+gitosis

    Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
    2011-08-14, zentarim
    Wi-FI роутер + DHCP + DNS

    Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
    2011-06-15, -ZG-
    Охранная система на FreeBSD+LPT

    В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
    2011-03-13, terminus
    ng_nat

    Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
    2011-02-20, Капитан
    Nagios+Digitemp

    Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
    2011-02-17, Le1
    Zyxel Configuration

    Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
    2011-02-16, fox
    hast carp zfs ucarp cluster

    HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
    2011-02-04, BlackCat
    Восстановление ZFS

    История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
    2011-02-03, Капитан
    1-Wire

    Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
    2011-01-28, Капитан
    Температура в серверной

    Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
    2011-01-21, m4rkell
    Syslog server

    Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
    2011-01-07, lissyara
    Canon/gphotofs

    Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
    2010-12-13, Al
    IPSec

    Описание принципов работы IPSEC и способов аутентификации.
    2010-12-07, manefesto
    FreeBSD on flash

    Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
    2010-12-05, Fomalhaut
    root ZFS, GPT

    Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
    2010-09-05, Cancer
    Настройка аудиоплеера на ximp3

    Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
    2010-08-31, Cancer
    Установка и настройка OpenVPN

    На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
    2010-08-25, manefesto
    freebsd lvm

    Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
    2010-04-30, gonzo111
    proftpd file auth&quota

    Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
    2010-04-22, lissyara
    tw_cli

    Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
    2010-04-14, fox
    MySQL Master+Master

    MySQL (Master Master) and (Master Slave) Как настроить репликацию…
    2010-03-22, Mufanu
    named 9.7.0

    Система доменных имен (Domain Name Service, DNS) - одна из тех незаметных, закулисных программ, которым не уделяется и половины того внимания, которого они заслуживают.
    2010-03-09, terminus
    DNS zones

    Краткий ликбез про управление DNS зонами. Примеры проведения делегирования прямых и обратных DNS зон.
    2010-03-09, aspera
    Squid+AD (group access)

    Настройка прокси сервера SQUID с автроризацией пользователей в AD. Разделение пользователей на группы
    2010-03-02, BlackCat
    Шлюз: Часть 4

    Настройка дополнительных сервисов: синхронизация времени (OpenNTPD), клиент DynDNS.org.
    2010-03-01, BlackCat
    Шлюз: Часть 3

    Настройка DHCP и DNS серверов для работы внутри частной сети, c поддержкой внутренних (частных зон) DNS, а так же интеграция DHCP и DNS сервисов.
    2010-03-01, BlackCat
    Шлюз: Часть 2

    Конфигурация МСЭ pf для проброса портов с изменением порта назначения и без, а так же поддержки активного режима FTP и ограничения максимального размера сегмента
    2010-03-01, BlackCat
    Шлюз: Часть 1

    Быстрая настройка шлюза/маршрутизатора с установлением PPPoE-соединения, поддержкой NAT и DNS-forwarding.
    2010-02-23, Morty
    darkstat

    Простая считалка траффика, со встроенным веб-сервером. Очень маленькая, может делать отчеты трафика по хостам, портам, протоколам, а также строить графики
    2010-01-23, gonzo111
    squid+sams+sqstat

    Пилим squid и sams - примеры конфигов с объяснениями. Установка SqStat.
    2009-12-19, schizoid
    mpd5 + radius + ng_car + Abills

    Настройка pppoe-сервера с биллинговой системой Abills и шейпером ng_car
    2009-11-16, lissyara
    UFS->ZFS

    Удалённая миграция с UFS на ZFS. Загрузка с раздела zfs. Настройка для работы с малым количеством памяти под архитектурой i386.
    2009-11-13, gx_ua
    fusefs-ntfs

    Установка, настройка и использование fusefs-ntfs, драйвер NTFS, предназанченного для монтирования NTFS разделов под FreeBSD
    2009-11-12, Morty
    LiveCD

    Создание собственного LiveCD с необходимыми вам изменениями, автоматизирование данного процесса, а так же вариант скоростной сборки СД.
    2009-09-27, lissyara
    Samba как PDC

    Контроллер домена - аналог M$ NT4 домена под самбой, без использования LDAP и прочей хиромантии. Просто и быстро =)
    2009-08-30, terminus
    ipfw nat

    Подробное руководство по ipfw nat, сложные случаи конфигурации.
    подписка

        вверх      
    Статистика сайта
    Сейчас на сайте находится: 12 чел.
    За последние 30 мин было: 66 человек
    За сегодня было
    3075 показов,
    507 уникальных IP
     

      Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
      Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

    © lissyara 2006-10-24 08:47 MSK

    Время генерации страницы 0.1546 секунд
    Из них PHP: 66%; SQL: 34%; Число SQL-запросов: 61 шт.
    Исходный размер: 112486; Сжатая: 25234