Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    ELK + Suricata Inline mode

    Scheduled Pinned Locked Moved Russian
    16 Posts 3 Posters 8.8k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • B
      borg
      last edited by

      Доброго времени суток господа.
      Имеется Esxi 6, на нем поднятый Pfsense 2.3.2-RELEASE (amd64) built on Tue Jul 19 12:44:43 CDT 2016 и настроенная Suricata работающая в inline mode. Так же настроенный ELK кушающий логи фаервола.
      Пытаюсь сделать так, чтобы алерты сурикаты так же кушались ELK, настроил Barnyard2, логи приходят на ELK, но понимаю что он их не распазнает т.к. отсутствует патерн и конфиг для логов сурикаты и собственно вопрос:
      Есть ли у кого готовые файлы под сурикату для ELK? Или же знающие люди которые направят на путь истинный?

      Пробовал создавать лог сурикаты и отправлять его в системные логи, но ничего хорошего из этого не вышло.

      1 Reply Last reply Reply Quote 0
      • werterW
        werter
        last edited by

        Доброе.
        Также исп. Suricata. Замечательное решение (после небольшого "обучения" что блокировать, что нет).

        Галка на Log to System Log в настр. не помогает ? И ,как вариант - рестарт suricata после галки или , кардинально, рестарт pf.

        настроенная Suricata работающая в inline mode. Так же настроенный ELK кушающий логи фаервола.

        А вот с этого места поподробнее :) Можно ли инс-ции по настройке связки elk + pf ? И ваш собственный со скринами.
        Буду категорически благодарен.

        1 Reply Last reply Reply Quote 0
        • B
          borg
          last edited by

          @werter:

          Галка на Log to System Log в настр. не помогает ? И ,как вариант - рестарт suricata после галки или , кардинально, рестарт pf.

          Если поставить галку, то события будут записываться в формате простого текста, который ELK так же не распознает.
          Пример результата:

          
          Time            Process         PID     Message
          Aug 18 14:03:57	suricata	60302	[Drop] [1:2010935:2] ET POLICY Suspicious inbound to MSSQL port 1433 [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} x.x.x.x:xxxx -> x.x.x.x:1433
          
          

          Нужно чтобы лог именно разделялся как в Alerts и при этом создать шаблон в ELK, при котором он бы распознавал логи сурикаты.

          @werter:

          А вот с этого места поподробнее :) Можно ли инс-ции по настройке связки elk + pf ? И ваш собственный со скринами.
          Буду категорически благодарен.

          Все выполнял по инструкции http://pfelk.3ilson.com/ на чистой ubuntu-14.04.5-server-amd64 (на 16й не завелось), заработало без всяких проблем.

          1 Reply Last reply Reply Quote 0
          • werterW
            werter
            last edited by

            Спасибо за ссылку.

            P.s. В гугле по suricata elk stack pfsense сразу выдало:
            https://blog.reboost.net/suricata-on-pfsense-to-elk-stack/
            https://www.aldeid.com/wiki/ELK-Stack
            https://blog.inliniac.net/2014/07/28/suricata-flow-logging/
            https://redmine.openinfosecfoundation.org/projects/suricata/wiki/_logstash_kibana_and_suricata_json_output

            И такое чудо еще - http://elatov.github.io/2016/04/suricata-logs-in-splunk-and-elk/

            1 Reply Last reply Reply Quote 0
            • B
              borg
              last edited by

              Попробуем-с поиграться с фаилбитом, о результатах отпишусь, спасибо.

              1 Reply Last reply Reply Quote 0
              • B
                borg
                last edited by

                Штудировал https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-centos-7 и http://elatov.github.io/2016/04/suricata-logs-in-splunk-and-elk/
                Добавил logstash-* и вуаля, получилось получить правильные логи, все работает, но вот есть одно но, по какой то причине не работает карта, появляется заполнение https://otile2-s.mqcdn.com/tiles/1.0.0/map/2/0/1.jpeg. Ломаю голову как это починить… возможно нужно обновить кибану, но пока не знаю точно.
                Нашел тему по этой проблеме https://github.com/elastic/kibana/issues/7717 сделал настройки карты как тут https://cloud.githubusercontent.com/assets/20421688/16770938/a6967a86-4846-11e6-92cd-c5a529663235.png
                Все работает в итоге. Если нужно кому-то, то могу сделать мануал по установке/залить .ova с начальными установками.

                1 Reply Last reply Reply Quote 0
                • werterW
                  werter
                  last edited by

                  @borg:

                  Все работает в итоге. Если нужно кому-то, то могу сделать мануал по установке/залить .ova с начальными установками.

                  Супер же!
                  Не надо готового. Лучше инструкцию со скринами. Чтоб люди сами. С готовым понимание того, что делать и как не прийдет.
                  Заранее благодарен.

                  P.s. Особенно настройки dashboard интересует.

                  1 Reply Last reply Reply Quote 0
                  • B
                    borg
                    last edited by

                    Инструкция по установке ELK с настройками для Suricat'ы c использованием Filebeat для передачи в logstash eve.json
                    Установка происходит на чистый CentOS-7-x86_64-Minimal-1511 с оф сайта.

                    Инструкция пишется для VM на Esxi 6. Для настройки нам понадобятся дополнительные пакеты: net-tools для простого определения полученного ip dhcp сервером через ifconfig и для подключения к серверу через putty, nano для более удобного редактирования, wget для скачивания пакетов, open-vm-tools для удобного управления через vsphere client.

                    Устанавливаем net-tools nano wget open-vm-tools:

                    yum install net-tools -y
                    yum install nano -y
                    yum install wget -y
                    yum install open-vm-tools -y
                    

                    Узнаем IP нашего сервера

                    ifconfig
                    >inet 10.10.10.150 ...
                    

                    Установка Java 8
                    Скачиваем rpm

                    wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u73-b02/jdk-8u73-linux-x64.rpm"
                    

                    Устанавливаем

                    sudo yum -y localinstall jdk-8u73-linux-x64.rpm
                    

                    Установка Elasticsearch
                    Импортируем ключ в rmp

                    rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
                    

                    Создаем файл репозитория

                    echo '[elasticsearch-2.x]
                    name=Elasticsearch repository for 2.x packages
                    baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
                    gpgcheck=1
                    gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
                    enabled=1
                    ' | sudo tee /etc/yum.repos.d/elasticsearch.repo
                    

                    Устанавливаем Elasticsearch

                    yum nstall -y elasticsearch
                    

                    Запускаем

                    systemctl start elasticsearch
                    

                    Добавляем в автозагрузку

                    systemctl enable elasticsearch
                    

                    Установка Kibana
                    Создаем файл репозитория

                    nano /etc/yum.repos.d/kibana.repo
                    

                    Добавляем содержимое

                    [kibana-4.4]
                    name=Kibana repository for 4.4.x packages
                    baseurl=http://packages.elastic.co/kibana/4.4/centos
                    gpgcheck=1
                    gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
                    enabled=1
                    

                    Устанавливаем Kibana

                    yum -y install kibana
                    

                    Включаем
                    systemctl start kibana

                    chkconfig kibana on
                    

                    Утсанавливаем Nginx

                    yum -y install epel-release
                    yum -y install nginx httpd-tools
                    

                    Создаем админа с паролем для веб интерфейса Kibana, где kibanaadmin логин который вы хотите использовать для входа

                    htpasswd -c /etc/nginx/htpasswd.users kibanaadmin
                    

                    Редактируем конфиг Nginx

                    nano /etc/nginx/nginx.conf
                    

                    Нужно удалить блок server {}. 2 последние строчки должны быть

                        include /etc/nginx/conf.d/*.conf;
                    }
                    

                    Создаем новый блок server{} в новом файле

                    nano /etc/nginx/conf.d/kibana.conf
                    

                    Добавляем содержимое, где example.com имя сервера

                    server {
                        listen 80;
                    
                        server_name example.com;
                    
                        auth_basic "Restricted Access";
                        auth_basic_user_file /etc/nginx/htpasswd.users;
                    
                        location / {
                            proxy_pass http://localhost:5601;
                            proxy_http_version 1.1;
                            proxy_set_header Upgrade $http_upgrade;
                            proxy_set_header Connection 'upgrade';
                            proxy_set_header Host $host;
                            proxy_cache_bypass $http_upgrade;        
                        }
                    }
                    

                    Запускаем Nginx

                    systemctl start nginx
                    systemctl enable nginx
                    

                    Отключаем SELinux

                    setsebool -P httpd_can_network_connect 1
                    

                    Установка Logstash
                    Создаем файл репозитория

                    nano /etc/yum.repos.d/logstash.repo
                    

                    Добавляем содержимое

                    [logstash-2.2]
                    name=logstash repository for 2.2 packages
                    baseurl=http://packages.elasticsearch.org/logstash/2.2/centos
                    gpgcheck=1
                    gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
                    enabled=1
                    

                    Устанавливаем

                    yum -y install logstash
                    

                    Устанавливаем GeoIP

                    cd /etc/logstash
                    curl -O "http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz"
                    gunzip GeoLiteCity.dat.gz
                    

                    Создаем конфиг

                    nano /etc/logstash/conf.d/suricata-beats.conf
                    

                    Наполняем содержимым

                    input {
                       beats {
                         type => SuricataIDPS
                         port => 5044
                         codec => json
                       }
                    }
                    
                    filter {
                      if [type] == "SuricataIDPS" {
                        date {
                          match => [ "timestamp", "ISO8601" ]
                        }
                        ruby {
                          code => "if event['event_type'] == 'fileinfo'; event['fileinfo']['type']=event['fileinfo']['magic'].to_s.split(',')[0]; end;"
                        }
                      }
                    
                      if [src_ip]  {
                        geoip {
                          source => "src_ip"
                          target => "geoip"
                          database => "/etc/logstash/GeoLiteCity.dat"
                          add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
                          add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]
                        }
                        mutate {
                          convert => [ "[geoip][coordinates]", "float" ]
                        }
                        if ![geoip.ip] {
                          if [dest_ip]  {
                            geoip {
                              source => "dest_ip"
                              target => "geoip"
                              database => "/etc/logstash/GeoLiteCity.dat"
                              add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
                              add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]
                            }
                            mutate {
                              convert => [ "[geoip][coordinates]", "float" ]
                            }
                          }
                        }
                      }
                    }
                    
                    output {
                      elasticsearch { hosts => ["localhost:9200"] }
                      stdout { codec => rubydebug }
                    }
                    

                    Проверим правильность конфигурации

                    service logstash configtest
                    

                    Если получаем Configuration OK, идем дальше

                    Перезагружаем logstash и добавляем в загрузку

                    systemctl restart logstash
                    chkconfig logstash on
                    

                    Настраиваем Filebeat на pfsense
                    Находим тут нужный нам файл, взависимости от того какой у нас pfsesne

                    https://beats-nightlies.s3.amazonaws.com/index.html?prefix=jenkins/filebeat/760-3850d0e6675293fc903528601eb304792c442dc3/
                    

                    Например это filebeat-freebsd-amd64

                    Качаем

                    fetch https://beats-nightlies.s3.amazonaws.com/jenkins/filebeat/760-3850d0e6675293fc903528601eb304792c442dc3/filebeat-freebsd-amd64
                    

                    Создаем каталог, перемещаем, делаем исполняемым

                    mkdir /etc/filebeat
                    mv ~/filebeat-freebsd-amd64 /etc/filebeat/
                    cd /etc/filebeat/
                    mv filebeat-freebsd-amd64 filebeat
                    chmod +x filebeat
                    

                    Создаем конфиг для него

                    nano /etc/filebeat/filebeat.yml
                    

                    И заполняем, где * имя интерфеса, 10.10.10.150 - адрес сервера ELK

                    filebeat:  
                      prospectors:
                        -
                          paths:
                            - /var/log/suricata/*/eve.json 
                          input_type: log
                          document_type: SuricataIDPS 
                    output:  
                      logstash:
                        hosts: ["10.10.10.150:5044"]
                    

                    Проверяем правильность конфига

                    /etc/filebeat/filebeat -configtest
                    

                    Если пусто то все ок

                    Для того чтобы добавить filebeat при старте pfsens'a нужно установить пакет Shellcmd (System, Packages). После установки, его можно найти в Services.
                    В /usr/local/etc/rc.d/ создать filebeat.sh

                    nano /usr/local/etc/rc.d/filebeat.sh
                    chmod +x filebeat.sh
                    

                    и заполнить

                    #!/bin/sh
                    
                    . /etc/rc.subr
                    
                    name="filebeat"
                    rcvar=filebeat_enable
                    
                    load_rc_config "$name"
                    
                    : ${filebeat_enable="NO"}
                    
                    command="/etc/filebeat/filebeat"
                    command_args="-c /etc/filebeat/filebeat.yml"
                    start_cmd=filebeat_start
                    pidfile="/var/run/${name}.pid"
                    
                    filebeat_start() {
                    	echo "Starting filebeat."
                    	/usr/sbin/daemon -c -f -p $pidfile ${command} ${command_args}
                    }
                    
                    run_rc_command "$1"
                    

                    Нажать в Shellcmd на + и в поле Command ввести /usr/local/etc/rc.d/filebeat.sh onestart оставить shellcmd type. После этого нужно перезагрузить pfsense.
                    Если хотите проверить работает ли он без перезагрузки то

                    cd /etc/filebeat
                    ./filebeat
                    

                    Теперь необходимо спровоцировать Alert, например запустить сканер на телефоне с мобильного интеренета по своему хосту (при условии его доступности из вне)
                    В /etc/filebeat/logs должен появиться filebeat файл с логом с успешным запуском

                    2016-08-19T16:16:12+03:00 INFO Home path: [/etc/filebeat] Config path: [/etc/filebeat] Data path: [/etc/filebeat/data] Logs path: [/etc/filebeat/logs]
                    2016-08-19T16:16:12+03:00 INFO Setup Beat: filebeat; Version: 5.0.0-alpha6-git3850d0e
                    2016-08-19T16:16:12+03:00 INFO Max Retries set to: 3
                    2016-08-19T16:16:12+03:00 INFO Activated logstash as output plugin.
                    2016-08-19T16:16:12+03:00 INFO Publisher name: pfSense.localdomain
                    2016-08-19T16:16:12+03:00 INFO Flush Interval set to: 1s
                    2016-08-19T16:16:12+03:00 INFO Max Bulk Size set to: 2048
                    2016-08-19T16:16:12+03:00 INFO filebeat start running.
                    2016-08-19T16:16:12+03:00 INFO Registry file set to: /etc/filebeat/data/registry
                    2016-08-19T16:16:12+03:00 INFO Loading registrar data from /etc/filebeat/data/registry
                    2016-08-19T16:16:12+03:00 INFO States Loaded from registrar: 1
                    2016-08-19T16:16:12+03:00 INFO Loading Prospectors: 1
                    2016-08-19T16:16:12+03:00 INFO Load previous states from registry into memory
                    2016-08-19T16:16:12+03:00 INFO Previous states loaded: 1
                    2016-08-19T16:16:12+03:00 INFO Starting Registrar
                    2016-08-19T16:16:12+03:00 INFO Loading Prospectors completed. Number of prospectors: 1
                    2016-08-19T16:16:12+03:00 INFO All prospectors are initialised and running with 1 states to persist
                    2016-08-19T16:16:12+03:00 INFO Starting prospector of type: log
                    2016-08-19T16:16:12+03:00 INFO Start sending events to output
                    2016-08-19T16:16:12+03:00 INFO Starting spooler: spool_size: 2048; idle_timeout: 5s
                    2016-08-19T16:16:42+03:00 INFO No non-zero metrics in the last 30s
                    2016-08-19T16:16:52+03:00 INFO Harvester started for file: /var/log/suricata/suricata_em012321/eve.json
                    

                    На ELK сервере в /var/log/logstash файл logstash.stdout должен набрать толщину и иметь записи больше чем

                    Sending logstash logs to /var/log/logstash/logstash.log.
                    

                    Если все так, как я описал, то все работает.
                    Набираем http://10.10.10.150/ в браузере. Используем логин и пароль который мы ранее создали после установки Nginx. Нам сразу же предложат создать патер logstash-*. Создаем его. Если его создать нельзя, значит нет логов, а если нет, значит что то пошло не так c filebeat.
                    Если же все успешно, то переходим в Visualize -> Tile map -> From a new search -> Options, галочку на WMS compliant map server

                    WMS url* http://ows-tile.terrestris.de/osm-basemap/service?
                    WMS layers* OSM-WMS
                    WMS version* 1.1.1
                    WMS format* image/jpeg
                    

                    Далее жмем Save Visualization, назавем к примеру Map
                    Идем в Dashboard -> Add visualization, выбираем наш Map, растягиваем как нам нжуно. Жмем Save и называем как хотим.
                    Пример того что у меня Картинка
                    Тут отображено на карте места где пакеты дропнуты, 1й круг - количество дропов по странам, 2й круг - дропнутые страны и города, 3й - страны по типу атак, таблица - дата, страна, город, на какой порт атака, тип атак, кол-во атак

                    Если у кого возникнут вопросы или трудности, отвечу как смогу.

                    Источники:
                    https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-centos-7
                    http://elatov.github.io/2016/04/suricata-logs-in-splunk-and-elk/

                    1 Reply Last reply Reply Quote 0
                    • B
                      borg
                      last edited by

                      Подредактировал автозагрузку filebeat c

                      /etc/filebeat/filebeat
                      

                      на

                      /etc/filebeat/filebeat -c /etc/filebeat/filebeat.yml
                      
                      1 Reply Last reply Reply Quote 0
                      • werterW
                        werter
                        last edited by

                        2 borg
                        Огромное спасибо.

                        1 Reply Last reply Reply Quote 0
                        • B
                          borg
                          last edited by

                          Наткнулся на дашборды для сурикаты
                          https://github.com/StamusNetworks/KTS
                          Все ранее созданные дашборды будут удалены и будут созданы новые патерны, поэтому если нужно, можно сделать экспорт в settings -> objects.
                          Для того чтобы все не сыпалось ошибками нужно во всех файлах находящихся в каталогах search и visualization изменить

                          logstash-alert-*
                          logstash-dns-*
                          logstash-fileinfo-*
                          logstash-flow-*
                          logstash-http-*
                          logstash-smtp-*
                          logstash-ssh-*
                          logstash-tls-*
                          

                          на

                          logstash-*
                          

                          для того чтобы все работало:

                          /opt/kibana/bin/kibana plugin -i elastic/timelion
                          git clone https://github.com/StamusNetworks/KTS.git
                          patch -p1 -d /opt/kibana/  < /root/KTS/patches/kibana-integer.patch
                          patch -p1 -d /opt/kibana/  < /root/KTS/patches/timelion-integer.patch
                          cd KTS
                          ./load.sh
                          
                          

                          Так же если кому нужно могу объяснить как создать свой патер и использовать его при использовании filebeat

                          1 Reply Last reply Reply Quote 0
                          • werterW
                            werter
                            last edited by

                            2 borg
                            Спасибо ОГРОМНОЕ )

                            Так же если кому нужно могу объяснить как создать свой патер и использовать его при использовании filebeat

                            Конечно же ! Ждем.

                            1 Reply Last reply Reply Quote 0
                            • B
                              borg
                              last edited by

                              Выяснил что

                              /etc/filebeat/filebeat -c /etc/filebeat/filebeat.yml
                              

                              вешает весь автозапуск у пфснса, нужен другой метод запуска

                              в /usr/local/etc/rc.d/ создать filebeat.sh

                              #!/bin/sh
                              
                              . /etc/rc.subr
                              
                              name="filebeat"
                              rcvar=filebeat_enable
                              
                              load_rc_config "$name"
                              
                              : ${filebeat_enable="NO"}
                              
                              command="/etc/filebeat/filebeat"
                              command_args="-c /etc/filebeat/filebeat.yml"
                              start_cmd=filebeat_start
                              pidfile="/var/run/${name}.pid"
                              
                              filebeat_start() {
                              	echo "Starting filebeat."
                              	/usr/sbin/daemon -c -f -p $pidfile ${command} ${command_args}
                              }
                              
                              run_rc_command "$1"
                              

                              и добавить в shellcmd строку

                              /usr/local/etc/rc.d/filebeat.sh onestart
                              
                              1 Reply Last reply Reply Quote 0
                              • B
                                borg
                                last edited by

                                Недавно вернулся к вопросу elk и Pfsense
                                Дополню про template

                                Для того чтобы входящие логи имели нужный нам индекс, нам необходимо в /etc/logstash/conf.d/suricata-beats.conf изменить блок output, например у нас будет индекс для логов от сурикаты suricata.

                                
                                output {
                                  elasticsearch { hosts => ["localhost:9200"]
                                     index => "suricata-%{+YYYY.MM.dd}"
                                 }
                                
                                  stdout { codec => rubydebug }
                                }
                                
                                

                                Для того чтобы работало GeoIP необходимо создать template (я взял от logstash (/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-output-elasticsearch-2.7.1-java/lib/logstash/outputs/elasticsearch/elasticsearch-template.json) и поменял в нем значение на suricata)

                                
                                mkdir /etc/logstash/templates
                                sudo nano /etc/logstash/templates/suricata.json
                                
                                
                                
                                {
                                  "template" : "suricata-*",
                                  "settings" : {
                                    "index.refresh_interval" : "5s"
                                  },
                                  "mappings" : {
                                    "_default_" : {
                                      "_all" : {"enabled" : true, "omit_norms" : true},
                                      "dynamic_templates" : [ {
                                        "message_field" : {
                                          "match" : "message",
                                          "match_mapping_type" : "string",
                                          "mapping" : {
                                            "type" : "string", "index" : "analyzed", "omit_norms" : true,
                                            "fielddata" : { "format" : "disabled" }
                                          }
                                        }
                                      }, {
                                        "string_fields" : {
                                          "match" : "*",
                                          "match_mapping_type" : "string",
                                          "mapping" : {
                                            "type" : "string", "index" : "analyzed", "omit_norms" : true,
                                            "fielddata" : { "format" : "disabled" },
                                            "fields" : {
                                              "raw" : {"type": "string", "index" : "not_analyzed", "ignore_above" : 256}
                                            }
                                          }
                                        }
                                      } ],
                                      "properties" : {
                                        "@timestamp": { "type": "date" },
                                        "@version": { "type": "string", "index": "not_analyzed" },
                                        "geoip"  : {
                                          "dynamic": true,
                                          "properties" : {
                                            "ip": { "type": "ip" },
                                            "location" : { "type" : "geo_point" },
                                            "latitude" : { "type" : "float" },
                                            "longitude" : { "type" : "float" }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                                
                                

                                После регистрируем его

                                sudo curl -XPUT 'http://localhost:9200/_template/suricata?pretty' -d@/etc/logstash/templates/suricata.json
                                

                                Затем дополняем блок output suricata-beats.conf

                                
                                sudo nano /etc/logstash/conf.d/suricata-beats.conf
                                
                                
                                
                                output {
                                  elasticsearch { hosts => ["localhost:9200"]
                                     index => "suricata-%{+YYYY.MM.dd}"
                                      template => "/etc/logstash/templates/suricata.json"
                                      template_overwrite => true
                                 }
                                
                                  stdout { codec => rubydebug }
                                }
                                
                                

                                Конечный файл выглядит так:

                                
                                input {
                                   beats {
                                     type => SuricataIDPS
                                     port => 5044
                                     codec => json
                                   }
                                }
                                
                                filter {
                                  if [type] == "SuricataIDPS" {
                                    date {
                                      match => [ "timestamp", "ISO8601" ]
                                    }
                                    ruby {
                                      code => "if event['event_type'] == 'fileinfo'; event['fileinfo']['type']=event['fileinfo']['magic'].to_s.split(',')[0]; end;"
                                    }
                                  }
                                
                                  if [src_ip]  {
                                    geoip {
                                      source => "src_ip"
                                      target => "geoip"
                                      database => "/etc/logstash/GeoLiteCity.dat"
                                      add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
                                      add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]
                                    }
                                    mutate {
                                      convert => [ "[geoip][coordinates]", "float" ]
                                    }
                                    if ![geoip.ip] {
                                      if [dest_ip]  {
                                        geoip {
                                          source => "dest_ip"
                                          target => "geoip"
                                          database => "/etc/logstash/GeoLiteCity.dat"
                                          add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
                                          add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]
                                        }
                                        mutate {
                                          convert => [ "[geoip][coordinates]", "float" ]
                                        }
                                      }
                                    }
                                  }
                                }
                                
                                output {
                                  elasticsearch { hosts => ["localhost:9200"]
                                     index => "suricata-%{+YYYY.MM.dd}"
                                      template => "/etc/logstash/templates/suricata.json"
                                      template_overwrite => true
                                 }
                                
                                  stdout { codec => rubydebug }
                                }
                                
                                

                                После этих действий желательно удалить все индексы

                                
                                curl -XDELETE 'http://localhost:9200/_all'
                                
                                

                                После чего удаляем на pfsense директории /etc/filebeat/data и /etc/filebeat/logs и стартуем filebeat

                                
                                /usr/local/etc/rc.d/filebeat.sh onestart
                                
                                

                                Идем в Kibana  settings/Indices добавляем pattern suricata-*

                                1 Reply Last reply Reply Quote 0
                                • werterW
                                  werter
                                  last edited by

                                  Доброе
                                  Спасибо за дополнение.

                                  1 Reply Last reply Reply Quote 0
                                  • X
                                    xhangmanx
                                    last edited by

                                    Такой топик надо закрепить, ну или в FAQ

                                    1 Reply Last reply Reply Quote 0
                                    • First post
                                      Last post
                                    Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.