HTTPS Header Capture Without Proxies
This guide demonstrates how to use QTap to transparently capture HTTP headers from applications without proxies, code changes, or certificate management. QTap uses eBPF to monitor traffic at the kernel level, capturing data before encryption.
Common Use Cases
Service Usage Analytics: Track which users or services access internal applications
API Monitoring: Capture headers for authentication, rate limiting, or debugging
Traffic Recording: Record production requests for testing or replay
Security Auditing: Monitor for unauthorized access or suspicious headers
Service Migration: Understand dependencies before deprecating endpoints
How It Works
QTap attaches to the kernel using eBPF and intercepts traffic at the TLS/SSL layer, providing visibility into encrypted traffic without managing certificates or deploying proxies. All capture happens out-of-band with minimal performance impact.
Installation
Quick Install
# Install/Update QTap
curl -s https://get.qpoint.io/install | sudo sh
# Verify installation
sudo qtap --versionConfiguration
Create a configuration file at /etc/qtap/qtap-config.yaml:
Running QTap
Direct Execution
Systemd Service (Recommended)
Create environment file for credentials:
Create systemd service:
Start and enable the service:
Configuration Examples
Example 1: Capture Only Internal Traffic
Example 2: Debug Specific Services
Example 3: Production Traffic Recording
Alternative: Using MinIO (S3-Compatible Storage)
For self-hosted S3-compatible storage like MinIO, adjust the object store configuration:
Understanding Capture Levels
http_capture Plugin Levels
none: No capture (disables the rule)
summary: Basic metadata (method, path, status code)
details: Includes all headers (recommended for user tracking)
full: Complete request/response including bodies
Rule Expression Syntax
QTAP uses Rulekit for filtering. Common expressions:
Captured Data Format
Example of captured HTTP transaction with headers:
Analyzing Captured Data
Query S3 with AWS CLI
Extract User Analytics
Create Usage Report
Performance Considerations
Capture Level: Use
detailsfor headers only,fullonly when bodies are neededFiltering: Use rules to limit capture to relevant traffic
Sampling: For high-volume services, consider sampling strategies
Storage: Rotate S3 data based on retention requirements
Process Filtering: Exclude noisy system processes
Troubleshooting
Common Issues
No data captured:
Verify QTAP is running:
sudo systemctl status qtapCheck logs:
sudo journalctl -u qtap -n 100Ensure traffic matches direction setting (ingress vs egress)
Verify HTTP traffic is on expected ports
S3 upload failures:
Test credentials:
aws s3 ls s3://traffic-capture/Check bucket permissions and region
Verify network connectivity to S3
Missing headers:
Ensure capture level is
detailsorfullVerify the
http_captureplugin is configuredCheck that traffic is HTTP/HTTPS (not other protocols)
High memory usage:
Reduce capture level from
fulltodetailsAdd filtering rules to limit captured traffic
Increase sampling intervals for high-volume endpoints
Debug Mode
Run QTAP in debug mode for troubleshooting:
Security Best Practices
Credential Management: Use environment variables or IAM roles for S3 credentials
Data Retention: Implement S3 lifecycle policies for automatic data expiration
Access Control: Restrict S3 bucket access to authorized users only
Sensitive Data: Consider filtering out sensitive headers before storage
Encryption: Enable S3 server-side encryption for stored data
Summary
QTap provides transparent HTTP header capture without requiring proxies or code changes. By leveraging eBPF, it captures traffic at the kernel level with minimal performance impact, making it ideal for:
Understanding service dependencies
Tracking API usage patterns
Debugging production issues
Recording traffic for testing
Security auditing
The combination of flexible filtering rules and native S3 integration makes QTAP a powerful tool for gaining visibility into your HTTP traffic.
Last updated