Differences between revisions 8 and 9
Revision 8 as of 2014-03-22 22:54:34
Size: 4808
Editor: Ray
Comment:
Revision 9 as of 2014-04-28 13:56:12
Size: 4805
Editor: FrBrGeorge
Comment:
Deletions are marked like this. Additions are marked like this.
Line 44: Line 44:
[[http://www.openbsd.org/faq/pf/ru/tables.html#match|Пример поиска по таблице]]. Обратите внимание на особенность интерпретации записи вида «`!адрес`» [[http://www.openbsd.org/faq/pf/tables.html#match|Пример поиска по таблице]]. Обратите внимание на особенность интерпретации записи вида «`!адрес`»

Особенности FreeBSD/OpenBSD PF

OpenBSD: отказ от разделения преобразующих (nat, rdr) и фильтрующих (bass, block) команд.

pass out on ext_interface from src_addr to dst_addr nat-to ext_addr

    или

match out on ext_interface from src_addr to dst_addr nat-to ext_addr
pass out on ext_interface from src_addr to dst_addr
 
    и

pass in on ext_interface other_filters port ext_port rdr-to int_server [int_port]

см. в PF FAQ

Синтетическое понятие «состояние» PF

Состояние — это набор информации, необходимый для преобразования/перенаправления/допуска потока данных. См., например, два состояния, сохранённых для ping из внутренней сети.

fw-bsd# pfctl -ss
No ALTQ support in kernel
ALTQ related functions disabled
all tcp 10.0.2.15:22 <- 10.0.2.2:38548       ESTABLISHED:ESTABLISHED
all tcp 10.0.2.15:22 <- 10.0.2.2:38559       ESTABLISHED:ESTABLISHED
all tcp 10.30.50.1:18550 -> 10.30.50.3:22       ESTABLISHED:ESTABLISHED
all tcp 10.30.50.3:80 (10.0.2.15:80) <- 10.0.2.2:35520       FIN_WAIT_2:FIN_WAIT_2
all tcp 10.0.2.2:35520 -> 10.30.50.3:80       FIN_WAIT_2:FIN_WAIT_2
all udp 10.30.50.1:53 <- 10.30.50.3:59363       SINGLE:MULTIPLE
all udp 10.0.2.15:55546 -> 192.168.11.1:53       MULTIPLE:SINGLE
all icmp 144.76.222.201:3782 <- 10.30.50.3:3782       0:0
all icmp 10.0.2.15:25608 (10.30.50.3:3782) -> 144.76.222.201:25608       0:0

Понятия "modulate sate" и "synproxy state". Назначение SYN proxy.

Списки, макросы и таблицы

  • Списки: одно правило в pf.conf → N правил

  • Макросы: переменные
  • Таблицы: логарифмический поиск, модификация из userspace без модификаций правил

Пример поиска по таблице. Обратите внимание на особенность интерпретации записи вида «!адрес»

Заполнение таблицы по параметру overload.

Разбор примера

# Firewall for Home or Small Office
# http://www.openbsd.org/faq/pf/example1.html

# macros
ext_if="em0"
int_if="le0"

tcp_services="{ 22, 13 }"
icmp_types="echoreq"

comp3="10.30.50.3"

# options
set block-policy return
set loginterface $ext_if

set skip on lo

# scrub
scrub in

# nat/rdr
nat on $ext_if inet from !($ext_if) -> ($ext_if:0)

rdr on $ext_if proto tcp from any to any port 80 -> $comp3

# filter rules
block in

pass out

antispoof quick for { lo $int_if }

pass in on $ext_if inet proto tcp from any to ($ext_if) port $tcp_services

pass in on $ext_if inet proto tcp from any to $comp3 port 80 synproxy state

pass in inet proto icmp all icmp-type $icmp_types

pass quick on $int_if no state

Замечание (на лекции было замято): параметр loginterface определяет, из какого интерфейса пакеты будут перекладываться в pflog0, чтобы их можно было проанализировать pflogd.

Д/З

Поработать со стендом: Образы клиента и сервера:

  1. FW-PFBSD: сервер, доступ по ssh localhost -p2212, доступ на 80-порт http://localhost:8012

  2. FW-client: клиент с единственной сетью (intnet), адрес 10.30.50.3 (можно попасть из консоли virtualbox или ssh с сервера)

Что можно сделать:

  • Посмотреть правила в /etc/pf.conf

  • Посмотреть, во что они превращаются: pfctl -sa

  • Обратить внимание на якорь (подробнее о якорях — на одной из следующих лекций)
  • Подключиться к http://localhost:8012 (проброс на сервер → проброс средствами PF на клиент)

    • Посмотреть таблицу состояний pfctl -ss

  • Подключиться с клиента куда-нибудь по какому-нибудь протоколу :)

    • Посмотреть таблицу состояний pfctl -ss

LecturesCMC/UnixFirewalls2014/05_OpenbsdPF (last edited 2014-04-28 13:56:12 by FrBrGeorge)