Мы — долго запрягаем, быстро ездим, и сильно тормозим.
|
||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
|
www.lissyara.su
—> статьи
—> OpenBSD
|
|
и можно еще указать конфиг файл
|
FreeBSD.
Во всех свежих версиях FreeBSD он уже присутствует в качестве загружаемого модуля.
Но я включил его в ядро явно (это необязательно) :
|
и ОБЯЗАТЕЛЬНО включите следующие опции в ядро Вы хотите использовать приоритезацию и очереди ALTQ
|
Все опции файла rc.conf, касающиеся PF:
|
включим PF
|
и ведение лога (как смотреть лог - файл читайте в конце 2 части)
|
Изменения вступят после перезагрузки. Чтобы не перезагружать компьютер можно дать команду
(требует рутовых прав)
|
должно появиться pf enabled. А после перезагрузки он будет запускаться согласно rc.conf
NetBSD
О том, как заставить PF работать в NetBSD читайте в [1].
Часть 2. Разбор конфигурационного файла.
Вообще говоря, конфиг делится на несколько секций, которые должны иметь строгий порядок и не должны
пересекаться. Порядок следующий :
1) макросы
2) таблицы
3) опции
4) параметры нормализации
5) приоретизация и очереди ALTQ
6) правила трансляции
7) правила фильтра
Ниже приведен конфиг с моего домашнего шлюза, не претендует на полноту, т.к. здесь нет таблиц и
очередей ALTQ, но в качестве примера сойдет, тем более что я буду комментировать :
|
И пара слов о keep state. Когда программа (например, браузер из доверенной сети) лезет в интернет — разрешение на исходящий от нас трафик мы указываем явно правилом :
|
мы набираем в строке обозревателя какой - то сайт и запрос от обозревателя поступает на этот сайт. В нашем файрволле устанавливается состояние, означающее что мы ожидаем данных от этого сайта. Так вот если написать
|
БЕЗ keep state (или указав no state), то запрос на сайт поступит, а ответ наш файрвол зарежет. Вот зачем нужен keep state.
И еще одна особенность keep state. Начиная с FreeBSD версии 7.0 (аналогичная версия pf входит в поставку OpenBSD 4.1) keep state применяется ко всем правилам по умолчанию. Если вы не хотите чтобы к некоторым (или ко всем) правилам применялось keep state — пишите явно no state.
Пример из конфига выше.
|
FreeBSD версии 7.0 и выше (или OpenBSD версии 4.1 и выше)
воспримет правило как :
|
а FreeBSD ниже версии 7.0 (или OpenBSD ниже версии 4.1)
воспримет это правило как :
|
в новых версиях BSD (FreeBSD 7.0 и OpenBSD 4.1) лично я предпочитаю все равно явно писать keep state (хотя это необязательно и принимается по умолчанию), потому что особого труда это не составляет, а обратная совместимость со "старыми" версиями PF в наличии. Например, конфиг из пункта 2 взят с сервера под управлением ОС FreeBSD 7.0, но у меня есть сервер и на 6.3, на котором сейчас IPFW в качестве файрвола, потом когда буду переводить все на PF меньше шансов запутаться на такой мелочи как состояния keep state.
По поводу логов. PF пишет лог в бинарном формате, поэтому если смотреть его обычным просмотрщиком Вы увидите сплошные крякозябры. Читать его можно с помощью tcpdump, командой
|
Часть 3. IP spoofing.
Несколько месяцев назад у меня была задача организовать ip spoofing под FreeBSD; коротко, ip spoofing — это подмена ip адреса отправителя. Спуфинг надо сказать планировался в мирных целях, имелось 2 канала :
1) быстрый и помегабайтный (оплата за входящий трафик);
2) медленный и безлимитный (абонемент на 1 месяц);
хотелось получить один гибридный ассиметричный канал с большой скоростью на отдачу и при этом платить только за безлимит. Погуглив чутка я выяснил что это можно реализовать с помощью ip spoofing'a сделав следующее :
1) сделать дефолтовым маршрутом интерфейс с быстрым инетом;
2) отправлять с быстрого канала пакеты с исходным адресом безлимита (тогда пакеты пройдут именно тот путь что отмечен красными стрелками на рисунке);
Мне подсказали что это умеет pf. Вот эта строчка в конфиге позволяет подменить адрес отправителя :
|
где
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, рекомендую.
|
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?
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"a
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-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, сложные случаи конфигурации.
2009-08-24, levantuev
HotSpot
Установка Hotspot системы в общественное заведение.
вверх
|
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
Комментарии пользователей [28 шт.]