Шахтинская Linux User Group. Поддержка пользователей Linux и Unix. Обмен дистрибутивами.

Модераторы: ShurShun, Vitas

Ответить
Денис
Не в сети
Администратор
Администратор
Сообщения: 887
Зарегистрирован: Пт авг 08, 2003 17:15
Откуда: Шахты

Мониторинг траффика с помощью tcpdump

Сообщение Денис »

Недавно появилась задача логирования траффика, кто куда ходил, да что делал. А связано было это с тем, что в очередной раз пользователь начал доказывать, что он не скачивал ничего, а лимит оказывается уже исчерпан. Устал доказывать, что он не может сам себя исчерпать и написал простенький (трудно даже назвать его словом скрипт) скрипт.

первое, что приходит на ум, использовать iptraf, который ведет логи и оставляет информацию о соединениях в удобочитаемом виде.

Код: Выделить всё

/usr/bin/iptraf -i eth1 -L /home/dennis/logs/iptraf_`date +%d`_`date +%m`_`date +%y` -B -t 1380
-i eth1 - интерфейс, на который смотреть,
-L /home/dennis/logs/iptraf_`date +%d`_`date +%m`_`date +%y` имя файла, которое составляется из текущей даты, и куда потом будут складываться логи,
-B оставить процесс в бэкграунде (вместо B можно использовать системный ключ в конце строки &, который позволяет отаттачиться от процесса после его запуска и передать управление родительскому)
-t 1380 задать количество минут, в течение которых будет работать iptraf.

и скормить эту строчку крону, но такое решение оставляет желать лучшего, т.к. каждый! из пролетающих пакетов оставляет след в файле. И за день логирования в нашей небольшой сети лог разрастается до внушительных размеров. На самом деле не нужно знать информацию о всем соединении, достаточно только зафиксировать прохождение SYN пакета, чтобы знать, с чем соединялся пользователь. iptraf не позволяет использовать фильтры такого рода, поэтому намного удобнее воспользоваться tcpdum - ом.

Аналогичная вышеуказанной строка будет иметь вид:

Код: Выделить всё

/usr/sbin/tcpdump -i eth1 -a  'tcp[tcpflags] & tcp-syn != 0' > /home/dennis/logs/tcpdump_`date +%d`_`date +%m`_`date +%y`
при этом выражение 'tcp[tcpflags] & tcp-syn != 0' позволяет задать жесткое условие, - фильтровать только пакеты с установленным флагом SYN. После чего получаем компактный и удобочитаемый лог. Который можно удобочитать с помощью

Код: Выделить всё

tcpdump -r filename > outfile
некоторые ключи позволяют упростить вывод, например:

Код: Выделить всё

tcpdump -r filename -q > outfile
не выводит информацию об окнах, флагах, номерах последовательностей.

в конце просто добавляем в crontab строчку, и все.

http://www.linuxjournal.com/article/6446
http://www.linuxjournal.com/article/6447
..

Ответить