echoIRCd/docs/configuration.md

7.9 KiB

Configuration

The config is a plain key = value text file (default ./echoircd.conf). Some keys repeat to build a list (motd, oper, link, connectclass, dnsbl, securitygroup, …). Comments start with #.

The shipped echoircd.conf.example is the fully annotated master reference — every key with its default. This page organizes those keys by topic. Every operational limit is a config key; nothing is hardcoded. Most settings apply on REHASH without a restart.

echoircd.conf is gitignored because it holds secrets (oper password, cloak key, link password). Never commit your live config.

Server identity

Key Meaning
servername This server's name (e.g. irc.example.net).
network Network name (advertised in ISUPPORT).
sid Server ID for linking — 3 chars, first a digit (e.g. 0AA).
serverdesc Human-readable server description.
motd Message of the day; repeat the key for extra lines.

Listeners & TLS

Key Meaning
bind Plaintext client listener, ip:port (e.g. 0.0.0.0:6667).
bind_tls TLS client listener (e.g. 0.0.0.0:6697).
tls_cert / tls_key PEM certificate + private key for TLS (and wss://).
bind_server Server-to-server link listener (see linking).

Generate a self-signed cert to start:

openssl req -x509 -newkey rsa:2048 -keyout tls/key.pem -out tls/cert.pem \
        -days 3650 -nodes -subj "/CN=irc.example.net"

I/O & performance

Key Default Meaning
io_threads 0 (auto) Reactor workers; 0 = one per core, capped.
max_line 16384 Max bytes in one line / receive queue.
max_sendq 1048576 Max queued output before a slow client is dropped.
tls_handshake_timeout 15 Drop a TLS conn that stalls mid-handshake (secs; 0 = off).
slow_command_ms 200 Server-notice when one event takes at least this long (0 = off).
watchdog_ms 5000 Log if the core is stuck on one event this long (0 = off).

Connection classes

connectclass = <name> key=value … — per-class connection policy. Each line matches connecting clients by IP/host mask (glob or CIDR) and optional TLS/port; the first match wins, else the global limits apply. Masks are tested at connect (against the IP) and re-tested at registration (against the resolved host).

Key options: allow=<mask[,mask]>, deny=yes, parent=<name> (inherit), requiressl=yes|trusted, password=<pw> + hash=<algo>, port=<p[,p]>, localmax=<n> (per-IP, this server), globalmax=<n> (per-IP, network-wide), limit=<n> (total users in class), maxchans=<n>, pingfreq=<secs>, timeout=<secs> (registration), modes=<+modes>, recvq / hardsendq / softsendq (queue caps), fakelag=no (disconnect flooders instead of throttling), penaltythreshold / commandrate (flood window), useident=yes, requireident=yes, resolvehostnames=no, maxconnwarn=yes.

connectclass = trusted allow=10.0.0.0/8  maxchans=200 pingfreq=120 fakelag=no
connectclass = secure  allow=*  requiressl=yes  password=sha256:<hex> hash=sha256
connectclass = vpn     allow=*  parent=trusted localmax=2 maxchans=20 modes=+ix
connectclass = banned  allow=1.2.3.0/24 deny=yes
connectclass_required = yes    # refuse clients matching no allow class (default no)

Connection policy & timeouts

Key Default Meaning
registration_timeout 60 Drop clients that never send NICK+USER in time.
ping_frequency 90 Send a PING after this much idle.
ping_timeout 60 Then drop if no PONG within this much longer.
resolve_hosts on Do reverse DNS on connect.
use_resolved_host on Use the resolved host in the mask (else keep the IP).
useident / requireident / ident_timeout off / off / 5 RFC 1413 ident lookups.
conn_waitpong off Hold registration until the client PONGs a cookie (bot filter).
abbreviation off Let a unique command prefix resolve (WHOIWHOIS).

Operators

Key Meaning
oper = <name> <password> [level] An oper account; the password may be hashed (see MKPASSWD). Optional numeric oper level.
opermotd A line shown to opers via /OPERMOTD (repeatable).
operprefix Give every oper a ! prefix in their channels.
ojoin / ojoin_op Enable /OJOIN (join as staff, with op unless ojoin_op = no).

Linking & services

Key Meaning
link = <name> <ip> <port> <password> [autoconnect] A peer server; password is a shared secret.
sasl_server The linked server that handles SASL (relayed AUTHENTICATE). Unset disables SASL.
webirc = <password> [gateway] [ip-mask] Trust a web gateway's WEBIRC (real client host/IP).

See linking for the full picture.

Anti-abuse

Key Meaning
accept_rate / accept_burst Per-IP new-connection rate limit at the accept edge (0 = off).
flood_messages / flood_seconds Per-user message-rate limit (opers exempt).
connflood = <max> <secs> Refuse an IP opening more than max connections per secs.
dnsbl / dnsbl_action / dnsbl_reason / dnsbl_duration DNS blocklist checks (mark / kill / kline / gline / zline).
antimixedutf8 + amu_* Block spam mixing look-alike scripts.
badword = <find> [replacement] +G censor list.
autodrop_commands Silently drop pre-registration clients that send these (HTTP scanners).
solvemsg Make un-vouched users answer an arithmetic question before their PMs deliver.
dccallow_* Filter unwanted DCC transfers.

See anti-abuse for how these layer together.

Identity & privacy

Key Meaning
cloak_key Secret for host cloaking (+x). A long random hex string; changing it re-cloaks everyone.
vhost = <user> <pass> <host> A self-service vhost claimable with /VHOST.
customprefix Reconfigure prefix tiers or define brand-new prefixes.
hidewhois + hidewhois_* Hide sensitive WHOIS lines from ordinary users.
hidemode = <mode> <rank> / hidelist = <mode> <rank> Restrict who sees mode changes / list-mode entries.

GeoIP, reputation & security groups

Key Meaning
geoip_database Path to a MaxMind GeoLite2-Country.mmdb; enables the G:<cc> extban, GEOIP command, WHOIS country.
reputation_* / reputationexpire Per-address reputation scoring and the y:<score> extban.
securitygroup = <name> [criteria…] A named user set usable as the g:<name> extban.

Logging

Key Meaning
syslog + syslog_target / syslog_facility / syslog_tag Mirror the notice/log stream to the system logger (/dev/log or host:port).
log_json Append the notice/log stream to a file as JSON lines.
chanlog Mirror the oper server-notice stream into a channel.

Transports

Key Meaning
proxy = <glob|CIDR> Trust the PROXY protocol header from these sources (real client IP). Repeatable.
bind_ws / bind_wss WebSocket listeners (ws:// / wss://).
ws_origin, ws_proxyranges, ws_trust_proxy, ws_timeout, … WebSocket policy — see the example config.

Advertised limits

Each is a config key with a built-in default; set a line only to override.

Key Default Key Default
maxnick 30 maxwatch 128
maxchannel 50 maxmonitor 128
whowas_maxentries 256 maxsilence 32
chathistory_limit 256 maxaccept 64
multiline_maxbytes 4096 multiline_maxlines 24

For the complete, per-key annotated list including every module's options, see echoircd.conf.example.