Installer un serveur Minecraft sur Ubuntu

Vous voulez installer un serveur Minecraft (Spigot/Paper) sur Ubuntu ou Raspberry ?
Cette page vous propose une méthode simple, étapes par étapes pour réaliser votre installation de manière propre et sécurisée.

Avant de commencer…

On suppose que vous avez un serveur avec un accés root.
La 1er chose à faire est de vous assurer un accès au derniers utilitaires via la commande apt suivante

sudo apt get update

Ajout d’un utilisateur linux

Pour éviter de faire tourner le serveur en tant que super user: nous allons créer un groupe et un utilisateur.

#Ajout d'un groupe minecraft
sudo addgroup mc
#Ajout d'un utilisateur minecraft (utilisant bash par defaut)
sudo useradd -m mcraftuser -g mc -s /bin/bash
#On lui enregistre un mot de passe 
sudo passwd mcraftuser
#On creer un repertoire root racine pour le FTP
sudo mkdir /home/mcraftuser/rd-ftp
#Et le repertoire d'installation de minecraft (en dessous)
sudo mkdir /home/mcraftuser/rd-ftp/installMC
utilisateur

Configuration du serveur sftp

Nous allons permettre à notre user de déposer des fichiers via FTP.. mais pour plus de sécurité, nous allons lui interdire un accès Shell en SSH.

#On edite le fichier /etc/ssh/sshd_config
sudo nano /etc/ssh/sshd_config (add at end)
Match User mcraftuser 
   ChrootDirectory /home/mcraftuser/rd-ftp
   X11Forwarding no AllowTcpForwarding no
   ForceCommand internal-sftp
   PasswordAuthentication yes
#On donne le repertoire de l'utilisateur a root (sinon sftp refusera la connection a cause du ChrootDirectory)
sudo chown root:root /home/mcraftuser
sudo chown root:root /home/mcraftuser/rd-ftp
sudo chmod -R 755 /home/mcraftuser
#On s'assure qu'en dessous l'utilisateur reste le maitre
sudo chown -R mcraftuser:mc /home/mcraftuser/rd-ftp/*
#On relance ssh
sudo service ssh restart
ftp

Configuration du firewall linux

#Installation des utilitaires ufw et fail2ban
sudo apt install ufw fail2ban --assume-yes
#Configuration de base et 1er lancement
sudo ufw allow ssh
sudo ufw enable
sudo ufw status
#On ajoute le port minecraft (voir le choix du port apres)
sudo ufw allow 25065/tcp
#On s'assure que notre IP actuelle arrive toujours a se connecter
sudo ufw insert 1 allow from xx.yy.zz.tt  (<= remplacer par votre IP)

Nous allons maintenant configurer le serveur pour bannir les IP « essayant » de se connecter malicieusement

#On verifie que fail2ban a une configuration pour ufw
cat /etc/fail2ban/action.d/ufw.conf
#On fait une sauvegarde des regles fail2ban (au cas ou)
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.save
#On edite la configuration
sudo nano /etc/fail2ban/jail.conf
  bantime = 14400m
  findtime = 90m
  maxretry = 3
  banaction = ufw[application="", blocktype=reject]
  [sshd]
  enable = true
  banaction = ufw[application="", blocktype=reject]
  mode = aggressive
#On relance l'utilitaire
sudo fail2ban-client reload
#On verifie le status des bans
sudo fail2ban-client status sshd

Et afin de vérifier que tout fonctionne bien

#On bannit une IP
sudo fail2ban-client set sshd banip 1.2.3.4
#On verifie les regles firewall en cour
sudo ufw status
--affiche --> Anywhere REJECT 1.2.3.4
#On fait un un-ban de l'IP
sudo fail2ban-client set sshd unbanip 1.2.3.4
#On verifie que l'IP n'est plus bannie
sudo ufw status
#Et si besoin on verifie qu'il n'y a pas d'erreur dans les logs 
cat /var/log/fail2ban.log
firewall

Verification des tentatives malicieuses

Voici des commandes très simples qui permettent de regarder un peu ce qui se passe

#Voir le status des bans
sudo fail2ban-client status sshd
#Voir le status des ban au niveau du firewall (cela doit correspondre a ci dessus)
sudo ufw status
#Voir toutes les demandes de connection 
cat /var/log/auth.log
#Voir les demandes de connection resussies
cat /var/log/auth.log | grep Accepted

Installation de Java

sudo apt get update
sudo apt install openjdk-14-jre-headless --assume-yes

Installation de Minecraft (spigot / paper)

#On se log en tant que mcraftuser
su mcraftuser
#On se met dans le repertoire d'installation
cd ~/rd-ftp/installMC/
#Recuperation de papermc
curl https://papermc.io/api/v1/paper/1.16.1/90/download -o paper.jar
#On fait en sorte que ce jar ne soit pas modifiable (meme par root)
sudo chattr +i paper.jar
#On lance le serveur
java -Xms2G -Xmx2G -jar paper.jar

Ce 1er lancement va finir en erreur (« You need to agree to the EULA »).

#On accepte la licence Eula
sed -i 's/eula=false/eula=true/g' eula.txtstop
#On relance 
java -Xms2G -Xmx2G -jar paper.jar
#On arrete le serveur en tappant stop (dans la console)
stop (depuis la console en cour)

Configuration de Minecraft suite au 1er lancement

server.properties

Nous allons changer le nom du monde, et changer le port par défaut

#On se log en tant que mcraftuser
su mcraftuser
#On se met dans le repertoire d'installation
cd ~/rd-ftp/installMC/
#On met un nom pour notre monde
sed -i 's/level-name=World/level-name=MonMonde/g' server.properties
#On change le port par defaut pour eviter des hacks trop faciles
sed -i 's/25565/25065/g' server.properties
#On efface le monde precedent
rm -rf world*

Attention le port d’ecoute (25065 ci dessus) doit être autorisé au niveau firewall…

sudo ufw allow 25065/tcp

ops.json

Nous allons nous mettre administrateur par défaut dans Minecraft

#On se met dans le repertoire d'installation
cd ~/rd-ftp/installMC/
#On edite ops.json
nano ops.sjon
[
  {
    "uuid": "xxxxx-xxxxxyyy-xxxxx-xxxxx-xxxxx",
    "name": "monuser",
    "level": 4
  }
]

Astuce: Si on ne connait pas son user, on peut utiliser https://mcuuid.net/

On installe quelques plugins (SPIGOT/PAPER)

Nous allons installer les 4 plugins suivant

Pour cela nous allons télécharger les versions (ci dessus) et utiliser un client FTP

#On se met dans le repertoire d'installation
cd ~/rd-ftp/installMC/plugins
#On telecharge les deux plugins
curl https://ci.lucko.me/job/LuckPerms/1135/artifact/bukkit/build/libs/LuckPerms-Bukkit-5.1.75.jar  -o LuckPerms-Bukkit-5.1.75.jar
curl https://ci.ender.zone/job/EssentialsX/lastSuccessfulBuild/artifact/Essentials/target/EssentialsX-2.18.0.3.jar -o EssentialsX-2.18.0.3.jar
#On relance le serveur
cd ~/rd-ftp/installMC
java -Xms2G -Xmx2G -jar paper.jar
#On stop en tapant stop dans la console

Déclaration de notre serveur Minecraft en tant que service

Afin que notre serveur Minecraft redémarre avec le serveur, on l’enregistre en tant que service

#On creer un service system pour lancer le serveur
sudo vi /lib/systemd/system/mc1.service
[Unit]
Description=Minecraft server1
[Service]
Type=simple
Restart=on-failure
RestartSec=5
StartLimitInterval=60s
StartLimitBurst=3
User=mcraftuser
Group=mc
WorkingDirectory=/home/mcraftuser/rd-ftp/installMC
ExecStartPre=ls /home/mcraftuser/rd-ftp
ExecStart=java -Xms2G -Xmx2G -jar /home/mcraftuser/rd-ftp/installMC/paper.jar
ExecStop=killall -TERM srcds_linux
[Install]
WantedBy=multi-user.target
#On recharge les definitions de services
sudo systemctl daemon-reload
#On demarre le serveur (en utilisant le service)
sudo systemctl start mc1
#On controle les log de demarrage
journalctl -u mc1.service

Astuce

#Pour tester que le ban fonctionne bien
sudo fail2ban-client set sshd banip 1.2.3.4
sudo ufw status
sudo fail2ban-client set sshd unbanip 1.2.3.4
sudo ufw status
#Empecher tout les accés depuis une IP depuis ufw
sudo ufw insert 1 reject from 1.1.1.1 to any
#Effacer la regle de rejet
ufw delete reject from 1.1.1.1 to any
#Re-intialisation (complet) du firewall
sudo fail2ban-client unban --all
sudo ufw reset

sudo ufw allow ssh
sudo ufw enable
astuce