Configurer miniIRCd sur FreeBSD 14.1

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.

Passez en root pour toute la procédure


1) Installer git et python3

pkg ins -y git python311 tmux

2) Télécharger installer miniIRCd

cd /tmp && git clone https://github.com/jrosdahl/miniircd.git && cd miniircd && cp miniircd /usr/local/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

4) Créer un lien symbolique pour Python3

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

5) Lancer le serveur en arrière-plan

/usr/local/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) :

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 IPFW :

sysrc firewall_enable=YES firewall_script='/etc/ipfw.conf'

2) rédiger un fichier de règles pour IPFW : /etc/ipfw.conf :

(Attention à bien remplacer le nom de votre interface WAN !!)

#!/bin/sh
ipfw -q -f flush
cmd='ipfw -q add'
pif='vtnet0' # Interface WAN
$cmd 00010 allow all from any to any via lo0
$cmd 00101 check-state
# Autoriser les connexions sortantes sur le port 6697 et garder l'état
$cmd 00112 allow tcp from any to any 6697 out via $pif keep-state
# règle miniIRCd
# Autoriser les connexions entrantes sur le port 6697 en mode stateful
$cmd 00400 allow tcp from any to me 6697 in via $pif setup keep-state
# Autoriser les connexions entrantes sur le port 22 (SSH) en mode stateful
$cmd 00410 allow tcp from any to me 22 in via $pif setup keep-state
# Bloquer et journaliser tout le reste entrant via l'interface WAN
$cmd 00497 deny log all from any to any in via $pif
# Bloquer et journaliser tout le reste
$cmd 00999 deny log all from any to any

Lancer IPFW :

service ipfw 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'
IPFW_RULES_FILE='/etc/ipfw.rules'
LAST_LINE=''

ban_ip() {
IP=$1
# Vérifier si l'IP est déjà bannie
if ! ipfw list | grep -q 'deny ip from $IP to any'; then
# Ajouter la règle pour bannir l'IP
ipfw add deny ip from '$IP' to any
# Sauvegarder la règle dans le fichier de configuration IPFW
echo 'deny ip from $IP to any' >> '$IPFW_RULES_FILE'
echo '$(date): Banned IP $IP' >> /var/log/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/local/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.


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


Comment débannir une IP :

ipfw list

relever le numéro de la règle (exemple 01099)

ipfw delete 01099

La désactivation est immédiate.



↑ Haut de page