ゲームサークルで運用しているMinecraftマルチプレイサーバでは、新規に来た人が入りやすいようにホワイトリストは有効にしていない。それゆえ、面白いトラブルが起こることもある。
ポーランド人がやってきた。
このサーバ、初めて入ったら看板に名前を書くのが決まりになっているのだが、なんだか見覚えの無い名前がある。IPアドレスから推定するとポーランドからの来客だった。
幸いなことに荒らされることは無く、しかも言葉が通じないはずなのにサーバに初めて入った日と名前を看板に記すという意図が伝わり、わざわざ書き残してくれた。それ以来彼は我々のサーバの中で善良なポーランド人クラフターとして知られることとなった。
彼の名は永遠に刻み込まれている。
対策の必要性
今回は荒らされはしなかったし、荒らし対策プラグインが入ってはいる。しかし、こんな善良な人だけが入ってくるとは限らない。また、オーストラリアIPからのログインという事案も発生した。その際にたまたまログインしていたサーバの住人がおり、接触に成功している(チャットで呼びかけたらすぐにログアウトしてしまった模様)。今後も荒らされないという確証は無いので、対策を講じることとした。
対策としてはまずホワイトリスト制が考えられるが、当時は新歓期でありせっかく来た新入生をホワイトリストに入れるのが遅くなってしまってログインできず、Minecraftへのやる気が失せてしまうという事案を避けたかった。そのため、まずは海外IPを弾くという方法を選んだ。
国内IPのみ通す設定
まず、ufwを利用してファイアウォールを設定していることを前提とする。ufwはiptablesのラッパーであり、ufwを利用するとiptablesよりも簡単にファイアウォールを設定できる。
[Ubuntu] ファイアウォール ufw で海外からの接続をブロックする | パソコン鳥のブログにある手順に従って設定をした。
世界の国別 IPv4 アドレス割り当てリストを利用してiptablesのルールを作成した。このルールによって、リストに含まれるIPアドレス(=国内のIPアドレス)はRETURN
され、それ以外のIPアドレス(=リストに含まれないIPアドレス=海外のIPアドレス)はDROP
される。
RETURN
されたIPアドレスにはufwのルールが適用されるように優先度を設定した。ufwでは、Minecraft用のポートとSSH用のポートのみ通すように設定している。
ここで注意する必要があるのは、各国に割り当てられるIPアドレスは変動するということである。そのため、ときどきリストが更新されるのでそれを適用し直す必要がある。また、NURO光海外IP問題などの影響をもろに受ける。通したいIPアドレスがリストによって弾かれてしまった場合、個別で設定する必要がある。
その後
この設定をして以来、知らない人がサーバに入ってくることは無くなった。また海外からのアクセスを全て弾いているので、当てずっぽうでユーザー名とパスワードを入れてくるSSHログイン未遂も減った。その分iptablesにDROP
される通信が増えた。それでもSSHログイン未遂は0ではないので、国内で怪しいことをしている連中がいるということである。