Ошибка при загрузке правил пакетного фильтра PF
В последнее время участились попытки атаковать из интернета (чаще всего из китайского сегмента всемирной путины) вверенный мне сервер под управлением FreeBSD 10.0, выступающий одновременно как шлюзом внутренних сетей, так и площадкой для всевозможных интернет-сервисов. Это и обычный спам, и попытка коннектов (сканирование) на закрытые/открытые порты, и даже DoS (“ддосят” все, от почтового сервера до bind’а). Особой популярностью в данное время у доморощенных хакеров пользуются готовые наборы для попытки эксплуатации недавно обнаруженной бреши в bash. Для отражения таких поползновений мной используется пакетный фильтр PF, в конфигурационном файле которого указана таблица из внешнего файла, в который мной автоматически заносятся ip-адреса, с которых производились попытки действий деструктивного характера. |
Однако, сегодня, при попытке перечитать правила из конфигурационного файла для PF, выскочила следующая ошибка:
# pfctl -f /etc/pf.conf /etc/pf.conf:139: cannot define table spammers: Cannot allocate memory pfctl: Syntax error in config file: pf rules not loaded
Правила для пакетного фильтра PF хранятся мной в файле /etc/rc.conf
. Выяснить это можно так:
# less /etc/rc.conf | grep pf pf_enable="YES" pf_rules="/etc/pf.conf" pf_flags=""
Вот кусок конфигурационного файла для PF, отвечающий за загрузку таблицы (в моем случае – spammers) из внешнего файла:
# less /etc/pf.conf | grep spammers table <spammers> persist file "/root/spammers" block in quick on $ext_if from <spammers> to $ext_addr
В файл /root/spammers
автоматически заносятся ip-адреса. Каждой строке должен соответствовать один ip-адрес. Так вот, данный файл стал насчитывать более 100 000 строк:
# less /root/spammers | wc -l 101033
А в настройках по-умолчанию для PF таблица может быть как раз не более 100 000 строк (смотрим последнюю строчку вывода команды pfctl -s memory
):
# pfctl -s memory states hard limit 10000 src-nodes hard limit 10000 frags hard limit 5000 tables hard limit 1000 table-entries hard limit 100000
Для того чтобы увеличить table-entries hard limit необходимо в конфигурационный файл PF внести следующее:
# nano -w /etc/pf.conf ... set limit table-entries 500000 ...
которая установит этот параметр в 500 000. Перезапустим пакетный фильтр PF и проверим результат:
# /etc/rc.d/pf restart Disabling pfpf disabled . Enabling pfpf enabled . # pfctl -s memory states hard limit 10000 src-nodes hard limit 10000 frags hard limit 5000 tables hard limit 1000 table-entries hard limit 500000
Желаемое достигнуто, больше ошибок при перечитке правил PF не возникло:
# pfctl -f /etc/pf.conf #