AWSに立てたマイクラサーバーで荒らし対策

せっかく立ててみんなで遊んでいたマイクラサーバーが荒らされた。
今後の荒らし対策としてやったことのメモ。

イクラサーバーとして

①CoreProtectの導入
Spigotサーバーで使えるプラグイン
CoreProductを導入しました。 使い方はこのサイトがわかりやすかった。
https://genkoku.city/coreprotect
特定のユーザーの操作だけロールバックできる。

AWSとして

①EBSのライフサイクルマネージャーでバックアップ
いつでもロールバックできるようにした。(最初から設定はしていたつもりだったのだが、ミスってた。)
24時間ごとに1度のバックアップを7日間保持するのと、
6時間ごとのバックアップを1日だけ保持。
荒らしが来ても最悪6時間前には戻せるようにした。

②ネットワークACLで荒らしのIPをブロック
セキュリティグループはホワイトリスト方式なので、特定のIPのインバウンド通信を拒否、っていうのができない。
イクラで/banしたあと、念のためIPごとブロック。
まあ荒らしってIPころころ変えてそうだから、どのくらい意味があるかはわからないけど。

③海外IPをまとめて拒否設定
これが結構頭を使った。
日本国内のIPは調べると一覧を取得できる(こことか)ので、要はホワイトリスト方式で日本のIPをすべて許可すれば良いんだけど、
・セキュリティグループ・・許可できるルールの上限が1000。足りない。
・WAF・・ALBかCloudFrontにしか設定できず、HTTP通信じゃないとダメ。マイクラTCP通信には使えない。
.htaccess・・これもApacheが動いてないとダメ。
ってことで、どうやったかと言うと、基本に返ってiptablesで設定した。
参考にしたのはこれ。

qiita.com

このサービス定義の個所に、こんな感じで日本のIPの許可設定をする。

##### サービス設定ここから #####
iptables -A INPUT -s 1.0.16.0/20 -p tcp --dport 25565 -j ACCEPT
iptables -A INPUT -s 1.0.64.0/18 -p tcp --dport 25565 -j ACCEPT
・・・(2600行くらい続く)
##### サービス設定ここまで #####

海外が手放したIPを日本で取得した場合とか、ブロックしたくない人が弾かれる可能性もあるけど、
そういう場合は個別で/32で許可設定を入れれば対応できるので許容することにした。

この設定だけだと、拒否した通信のログがkern.logに出力されてしまうので
出力先を分ける設定もしてみた。

engetu21.hatenablog.com

これ、ディストリビューションによって結構やり方が違って、
最初ubuntuじゃないディストリビューションの記事を参考にしちゃったりしてちょっとハマった。

ついでにログローテートも設定しておいた。

www.tsubock-lab.xyz

余談

iptablesで設定した直後から、ログにDROPしたパケットの情報がモリモリ表示されるように。
IPを検索してみたら、「MinecraftHacking」って出てきて、
要はポートを25565で固定してランダムでIPアドレス設定して、稼働しているマイクラサーバーをスキャンしている人がいるらしい。
私の立てたサーバー、IP公開してないのに荒らしが来たのもたぶんこれが原因。
イクラサーバー立てる人は、完全ホワイトリスト方式にするとか、やったほうが良いです。

念のため、スキャンっぽいIPは全部ネットワークACLで拒否設定しておいた。
同じIPでログが埋まるのも嫌だしね。

追記

上記の設定だと、ubuntuを再起動するためにシェルを叩き直さないといけない。
こちらを参考に永続化の設定をした。

iwashi.co