A minimal IRC daemon
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin
conf Add an admin-email config key Mar 4, 2018
doc
tests Use modules Jan 1, 2019
.gitignore
.gometalinter.json
.goreleaser.yml
.travis.yml
CHANGELOG.md v1.11.0 Jan 1, 2019
COPYING Add license file Oct 7, 2016
Gopkg.lock
Gopkg.toml
README.md
args.go
channel.go
config.go
go.mod
go.sum Use modules Jan 1, 2019
ircd_test.go Run gofmt -s Nov 6, 2017
local_client.go
local_server.go Remove unnecessary conversions Aug 18, 2018
local_user.go Remove unnecessary conversions Aug 18, 2018
main.go Do not automatically rehash Aug 19, 2018
main_test.go
net.go
server.go
user.go
util.go
version.go v1.11.0 Jan 1, 2019

README.md

catbox

Build Status Go Report Card

catbox is an IRC server with a focus on being small and understandable. The goal is security.

Features

  • Server to server linking
  • IRC operators
  • Private (WHOIS shows no channels, LIST isn't supported)
  • Flood protection
  • K: line style connection banning
  • TLS

catbox implements enough of RFC 1459 to be recognisable as IRC and be minimally functional. I likely won't add much more and don't intend it to be complete. If I don't think something is required it likely won't be here.

Installation

  1. Download catbox from the Releases tab on GitHub, or build from source (go build).
  2. Configure catbox through config files. There are example configs in the conf directory. All settings are optional and have defaults.
  3. Run it, e.g. ./catbox -conf catbox.conf. I typically run catbox inside tmux using this program.

Configuration

catbox.conf

Global server settings.

opers.conf

IRC operators.

servers.conf

The servers to link with.

users.conf

Privileges and hostname spoofs for users.

The only privilege right now is flood exemption.

TLS

A setup for a network might look like this:

  • Give each server a certificate with 2 SANs: Its own hostname, e.g. server1.example.com, and the network hostname, e.g. irc.example.com.
  • Set up irc.example.com with DNS round-robin listing each server's IP.
  • List each server by its own hostname in servers.conf.

Clients connect to the network hostname and verify against it. Servers connect to each other by server hostname and verify against it.

Why the name?

My domain name is summercat.com, cats love boxes, and a tribute to ircd-ratbox, the IRC daemon I used in the past.

Logo

catbox logo (c) 2017 Bee