mirror of https://github.com/OISF/suricata
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			161 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			ReStructuredText
		
	
			
		
		
	
	
			161 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			ReStructuredText
		
	
Quickstart guide
 | 
						|
================
 | 
						|
 | 
						|
This guide will give you a quick start to run Suricata and will focus only on
 | 
						|
the basics. For more details, read through the more specific chapters.
 | 
						|
 | 
						|
Installation
 | 
						|
------------
 | 
						|
 | 
						|
It's assumed that you run a recent Ubuntu release as the official PPA can be
 | 
						|
used for the installation.
 | 
						|
 | 
						|
Installation steps::
 | 
						|
 | 
						|
    sudo add-apt-repository ppa:oisf/suricata-stable
 | 
						|
    sudo apt update
 | 
						|
    sudo apt install suricata jq
 | 
						|
 | 
						|
The dedicated PPA repository is added, and after updating the index, Suricata can
 | 
						|
be installed. We recommend installing the ``jq`` tool at this time as it will help
 | 
						|
with displaying information from Suricata's EVE JSON output (described later in this guide).
 | 
						|
 | 
						|
For the installation on other systems or to use specific compile options see
 | 
						|
:ref:`installation`.
 | 
						|
 | 
						|
After installing Suricata, you can check what version of Suricata you have
 | 
						|
running and with what options as well as the service state::
 | 
						|
 | 
						|
    sudo suricata --build-info
 | 
						|
    sudo systemctl status suricata
 | 
						|
 | 
						|
Basic setup
 | 
						|
-----------
 | 
						|
 | 
						|
First, determine the interface(s) and IP address(es) on which Suricata should be inspecting network
 | 
						|
packets::
 | 
						|
 | 
						|
    $ ip addr
 | 
						|
 | 
						|
    2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
 | 
						|
    link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff
 | 
						|
    inet 10.0.0.23/24 brd 10.23.0.255 scope global noprefixroute enp1s0
 | 
						|
 | 
						|
Use that information to configure Suricata::
 | 
						|
 | 
						|
    sudo vim /etc/suricata/suricata.yaml
 | 
						|
 | 
						|
There are many possible configuration options, we focus on the setup of
 | 
						|
the ``HOME_NET`` variable and the network interface configuration. The
 | 
						|
``HOME_NET`` variable should include, in most scenarios, the IP address of
 | 
						|
the monitored interface and all the local networks in
 | 
						|
use. The default already includes the RFC 1918 networks. In this example
 | 
						|
``10.0.0.23`` is already included within ``10.0.0.0/8``. If no other networks
 | 
						|
are used the other predefined values can be removed.
 | 
						|
 | 
						|
In this example the interface name is ``enp1s0`` so the interface name in the
 | 
						|
``af-packet`` section needs to match. An example interface config might
 | 
						|
look like this:
 | 
						|
 | 
						|
Capture settings::
 | 
						|
 | 
						|
    af-packet:
 | 
						|
        - interface: enp1s0
 | 
						|
          cluster-id: 99
 | 
						|
          cluster-type: cluster_flow
 | 
						|
          defrag: yes
 | 
						|
          use-mmap: yes
 | 
						|
          tpacket-v3: yes
 | 
						|
 | 
						|
This configuration uses the most recent recommended settings for the IDS
 | 
						|
runmode for basic setups. There are many of possible configuration options
 | 
						|
which are described in dedicated chapters and are especially relevant for high
 | 
						|
performance setups.
 | 
						|
 | 
						|
Signatures
 | 
						|
----------
 | 
						|
 | 
						|
Suricata uses Signatures to trigger alerts so it's necessary to install those
 | 
						|
and keep them updated. Signatures are also called rules, thus the name
 | 
						|
`rule-files`. With the tool ``suricata-update`` rules can be fetched, updated and
 | 
						|
managed to be provided for Suricata.
 | 
						|
 | 
						|
In this guide we just run the default mode which fetches the ET Open ruleset::
 | 
						|
 | 
						|
    sudo suricata-update
 | 
						|
 | 
						|
Afterwards the rules are installed at ``/var/lib/suricata/rules`` which is also
 | 
						|
the default at the config and uses the sole ``suricata.rules`` file.
 | 
						|
 | 
						|
Running Suricata
 | 
						|
----------------
 | 
						|
 | 
						|
With the rules installed, Suricata can run properly and thus we restart it::
 | 
						|
 | 
						|
    sudo systemctl restart suricata
 | 
						|
 | 
						|
To make sure Suricata is running check the Suricata log::
 | 
						|
 | 
						|
    sudo tail /var/log/suricata/suricata.log
 | 
						|
 | 
						|
The last line will be similar to this::
 | 
						|
 | 
						|
    <Notice> - all 4 packet processing threads, 4 management threads initialized, engine started.
 | 
						|
 | 
						|
The actual thread count will depend on the system and the configuration.
 | 
						|
 | 
						|
To see statistics, check the ``stats.log`` file::
 | 
						|
 | 
						|
    sudo tail -f /var/log/suricata/stats.log
 | 
						|
 | 
						|
By default, it is updated every 8 seconds to show updated values with the current
 | 
						|
state, like how many packets have been processed and what type of traffic was
 | 
						|
decoded.
 | 
						|
 | 
						|
Alerting
 | 
						|
--------
 | 
						|
 | 
						|
To test the IDS functionality of Suricata it's best to test with a signature. The signature with
 | 
						|
ID ``2100498`` from the ET Open ruleset is written specific for such test cases.
 | 
						|
 | 
						|
2100498::
 | 
						|
 | 
						|
    alert ip any any -> any any (msg:"GPL ATTACK_RESPONSE id check returned root"; content:"uid=0|28|root|29|"; classtype:bad-unknown; sid:2100498; rev:7; metadata:created_at 2010_09_23, updated_at 2010_09_23;)
 | 
						|
 | 
						|
The syntax and logic behind those signatures is covered in other chapters. This
 | 
						|
will alert on any IP traffic that has the content within its payload. This rule
 | 
						|
can be triggered quite easy. Before we trigger it, start ``tail`` to see updates to
 | 
						|
``fast.log``.
 | 
						|
 | 
						|
Rule trigger::
 | 
						|
 | 
						|
    sudo tail -f /var/log/suricata/fast.log
 | 
						|
    curl http://testmynids.org/uid/index.html
 | 
						|
 | 
						|
The following output should now be seen in the log::
 | 
						|
 | 
						|
    [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 217.160.0.187:80 -> 10.0.0.23:41618
 | 
						|
 | 
						|
This should include the timestamp and the IP of your system.
 | 
						|
 | 
						|
EVE Json
 | 
						|
--------
 | 
						|
 | 
						|
The more advanced output is the EVE JSON output which is explained in detail in
 | 
						|
:ref:`Eve JSON Output <eve-json-output>`. To see what this looks like it's
 | 
						|
recommended to use ``jq`` to parse the JSON output.
 | 
						|
 | 
						|
Alerts::
 | 
						|
 | 
						|
    sudo tail -f /var/log/suricata/eve.json | jq 'select(.event_type=="alert")'
 | 
						|
 | 
						|
This will display more detail about each alert, including meta-data.
 | 
						|
 | 
						|
Stats::
 | 
						|
 | 
						|
    sudo tail -f /var/log/suricata/eve.json | jq 'select(.event_type=="stats")|.stats.capture.kernel_packets'
 | 
						|
    sudo tail -f /var/log/suricata/eve.json | jq 'select(.event_type=="stats")'
 | 
						|
 | 
						|
The first example displays the number of packets captured by the kernel; the second
 | 
						|
examples shows all of the statistics.
 |