[JAVA] Trouvé la cause de la communication mystérieuse du serveur Minecraft (Spigot)

Cela fait presque trois ans que j'ai commencé à utiliser Spigot [^ 1], mais je ne le comprenais toujours pas. [^ 1]: l'un des serveurs MOD de Minecraft. url: https://www.spigotmc.org/

Qu'est-il arrivé

Lorsque j'enquêtais sur la communication du serveur exécutant Spigot dans le but de renforcer la sécurité, etc., une connexion étrange a été trouvée ...

>> netstat -ntu
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
~Omission~
tcp6       0      1 xx.xx.xx.xx:35260    198.27.66.94:80         ESTABLISHED

Communiquer d'une manière ou d'une autre avec 198.27.66.94: 80 ...

Quand j'ai vérifié le processus en utilisant le port avec lsof, c'était définitivement Spigot.

Qui est «198.27.66.94»?

Pour le moment curl

>> curl 198.27.66.94:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx on Debian!</title>
~Omission~
</html>

Cela ressemble à la page par défaut de nginx. Aucune information.

Tirage inversé IP

>> nslookup 198.27.66.94
Server:         xx.xx.xx.xx
Address:        xx.xx.xx.xx

Non-authoritative answer:
94.66.27.198.in-addr.arpa       name = ns511765.ip-198-27-66.net.

Hmmm. Il semble qu'il n'ait pas été défini.

Marcher sur le plug-in en tant que coupable, détour

Grep le plug-in jar sans utilisation

>> unzip -c '*.jar' | grep '198\.27\.66\.94'

28 archives were successfully processed.
>> unzip -c '*.jar' | grep 'ns511765\.ip\-198\-27\-66\.net'

28 archives were successfully processed.

Je ne sais rien.

En fait, Spigot lui-même est le coupable

En dernier recours, j'ai essayé d'identifier le criminel en supprimant progressivement le plug-in, mais j'ai remarqué que la communication se produisait même lorsqu'aucun plug-in n'était installé au départ.

tcpdump (J'aurais dû le faire en premier.)

>> tcpdump dst host 198.27.66.94 -A
~Omission~
User-Agent: Java/1.8.0_191
Host: mcstats.org
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-type: application/x-www-form-urlencoded
Content-Length: 261

Le nom d'hôte de la destination de connexion est connu.

>> nslookup mcstats.org
Server:         xx.xx.xx.xx
Address:        xx.xx.xx.xx

Non-authoritative answer:
Name:   mcstats.org
Address: 198.27.66.94

Ainsi, environ la moitié de l'identité de "198.27.66.94" a été trouvée.

Identifier la partie pertinente du code

Une fois que vous savez que le serveur Spigot lui-même est le coupable et le nom d'hôte, identifiez la partie pertinente du code.

Grep le fichier intermédiaire généré par BuildTools

>> grep -r 'mcstats.org' .
./Spigot/CraftBukkit-Patches/0015-Metrics.patch:+    private static final String BASE_URL = "http://mcstats.org";
./Spigot/CraftBukkit-Patches/0015-Metrics.patch:+            configuration.options().header("http://mcstats.org").copyDefaults(true);
./Spigot/Spigot-Server/src/main/java/org/spigotmc/Metrics.java:    private static final String BASE_URL = "http://mcstats.org";
./Spigot/Spigot-Server/src/main/java/org/spigotmc/Metrics.java:            configuration.options().header("http://mcstats.org").copyDefaults(true);
Binary file ./Spigot/Spigot-Server/target/classes/org/spigotmc/Metrics.class matches

Il semble y avoir une description liée à Spigot / Spigot-Server / src / main / java / org / spigotmc / Metrics.java.

Vous pouvez vérifier le contenu du patch dans la partie correspondante ici. https://hub.spigotmc.org/stash/projects/SPIGOT/repos/spigot/browse/CraftBukkit-Patches/0015-Metrics.patch?at=refs%2Fheads%2Fversion%2F1.12.2

À propos, la version du serveur Spigot utilisée cette fois-ci est la 1.12.2, mais lors de la mise à jour vers la 1.13, le nom d'hôte est changé de mcstats.org à mcstats.spigotmc.org (et de http à https). Il semble que ce soit devenu. Vous pouvez voir le commit ici. https://hub.spigotmc.org/stash/projects/SPIGOT/repos/spigot/commits/ed1cec9ae9ee07f1b51bdda14dfe14b40e92c9ed#CraftBukkit-Patches/0014-Metrics.patch

Que fait ce code

Il semble qu'il soit utilisé pour transmettre des informations statistiques. Actuellement, il ne semble pas fonctionner comme un service.

Vestiges du passé et préparatifs pour l'avenir

Comme vous pouvez le voir dans le contenu du patch, des statistiques telles que les informations sur le système d'exploitation du serveur, la version de Spigot et le nombre de joueurs sont envoyées à l'hôte indiqué ci-dessus.

Dans le passé, «mcstats.org» semble avoir exploité un service qui collecte des informations sur le serveur Minecraft et les affiche sur une interface graphique. BStats (https://bstats.org/) est désormais un service alternatif. https://www.spigotmc.org/threads/mcstats-down.193444/

Lors de la mise à jour vers la version 1.13, le nom d'hôte a été changé de mcstats.org à mcstats.spigotmc.org car il est prévu de l'utiliser dans le futur. https://hub.spigotmc.org/jira/browse/SPIGOT-4203

se désengager

Il s'agit d'une fonction qui n'est pas actuellement utilisée, vous voulez donc éviter toute communication inutile. Vous pouvez désactiver cette fonctionnalité en définissant l'opt-out dans plugins / PluginMetrics / config.yml sur true.

plugins/PluginMetrics/config.yml


# http://mcstats.org
# opt-out: false
opt-out: true
guid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
debug: false

Résumé

C'était une histoire que si vous aviez touché le serveur Spigot pendant près de trois ans, vous devriez en savoir beaucoup. (D'un autre côté, je me demande s'il y a beaucoup de gens qui ne le savent pas ...)

Il est rafraîchissant de comprendre la cause. Je sens que je peux bien dormir aujourd'hui.

Recommended Posts

Trouvé la cause de la communication mystérieuse du serveur Minecraft (Spigot)
J'ai essayé le serveur asynchrone de Django 3.0
L'histoire du lancement d'un serveur Minecraft depuis Discord
Je l'ai découvert en analysant les avis du site de changement d'emploi! ??
J'ai étudié le mécanisme de connexion flask!
L'histoire du remontage du serveur d'application
J'ai vérifié le contenu du volume du docker
J'ai vérifié les options de copyMakeBorder d'OpenCV
La structure des dossiers de Flask est résumée
Quelle est la cause de l'erreur suivante?
Le modèle de projet Python auquel je pense.
Changer le serveur Batfish de destination de pybatfish