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.
Update system and install INN2 package:
sudo apt update sudo apt upgrade -y sudo apt install inn2 -y
dpkg -l | grep inn2 systemctl status innd
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
logipaddr: false to avoid logging client IP addresses for privacy.
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
}
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
}
R = Read articlesP = Post articlesA = Approve moderated articlesSet 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
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
# }
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
sudo systemctl enable innd sudo systemctl start innd sudo systemctl status innd
telnet localhost 119
You should see: 200 news.yourdomain.net InterNetNews server INN 2.6.4 ready
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
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
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
# 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
Ensure INN listens on localhost:
sudo nano /etc/news/inn.conf # Verify this line exists: bindaddress: 0.0.0.0
Manually run expiration:
sudo su - news -s /bin/bash /usr/lib/news/bin/news.daily expire exit
If exposing INN to the internet, configure firewall rules. See the Restricted Access Guide for iptables configuration.