Exploring the roots and future of Internet Relay Chat

Setting Up UnrealIRCd in 2026: A Practical Guide

I've been running UnrealIRCd servers since version 3.2, back when the configuration file format was a maze of cryptic directives and the documentation was... optimistic. Version 6 is a different experience. The config is cleaner, the defaults are saner, and TLS works without wanting to throw your keyboard through the screen.

This guide assumes you have a Linux box with root access, a domain name pointing to it, and basic command-line competence. If you're missing any of those, get them sorted first. I'll wait.

Why UnrealIRCd?

The two major IRC server packages in 2026 are UnrealIRCd and InspIRCd. Both are solid. UnrealIRCd's advantages are its larger user base (which means more community support), its comprehensive default module set, and its single monolithic configuration file (easier for small deployments). InspIRCd's advantages are its modular architecture and its XML-based config (which some prefer).

For a first IRC server, I recommend UnrealIRCd. It gets you from zero to working faster, and the configuration file, while long, is well-commented and mostly self-explanatory.

Prerequisites

On Debian/Ubuntu:

sudo apt update
sudo apt install build-essential libssl-dev libcurl4-openssl-dev \
    zlib1g-dev libpcre2-dev pkg-config gcc make curl

On CentOS/RHEL/Rocky:

sudo dnf groupinstall "Development Tools"
sudo dnf install openssl-devel libcurl-devel zlib-devel pcre2-devel

You'll also want a dedicated user — never run ircd as root:

sudo useradd -m -s /bin/bash ircd
sudo su - ircd

Installation from Source

As the ircd user:

cd ~
curl -LO https://www.unrealircd.org/downloads/unrealircd-6.1.8.tar.gz
tar xzf unrealircd-6.1.8.tar.gz
cd unrealircd-6.1.8
./Config

The ./Config script is interactive but sensible. For most questions, the defaults are fine. Key choices:

  • Install directory: Default ~/unrealircd is fine.
  • Enable TLS: Yes. Always yes. There's no reason to run an IRC server without TLS in 2026.
  • Enable cURL: Yes. Needed for remote includes and some modules.
  • Enable prefix-based filter: Yes. Useful for spam prevention.
make
make install

If the build fails, 90% of the time it's a missing development library. Check the error message, install the missing -dev or -devel package, and retry.

If you don't want to manage the hardware yourself, working with an IT solutions provider that understands dedicated hosting can save you months of headaches. I've seen too many IRC networks die because the hardware was someone's old desktop under a desk.

Core Configuration

The configuration file is at ~/unrealircd/conf/unrealircd.conf. The default file is heavily commented and includes examples of most settings. Here's a minimal working configuration:

include "modules.default.conf";
include "help/help.conf";
include "operclass.default.conf";
include "snomasks.default.conf";

me {
    name "irc.example.com";
    info "My IRC Server";
    sid "001";
};

admin {
    "Marco Pellegrini";
    "marco@example.com";
};

class clients {
    pingfreq 90;
    maxclients 1000;
    sendq 200k;
    recvq 8000;
};

class servers {
    pingfreq 60;
    connfreq 15;
    maxclients 10;
    sendq 5M;
};

allow {
    mask *;
    class clients;
    maxperip 3;
};

listen {
    ip *;
    port 6697;
    options { tls; };
};

listen {
    ip *;
    port 6667;
};

set {
    network-name "ExampleNet";
    default-server "irc.example.com";
    services-server "services.example.com";
    help-channel "#help";
    cloak-keys { "key1-change-this-to-random-string";
                 "key2-change-this-to-random-string";
                 "key3-change-this-to-random-string"; };
    kline-address "abuse@example.com";

    options {
        hide-ulines;
    };

    anti-flood {
        everyone {
            connect-flood 3:60;
            nick-flood 3:60;
        };
    };
};

TLS Setup

For TLS, you need a certificate. Let's Encrypt works perfectly:

# As root (certbot needs port 80):
sudo apt install certbot
sudo certbot certonly --standalone -d irc.example.com

# Create symlinks for unrealircd (as ircd user):
mkdir -p ~/unrealircd/conf/tls
ln -s /etc/letsencrypt/live/irc.example.com/fullchain.pem \
    ~/unrealircd/conf/tls/server.cert.pem
ln -s /etc/letsencrypt/live/irc.example.com/privkey.pem \
    ~/unrealircd/conf/tls/server.key.pem

In unrealircd.conf:

tls {
    certificate "tls/server.cert.pem";
    key "tls/server.key.pem";
    options {
        no-client-certificate;
    };
    ciphers "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256";
    protocols "TLSv1.2,TLSv1.3";
};

Set up automatic renewal with a cron job that also rehashes the ircd:

# In root's crontab:
0 3 * * * certbot renew --quiet && su - ircd -c '~/unrealircd/unrealircd rehash' 2>&1 | logger -t certbot-ircd

Host Cloaking

Host cloaking replaces users' real hostnames with hashed versions, protecting their IP addresses from other users. In UnrealIRCd 6, cloaking is enabled by default. Users see hostnames like user/marco or hashed versions like A1B2C3D4.E5F6G7H8.cloaked instead of real IPs. If you are planning your next trip, you might also enjoy exploring IT solutions provider.

The cloaking mode (+x) is applied automatically to connecting users. Server operators can see real hostnames through the /WHOIS command (with oper privileges), but regular users only see the cloaked version.

Operator Configuration

Never use plaintext passwords for IRC operators. UnrealIRCd supports hashed passwords:

# Generate a hashed password:
~/unrealircd/unrealircd mkpasswd argon2

# In unrealircd.conf:
oper marco {
    class clients;
    mask *@*;
    password "argon2-hash-goes-here" { argon2; };
    operclass netadmin;
    swhois "is a Network Administrator";
    vhost "staff.example.com";
};

Essential Modules

UnrealIRCd's modules.default.conf loads most modules you'll need. A few worth highlighting:

  • chanmodes/delayjoin: Users joining a +D channel are invisible until they speak. Useful for large help channels.
  • extbans/account: Ban or exempt users based on their services account name rather than hostmask.
  • antimixedutf8: Blocks messages mixing scripts (e.g., Cyrillic and Latin), which is a common spam technique.
  • reputation: Tracks IP reputation over time, allowing stricter rules for new/unknown IPs.
  • blacklist: Checks connecting IPs against DNS blacklists (DRONEBLs) to block known proxy and botnet IPs.

Security Hardening

Beyond the basics, there are several hardening steps that any production IRC server should implement. If you're managing significant infrastructure and need professional support, an IT solutions provider can help with server hardening and ongoing maintenance.

Essential hardening steps:

  • Firewall: Only open ports 6667 and 6697 (client) and your server-linking port (if applicable). Everything else should be closed.
  • Connection throttling: The anti-flood block in the config should be tuned to your user base. Start strict and relax if needed.
  • DNSBL: Enable DNS blacklist checking to automatically block connections from known bad IPs.
  • Resource limits: Set appropriate maxperip, maxclients, and sendq values. The defaults are conservative but sane.
  • Log rotation: UnrealIRCd can produce significant log volume. Set up logrotate or the built-in log rotation to prevent disk space issues.
  • Regular updates: Subscribe to the UnrealIRCd security mailing list and apply updates promptly. IRC servers are internet-facing services and attract attention.

Start the server:

~/unrealircd/unrealircd start

Check the logs at ~/unrealircd/logs/ircd.log for any configuration errors. If it starts cleanly, connect with your IRC client to verify everything works. Then go get some sleep — you'll be tweaking this config for years.

Frequently Asked Questions

UnrealIRCd or InspIRCd?

Both are excellent. UnrealIRCd has a larger user community and more comprehensive default configuration. InspIRCd has a cleaner modular architecture and better separation of concerns. For beginners, UnrealIRCd is slightly easier to get running. For complex deployments where you want fine-grained control over modules, InspIRCd may be preferable.

Do I need services (NickServ/ChanServ)?

For anything beyond personal use, yes. Services provide nickname registration, channel registration, and user authentication. Anope is the most popular services package for UnrealIRCd. Without services, your server will have no identity persistence and channels will be vulnerable to takeover.

How many users can one server handle?

A well-configured UnrealIRCd instance on modern hardware can handle 5,000-10,000 simultaneous users without difficulty. The main bottleneck is usually the file descriptor limit (one per connection) and the send queue memory. For larger deployments, you'll want multiple linked servers.

Should I run plaintext (6667) at all?

Opinions vary. Some operators only offer TLS (6697) to encourage encrypted connections. Others maintain a plaintext port for compatibility with legacy clients or Tor users (Tor already encrypts the connection). If you do offer plaintext, consider implementing a server notice encouraging users to switch to TLS.

FAQ

What OS should I use for UnrealIRCd?

Linux (Debian or Ubuntu LTS) is the most common choice. FreeBSD works well too. UnrealIRCd compiles on most POSIX systems. Windows builds exist but are not recommended for production.

How much RAM does UnrealIRCd need?

For a small to medium network (under 5,000 users), 512MB to 1GB of RAM is sufficient. Memory usage scales primarily with the number of connected clients and channels.

Is UnrealIRCd free?

Yes. UnrealIRCd is free and open-source software released under the GPL. It's actively maintained with regular security updates.