Research and Practice of Linux-based Intrusion Detection System (IDS)
Abstract
With the rapid development of network technology, network security threats are becoming increasingly complex, and traditional security measures can no longer meet the needs of modern network environments. As a proactive defense technology, Intrusion Detection Systems (IDS) can monitor network traffic in real-time and detect potential security threats. This paper discusses in detail the implementation of IDS using Snort and Suricata on a Linux platform, compares and analyzes their performance characteristics and applicable scenarios, and verifies the effectiveness of the system through experiments and practical cases. The research results show that Suricata performs excellently in high-traffic environments, while Snort is more flexible in medium and small traffic environments. The IDS performance of both systems is evaluated to determine their suitability for different network conditions.

Keywords: IDS performance
Intrusion Detection System (IDS), Snort, Suricata, Linux, Network Security
1. Introduction
1.1 Research Background
The complexity and frequency of network attacks are continuously increasing, and traditional security measures such as firewalls can no longer meet the needs of modern network environments. As a proactive defense technology, Intrusion Detection Systems (IDS) can monitor network traffic in real-time, detect and respond to potential security threats.
1.2 Research Significance
This paper aims to provide users with a reference for selecting an appropriate intrusion detection system by comparing and analyzing two open-source IDS tools, Snort and Suricata, and verifying their deployment effectiveness on a Linux platform through experiments.
2. Overview of Intrusion Detection Systems
2.1 Definition and Classification of IDS
An Intrusion Detection System (IDS) is a network security device used to monitor network traffic in real-time, detect and respond to potential security threats. IDS can be mainly divided into Host-based IDS (HIDS) and Network-based IDS (NIDS). This paper focuses on Network-based IDS.
2.2 Working Principle of IDS
IDS collects and analyzes traffic information at key network nodes to detect behaviors that violate security policies or signs of intrusion. Common detection methods include rule-based detection, anomaly detection, and behavior analysis.
3. Comparative Analysis of Snort and Suricata
3.1 Development Background and History
Snort : Developed by Martin Roesch in 1998, it is one of the earliest open-source IDS with extensive community support.
Suricata : Developed by the Open Information Security Foundation (OISF) in 2009, it aims to leverage the advantages of multi-core processors.
3.2 Architecture Design
Snort : Based on a single-threaded architecture, suitable for medium and small traffic environments.
Suricata : Multi-threaded design, supports multi-core processors, suitable for high-traffic environments.
3.3 Functional Characteristics
Snort : Flexible rule language, extensive community support.
Suricata : Supports multi-protocol analysis, file extraction, and traffic reconstruction, with stronger performance.
3.4 Performance and Scalability
Snort : Performs well on single-core CPUs but is limited in high-traffic environments.
Suricata : Multi-threaded architecture makes it perform better in high-traffic environments.
3.5 Community and Support
Snort : Has a large community and rich documentation resources, with commercial support provided by Cisco’s subsidiary Sourcefire.
Suricata : Supported by OISF, active community, and fast development progress.
4. Building IDS on Linux
4.1 Environment Preparation
This paper selects Ubuntu 22.04 as the experimental environment and installs the necessary dependencies for Snort and Suricata.
4.2 Installation and Configuration of Snort
Installation :
sudo apt-get update
sudo apt-get install snortConfiguration : Edit the
/etc/snort/snort.conf
file to configure the interface and rules.
4.3 Installation and Configuration of Suricata
Installation :
sudo apt install autoconf automake build-essential cargo cbindgen libjansson-dev libpcap-dev libcap-ng-dev libmagic-dev liblz4-dev libpcre2-dev libtool libyaml-dev make pkg-config rustc zlib1g-dev -y
sudo apt install suricataConfiguration : Edit the
/etc/suricata/suricata.yaml
file to set the rule paths.
5. Experiments and Results Analysis
5.1 Experimental Design
By simulating network attacks, Snort and Suricata are used to detect attack traffic, and metrics such as detection time and CPU utilization are recorded.
5.2 Experimental Results
The experiment shows that Suricata performs better in high-traffic environments, with lower CPU utilization and higher detection efficiency. For example, in large-scale network environments, Suricata can more quickly identify and respond to potential threats.
5.3 Performance Comparison
Table 1 shows the performance comparison of Snort and Suricata in different traffic environments:
Test Metrics | Snort | Suricata |
---|---|---|
Throughput (Mbps) | 100 | 500 |
Memory Consumption (MB) | 60 | 5.5 |
Multi-threading Support | Not Supported | Supported |
False Positive Rate | High (> 100Mbps) | Low |
Rule Compatibility | Snort Rules | Compatible with Snort Rules |
6. Practical Application Cases
6.1 Case 1: Denial of Service Attack (DoS)
Through Snort logs, a large number of connection requests targeting a specific IP address were found:
[**] [alert] ET PROTO UDP -> [10.0.0.2] 123: 1 packet(s) 6 bytes
[**] [alert] HTTP/1.1 -> [10.0.0.2] 80: 1 packet(s) 6 bytes
Based on the alert information, it was determined to be a DoS attack.
6.2 Case 2: SQL Injection Attack
Through Suricata logs, abnormal requests targeting the database port were found:
[**] [alert] SQLI -> [10.0.0.3] 3306: 1 packet(s) 23 bytes
Based on the alert information, it was determined to be an SQL injection attack.
6.3 Case 3: Malware Attack
Suricata detected an attempt of a malware attack from an external IP address. The attack used a known malware signature, and Suricata immediately dropped the suspicious packets, preventing the infection.
6.4 Case 4: Web Application Attack
Suricata detected a DoS attack from a botnet targeting the company’s web server. The attack generated a large amount of traffic, aiming to overwhelm and take the server offline. Suricata identified the attack pattern and blocked the attack, protecting the web server from disruption.
7. Rule Language and Performance Optimization
7.1 Rule Language Comparison
Both Snort and Suricata use signature-based rule languages to define detection logic. Snort’s rule language is widely praised for its flexibility and readability, allowing users to easily write and modify rules to address new threats. Suricata adopts a rule format compatible with Snort and extends it to support advanced detection features and contextual information.
7.2 Performance Optimization Suggestions
Snort : Performance can be improved to some extent through multi-instance deployment and load balancing.
Suricata : Its multi-threaded architecture can fully utilize the advantages of multi-core processors, performing better in high-traffic environments.
8. Conclusion and Outlook
This paper compares and analyzes Snort and Suricata and verifies their effectiveness through experiments on a Linux platform. The results show that Suricata has significant performance advantages in high-traffic environments. In the future, with the development of network technology, IDS will become more intelligent and efficient.
9. References
Network Attack and Defense Case Analysis: From Intrusion Detection to Security Defense_Real Event of Intrusion Detection Technology-CSDN Blog Network Intrusion Detection System Snort (Part 3) – Advantages and Performance Metrics Performance Comparison and Detection Analysis in Snort and Suricata Environments – Paranoid Coder Case Analysis: Successful Intrusion Detection Instances – WEBKT Comparison Study of Intrusion Detection Systems in Network Security: Snort and Suricata Snort and Suricata: Comparison and Connection of Two Major Open-source Network Security Tools IPS Case Study: In-depth Understanding of Real-world Intrusion Prevention System
Linux-Based IDS Setup Code and Configuration Examples
Below are example codes for installing and configuring Snort and Suricata on Ubuntu 22.04.
1. Environment Preparation
Ensure your Linux system is updated to the latest version and has the necessary dependencies installed.
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install build-essential checkinstall -y
2. Installing Snort
2.1 Installing Dependencies
sudo apt-get install libpcap-dev libpcre3-dev libdnet-dev liblua5.3-dev -y
2.2 Downloading and Installing Snort
# Create installation directory
sudo mkdir /usr/src/snort
cd /usr/src/snort
# Download Snort source code
sudo wget https://www.snort.org/downloads/snort/snort-3.0.0.tar.gz
sudo tar -xzvf snort-3.0.0.tar.gz
cd snort-3.0.0
# Compile and install
sudo ./configure --enable-sourcefire
sudo make
sudo make install
2.3 Configuring Snort
# Create configuration directories
sudo mkdir /etc/snort
sudo mkdir /etc/snort/rules
sudo mkdir /var/log/snort
# Create Snort configuration file
sudo cp /usr/src/snort/snort-3.0.0/etc/snort.conf /etc/snort/snort.conf
# Edit configuration file
sudo nano /etc/snort/snort.conf
# Modify the following:
# 1. Set HOME_NET (your internal network IP range)
# 2. Set EXTERNAL_NET (external network)
# 3. Ensure the rules path is correct
2.4 Starting Snort
sudo snort -c /etc/snort/snort.conf -i eth0 -l /var/log/snort
3. Installing Suricata
3.1 Installing Dependencies
sudo apt-get install autoconf automake build-essential cargo cbindgen libjansson-dev libpcap-dev libcap-ng-dev libmagic-dev liblz4-dev libpcre2-dev libtool libyaml-dev make pkg-config rustc zlib1g-dev -y
3.2 Installing Suricata
sudo apt-get install suricata -y
3.3 Configuring Suricata
# Backup default configuration file
sudo cp /etc/suricata/suricata.yaml /etc/suricata/suricata.yaml.bak
# Edit configuration file
sudo nano /etc/suricata/suricata.yaml
# Modify the following:
# 1. Set HOME_NET
# 2. Set interface
# 3. Ensure the rules path is correct
3.4 Starting Suricata
sudo systemctl enable suricata
sudo systemctl start suricata
4. Testing and Verification
4.1 Testing Snort
# Use Nmap to simulate a scan
sudo nmap -sS 192.168.1.100
# View Snort logs
sudo tail -f /var/log/snort/alert
4.2 Testing Suricata
# Use Iperf3 to generate traffic
sudo iperf3 -c 192.168.1.100
# View Suricata logs
sudo tail -f /var/log/suricata/fast.log
5. Performance Testing and Optimization
5.1 Performance Testing
# Use Wireshark to capture traffic
sudo wireshark -i eth0
# Use Suricata and Snort to detect traffic
sudo snort -c /etc/snort/snort.conf -i eth0 -l /var/log/snort
sudo systemctl restart suricata
5.2 Performance Optimization
# For Snort:
# 1. Enable multiple instances
# 2. Optimize rules
# For Suricata:
# 1. Enable multithreading
# 2. Adjust thread configuration
6. Practical Application Cases
6.1 Case: SQL Injection Attack Detection
# Create custom rules
# Edit Snort rules file: /etc/snort/rules/local.rules
alert tcp $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS {
msg: "SQL Injection Attempt";
content: "SELECT";
http_method;
sid: 1000001;
}
# Edit Suricata rules file: /etc/suricata/rules/local.rules
alert tcp $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS {
msg: "SQL Injection Attempt";
content: "SELECT";
http_method;
sid: 1000001;
}
7. Log Analysis and Visualization
You can use the ELK Stack (Elasticsearch, Logstash, Kibana) to analyze and visualize IDS logs.
7.1 Installing the ELK Stack
# Install Elasticsearch
sudo apt-get install elasticsearch -y
# Install Logstash
sudo apt-get install logstash -y
# Install Kibana
sudo apt-get install kibana -y
7.2 Configuring Logstash
# Edit Logstash configuration file
sudo nano /etc/logstash/conf.d/snort.conf
# Add the following content
input {
file {
path => "/var/log/snort/alert"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{WORD:severity} %{NOTSPACE:alert} %{NOTSPACE:src_ip}:%{NUMBER:src_port} -> %{NOTSPACE:dst_ip}:%{NUMBER:dst_port}" }
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "snort"
}
}
7.3 Starting the ELK Stack
sudo systemctl enable elasticsearch
sudo systemctl enable logstash
sudo systemctl enable kibana
sudo systemctl start elasticsearch
sudo systemctl start logstash
sudo systemctl start kibana
7.4 Visualizing with Kibana
Access http://:5601
, create an index in Kibana, and visualize IDS logs.