- PVSM.RU - https://www.pvsm.ru -
По долгу службы, мне часто приходится анализировать NFS-трафик. Wireshark является моим основным инструментом и для него я даже создавал расширение [1] на lua. Но чего-то не хватало. И вот две недели назад я наткнулся на новый для меня инструмент Packetbeat [2]. К сожалению, paketbeat не поддерживает не поддерживал NFS, но этот недостаток мне удалось исправить.
Paketbeat — это один из инструментов из комплекта beats [3] от создателей elasticsearch, logstash и kibana. Это отправитель (shipper) данных в elasticsearch, который слушает сетевой трафик, конвертирует его в json-записи и посылает в elasticsearch. Если вы используете Kibana4, то есть [4] стандартные панели для визуализации собранного трафика. На данный момент, packetbeat распознаёт TCP, UDP, DNS, ICMP, HTTP, memcache, MongoDB, redis, PostgreSQL, MySQL, thrift и, теперь уже, NFS. Где-то внутри, packetbeat использует libpcap.
Packetbeat написан на go. Код находится на гитхаб и содержит файл с инструкцией как добавить новый протокол. Что отсутствует, так это 'желаемый' формат создаваемого json объекта.
Обработка NFS (как и наверно всего остального) трафика происходит по следующей схеме:
Созданная запись выглядит так:
{
"@timestamp": "2016-03-28T06:18:18.431Z",
"beat": {
"hostname": "localhost",
"name": "localhost"
},
"count": 1,
"dst": "127.0.0.1",
"dst_port": 2049,
"nfs": {
"minor_version": 1,
"opcode": "GETATTR",
"status": "NFSERR_NOENT",
"tag": "",
"version": 4
},
"rpc": {
"auth_flavor": "unix",
"call_size": 200,
"cred": {
"gid": 500,
"gids": [
491,
499,
500
],
"machinename": "localhost",
"stamp": 4597002,
"uid": 500
},
"reply_size": 96,
"status": "success",
"time": 25631000,
"time_str": "25.631ms",
"xid": "2cf0c876"
},
"src": "127.0.0.1",
"src_port": 975,
"type": "nfs"
}
Имея эти данные можно получить следующую информацию:
(ваши варианты)
Самым простым вариантом будет запустить packetbeat на NFS сервере. Если такая возможность отсутствует, то можно использовать port mirroring на свиче. Подробно об этом можно прочитать тут [5].
Packetbeat имеет конфигурационный файл, где нам нужно сказать, что он должен делать:
interfaces:
device: any
protocols:
nfs:
ports: [2049]
logging:
level: info
output:
elasticsearch:
hosts: ["elasticsearch.node.name:9200"]
Указывается конфигурационный файл ключом '-c'.
Надеюсь дочитав до этого места вы узнали что-то новое.
Автор: tmk826
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/golang/116865
Ссылки в тексте:
[1] расширение: https://habrahabr.ru/post/241513/
[2] Packetbeat: https://www.elastic.co/products/beats/packetbeat
[3] beats: https://www.elastic.co/products/beats
[4] есть: https://github.com/elastic/beats-dashboards
[5] тут: https://wiki.wireshark.org/CaptureSetup/Ethernet
[6] Источник: https://habrahabr.ru/post/280756/
Нажмите здесь для печати.