rad1us
@rad1us

Как работает setup и keep-state в IPFW?

Цитата из хэндбука:
"setup - это обязательное ключевое слово определяет начало запроса сессии для TCP пакетов.
keep-state - это обязательное ключевое слово. При совпадении межсетевой экран создает динамическое правило, которое по умолчанию будет совпадать с двунаправленным трафиком между отправителем и получателем для данной пары IP/порт по указанному протоколу."


Имеем вот такой простой набор правил закрытого типа:
#!/bin/sh
cmd="ipfw -q add"
skip="skipto 800"
pif="em0"
ks="keep-state"

ipfw -q -f flush

# LOCAL
$cmd 010 allow all from any to any via em1
$cmd 020 allow all from any to any via lo0

# NAT IN
$cmd 100 divert natd ip from any to any in via $pif
$cmd 101 check-state

# OUT
$cmd 120 $skip icmp from any to any out via $pif $ks
$cmd 130 $skip udp from any to any 53 out via $pif $ks
$cmd 140 $skip tcp from any to any 53 out via $pif setup $ks
$cmd 150 $skip tcp from any to any 80 out via $pif setup $ks
$cmd 160 $skip tcp from any to any 443 out via $pif setup $ks

# IN
$cmd 300 allow tcp from any to me 22 in via $pif setup  $ks
$cmd 700 deny ip from any to any

# SKIPTO
$cmd 800 divert natd ip from any to any out via $pif
$cmd 810 allow ip from any to any

$cmd 900 deny ip from any to any


Разберем на примере входящего SSH подключения, как я это понимаю:
Пакет снаружи попадает в фаерволл, на 100 правиле срабатывает нат, дальше пакет попадает под 300 правило, которое во-первых разрешает пакет и тот выходит с фаервола, а во-вторых создает запись в динамической таблице (keep-state). Ответный пакет попадает на 101 правило и улетает с фаервола наружу, пройдя нат. Следующий входящий пакет обрабатывается 100 и 101 правилом, и так как для него уже есть запись в динамической таблице, проходит.
Изучая разные примеры настройки фаерволов, я видел запись и
$cmd 300 allow tcp from any to me 22 in via $pif setup  $ks

и
$cmd 300 allow tcp from any to me 22 in via $pif  $ks

Работает в обоих случаях. Вопрос: зачем тогда нужен setup?, а учитывая что хэндбук говорит что setup обязателен для TCP сессий, я вообще ничего не понимаю...
  • Вопрос задан
  • 3308 просмотров
Решения вопроса 1
athacker
@athacker
setup -- это не обязательное ключевое слово. setup нужно использовать только тогда, когда вам зачем-то нужно отловить именно момент установки TCP-сессии, и что-то сделать с этим соединением (или с самим SYN-пакетом) в дальнейшем. Иными словами, если в правиле есть setup, то оно будет применяться только для TCP-пакетов с установленным флагом SYN. Это самый первый пакет в TCP-сессии, с его помощью клиент запрашивает установку соединения.

В данном случае, насколько я понимаю, целью использования setup является создание динамического правила на основе первого же пакета в TCP-соединении (SYN-пакета), и чтобы все дальнейшие пакеты в рамках этого соединения больше не попадали в правила, где проверяются порты и создаются динамические правила.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы