pflog user-space программы могут получать logging data
из ядра. Если PF включен (enabled) во время загрузки системы, запускается демон
pflogd(8).
По умолчанию pflogd прослушивает интерфейс pflog0 и записывает
все протоколируемые данные в файл /var/log/pflog.
log.
Параметр log говорит о том, что все пакеты, которые попадают под PF
правило его содержащее, должны быть занесены в протокол (log-файл).
В том случае, когда правило создает состояние,
в log-файл будет занесен только первый пакет (тот, который это состояние создал).
Опции, которые могут быть использованы с парамертом (keyword) log:
all
to pflogN
pflog0 создается автоматически.
user
pass in log (all, to pflog1) on egress inet proto tcp to egress port 22
Прочитать его содержимое можно вот так:
# tcpdump -n -e -ttt -r /var/log/pflogУчтите, что при просмотре pflog файла при помощи tcpdump вы не увидете информацию в реальном времени. Просмотр протоколируемых пакетов в реальном времени можно увидеть при помощи
pflog0 интерфейса:
# tcpdump -n -e -ttt -i pflog0При чтении/анализе протокола, нужно быть особо осторожным, а именно - учитывать подробное декодирование протоколов tcpdump (активируется опцией командной строки
-v).
Декодер протокола tcpdump не имеет такой уж хорошей истории безопасности. По крайней
мере в теории, возможна отложенная атака с использованием частичной загрузки пакета
устройством протоколирования (logging device).
Поэтому, рекомендованным методом исследования файла протокола является
предварительный перенос log-файла с файрвола на другую машину.
Также нужно быть осторожным при предоставлении доступа к log-файлу. По умолчанию pflogd будет записывать в log-файл первые 160 байт пакета. Доступ к log-файлу может обозначать частичный доступ к содержимому пакета.
# tcpdump -n -e -ttt -r /var/log/pflog port 80Также можно отфильтровать пакеты комбинацией указанных адресов и портов:
# tcpdump -n -e -ttt -r /var/log/pflog port 80 and host 192.168.1.3Такой же способ применим при чтении информации из интерфейса
pflog0:
# tcpdump -n -e -ttt -i pflog0 host 192.168.4.2Обратите внимание, что это не влияет на то, какие пакеты регистрируются в log-файле pflogd; вышеупомянутые команды лишь показывают пакеты, которые были занесены в log-файл.
В дополнение к имеющимся стандартным правилам фильтрации tcpdump(8), tcpdump имеет некоторые дополнительные возможности специально для чтения вывода pflogd:
ip - адреса IPv4.
ip6 - адреса IPv6.
on int - пакет прошел через интерфейс int.
ifname int - то же самое, что и on int.
ruleset name - ruleset/anchor, которому соответствовал пакет.
rulenum num - номер num правила, которому соответствовал пакет.
action act - действие, примененное к пакету.
Возможные действия - pass и block.
reason res - причина, по которой было применено то или иное action.
Возможные причины - match, bad-offset,
fragment, short, normalize,
memory, bad-timestamp, congestion,
ip-option, proto-cksum,
state-mismatch, state-insert,
state-limit, src-limit и synproxy.
inbound - пакет был входящим.
outbound - пакет был исходящим.
# tcpdump -n -e -ttt -i pflog0 inbound and action block and on wi0Эта команда покажет log (в реальном времени) только для входящих пакетов, которые были блокированы на интерфейсе wi0.