Я использую OS X Mavericks и использую брандмауэр "packet filter". Однако, похоже, что "pflogd" недоступен.
Я обнаружил, что можно создать интерфейс с именем pflog0, а затем использовать tcpdump, чтобы увидеть пакеты, которые pf сбросил. Однако мне хотелось бы иметь файл журнала.
Моим решением было создать launchd plist и создать этот интерфейс при загрузке, запустить tcpdump (как root) и записывать все в /var/pf.log; это работает отлично.
Однако меня немного беспокоит, что tcpdump будет работать весь день в фоновом режиме в режиме root. Стоит ли это делать?
Спасибо
решение1
Я не знаю OS X Mavericks, но я тестировал это на OS X Mountain (не при загрузке):
Редактировать файл/etc/sudoers
Добавьте следующее, чтобы запретить запрашивать пароль:
youruser ALL=(ALL) NOPASSWD: /usr/sbin/tcpdump
Запустите tcpdump в фоновом режиме и запишите данные в файл захвата (главное здесь — это то, &
что заставляет команду работать в фоновом режиме):
sudo tcpdump -i pflog0 -s 0 -B 524288 -w ~/Desktop/myfile.pcap &
Чтобы остановить tcpdump, завершите его, получив идентификатор процесса:
ps -ef
sudo kill pid
Чтобы открыть файл захвата:
tcpdump -s 0 -n -e -x -vvv -r ~/Desktop/myfile.pcap
решение2
Я обнаружил, что tcpdump не требует sudo при прослушивании интерфейса (никаких специальных опций), я думал, что требуется...
В любом случае, я могу просто создать интерфейс со скриптом в /Library/LaunchDaemons и запустить tcpdump с другим скриптом в ~/Library/LaunchAgents и включить ведение журнала. Все работает хорошо :)