Оригинал:Pfstat «how to» ( pfstat.conf )
Перевод:Сгибнев Михаил
Pfstat — это интрумент, который позволяет визуализировать журнальные файлы пакетного фильтра PF. С его помощью можно отобразить загрузку сетевых интерфейсов, количество блокированных пакетов, установленных сессий и многое другое. Pfstat особенно полезен при отслеживании сканирования или DDoS атаках. Пользуясь графическим изображением, вы сможете более лучше понять структуру трафика вашей сети.
Если вы хотите увидеть, что представляют из себя графики, то обратитесь к этой странице. Не пугайтесь слишком маленькому размеру картинок, они кликабельны.
Начало. Содержимое pfstat.conf
Ниже приведен конфигурационный фалй, который вы можете увидеть в последней версии pfstat. Именно он отвечает за генерирование интересующих нас графиков и здесь указана периодичность, с которой он это делает. Возможно, вас заинтересует не весь список.
обратите внимание, что данный файл конфигурации предназначен для Pfstat начиная с 2.2 и выше. Если вы используете более раннюю версию, настоятельно рекомендуем вам обновиться, так как у новых версий возможности значительно расширены.
#######################################################
### Calomel.org pfstat.conf BEGIN
#######################################################
#
## Bytes in and out plus states
#
collect 1 = interface "em0" pass bytes in ipv4 diff
collect 2 = interface "em0" pass bytes out ipv4 diff
collect 3 = global states entries
image "/var/www/htdocs/pfstat/pfstat_day.jpg" {
from 1 days to now
width 980 height 200
left
graph 1 "in" "bytes/s" color 0 192 0 filled,
graph 2 "out" "bytes/s" color 0 0 255
right
graph 3 "states" "entries" color 192 192 0
}
image "/var/www/htdocs/pfstat/pfstat_week.jpg" {
from 1 weeks to now
width 980 height 200
left
graph 1 "in" "bytes/s" color 0 192 0 filled,
graph 2 "out" "bytes/s" color 0 0 255
right
graph 3 "states" "entries" color 192 192 0
}
image "/var/www/htdocs/pfstat/pfstat_month.jpg" {
from 1 months to now
width 980 height 200
left
graph 1 "in" "bytes/s" color 0 192 0 filled,
graph 2 "out" "bytes/s" color 0 0 255
right
graph 3 "states" "entries" color 192 192 0
}
#######################################################
#
## Pass/Block packets per second In/Out
#
collect 4 = interface "em0" pass packets in ipv4 diff
collect 5 = interface "em0" pass packets out ipv4 diff
collect 6 = interface "em0" block packets in ipv4 diff
collect 7 = interface "em0" block packets out ipv4 diff
image "/var/www/htdocs/pfstat/pfstat-packets_day.jpg" {
from 1 days to now
width 980 height 200
left
graph 4 "pass in" "packets/s" color 0 192 0 filled,
graph 5 "pass out" "packets/s" color 0 0 255
right
graph 6 "block in" "packets/s" color 255 0 0,
graph 7 "block out" "packets/s" color 192 192 0
}
image "/var/www/htdocs/pfstat/pfstat-packets_week.jpg" {
from 1 weeks to now
width 980 height 200
left
graph 4 "pass in" "packets/s" color 0 192 0 filled,
graph 5 "pass out" "packets/s" color 0 0 255
right
graph 6 "block in" "packets/s" color 255 0 0,
graph 7 "block out" "packets/s" color 192 192 0
}
image "/var/www/htdocs/pfstat/pfstat-packets_month.jpg" {
from 1 months to now
width 980 height 200
left
graph 4 "pass in" "packets/s" color 0 192 0 filled,
graph 5 "pass out" "packets/s" color 0 0 255
right
graph 6 "block in" "packets/s" color 255 0 0,
graph 7 "block out" "packets/s" color 192 192 0
}
#######################################################
#
## Inserts, removals and searches per second
#
collect 8 = global states inserts diff
collect 9 = global states removals diff
collect 10 = global states searches diff
image "/var/www/htdocs/pfstat/pfstat-states_day.jpg" {
from 1 days to now
width 980 height 200
left
graph 8 "inserts" "states/s" color 0 192 0 filled,
graph 9 "removals" "states/s" color 0 0 255
right
graph 10 "searches" "states/s" color 255 0 0
}
image "/var/www/htdocs/pfstat/pfstat-states_week.jpg" {
from 1 weeks to now
width 980 height 200
left
graph 8 "inserts" "states/s" color 0 192 0 filled,
graph 9 "removals" "states/s" color 0 0 255
right
graph 10 "searches" "states/s" color 255 0 0
}
image "/var/www/htdocs/pfstat/pfstat-states_month.jpg" {
from 1 months to now
width 980 height 200
left
graph 8 "inserts" "states/s" color 0 192 0 filled,
graph 9 "removals" "states/s" color 0 0 255
right
graph 10 "searches" "states/s" color 255 0 0
}
#######################################################
#
## Bits per seconds per Queue (for the Calomel.org PF Example)
#
collect 11 = queue "ack" pass bytes diff
collect 12 = queue "dns" pass bytes diff
collect 13 = queue "ssh" pass bytes diff
collect 14 = queue "bulk" pass bytes diff
image "/var/www/htdocs/pfstat/pfstat-queues_day.jpg" {
from 1 days to now
width 980 height 150
left
graph 11 bps "ack" "bits/s" color 0 192 192,
graph 12 bps "dns" "bits/s" color 192 0 192,
graph 13 bps "ssh" "bits/s" color 255 0 0,
graph 14 bps "bulk" "bits/s" color 192 192 0
}
image "/var/www/htdocs/pfstat/pfstat-queues_week.jpg" {
from 1 weeks to now
width 980 height 150
left
graph 11 bps "ack" "bits/s" color 0 192 192,
graph 12 bps "dns" "bits/s" color 192 0 192,
graph 13 bps "ssh" "bits/s" color 255 0 0,
graph 14 bps "bulk" "bits/s" color 192 192 0
}
image "/var/www/htdocs/pfstat/pfstat-queues_month.jpg" {
from 1 months to now
width 980 height 150
left
graph 11 bps "ack" "bits/s" color 0 192 192,
graph 12 bps "dns" "bits/s" color 192 0 192,
graph 13 bps "ssh" "bits/s" color 255 0 0,
graph 14 bps "bulk" "bits/s" color 192 192 0
}
#######################################################
#
## All other Counters
#
collect 15 = global counters match diff
collect 16 = global counters bad-offset diff
collect 17 = global counters fragment diff
collect 18 = global counters short diff
collect 19 = global counters normalize diff
collect 20 = global counters memory diff
collect 21 = global counters bad-timestamp diff
collect 22 = global counters congestion diff
collect 23 = global counters ip-option diff
collect 24 = global counters proto-cksum diff
collect 25 = global counters state-mismatch diff
collect 26 = global counters state-insert diff
collect 27 = global counters state-limit diff
collect 28 = global counters src-limit diff
collect 29 = global counters synproxy diff
image "/var/www/htdocs/pfstat/pfstat-errors_day.jpg" {
from 1 days to now
width 980 height 200
left
graph 17 "frag" "/s" color 192 0 192,
graph 22 "cong" "/s" color 0 192 192,
graph 23 "iopt" "/s" color 0 0 255,
graph 24 "csum" "/s" color 192 192 0,
graph 25 "mism" "/s" color 255 0 0
# others are usually all zero here
right
graph 15 "match" "/s" color 0 192 0
}
image "/var/www/htdocs/pfstat/pfstat-errors_week.jpg" {
from 1 weeks to now
width 980 height 200
left
graph 17 "frag" "/s" color 192 0 192,
graph 22 "cong" "/s" color 0 192 192,
graph 23 "iopt" "/s" color 0 0 255,
graph 24 "csum" "/s" color 192 192 0,
graph 25 "mism" "/s" color 255 0 0
# others are usually all zero here
right
graph 15 "match" "/s" color 0 192 0
}
image "/var/www/htdocs/pfstat/pfstat-errors_month.jpg" {
from 1 months to now
width 980 height 200
left
graph 17 "frag" "/s" color 192 0 192,
graph 22 "cong" "/s" color 0 192 192,
graph 23 "iopt" "/s" color 0 0 255,
graph 24 "csum" "/s" color 192 192 0,
graph 25 "mism" "/s" color 255 0 0
# others are usually all zero here
right
graph 15 "match" "/s" color 0 192 0
}
#######################################################
### Calomel.org pfstat.conf END
#######################################################
Установка
Шаг 1: устанавливаем pfstat из пакетов, либо компилируем из исходных текстов. В нашем примере, мы испольуем пакет версии 2.2 для OpenBSD.
Шаг 2: Помещаем файл конфигурации на положенное ему место в /etc/pfstat.conf. Имеет смысл сохранить pfstat.conf, представленный в системе по умолчанию. Так же убедитесь, что изменили имя сетевого интерфейса с «em0» на то, которое используется у вас.
Не торопитесь и просмотрите файл конфигурации, чтобы поближе ознакомиться с опциями. Например раздел «Bits per second per Queue (for the Calomel.org PF Example)», возможно, должен был бы быть изменен, чтобы имена очередей соответствовали тем, которые прописаны в вашем pf.conf.
Шаг 3: Pfstat будет создавать графики в формате jpg в том, каталоге, который вы указали. В нашем примере, они складываются в «/var/www/htdocs/pfstat/», где они будут доступны web-серверу. Перед запуском Pfstat убедитесь, что вы создали необходимую структуру каталогов.
Шаг 4: Убедитесь, что включили сбор статистики с интерфейсов командой ‘pfctl -l iface’ (3.1-stable и ранее) или ‘set loginterface iface’ в pf.conf (-current), иначе ваши графики будут пусты.
Работа pfstat
Шаг 5: Pfstat должен запускаться каждую минуту для сбора статистики с интерфейсов. Эти данные должны быть помещены в файл /var/db/pfstat.db и доступны для скриптов генерации графика и очистки.
Самый лучший путь — поместить pfstat в список задач cron. Необходимо запускать три задачи:
- «pfstat -q -d /var/db/pfstat.db» каждую минуту для сбора статистики с интерфейса
- «pfstat -p -d /var/db/pfstat.db» в рабочее время в первые 10 минут каждого часа для генерации графиков
- «pfstat -t 30 -d /var/db/pfstat.db» раз в сутки для очистки базы данных, сохраняя значения крайних 30 дней
В виде файла crontab это будет выглядеть так:
#minute (0-59)
#| hour (0-23)
#| | day of the month (1-31)
#| | | month of the year (1-12)
#| | | | day of the week (0-6 with 0=Sun)
#| | | | | commands
#| | | | | |
#### Generate pfstat graphs
* * * * * /usr/local/bin/pfstat -q -d /var/db/pfstat.db
10 6-19 * * * /usr/local/bin/pfstat -p -d /var/db/pfstat.db
25 3 * * * /usr/local/bin/pfstat -t 30 -d /var/db/pfstat.d
При необходимости, можно уменьшить размер графических файлов. Это делается двумя способами:
С помощью скрипта reduce_pfstat_size.sh, который снижает качество до 30%. Для его использования, необходимо запускать его после «pfstat -p -d /var/db/pfstat.db».
#!/bin/csh
#
## Calomel.org reduce_pfstat_size.sh
#
## Change to pfstat graph directory
cd /var/www/htdocs/vault/
#
## Reduce the quaility of pfstat jpgs to 30%
foreach file ( pfstat*.jpg )
djpeg $file | cjpeg -optimize -quality 30 > $file:r.temp
mv $file:r.temp $file
end
Если вы собираете Pfstat из исходных текстов, то можно нати строки:
if (matrix->type == 0)
gdImageJpeg(im, out, 95);
else
gdImagePng(im, out);
Число 95 обозначает качество изображения. Вы вполне можете поставить тут то значение, которое вам больше нравится.
[ad name=»Google Adsense»]
Уважайте труд автора, сохраняйте копирайты.
Реклама на сайте висит не просто так и если статья Вам понравилась, с ее помощью Вы можете отблагодарить автора за проделанную работу. Спасибо!