Complete INN2 Server Setup Guide

Overview

This guide provides complete instructions for installing and configuring INN2 (InterNetNews) on Ubuntu 22.04/24.04 as a text-only, privacy-oriented Usenet server with Tor hidden service support.

Target Configuration:
  • Ubuntu 22.04 or 24.04 LTS
  • INN 2.6.4 or newer
  • Text-only articles (max 65KB)
  • 7-day retention policy
  • Tor hidden service integration
  • No authentication required

Step 1: Install INN2

Update system and install INN2 package:

sudo apt update
sudo apt upgrade -y
sudo apt install inn2 -y
Verify Installation:
dpkg -l | grep inn2
systemctl status innd

Step 2: Configure inn.conf

Edit the main configuration file:

sudo nano /etc/news/inn.conf

Key settings for privacy-oriented operation:

# Basic server identification
organization: Your Organization Name
pathhost: news.yourdomain.net
server: localhost

# Main settings
domain: yourdomain.net
fromhost: news.yourdomain.net
moderatormailer: %s@moderators.isc.org
complaints: abuse@yourdomain.net

# Performance tuning
hiscachesize: 256
artcutoff: 7
maxconnections: 50
maxartsize: 65536

# Storage optimization
storagemethod: tradspool
wireformat: false
xrefslave: false

# Privacy-oriented settings
logartsize: false
logipaddr: false
logstatus: false
nntplinklog: false
readerswhenstopped: false
allownewnews: false

# Essential services
doinnwatch: true
innwatchsleeptime: 600
Important: Set logipaddr: false to avoid logging client IP addresses for privacy.

Step 3: Configure Storage (storage.conf)

Configure traditional spool storage for text-only content:

sudo nano /etc/news/storage.conf
# Text-only traditional spool method
method tradspool {
    newsgroups: *
    class: 0
    size: 0,65536
    expires: 7d
}

Step 4: Configure Reader Access (readers.conf)

Set up access control for local, clearnet, and Tor connections:

sudo nano /etc/news/readers.conf
# Localhost access (for Tor hidden service)
auth "localhost" {
    hosts: "localhost, 127.0.0.1, ::1"
    default: "<localhost>"
}

access "localhost" {
    users: "<localhost>"
    newsgroups: "*"
    access: RPA
}

# Clearnet access (if using public IP)
auth "clearnet" {
    hosts: "*"
    default: "<clearnet>"
}

access "clearnet" {
    users: "<clearnet>"
    newsgroups: "*"
    access: RPA
}
Access Levels:
  • R = Read articles
  • P = Post articles
  • A = Approve moderated articles

Step 5: Configure Article Expiration (expire.ctl)

Set retention policy for all newsgroups:

sudo nano /etc/news/expire.ctl
# Retention policy for all groups
# Format: pattern:modflag:keep:default:purge (in days)
# keep=10, default=14, purge=14
*:A:10:14:14

Step 6: Configure Incoming Feeds (incoming.conf)

Allow peering with upstream servers:

sudo nano /etc/news/incoming.conf
# Local server identification
peer ME {
    hostname: localhost
}

# Example: Add your peer servers
# peer peer.example.net {
#     hostname: peer.example.net
#     max-connections: 10
# }

Step 7: Initialize History Database

Create and initialize the history database:

sudo su - news -s /bin/bash
cd /var/lib/news
makehistory -b -f history.n -O -T /tmp
mv history.n history
exit

Step 8: Start INN Services

sudo systemctl enable innd
sudo systemctl start innd
sudo systemctl status innd
Test Server Connectivity:
telnet localhost 119

You should see: 200 news.yourdomain.net InterNetNews server INN 2.6.4 ready

Step 9: Tor Hidden Service Integration

Install and configure Tor for anonymous access:

sudo apt install tor -y
sudo nano /etc/tor/torrc

Add hidden service configuration:

# INN2 Hidden Service
HiddenServiceDir /var/lib/tor/inn_hidden_service/
HiddenServicePort 119 127.0.0.1:119

Restart Tor and get your onion address:

sudo systemctl restart tor
sudo cat /var/lib/tor/inn_hidden_service/hostname
Your Onion Address: Save the .onion address displayed. This is your Tor hidden service address for anonymous NNTP access.

Step 10: Verify Configuration

Check INN is listening on all required interfaces:

sudo netstat -tulpn | grep :119
sudo ss -tulpn | grep :119

Expected output:

tcp  0  0 0.0.0.0:119     0.0.0.0:*    LISTEN    12345/innd
tcp6 0  0 :::119          :::*         LISTEN    12345/innd

Maintenance Commands

Essential commands for daily operations:

# Check server status
sudo systemctl status innd
sudo /usr/lib/news/bin/innstat

# View logs
sudo tail -f /var/log/news/news.notice
sudo tail -f /var/log/news/news.err

# Restart server
sudo systemctl restart innd

# Run news maintenance (usually automated)
sudo /etc/news/bin/news.daily

Troubleshooting

Server Won't Start

# Check configuration syntax
sudo /usr/lib/news/bin/inncheck

# Check permissions
sudo chown -R news:news /var/lib/news
sudo chown -R news:news /var/spool/news

Can't Connect from Tor

Ensure INN listens on localhost:

sudo nano /etc/news/inn.conf

# Verify this line exists:
bindaddress: 0.0.0.0

Articles Not Expiring

Manually run expiration:

sudo su - news -s /bin/bash
/usr/lib/news/bin/news.daily expire
exit

Security Hardening

Firewall Configuration:

If exposing INN to the internet, configure firewall rules. See the Restricted Access Guide for iptables configuration.

Next Steps