почему keep-state стоит на правилах 1040 и 1060, а не на правилах 1050 и 1070?
http://nuclight.livejournal.com/124348.html
Код: Выделить всё
|
v фрагмент ipfw_chk(): начало правила с keep-state
| ______________________
| | ТАБЛИЦА ДИНАМИЧЕСКИХ |
проверить таблицу (неявный check-state): <=======>| ПРАВИЛ |
есть ли соответствующее пакету правило? | (с таймером удаления |
| \ .-------->| для каждого правила) |
нет да-->--перейти к действию в / '----------------------'
| найденном "родительском" ^
v правиле и сбросить таймер |
| в таблице \ |
| \ |
правило N: пакет соответствует указанному | |
условию в статическом правиле номер N ? | указано keep-state:
| \ | создать в таблице
нет да-->----------------->--------|-------> новое динамическое
| | правило |
v v |
перейти к проверке следующего выполнить параметры <---'
по списку статического правила действия статического
| правила N (log, tag, ...)
v |
| выполнить действие, |
| указанное в статическом <-------'
| правиле N и обновить на
| правиле N счетчики
v
Потому, что нам нужно запоминать состояние присвоенной пакету таблицы маршрутизации. Если поставить kepp-state на 1050 и 1070, то порядок действий будет такой:
пришел из локальной сети, на проходе IN пошел по правилам:
- на правиле "1010 prob 0.5 skipto 1060" пакет перепрыгнул на 1060
- на 1060 получил таблицу
- на 1070 в таблицу состояний попала записть IP 192.168.1.56 <-> IP 8.8.8.8 и действие "allow ip"
- на 1070 применяется "allow ip"
трафик ужел дальше, дошел до ната и ухел в интернет.
пришел из интернета, на проходе IN дошел до ната, демаскировался, ушел в проход OUT.
- дошел до 1040 и уже получил неверную таблицу
- дошел до 1050 и на check-state получил действие allow
ответный трафик который сново пришел из локальной сети, на проходе IN пошел по правилам:
- на правиле "1010 prob 0.5 skipto 1060" пакет перепрыгнул на 1040
- на 1040 получил неправильную таблицу
- на 1050 на check-state перепрыгнул на 1070, выполнил действие allow и ушел дальше...
В такой последовательности сессии будут ломаться - пакеты станут произвольно прыгать между подключениями, что нежелательно.