auditbeat Linux: Complete Guide to Shipping Audit Data to Elasticsearch

August 26, 2025

Introduction to auditbeat

auditbeat is a lightweight shipper from the Elastic Beat family that collects audit data from the Linux Audit Framework and ships it to Elasticsearch or other outputs. It provides comprehensive security monitoring by tracking file integrity, process execution, network connections, and system calls.

This powerful tool helps organizations maintain security compliance, detect unauthorized changes, and monitor system activities in real-time. auditbeat transforms raw audit logs into structured data that can be easily analyzed and visualized in Kibana.

Key Features of auditbeat

  • File Integrity Monitoring (FIM): Tracks changes to critical files and directories
  • Process Monitoring: Captures process execution and termination events
  • Network Monitoring: Records network socket activities
  • System Call Auditing: Monitors system calls for security analysis
  • User Session Tracking: Logs user login/logout activities
  • Compliance Support: Helps meet PCI DSS, HIPAA, and SOX requirements

Prerequisites

Before installing auditbeat, ensure your system meets these requirements:

  • Linux distribution with kernel 2.6.30 or later
  • Elasticsearch cluster (version 6.8 or later recommended)
  • Root or sudo privileges for installation
  • Network connectivity to Elasticsearch cluster
  • Sufficient disk space for temporary log storage

Installing auditbeat on Linux

Method 1: Using Package Managers

Ubuntu/Debian Installation

# Add Elastic repository
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list

# Update package list and install
sudo apt update
sudo apt install auditbeat

CentOS/RHEL Installation

# Add Elastic repository
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

# Create repository file
cat << EOF | sudo tee /etc/yum.repos.d/elastic.repo
[elastic-8.x]
name=Elastic repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

# Install auditbeat
sudo yum install auditbeat

Method 2: Direct Download and Installation

# Download auditbeat
curl -L -O https://artifacts.elastic.co/downloads/beats/auditbeat/auditbeat-8.10.0-linux-x86_64.tar.gz

# Extract the archive
tar xzvf auditbeat-8.10.0-linux-x86_64.tar.gz

# Move to appropriate directory
sudo mv auditbeat-8.10.0-linux-x86_64 /opt/auditbeat

# Create symbolic link
sudo ln -s /opt/auditbeat/auditbeat /usr/local/bin/auditbeat

Basic Configuration

The main configuration file is located at /etc/auditbeat/auditbeat.yml. Here’s a basic configuration example:

# Basic auditbeat configuration
auditbeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false

auditbeat.modules:
- module: auditd
  audit_rules: |
    -w /etc/passwd -p wa -k identity
    -w /etc/group -p wa -k identity
    -w /etc/shadow -p wa -k identity
    -a always,exit -F arch=b64 -S execve -k exec

- module: file_integrity
  paths:
  - /bin
  - /usr/bin
  - /sbin
  - /usr/sbin
  - /etc

- module: system
  datasets:
    - package
    - host
  period: 10m

output.elasticsearch:
  hosts: ["localhost:9200"]
  username: "elastic"
  password: "your_password"

setup.kibana:
  host: "localhost:5601"

logging.level: info
logging.to_files: true
logging.files:
  path: /var/log/auditbeat
  name: auditbeat
  keepfiles: 7

Module Configuration

Auditd Module

The auditd module captures events from the Linux Audit Framework:

- module: auditd
  resolve_ids: true
  failure_mode: silent
  backlog_limit: 8196
  rate_limit: 0
  include_raw_message: false
  include_warnings: false
  audit_rules: |
    # Monitor file access
    -w /etc/passwd -p rwxa -k passwd_changes
    -w /etc/shadow -p rwxa -k shadow_changes
    -w /etc/group -p rwxa -k group_changes
    
    # Monitor system calls
    -a always,exit -F arch=b64 -S chmod,fchmod,chown,fchown -k perm_mod
    -a always,exit -F arch=b64 -S unlink,rmdir -k delete
    
    # Monitor network connections
    -a always,exit -F arch=b64 -S socket,connect -k network

File Integrity Module

Monitor file changes with detailed configuration:

- module: file_integrity
  paths:
  - /bin
  - /usr/bin
  - /sbin
  - /usr/sbin
  - /etc
  exclude_files:
  - '(?i)\.sw[nop]$'
  - '~$'
  - '/\.git($|/)'
  scan_at_start: true
  scan_rate_per_sec: 50 MiB
  max_file_size: 100 MiB
  hash_types: [sha1]
  recursive: true

System Module

Collect system information periodically:

- module: system
  datasets:
    - package    # Installed packages
    - host       # Host information
    - login      # User logins
    - process    # Running processes
    - socket     # Network sockets
    - user       # System users
  period: 10m
  state.period: 12h
  user.detect_password_changes: true

Elasticsearch Output Configuration

Basic Elasticsearch Configuration

output.elasticsearch:
  hosts: ["elasticsearch1:9200", "elasticsearch2:9200", "elasticsearch3:9200"]
  protocol: "https"
  username: "auditbeat_writer"
  password: "${ELASTICSEARCH_PASSWORD}"
  ssl.certificate_authorities: ["/etc/auditbeat/ca.crt"]
  ssl.certificate: "/etc/auditbeat/auditbeat.crt"
  ssl.key: "/etc/auditbeat/auditbeat.key"

Advanced Elasticsearch Settings

output.elasticsearch:
  hosts: ["elasticsearch:9200"]
  index: "auditbeat-%{[agent.version]}-%{+yyyy.MM.dd}"
  template.name: "auditbeat"
  template.pattern: "auditbeat-*"
  template.settings:
    index.number_of_shards: 1
    index.number_of_replicas: 1
    index.refresh_interval: "5s"
  
  # Bulk settings
  bulk_max_size: 1600
  worker: 1
  compression_level: 0
  escape_html: false

Starting and Managing auditbeat

Service Management

# Enable and start auditbeat service
sudo systemctl enable auditbeat
sudo systemctl start auditbeat

# Check service status
sudo systemctl status auditbeat

# View logs
sudo journalctl -u auditbeat -f

# Stop and restart service
sudo systemctl stop auditbeat
sudo systemctl restart auditbeat

Testing Configuration

# Test configuration
sudo auditbeat test config

# Test output connectivity
sudo auditbeat test output

# Run in foreground for debugging
sudo auditbeat -e -c /etc/auditbeat/auditbeat.yml

Common Use Cases and Examples

Monitoring Critical System Files

Create audit rules to monitor critical system files:

# Add to auditd module configuration
audit_rules: |
  # Monitor critical system files
  -w /etc/passwd -p wa -k passwd_file
  -w /etc/shadow -p wa -k shadow_file
  -w /etc/sudoers -p wa -k sudoers_file
  -w /etc/ssh/sshd_config -p wa -k ssh_config
  
  # Monitor system binaries
  -w /bin/su -p x -k privileged_commands
  -w /usr/bin/sudo -p x -k privileged_commands
  -w /bin/login -p x -k login_commands

Process Execution Monitoring

# Monitor process execution
audit_rules: |
  # Track all command executions
  -a always,exit -F arch=b64 -S execve -k command_exec
  -a always,exit -F arch=b32 -S execve -k command_exec
  
  # Monitor specific dangerous commands
  -w /usr/bin/wget -p x -k network_tools
  -w /usr/bin/curl -p x -k network_tools
  -w /bin/nc -p x -k network_tools

Network Activity Monitoring

# Network connection monitoring
audit_rules: |
  # Monitor network socket creation
  -a always,exit -F arch=b64 -S socket -F a0=2 -k network_socket_ipv4
  -a always,exit -F arch=b64 -S socket -F a0=10 -k network_socket_ipv6
  
  # Monitor network connections
  -a always,exit -F arch=b64 -S connect -k network_connect
  -a always,exit -F arch=b64 -S bind -k network_bind

Performance Tuning

Optimizing Resource Usage

# Performance settings in auditbeat.yml
queue.mem:
  events: 4096
  flush.min_events: 512
  flush.timeout: 5s

processors:
  - add_host_metadata:
      when.not.contains.tags: forwarded
  - add_docker_metadata: ~
  - add_kubernetes_metadata: ~

# Limit file integrity monitoring
- module: file_integrity
  paths:
  - /etc
  scan_rate_per_sec: 10 MiB
  max_file_size: 50 MiB

Managing Audit Log Volume

# Control audit rule scope
audit_rules: |
  # Exclude noisy system calls
  -a never,exit -F arch=b64 -S adjtimex -F auid=unset
  -a never,exit -F arch=b64 -S clock_settime -F auid=unset
  
  # Rate limiting
  -r 500  # Limit to 500 messages per second

Security Considerations

Secure Communication

# SSL/TLS configuration for secure communication
output.elasticsearch:
  hosts: ["https://elasticsearch:9200"]
  ssl.verification_mode: full
  ssl.certificate_authorities: ["/etc/ssl/certs/ca.pem"]
  ssl.certificate: "/etc/ssl/certs/auditbeat.pem"
  ssl.key: "/etc/ssl/private/auditbeat.key"

Authentication and Authorization

# API key authentication
output.elasticsearch:
  hosts: ["elasticsearch:9200"]
  api_key: "id:api_key"

# Or username/password with keystore
# Store password securely
sudo auditbeat keystore create
sudo auditbeat keystore add elasticsearch.password

Troubleshooting Common Issues

Permission Issues

# Check auditbeat user permissions
sudo ls -la /var/log/auditbeat/
sudo chown -R auditbeat:auditbeat /var/log/auditbeat/

# Verify audit system status
sudo auditctl -s

# Check if audit daemon is running
sudo systemctl status auditd

Connection Problems

# Test Elasticsearch connectivity
curl -X GET "elasticsearch:9200/_cluster/health?pretty"

# Check auditbeat logs for errors
sudo tail -f /var/log/auditbeat/auditbeat

# Verify network connectivity
telnet elasticsearch_host 9200

High Resource Usage

# Monitor auditbeat resource usage
sudo top -p $(pgrep auditbeat)

# Check disk usage
sudo du -sh /var/log/auditbeat/
sudo df -h /var/log

# Reduce monitoring scope if needed
# Edit /etc/auditbeat/auditbeat.yml to exclude unnecessary paths

Integration with Kibana

Setting Up Dashboards

# Load Kibana dashboards
sudo auditbeat setup --dashboards

# Setup index patterns and templates
sudo auditbeat setup --index-management --dashboards

Custom Visualizations

Create custom Kibana visualizations for:

  • File modification timeline
  • Process execution frequency
  • Network connection patterns
  • User activity heat maps
  • Compliance dashboard views

Best Practices

Configuration Management

  • Version control your auditbeat configurations
  • Use centralized configuration management tools
  • Test configurations in staging environments
  • Document custom audit rules and their purposes
  • Implement configuration validation processes

Security Hardening

  • Run auditbeat with minimal required privileges
  • Secure configuration files with appropriate permissions
  • Use encrypted communication channels
  • Implement log rotation and retention policies
  • Monitor auditbeat’s own security events

Maintenance and Monitoring

  • Regular updates and security patches
  • Monitor auditbeat performance metrics
  • Set up alerts for service failures
  • Periodic review of audit rules effectiveness
  • Backup critical configuration files

Conclusion

auditbeat provides a robust solution for shipping Linux audit data to Elasticsearch, enabling comprehensive security monitoring and compliance tracking. By properly configuring modules, optimizing performance, and following security best practices, organizations can maintain effective oversight of their Linux systems.

The combination of file integrity monitoring, process tracking, and network activity surveillance makes auditbeat an essential tool for security-conscious environments. Regular maintenance, proper tuning, and integration with visualization tools like Kibana ensure maximum value from your audit data collection efforts.

Remember to start with basic configurations and gradually expand monitoring scope based on your specific security requirements and compliance needs. This approach helps maintain system performance while providing the security visibility your organization requires.