Configurer miniIRCd sur NetBSD 10.0

Introduction

miniIRCd est un serveur IRC minimaliste.
Pas de contrôle des utilisateurs entrants, pas d'authentification (autre qu'un mot de passe d'accès), juste du SSL.
ça peut servir dans certains cas...
On peut facilement écrire un filtre fail2ban et configurer le pare-feu pour limiter les risques.

(Installation effectuée sur un serveur NetBSD installé en mode 'minimaliste')

Passez en root pour toute la procédure.


1) Installer git, python3 et openssl

pkgin -y in git python311 openssl tmux

2) Télécharger installer miniIRCd

cd /tmp && git clone https://github.com/jrosdahl/miniircd.git && cd miniircd && cp miniircd /usr/pkg/bin/

3) Générer le certificat SSL autosigné et créer le chroot

mkdir -p /var/jail/miniircd ; cd /var/jail/miniircd ; openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout miniircd.key -out miniircd.crt -config /usr/pkg/etc/openssl/openssl.cnf

4) Créer un lien symbolique pour Python3

ln -s /usr/pkg/bin/python3.11 /usr/pkg/bin/python3

5) Lancer le serveur en arrière-plan

/usr/pkg/bin/miniircd --listen=0.0.0.0 --ssl-cert-file=/var/jail/miniircd/miniircd.crt --ssl-key-file=/var/jail/miniircd/miniircd.key --verbose --chroot=/var/jail/miniircd --setuid=nobody --password 'Mon-Super-Mot-DE-PaSse' -d

Sur Android, l'application CoreIRC Go (ou sa version payante) sont compatibles avec miniIRCd


Rappel des commandes IRC de base

(compatibles avec miniIRCd) sur les clients type Hexchat :

Rejoindre un canal ou en créer un :

/join #NOM-DU-CANAL-A-CREER-OU-A-JOINDRE

Quitter le canal '#CANAL' avec un message d'au-revoir

/part #CANAL Au revoir tout le monde

Changer de pseudonyme

/nick NouveauPseudo

Envoyer le message 'Bonjour' à l'utilisateur 'Utilisateur'

/msg Utilisateur Bonjour !

Envoyer un fichier à un utilisateur

/dcc send UTILISATEUR-DESTINATAIRE

Comment sécuriser un peu miniIRCd

1) Mettre en place NPF :

echo 'npf=YES' >> /etc/rc.conf

2) rédiger un fichier de règles : /etc/npf.conf :

(Attention à bien remplacer le nom de votre interface WAN_if et WAN_addrs !!)

########################################################################

# 1 - Provide information about your network interface(s):

# WAN Interface :
$WAN_if = 'vioif0'
$WAN_addrs = ifaddrs(vioif0)

alg 'icmp'

########################################################################

# 2 - Define the networks

# The RFC protects the server from private networks in case it is directly facing the internet.
# (Uncomment only if the WAN IP is a public IP address)
#$RFC1918 = { 10.0.0.0/8, 172.16.0.0/14, 192.168.0.0/16 }

# (Uncomment only if the server acts as a gateway)
#$LAN_net = { 10.10.10.0/24 }

########################################################################

# 3 - Create a procedure for logging connections:

procedure 'log' {
# Send all events to a log (see npfd))
log: npflog0
}

########################################################################

# 5 - Create tables

# Create a table for miniircd
table <blocklist> type ipset

########################################################################

# 4 - Rule group for the WAN interface:

group 'WAN' on $WAN_if {

# Block IP from blocklist table
block in final from <blocklist> apply 'log'

# Allow all stateful outgoing traffic (all protocols).
pass stateful out final all

# SSH: Allow SSH connections to the server
pass stateful in on $WAN_if proto tcp to $WAN_addrs port ssh

# IRC : Allow IRC connections to the server
pass stateful in on $WAN_if proto tcp to $WAN_addrs port 6697

}

########################################################################

# 5 - Default rule group:

group default {

# Loopback : Allow traffic
pass final on lo0 all

# Close the firewall
block all apply 'log'

}
########################################################################

Lancer NPF :

service npf start

La connexion SSH saute, c'est normal... mais si vous ne vous êtes pas trompés dans le fichier de règles, vous pouvez vous reconnecter.

3) Ecrire un petit démon de ban d'IP : /var/jail/miniircd/banip.sh

#!/bin/sh

LOG_FILE='/var/jail/miniircd/miniircd.log'
BLOCKLIST_TABLE='blocklist'

ban_ip() {
IP=$1
# Vérifier si l'IP est déjà dans la table de blocage
if ! /sbin/npfctl table $BLOCKLIST_TABLE list | grep -q '$IP'; then
# Ajouter l'IP à la table de blocage
/sbin/npfctl table $BLOCKLIST_TABLE add '$IP'
npfctl reload
echo '$(date): Banned IP $IP' >> /var/jail/miniircd/miniircd_bans.log
fi
}

# Utiliser tail -F pour suivre le fichier de log
tail -F '$LOG_FILE' | while read -r line; do
# Vérifier si la ligne contient le code d'erreur 464
if echo '$line' | grep -q '464 :Password incorrect'; then
# Extraire l'adresse IP
IP=$(echo '$line' | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')
if [ -n '$IP' ]; then
ban_ip '$IP'
fi
fi
done

Autoriser son exécution :

chmod 740 /var/jail/miniircd/banip.sh

4) Lancer le serveur et exécuter le script banip. Le tout dans des sessions tmux différentes :

tmux new-session -d -s MINIIRCD '/usr/pkg/bin/miniircd --listen=0.0.0.0 --ssl-cert-file=/var/jail/miniircd/miniircd.crt --ssl-key-file=/var/jail/miniircd/miniircd.key --verbose --chroot=/var/jail/miniircd --setuid=nobody --password '\''Super-Mot-De-Passe'\'' --debug > /var/jail/miniircd/miniircd.log'

tmux new-session -d -s BANIP '/var/jail/miniircd/banip.sh'

En cas de redémarrage du serveur, relancer les 2 commandes ci-dessus ou mettre en place un démarrage au démarrage du serveur.


Debannir une IP :

Repérer l'IP :

npfctl table blocklist list

Debannir :

npfctl table blocklist rem 192.168.36.32

npfctl reload

5) Configurer SSH pour une connexion par clef uniquement... etc..



↑ Haut de page