Security center
Security feed from Pfsense snort Barnyard2 output
Using Logstash receiver and Elasticsearch , Snort add-on on Pfsenese Firewall and Barnyard2 sends syslogs sends to Logstasth act as syslog listener and store into elasticsearch Added few screenshot for configuratiuon tips , and in addition my Logstash input file config
Logstash config file
Author: Tal Bar-Or
Email: tbaror@dalet.com
Last Update: 11/18/2016
This conf file is based on accepting logs for snort
input { udp { port => 5142 type => snort } } filter { if [host] =~ /172.17.37.2/ or [host] =~ /10.0.8.2/ or [host] =~ /10.0.11.2/ or [host] =~ /10.0.10.2/ or [host] =~ /10.0.12.2/ or [host] =~ /10.0.14.2/ or [host] =~ /10.0.15.2/{ # This is the initial parsing of the log grok { match => { “message” => “|%{SPACE}[%{WORD:msg_source}[%{WORD:msg}]:%{SPACE}[%{GREEDYDATA:sensor_name}]%{SPACE}]%{SPACE}||%{SPACE}%{TIMESTAMP_ISO8601:event_timestamp}%{SPACE}%{INT:event_priority}%{SPACE}[%{INT:gid}:%{INT:sid}:%{INT:rev}]%{SPACE}%{DATA:alert_description}||%{SPACE}%{DATA:classification}%{SPACE}||%{SPACE}%{INT:protocol}%{SPACE}%{IP:SrcIp}%{SPACE}%{IP:DstIp}%{SPACE}||%{SPACE}%{INT:SrcPort}%{SPACE}%{INT:DstPort}%{SPACE}”} } # If you’d like to collect the DNS name for the SrcIP keep this section. Caution, this can cause an attacker to go into hiding. # If you do not want reverse DNS lookups of IPs keep this uncommented. #mutate { # add_field => { “SrcIP-resolved” => “%{SrcIp}” } #} #dns { # reverse => [ “[SrcIP-resolved]” ] # action => “replace” #}
# This will attempt to do a geoip lookup against the SrcIP
geoip {
source => "SrcIp"
target => "SrcGeoip"
database => "/etc/logstash/GeoLite2-City.mmdb"
add_field => [ "[SrcGeoip][coordinates]", "%{[geoip][longitude]}" ]
add_field => [ "[SrcGeoip][coordinates]", "%{[geoip][latitude]}" ]
}
mutate {
convert => [ "[SrcGeoip][coordinates]", "float"]
}
#geoip {
# source => "[SrcIp]"
# target => "SrcGeo"
#}
# If you'd like to collect the DNS name for the DstIP keep this section. Caution, this can cause an attacker to go into hiding.
# If you do not want reverse DNS lookups of IPs keep this uncommented.
#mutate {
# add_field => { "DstIP-resolved" => "%{DstIp}" }
#}
#dns {
# reverse => [ "[DstIP-resolved]" ]
# action => "replace"
#}
# This will attempt to do a geoip lookup against the DstIP
geoip {
source => "DstIp"
target => "DstGeoip"
database => "/etc/logstash/GeoLite2-City.mmdb"
add_field => [ "[DstGeoip][coordinates]", "%{[geoip][longitude]}" ]
add_field => [ "[DstGeoip][coordinates]", "%{[geoip][latitude]}" ]
}
mutate {
convert => [ "[DstGeoip][coordinates]", "float"]
}
#geoip {
# source => "[DstIp]"
# target => "DstGeo"
#}
# If the alert is a Snort GPL alert break it apart for easier reading and categorization
if [alert_description] =~ "GPL " {
# This will parse out the category type from the alert
grok {
match => { "alert" => "GPL\s+%{DATA:category}\s" }
}
# This will store the category
mutate {
add_field => { "rule_type" => "Snort GPL" }
lowercase => [ "category"]
}
}
# If the alert is an Emerging Threat alert break it apart for easier reading and categorization
if [alert_description] =~ "ET " {
# This will parse out the category type from the alert
grok {
match => { "alert" => "ET\s+%{DATA:category}\s" }
}
# This will store the category
mutate {
add_field => { "rule_type" => "Emerging Threats" }
lowercase => [ "category"]
}
}
# I recommend changing the field types below to integer so searches can do greater than or less than
# and also so math functions can be ran against them
mutate {
convert => [ "SrcPort", "integer" ]
convert => [ "DstPort", "integer" ]
convert => [ "event_priority", "integer" ]
convert => [ "protocol", "integer" ]
remove_field => [ "message"]
}
# This will translate the priority field into a severity field of either High, Medium, or Low
if [event_priority] == 1 {
mutate {
add_field => { "severity" => "High" }
}
}
if [event_priority] == 2 {
mutate {
add_field => { "severity" => "Medium" }
}
}
if [event_priority] == 3 {
mutate {
add_field => { "severity" => "Low" }
}
}
# This section adds URLs to lookup information about a rule online
mutate {
add_field => [ "ET_Signature_Info", "http://doc.emergingthreats.net/%{sid}" ]
add_field => [ "Snort_Signature_Info", "https://www.snort.org/search?query=%{gid}-%{sid}" ]
}
#protocol type detection
if [protocol] == 17 {
mutate {
replace => { "protocol" => "UDP" }
}
}
if [protocol] == 6 {
mutate {
replace => { "protocol" => "TCP" }
}
}
if [protocol] == 1 {
mutate {
replace => { "protocol" => "ICMP" }
}
}
if [protocol] == 2 {
mutate {
replace => { "protocol" => "IGMP" }
}
}
} }
output { if [msg_source]== “SNORTIDS” { elasticsearch { index => “ids_sensors” hosts => [“localhost:9200”]} stdout { codec => rubydebug }
} }
Data source config
Collector config:
Upload an updated version of an exported dashboard.json file from Grafana
Revision | Description | Created | |
---|---|---|---|
Download |