Packet Filter (PF): установка и настройка

Pa?cket Fi?lter (PF) — Межсетевой экран, разрабатываемый в рамках проекта OpenBSD. Обладает высокой скоростью работы, удобством в конфигурировании и большими возможностями, включая поддержку IPv6. На данный момент используется, помимо OpenBSD, также в NetBSD и FreeBSD, а также основанных на этих трёх MirBSD, DesktopBSD, pfSense и других. PF был даже портирован на Microsoft Windows.

Установка

Чтобы иметь возможность работать с PF, надо пересобирать ядро, указав в нем следующие опции:

device pf
device pflog
device pfsync

Далее, в /etc/rc.conf надо добавить следующие строчки:

pf_enable="YES"
pf_rules="/etc/pf.conf"
pf_flags=""
pflog_enable="YES"
pflog_logfile="/var/log/pflog"
pflog_flags=""

На этом с установкой мы закончили, переходим к конфигурации.

Настройка

Настройка сводится к созданию файла конфигурации /etc/pf.conf и активации PF. Здесь я приведу лишь пример настройки файрвола, где компьютер выполняет роль веб-сервера. Ознакомившись с этими правилами, будет легко написать свои… или же, на крайний случай, дополнить имеющиеся. Сначала я покажу здесь свой конфиг файл, а потом расскажу что в нем за что отвечает.

# макросы
ext_if = "re0"

# ssh, www, webmin
tcp_services = "{ 22, 8080, 10000 }"
# www, ftp, PASV ftp
web_services = "{ 80, 21, >24000 <24003 }"
icmp_types = "echoreq"

int_net = "192.168.0.0/24"
my_pcs = "{ 192.168.0.3, 192.168.0.199, 192.168.0.200 }"

# опции
set block-policy return
set loginterface $ext_if
set skip on lo

# scrub
scrub in

# filter rules
block in
pass out keep state
antispoof quick for { lo $ext_if }

pass in log on $ext_if inet proto tcp from any to ($ext_if)
    port $web_services flags S/SA keep state

# ICMP traffic
pass in inet proto icmp all icmp-type $icmp_types keep state

# letting my computers connect via SSH and use WWW
pass in inet proto tcp from $my_pcs to $ext_if port $tcp_services

Макросы — это, своего рода, переменные, к которым можно будет дальше обращаться. Они могут содержать как одно значение (например, $ext_if), так и несколько (например, $tcp_services). В них я указываю названия сетевого интерфейса, указываю какие порты открывать для админов, а какие для всех остальных, указываю внутреннюю подсеть и мои личные компы.

В опциях первые два параметра отвечают за действия по умолчанию для правил block и включение логов для нашего сетевого интерфейса. Опция set skip on lo означает, что мы отключаем фильтрацию на loopback интерфейсе. Опция scrub in отвечает за «нормализацию» пакетов, что позволяет предотвратить некоторые атаки на компьютер и защищает от «кривых» пактов.

Далее, идут сами правила. Мы все блокируем по умолчанию на входе, но пропускаем все на выход. antispoof — как видно из названия — это защита от спуфинга. И три правила:

  1. Открываем всем порт 80 (это мои сайты)
  2. Пропускаем icmp-пакеты
  3. Открываем доступ по SSH и WWW (порт 80 и 8080) для моих компьютеров

Вот и все. Остается лишь активировать PF и загрузить в него свои правила. Делается это следующими двумя командами:

# pfctl -e
# pfctl -f /etc/pf.conf

Ссылки по теме

1. wikipedia.org о PF
2. хендбук
3. хорошее руководство

2 комментария

  1. Уведомление: Squid + Sarg | Мой блог

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *