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.