User Tools

Site Tools


pfsense:suricata:rules:breakdown_of_a_rule

PFSense - Suricata - Rules - Breakdown of a rule

Example Rule

alert ip any any -> any any (msg:"IP detected"; sid:2; rev:1;)

where

  • alert: The action to perform on the rule.
  • ip: The protocol that the rule will match. When ip is specified it will watch for all or any packets on the network involving the adapter.
  • any any → any any: Source IP and Port; Direction; Destination IP and Port.
  • (msg:“ICMP detected”; sid:2; rev:1;): The options.

NOTE: Aliases can also be used.

alert ip $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (msg:"IP detected"; sid:2; rev:1;)

where:

  • $HOME_NET: An alias of internal IPs.
  • $EXTERNAL_NET: An alias of non HOME_NET.
  • $HTTP_PORTS: An alias of ports.

Actions

Actions are performed in the following precedence order by default if multiple rules exist; but can be changed through Action Order.

  • pass: If the packet matches this rule it will be accepted through.
  • drop: The packet will be silently removed from the network stack. An alert will be generated as well.
  • reject: This acts the same as drop but will also notify the sender that the packet has been removed from the stack.
  • alert: - Just notifies of any packets that have matched rules.

Protocol

  • ip: Any packets on the network involving the adapter.
  • tcp: TCP.
  • udp: UDP.
  • icm: ICMP packets, such as ping.

NOTE: Suricata also allows you to specify layer 7 protocols as well, such as HTTP (http), SSL and TLS (tls for both), FTP (ftp) and SMB (smb).


Source IP and Port; Direction; Destination IP and Port

any any -> any any

Source and Destination IP can be configured as:

  • any: Any IP.
  • 192.168.1.10: An actual IP.
  • 10.0.1.0/8: A CIDR in the 10.0.1.0 subnet.
  • !192.168.1.10: An exclamation mark specifies “not”, so this means any IP but not 192.168.1.10.
  • !10.0.1.0/8: Any IP not in the 10.0.1.0 subnet.
  • [192.168.1.10, !192.168.1.10]: Multiple addresses. You can also mix-and-match with the ! as well.
  • [$EXTERNAL_NET, !$HOME_NET]: Multiple addresses, using built-in variables.
  • ![192.168.1.0/24,192.168.0.0/24]: Not with Multiple addresses.

Ports act similarly:

  • any: Any Port.
  • 80: Port 80.
  • [80:85]: A range of ports.
  • [:1024]: Matches all ports from 0-1024.
  • [1024:]: Matches ports from 1024 to the highest (typically 65535).

Direction Specification:

  • ->: This is the most common and means only check if the source IP and port are coming in to the destination IP and port.
  • <>: This will match packet flow in either direction.

NOTE: Built-in Variables include:

  • HOME_NET:
  • EXTERNAL_NET:

Rule Options

Options fall into different categories:

  • meta-settings: Options not pertaining to any specifics about the packet; including msg, sid, rev.
  • payload: The packet data itself. content: “peter”;.
  • HTTP: Heavily used when TCP protocol is set, useful for using Suricata as a content filtering system. GET, POST, index.html, cookies, user-agents, response-status 302, 500 etc..
  • flow: More fine-grained control over the connection’s status and such. established, memory usage, timeouts, user logged in.
  • IP reputation: Is an IP legit or known to be associated with malware, spam, etc…

msg:"IP detected"; sid:2; rev:1;
  • The 3 most basic options are:
  • msg: - What will be prompted in an alert (unless you’re using pass as the action, set this regardless).
  • sid: - This is a unique ID for the rule.
    • If multiple rules have the same sid Suricata will let you know, and not be nice about it.
    • Typically you should pick a really high number (> 100000) if you are going to write your own.
  • rev: - Revision number/ID.
    • Incremented by 1 every time the rule is changed.

Other Rule Examples

alert icmp any any -> \
      any any (msg:"PING detected"; \
      sid:2; rev:1;)


alert tcp any any <> \
      any any (pcre:"/3\d{3}\
      (\s|-)?\d{6}(\s|-)?\d{5}/";\
      msg:"American Express card number \
      detected in clear text";content: \
      "amex";nocase;sid: 9000003;rev:1;)


alert tcp 1.2.3.4 1024 - > 5.6.7.8 80


# Detect SSH protocol anomalies.
alert tcp any any -> any 22 (msg:"ALERT TCP port 22 but not SSH"; app-layer-protocol:!ssh; sid:2271009; rev:1;)


# Non-TLS traffic on TLS ports.
alert tcp any any -> any [443,465] (msg:"Detected non-TLS on TLS port"; flow:to_server; app-layer-protocol:!tls; threshold: type limit, track by_src, seconds 90, count 1; sid:210003; rev:1;)


alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:\".htpasswd access attempt\"; flow:to_server,established; content:\".htpasswd\"; nocase; sid:210503; rev:1;)

pfsense/suricata/rules/breakdown_of_a_rule.txt · Last modified: 2021/01/22 10:07 by peter

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki