Include Page | ||||
---|---|---|---|---|
|
Hide_comments |
---|
Scroll Ignore | ||||||
---|---|---|---|---|---|---|
Содержание
|
...
Code Block | ||||
---|---|---|---|---|
| ||||
list show | reset rearrange [STEP] flush quiet | -quiet del RULE_NUMBER dump RULE_NUMBER mov RULE_A RULE_B add[out] [NUM] [IFNAME] [chN] rules... rules: [{setpri|addpri}=[N]] accept|reject|rpfilter|pass [log] [vlan={N|any|$ACL}] [dot1p=N] [swg=N] [ether={X|any}] [dscp=N|tos=N] [prf] -f "pcap filter expression" | PROTO from [not] ADDR [PORTs] to [not] ADDR [PORTs] PROTO: [all] | tcp | udp | icmp | arp | proto NUMBER ADDR: IP | $LOCAL | $ROUTE | $ACL | mac x:x:x:x:x:x } PORTS: NUM[:NUM] [NUM] ... |
Параметры
Параметр | Описание | |||||||
---|---|---|---|---|---|---|---|---|
list | Выводит текущий набора фильтров. | |||||||
show | reset | Вывод/сброс статистики созданных фильтров. | |||||||
rearrange [STEP] | Перенумерация всех фильтров с шагом "STEP" (по умолчанию 5). | |||||||
flush | Все определенные в данный момент фильтры удаляются. Механизм фильтрации отключается. | |||||||
quiet | -quiet | Отключение регистрации отброшенных пакетов. По умолчанию регистрация включена, для отключения её следует выполнить команду "ipfw quiet". | |||||||
del RULE_NUMBER | Удаление указанного фильтра из списка. Порядковый номер фильтра можно посмотреть командой "ipfw list". | |||||||
dump RULE_NUMBER | Отображает скомпилированный псевдо-код фильтра, заданный в формате PCAP. Позволяет визуально оценить сложность/оптимальность, либо корректность полученного фильтра. | |||||||
mov RULE_A RULE_B | Перемещает фильтр с номером "A" в позицию "B". | |||||||
add[out] [NUM] [IFNAME] [chN] rules... | Используются для добавления фильтра в набор для обработки входящих пакетов, при добавлении части "out" фильтр затронет обработку исходящих с устройства пакетов.
| |||||||
rules: [{setpri|addpri}=[N]] accept|reject|rpfilter|pass [log] |
| |||||||
PROTO from [not] ADDR [PORTs] to [not] ADDR [PORTs] | Классификаторы уточняют определенное направление передачи от и/или к ID:
Возможные форматы :
Запись "0/0" описывает все возможные IP-адреса. | |||||||
PROTO: [all] | tcp | udp | icmp | arp | proto NUMBER | Классификаторы ограничивают по признаку соответствия определенному протоколу. Возможные протоколы: TCP, UDP, ICMP, ARP, либо числовое значение номера протокола. ARP-пакеты будут всегда пропускаться для тех IP-адресов и диапазонов IP-адресов, которые указаны в разрешающих (accept) фильтрах, даже если эти фильтры созданы для других типов пакетов. | |||||||
ADDR: IP | $LOCAL | $ROUTE | $ACL | mac x:x:x:x:x:x } | Если необходимо составить фильтр, который применяется к нескольким сетевым адресам или группам, то вместо повторения однотипных правил удобнее и эффективнее сгруппировать все фигурирующие адреса в соответствующий список доступа и указать имя списка в качестве IP-адреса ($ACLRULE). Существует несколько предопределённых динамических списков:
| |||||||
PORTS: NUM[:NUM] [NUM] ... | Используется для фильтрации трафика по номерам портов. Можно использовать список портов для указания сразу нескольких портов в одной команде. Первый элемент списка портов может задавать диапазон номеров от меньшего к большему, разделённый двоеточием. |
Расширить действие фильтров можно при помощи pcap-выражений.
...
- Если фильтры не заданы, пакет принимается.
- Если фильтры заданы, первый подходящий фильтр решит судьбу пакета. Если фильтр разрешающий, пакет принимается, если запрещающий – пакет отбрасывается.
- Если ни один из фильтров не подходит пакету, пакет принимается.
Примеры
Установим фильтр, запрещающий прохождение всех пакетов с IP-адреса "1.1.1.1" на адрес "2.2.2.2".
| |||||||||||||||||||||
Установим фильтр, запрещающий прохождение пакетов из сети "1.1.1.0/24" на IP-адрес "2.2.2.2".
Либо.
Установим фильтр, полностью блокирующий все пакеты из сети "1.1.1.0" класса C, посланные на любой адрес (если они будут проходить через данный маршрутизатор).
| |||||||||||||||||||||
Установим фильтр, позволяющий всем пакетам TCP обращаться к сервису smtp (почтовый агент) на устройстве с IP-адресом "192.5.42.1". Сервис "smtp" определяется номером порта 25.
| |||||||||||||||||||||
Установим фильтр, который разрешит прохождение TCP-пакетов на IP-адрес "1.1.1.1", если целевой порт при этом попадает в диапазон от 900 до 5000 или равен 25 (smtp) или 113 (ident).
| |||||||||||||||||||||
В предыдущих примерах IP-адрес отправителя использовался как главный и единственный критерий проверки надежности источника. К сожалению, есть возможность посылать пакеты с ненадежного IP-адреса, подставляя в качестве обратного адреса тот, которому вы доверяете (этот вид атаки называется IP-spoofing). Помимо проверок IP-адреса необходимо также проверить, каким путём шёл пакет или, что более практично, через какой сетевой интерфейс он был принят. Все подсети внутренней сети, включая и IP-адрес внутреннего хоста "innerhost", принадлежат одной сети (или группе сетей). Предположим, что во внешней сети нет ни одного хоста, принадлежащего диапазону, выделенному для внутренней сети. Следовательно, любые пакеты, которые принимаются через интерфейс "rf5.0" маршрутизатора, на котором запущен Firewall, и имеют IP-адрес отправителя, принадлежащий диапазону адресов внутренней сети, должны блокироваться. Следующая команда позволяет сделать это, причём этот фильтр будет применяться только к пакетам, приходящим через интерфейс "rf5.0". Пакеты, поступающие через любой другой интерфейс, блокироваться не будут.
Дополнительно можно заблокировать прохождение пакетов с IP-адресом отправителя из закольцованной сети (loopback) "127.0.0.0".
| |||||||||||||||||||||
TCP/IP-клиенты обычно используют порты в диапазоне от 900 до 5000, а сервера обычно обслуживают порты с номерами ниже 900 или выше 5000. Следовательно, следующая пара фильтров позволит запретить любым внешним клиентам работу с нашими серверами (предполагается, что "rf5.0" - это интерфейс, соединяющий нас с внешней сетью). Установим фильтр, который будет пропускать все входящие извне пакеты, посылаемые на сервисы с портами в диапазоне от 900 до 5000 (обычно используемые клиентами), а второй фильтр будет отбрасывать всё остальное.
| |||||||||||||||||||||
В отличие от протокола TCP, который ориентирован на установление соединений, UDP-протокол использует отдельные пакеты (датаграммы). В этом протоколе каждый пакет передаётся независимо от других, и логические сеансы, которые могли бы устанавливаться между UDP/IP-клиентом и сервером, существуют только на уровне приложений и не видны на уровне UDP. Поскольку все пакеты независимы, по заголовку пакета невозможно определить, посылается пакет от сервера клиенту или наоборот (фактически, в протоколе UDP, участники действуют как равноправные партнёры и термины сервер и клиент явно не определены). Поэтому лучшее, что можно сделать, это как можно более точно определить диапазон портов UDP, который может использоваться для связи с внешним миром. Заблокируем весь трафик UDP, приходящий на сетевой интерфейс "rf5.0", установив при этом фильтр, разрешающий взаимодействие между нашим и внешними DNS-серверами (для обмена данными с сервером DNS используется порт 53).
|