Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> Security —> ipfwcount

ipfwcount - подсчёт заблокированных пакетов по хостам и по портам.

Автор: lissyara.


    Нашёл в портах небольшую програмку, позволяющую выводить `top` по заблокированным пакетам с хостов и сайтов - данные берёт из лога IPFW. Может оказаться полезной, чтоб глянуть - что происходило на хосте за прошедшее время.
/usr/home/lissyara/>cd /usr/ports/
/usr/ports/>make search name='ipfwcount'
Port:   ipfwcount-0.2.1_1
Path:   /usr/ports/security/ipfwcount
Info:   Summarise ipfw logs by counting and sorting the fields
Maint:  freebsd@deathbeforedecaf.net
B-deps: perl-5.8.8
R-deps: perl-5.8.8
WWW:    http://deathbeforedecaf.net/misc/ports

/usr/ports/>cd /usr/ports/security/ipfwcount
/usr/ports/security/ipfwcount/>make && make install && make clean

После инсталляции выводятся инструкции:

  To summarise ipfw(8) logs in your daily security check:

  * Copy /usr/local/share/examples/ipfwcount/100.ipfwcount to
    /usr/local/etc/periodic/security

  * Add the line

      daily_status_security_ipfwcount_enable="YES"

    to /etc/periodic.conf

Им и следуем:
/usr/local/share/examples/ipfwcount/>cp 100.ipfwcount \
? /usr/local/etc/periodic/security/
/usr/local/share/examples/ipfwcount/>cd /etc
/etc/>echo 'daily_status_security_ipfwcount_enable="YES"' >> /etc/periodic.conf
/etc/>echo 'daily_status_security_ipfwcount_top="50"' >> /etc/periodic.conf

Вторая строка - не по инструкции (вернее из самого файла что скопировали) - определяет сколько IP выводить в `топе`. Вообще, для того чтобы это работало надо во всех правилах, типа
${FwCMD} add deny ip from ${NetIn} to any in via ${LanOut}
${FwCMD} add deny ip from ${NetOut} to any in via ${LanIn}

заменить просто `deny` на `deny log`:
${FwCMD} add deny log ip from ${NetIn} to any in via ${LanOut}
${FwCMD} add deny log ip from ${NetOut} to any in via ${LanIn}

и перезапустить файрволл:
sh /etc/rc.firewall > /dev/null &

Также не забудте поставить ограничения в sysctl на количество логов - иначе могут весь раздел /var засрать:
/usr/home/lissyara/>sysctl net.inet.ip.fw.verbose_limit=1000
net.inet.ip.fw.verbose_limit: 100 -> 1000
/usr/home/lissyara/>

Надо заметить - что сколько по дефолту оно - я даже не знаю, но себе обычно ставлю тыщщу... Хотя - во всех мануалах рекомендуют сотню - правда оснований никаких не приводят... Короче - своей башкой надо думать.
   Кстати - логировать внутренний интерфейс, наверное, не самая лучшая идея - там очень много подропаных пакетов - потому в первой десятке всегда будут внутренние сайты. Лучше логи писать тока с внешнего интерфейса, или выборочно а не по всем правилам. Кстати, вторая строчка, что добавляли в /etc/periodic.conf - с числом 50, это как раз число - какой топ выводить - по дефолту top10, но мне показалось мало, потому сделал top50.
   Ну и всё. Остаётся ждать ночью отчёта о безопасности, на почту. Но - никто не запрещает его запустить руками и посмотреть сразу - что получилось. Мне, правда пришлось скрипт подрихтовать - у меня стоит своя ротация логов - поменял пути.

   P.S. По итогам первой ночи - отчёта не дождался :) Вернее получил такое:
Top 50 denied hosts (ipfw): 
ipfwcount: not found

Top 50 denied ports (ipfw): 
ipfwcount: not found

Путь-то в скрипте был неполный, потому в файле /etc/crontab дописываем путь, т.е. меняем такую строку:
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin

на такую:
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin

и обрадовать демона крона:
killall -1 cron



размещено: 2006-05-23,
последнее обновление: 2006-05-25,
автор: lissyara


mcat, 2006-06-08 в 0:28:30

Наверняка имелась ввиду IPFCOUNT ?

lissyara, 2006-06-08 в 1:25:23

нет. Всё верно. IPFW :)

mick, 2007-02-23 в 12:32:34

Насколько мне известно, то "радовать демона крона" не нужно. Он сам каждую минуту перечитывает свой кофиг

lissyara, 2007-02-23 в 13:17:19

токачто проверил.
ни системный ни пользовательские до kill -1 не видели новых заданий.

mva, 2007-10-30 в 8:00:26

если править через crontab -e сам перечитает

xeo, 2008-02-08 в 18:00:35

К слову о перезапуске крона:
man cron
Additionally, cron checks each minute to see if its spool directory's modification time (or the modification time on /etc/crontab) has changed, and if it has, cron will then examine the modification time on all crontabs and reload those which have changed.



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.119 секунд
Из них PHP: 42%; SQL: 58%; Число SQL-запросов: 77 шт.
Исходный размер: 19859; Сжатая: 5593