Назад | Перейти на главную страницу

PF OpenBSD состояния

У нас есть сервер OpenBSD, используемый в качестве брандмауэра с использованием известного pf. Брандмауэр подключен к Интернету с одной стороны и к локальной сети с другой. мы испытываем сбой соединения из-за того, что pf достигает максимального количества состояний (которое составляет 20000), это происходит менее чем за час, затем думает, что возвращается в нормальное состояние. Есть ли способ определения хостов, открывающих эти состояния. Помогает ли увеличение количества состояний в pf.conf?

большое спасибо

Здесь вы можете сделать несколько вещей.

Чтобы увидеть, какие хосты отвечают за большое количество записей в таблице состояний, вы можете сделать pfctl -vs state.

Чтобы добавить больше записей в таблицу состояний, вы можете сделать то, что вы предложили (set limit states на большее число), но если есть основная проблема, вы, вероятно, не захотите этого делать.

Вы также можете рассмотреть возможность настройки значений тайм-аута состояния (set timeout), возможно, используя адаптивные тайм-ауты, чтобы быстрее избавиться от старых / устаревших состояний.

Увидеть справочная страница для pf.conf и справочная страница для pfctl Чтобы получить больше информации

[Ссылка: Достижение предела таблицы состояний PF]

Таблицы состояний PF устанавливают лимит разрешенных соединений и, таким образом, ограничивают количество новый соединения, которые принимает брандмауэр. У вас может быть доступная избыточная пропускная способность, но если в таблицах состояний нет свободной емкости, то ваш брандмауэр становится узким местом.

Настроенные ограничения для информации о состоянии доступны через "pfctl"

# pfctl -sm
states        hard limit    10000   
src-nodes     hard limit    10000
frags         hard limit     5000
tables        hard limit     1000
table-entries hard limit   200000

Вышеупомянутые ограничения предварительно устанавливают выделенную память для определенных структур, так что они всегда доступны, а также ограничивают рост упомянутых структур данных. Если трафик вашего брандмауэра превышает указанные выше параметры, производительность будет снижена.

Теперь важно отслеживать влияние вашего трафика на счетчики для вышеуказанных лимитов. Общий вывод «-s info *» дает нам подсказки, где дальше исследовать потенциальные узкие места в нашем брандмауэре.

# pfctl -si
Status: Enabled for XXXXXXXXXXXXXXXX          Debug: Urgent

State Table                          Total             Rate
  current entries                       34
  searches                        96379206           15.2/s
  inserts                           726196            0.1/s
  removals                          726162            0.1/s

На указанном выше шлюзе, подключенном к двум редко используемым ноутбукам, текущие записи очень низкий по сравнению с жесткий лимит 10000 выше. Очевидно, что текущие записи будет изменяться из-за использования, а на более загруженном шлюзе может значительно изменяться.

[Ссылка: Достижение предела таблицы состояний PF, Достигнут жесткий предел открытого состояния BSD]

Важный счетчик, за которым нужно следить pfctl -si это "объем памяти"счетчик. Те же сведения можно получить через systat pf

Из активного шлюза, связывающего наши 6 сайтов, мы получаем следующее при стандартной установке, никаких изменений в таблицах состояний.

# pfctl -si | grep memory
  memory                          209230            0.1/s

Счетчик показывает, как часто PF отказывает хотя бы в одном из «пула (9)». Чем выше число, тем выше частота случаев, когда пакеты, поступающие на межсетевой экран, скорее всего, были отброшены из-за одного из аппаратных ограничений.

В нашем примере выше показано, что ограничение памяти было в 209230 раз больше. ударить.

Следующий обзор - проверка распределения памяти ядра с помощью "vmstat". Чтобы сузить наш поиск до эффектов в таблице состояний pf, мы проверяем запись на pfstatepl.

Ниже мы берем строки с состоянием или Fail (чтобы мы могли получить заголовки столбцов)

# vmstat -m | grep -E "state|Fail"
Name      Size  Requests  Fail   InUse Pgreq Pgrel Npage Hiwat Minpg Maxpg  Idle
pfstatepl  296  213123877 209235  5075  1050     0  1050 1050     0   2308   526
pfstatekeypl 
pfstateitempl

pfstatepl это метка памяти, выделенной для struct pf_state (/usr/src/sys/net/pf_ioctl.c) Сбои действительно кажутся значительными.

pfctl -vvsi | перегрузка grep