Skip to content

Remote comms: Basic Rate Limiting #661

@sirtimid

Description

@sirtimid

Overview

The remote communications system needs rate limiting to protect against message and connection flooding attacks.

Note: PR #714 implemented resource limits for capacity (concurrent connections, message size, queue depth). This issue now tracks the remaining rate-based limits.

What's Already Implemented (PR #714)

  • ✅ 100 concurrent connections limit (maxConcurrentConnections)
  • ✅ 1MB message size limit (maxMessageSizeBytes)
  • ✅ Message queuing with 200 capacity (maxQueue)
  • ✅ Stale peer cleanup (1 hour timeout)

Remaining Work

1. Message Rate Limiting

  • Requirement: 100 messages per second per peer (sliding 1-second window)
  • Behavior: Queue excess messages up to capacity, then drop with error logging
  • Implementation: Track per-peer message counts with sliding windows, validate rates before sending

2. Connection Attempt Rate Limiting

  • Requirement: 10 connection attempts per minute per peer
  • Behavior: Reject connection attempts that exceed the rate limit
  • Implementation: Log connection attempt timestamps per peer, validate before dialing

Implementation Approach

  • Create a SlidingWindowRateLimiter class for tracking message rates
  • Add per-peer connection attempt tracking
  • Integrate rate checks into sendRemoteMessage() and dial logic
  • Add error logging when messages are dropped due to rate limits

Acceptance Criteria

  • Message rate limiting enforced at 100 msg/sec per peer
  • Connection attempt rate limiting enforced at 10 attempts/min per peer
  • Error logging when messages are dropped due to rate limits
  • Unit tests verify enforcement of both rate limits
  • Tests confirm proper queueing behavior when approaching limits

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions