Ipfw

Загрузка правил

Итак, вы выбрали правило, поправили его под свои конкретные нужды и хотите его загрузить. Для загрузки правил есть программа, которая называется так же, как и модель ядра — ipfw. Существует два способа загрузки.

Первый способ — загрузить правила из файла:

ipfw /полный/путь/к/файлу

Перед загрузкой не забудьте удалить существующие правила:

ipfw -q -f flush

Второй способ более громоздок, но он более общепринятый. Для загрузки пишется скрипт, который загружает правила по одному. Традиционно, скрипт имеет примерно такую организацию:

#!/bin/sh
ipfw -q -f flush       # чистим
# устанавливаем переменные
oif="bge0"             # мой интерфейс
cmd="ipfw -q add "     # для краткости
ks="keep-state"        # для краткости
# теперь загружаем, используя краткие "макросы"
$cmd 00500 check-state
$cmd 00502 deny all from any to any frag
$cmd 00501 deny tcp from any to any established
$cmd 00600 allow tcp from any to any out via $oif setup $ks
$cmd 00601 allow udp from any to any out via $oif $ks

Чтобы при старте системы всё загружалось автоматически, вам надо дописать в файл /etc/rc.conf строчки:

firewall_enable="YES"
firewall_script="/etc/rc.ipfw"

Упомянутый здесь файл /etc/rc.ipfw может называться и по другому (это имя выбрал я сам). Это просто файл-скрипт, загружающий правила.

Настройте свои таблицы

Редактирование свойств таблицы

В таблицах каждый столбец является свойством элемента в первом столбце. Например, это таблица статей для чтения. Заголовок статьи находится в первом столбце, а столбцы свойств отражают даты, статус, теги и URL. Чтобы отредактировать свойства вашей таблицы, выполните следующие действия:

  • Нажмите на справа от последнего столбца.
  • Или нажмите   в правом верхнем углу таблицы,  .
  • Дайте вашей колонке имя и выберите тип свойства в меню .
  • Щелкните заголовок столбца, чтобы изменить его название и тип содержащегося в нем свойства.
  • Скройте столбцы в таблице, нажав кнопку , затем выключите свойства, которые не нужно отображать. Включите их обратно таким же образом.

Перестановка столбцов и строк

Измените порядок следования таблиц с помощью перетаскивания в приложении на ПК или в браузере.

  • Для строк наведите курсор, затем нажмите и удерживайте значок слева, чтобы перетащить его вверх или вниз.
  • Для столбцов нажмите и удерживайте их заголовки, чтобы перетащить их влево или вправо (как показано ниже).

Совет: Вы также можете изменить расположение столбцов, нажав Properties (Свойства) в правом верхнем углу, а затем используя значок рядом с показанными свойствами, чтобы перетащить их вверх или вниз.

Развернуть содержимое ячейки

Если ваши ячейки содержат много содержимого, вы можете сделать так, чтобы оно отображалось на нескольких строках.

  • Нажмите на значок  в правом верхнем углу вашей таблицы и включите функцию   (Развернуть ячейки).
  • Чтобы в ячейках отображалась только одна строка, отключите разворачивание ячейки .

Вычисления

В нижней части каждого столбца таблицы можно выполнить вычисления, которые покажут вам информацию о данных, содержащихся в этом столбце.

Наведите курсор под последней строкой вашей таблицы, затем нажмите на слово , которое появится под любым столбцом, о котором вы хотите узнать больше:

  • Вы увидите выпадающее меню, содержащее такие варианты расчета:
    • (Подсчитать все): Дает общее количество строк в столбце.
    • (Подсчитать значения): Подсчитывает количество значений свойств, содержащихся в столбце.
    • (Подсчитать уникальные значения): Подсчитывает количество уникальных значений свойств, содержащихся в столбце, пропуская дубликаты.
    • (Считать пустые): Подсчитывает количество строк, в которых нет значения в столбце.
    • : Подсчитывает количество строк, в которых столбец заполнен.
    • (Процент пустых): Дает процент строк, в которых не заполнено выбранное свойство.
    • (Процент не пустых): Дает процент строк, у которых заполнено свойство.
    • (Самая ранняя дата): Если в вашей таблице есть свойства, связанные со временем, например, (время последнего редактирования) или  (создания), вы можете выбрать, когда была отредактирована или создана самая старая строка.
    • (Последняя дата): показывает, когда последний раз редактировался или создавался самый новый ряд.
    • (Диапазон дат): Показывает промежуток времени между самым старым и самым новым временем редактирования или создания.
  • Если в вашей таблице есть свойство , вы разблокируете несколько других вариантов вычислений:
    • (Сумма): Показывает сумму чисел в столбце.
    • (Среднее): Показывает среднее значение чисел в столбце.
    • (Медиана): Показывает медиану чисел в столбце.
    • (Мин): Показывает наименьшее число в столбце.
    • (Макс): Показывает наибольшее число в столбце.
    • (Диапазон): Вычитание наименьшего числа из наибольшего.

Таблицы в представлении временной шкалы

При отображении таблицы на временной шкале нажмите на иконку , которая появляется при наведении слева от каждой строки (или, если таблица не отображается, щелкните правой кнопкой мыши на любом проекте, отображаемом на временной шкале), чтобы вызвать это меню опций:

  • (Удалить): Удаляет строку из временной шкалы.
  • (Дубликат): Создает точную копию строки, расположенной ниже.
  • (Копировать ссылку): Копирует якорную ссылку на конкретную строку в буфер обмена.
  • (Переименовать): позволяет переименовать страницу в строке, не открывая ее.
  • (Переместить в): Позволяет переместить строку в другую рабочую область или страницу, где она будет вложена в качестве подстраницы.
  • (Редактировать свойство): Вызывает меню со всеми свойствами вашей временной шкалы. Щелкните нужное свойство, а затем выберите для него новое значение.

Ограничение трафика

Наконец, ipfw предоставляет возможность, которая никак не связана с безопасностью, но может быть очень полезной при отладке web-приложений. Ipfw может эмитировать торможение сети.

Не вдаваясь в детали (которые всегда можно прочитать в man), приведу сразу пример правил. Загрузить их можно вот такими тремя командами:

ipfw pipe 1 config bw 50Kbit/s queue 20
ipfw queue 1 config pipe 1 weight 50 queue 20
ipfw 00099 add queue 1 tcp from any 9090 to any

Первой командой мы создали трубу (pipe) с скоростью пропускания 50Kbit/s и длиной очереди 20 пакетов. Второй командой мы создали очередь (queue), которая работает с нашей трубой. И третьей командой мы создали правило, которое отправляет в нашу очередь все пакеты, которые идут с порта 9090. То есть даже если вы будете соединяться сами с собой через порт 9090, то ширина канала будет ограничена 50Kbit/s.

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

Я лишь добавлю, что очерёдность выполнения этих трёх команд не важна. А чтобы удалить трубы и очереди, есть две специальные команды:

ipfw -f pipe flush
ipfw -f queue flush

Не забывайте удалять текущие настройки перед загрузкой новых.

Что такое FireWall (коротко)

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

Это всё теория. Главное для нас то, что FireWall — это не программа, а подсистема ядра, что он может блокировать трафик и что его можно гибко настраивать.

Написание правил

Я не буду здесь пересказывать man 8 ipfw. Я приведу готовые примеры.

Пример 1: Можно всё

Чтобы разрешить весь трафик, достаточно одного правила

00100 pass all from any to any

Смысл этого правила понятен и без чтения документации: «Пропускай все пакеты от кого угодно к кому угодно». Это правило пригодится вам во время отладки. Неминуемо у вас будут получаться конфигурации в которых вы будете полностью отрезаны от мира. Это правило — идеальное временное решение.

Первое число это номер правила. Каждое правило пронумеровано и проверяются они в порядке возрастания номеров.

Пример 2: Паранойя

Эти правила разрешают только соединения инициированные вами. Снаружи никто даже не может попытаться подключиться. Ваша машина даже не будет «пинговаться», то есть большинство окружающих будут уверены, что она вообще выключена.

Для пользователя эти правила тоже очень жёсткие, они позволяют ему пользоваться далеко не всеми ресурсами сети.

Давайте рассмотрим эти правила по порядку.

00100 allow all from any to any via lo0
00101 deny all from any to 127.0.0.0/8
00102 deny all from 127.0.0.0/8 to any

00500 check-state

00501 deny all from any to any frag
00502 deny tcp from any to any established

00600 allow tcp from any to any  80 out via bge0 setup keep-state
00601 allow tcp from any to any 110 out via bge0 setup keep-state
00602 allow tcp from any to any 143 out via bge0 setup keep-state
00603 allow tcp from any to any  25 out via bge0 setup keep-state

00700 allow tcp from any to XX.XX.XX.XX 53 out via bge0 setup keep-state
00701 allow udp from any to XX.XX.XX.XX 53 out via bge0 keep-state
00702 allow tcp from any to YY.YY.YY.YY 53 out via bge0 setup keep-state
00703 allow udp from any to YY.YY.YY.YY 53 out via bge0 keep-state

Правила 100-102 разрешают общение вашего компьютера с самим собой. Может оказаться, что вам эти правила не нужны, но без них могут не заработать некоторые программы.

Правило 500 проверяет виртуальные правила (о них чуть ниже). Если виртуальные правила не сработали, то поиск подходящего правила продолжается.

Правила 501 и 502 запрещают все соединения, которые уже созданы.

Правила 600-603 создают виртуальные правила (keep-state), пропускающие (allow) пакеты для соединений, которые инициированы (setup) вами (out via bge0).

Кстати, имя интерфейса bge0 вам следует изменить на имя вашего интерфейса.

Правила 700-703 аналогичны предыдущим, они позволяют вам работать с DNS, причём только с легальными DNS вашего провайдера. Замените XX.XX.XX.XX и YY.YY.YY.YY на адреса ваших DNS. Добавьте или удалите правила по необходимости.

Пакеты, которые не удовлетворяют ни одному правилу, будут блокированы FireWall.

Таким образом мы получили набор правил, который не пропускает входящие пакеты кроме тех, которые пришли в ответ на ваш запрос. Кроме того, вы можете работать только с ограниченным кругом Интернет-сервисов. То есть если у вас заведётся какая-то программа (разве такое возможно под FreeBSD?!), желающая «выйти в интернет» у неё это скорее всего не получится. Кроме того, вы не сможете воспользоваться никакими DNS, кроме тех, которым доверяете. Это сразу резко сужает круг возможных атак.

Пример 3: Разумный компромисс

Параноидальная конфигурация хороша, но уж очень параноидальна. Сам я пользуюсь более либеральными настройками:

00100 pass all from any to any via lo0
00101 deny all from any to 127.0.0.0/8
00102 deny all from 127.0.0.0/8 to any
00500 check-state
00502 deny all from any to any frag
00501 deny tcp from any to any established
00600 allow tcp from any to any out via bge0 setup keep-state
00601 allow udp from any to any out via bge0 keep-state
# allow in to 80
00700 allow tcp from any to any 80 in via bge0 setup keep-state
# ping
02000 allow icmp from any to any out icmptype 8
02001 allow icmp from any to any in icmptype 0

Здесь разрешён весь трафик инициированный мной (на любые порты).

Правило 700 разрешает всем обращаться к Web-серверу, размещённому на моей машине. Вы можете добавить аналогичные правила для других сервисов. На пример:

00701 allow tcp from AA.AA.AA.AA to any 22 in via bge0 setup keep-state

Это правило разрешит обращаться к вашему sshd с машины с IP-адресом AA.AA.AA.AA.

Наконец, правила 2000 и 2001 разрешают вам «пинговать» других. Вас по-прежнему никто «пинговать» не сможет.

Чтобы ping на вас работал, поправьте эти правила вот так:

02000 allow icmp from any to any icmptype 8
02001 allow icmp from any to any icmptype 0

Или напишите просто:

02000 allow icmp from any to any

Это не опасно.

Строго говоря, грамотный хакер сможет много узнать о вашей системе даже с помощью ping, но в большинстве случаев это все же не опасно.

Строки: страницы в режиме просмотра таблицы

Открыть строку как страницу

Каждая строка в таблице Notion — это отдельная страница, на которую можно добавить дополнительный контент.

Наведите курсор на строку и нажмите кнопку ⤢ OPEN (ОТКРЫТЬ).

  • Она откроется в режиме предварительного просмотра. Нажмите в левом верхнем углу, чтобы сделать ее полностраничной.
  • Вы увидите все свои свойства, упорядоченные в верхней части.
    • Нажмите на имя свойства, чтобы отредактировать его или изменить его тип.
    • Щелкните в поле свойства, чтобы изменить его содержимое.
    • Упорядочивайте свойства, наведя курсор и используя для перетаскивания вверх или вниз.
  • Вы также можете добавить новое свойство в таблицу со страницы, нажав .
  • В разделе «Свойства» есть место для комментариев, которые будут приписываться вам. Здесь же можно отметить @- упоминание людей или страниц.
  • Тело страницы можно редактировать так же, как и любую другую страницу Notion. Добавляйте любые блоки контента, включая встроенные базы данных.

Настроить страницу

Когда вы открываете любую страницу, у вас есть возможность изменить ее внешний вид несколькими способами, которые выходят за рамки типографики и размера текста.

Нажмите ••• в правом верхнем углу любой открытой страницы проекта, затем Customize page (Настроить страницу).

  • Вы увидите меню для редактирования внешнего вида и , а также .
    • Для обратных ссылок выберите, показывать ли их развернутыми в теле страницы, во всплывающем окне или выключить.
    • Для комментариев выберите, показывать ли их развернутыми или выключенными в теле страницы.
    • Для свойств можно изменить их расположение с помощью значка , а также выбрать, показывать их всегда, скрывать всегда или показывать только при использовании.

Добавить ряды

Существует несколько способов добавить новый пункт к вашей таблице.

  • Нажмите на , который появляется при наведении курсора рядом с любой строкой. Это создаст новый ряд под ним.
  • Нажмите синюю кнопку в правом верхнем углу. Это создаст новую строку в верхней части и сразу же откроет ее как страницу.
  • Нажмите в нижней части таблицы, чтобы добавить новую строку прямо там.
  • Если вы находитесь в последней строке вашей таблицы, нажмите , и появится новая строка.

Варианты строк

Щелкните на значке , который появляется при наведении слева от каждой строки (или щелкните правой кнопкой мыши на строке), чтобы вызвать это меню опций:

  • : Удаляет строку из списка.
  • : Создает точную копию строки, расположенной ниже.
  • : Копирует якорную ссылку на конкретную строку в буфер обмена.
  • : позволяет переименовать страницу в строке, не открывая ее.
  • : Позволяет переместить строку на другую рабочую область или страницу (где она будет отображаться как подстраница).
  • : Вызывает меню со всеми свойствами вашей таблицы. Щелкните нужное вам свойство, а затем выберите для него новое значение.

Совет: Вы можете применить эти действия сразу к нескольким страницам базы данных. Просто выберите все страницы, которые вы хотите изменить. Затем щелкните правой кнопкой мыши или используйте сочетание клавиш cmd/ctrl + / для массового редактирования свойств!

Подготовка

Прежде всего, вам надо загрузить модуль FireWall в ядро.

Для тестирования, вы можете сделать это «руками» командой:

kldload ipfw

ВНИМАНИЕ! После того, как вы загрузите FireWall вступят в действие настройки по умолчанию и вы будете полностью изолированны от внешнего мира! Поэтому не торопитесь с выполнением этой команды, не прочитав, как настраивать FireWall, или не сохранив инструкции на своём локальном диске. Чтобы модуль загружался сам при каждой загрузке системы, добавьте строчку:

Чтобы модуль загружался сам при каждой загрузке системы, добавьте строчку:

ipfw_load="YES"

в файл /boot/loader.conf.

Строго говоря, /boot/loader.conf можно и не трогать, модуль подгрузится и если в /etc/rc.conf присутствует firewall_enable="YES" (см. ниже).

проброс нескольких портов

ipfw nat 1 config if ng0 same_ports \redirect_port 192.168.1.3:1234 1234 \redirect_port 192.168.1.4:5678 5678

https://ctopmbi4.wordpress.com/category/freebsd/ipfw/

nat one_pass

После проверки nat -ом. если в нате стоит deny_in и записей  в таблице nat нет. то пакет пойдетдальше по правилами фаера.

Если значение стоит 1.sysctl.conf net.inet.ip.fw.one_pass=1  то пакет будут принят создаться запись в нате и пакет дальше по правилам фаера не пойдет.

ПРАВИЛА

Перечитать правила фаера из скрипта например без потери соединения.

/bin/sh /etc/rc.firewall &

Для просмотра динамических правил  опция -d в ipfw

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

ipfw add 100 allow tcp from any to me 80ipfw add 200 allow tcp from me 80 to any

посмотреть ipfw show

00020 11936 1263070 allow ip from any to any via lo0

номер правила, кол-во срабатываний, кол-во байт прошедших через правило и самое правило.

Динамические правила создаются условиями keep-state и limit в правилах, причём динамические правила имеют двухстороннюю направленность. ПРИМЕР:

Если мы перепишем предыдущие два правила в «динамическом ключе«, то получим одноправило:

ipfw add 100 allow tcp from any to me 80 keep-state

Т.о. пакет, приходящий на наш сервер на 80 порт создаёт динамическое правило, которое мы увидим при выводе ipfw -d show:

00100    55 555432(144s) STATE tcp x.x.x.x 56789<-> y.y.y.y 80

Здесь, 00100 — номер правила, 55 — количество пакетов, прошедших через это правило, 555432— количество байт, 144s — оставшееся время, после которого (при отсутствии трафика) правило будет удалено, остальное понятно из контекста.

Соответственно, если имеется правило

00050  0  0  check-state

то оно и будет проверять, существует ли правило в динамической таблице, после чего пакет будет обработан динамическим правилом с обновлением счетчиков в нём.

divert

Если check-state стоит до правил с divert’ом, то пакеты, естественно, в этот divert не попадают. Как следствие, динамические правила просто «устаревают«, не дождавшись обновления и «не пропускают» пакеты потому, что через divert они не прошли, а следовательно имеют «неверные» адреса в заголовке пакета.

тем самым мы ограничиваем скорость от всех до ип адреса 192.168.0.119  ВХОДЯЩИЙ  с интерфеса em0

Посмотреть правила PIPE можно коммандой

ipfw pipe show

либо по  номеру пайпа: ipfw pipe 1 show

очереди queue

для работы группы пользователей по ограниченному каналу с равными или разными приоритетами, необходимо пакеты каждого отдельного пользователя ставить в отдельную очередь. Тогда пакеты будут выходить из pipe в соответствии с приоритетами очередей, в которых они находятся.

есть основная мысль, которая описывает разделение пакетов в pipe. 
Если всем пользователям необходимо равномерно распределять поток, то создавать
вручную количество очередей соответствующее количеству пользователей не
нужно. Мы создаем всего одну очередь
ipfw queue 1 config pipe 1 weight 50 queue 20 mask dst-addr 0xffffffff
параметр mask, в котором указываем что для каждого
отдельного destination адреса будет создаваться своя очередь с такими же
параметрами, как у этой.
 Отметим, что ограничение без потерь возможно только в отношении исходящего
 трафика. Стек протоколов TCP/IP не предусматривает возможности заставить
 удаленную сторону слать пакеты медленнее
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: