NginxでMinecraftをプロキシしてアクセス制御を行う

今回は、NginxのStreamモジュールを使用してMinecraftサーバーとの通信をプロキシして国IPごとのアクセス制御をしてみようかと思います。

1.Nginxのインストール

$ sudo su
$ apt update
$ apt install nginx
$ systemctl start nginx
$ systemctl enable nginx

上の手順が終わったら、「http://サーバーののローカルIPアドレス」にアクセスして「Welcome to Nginx!」と表示されれば正常にNginxのインストールができています。

2.Streamモジュールの有効化

まず、モジュールの設定ファイルの一部を変更します。

$ cd /etc/nginx/modules-enabled
$ vim 50-mod-stream.conf

50-mod-stream.conf の中身が

load_module modules/ngx_stream_module.so;

になっているので、

load_module /usr/lib/nginx/modules/ngx_stream_module.so;

に変更します。

続いて、Nginxの設定ファイルの編集です。

$ cd /etc/nginx
$ vim nginx.conf

nginx.conf の最終行に

stream {
        include /etc/nginx/conf.d/*.stream;
}

と追記します。

最後に

$ systemctl restart nginx

でNginxを再起動します。これでStreamモジュールが利用可能になりました。

3.Minecraftサーバー側の設定とNginxの設定

Minecraftのサーバーがあるディレクトリに移動します。
server.properties では

server-port=25565

がデフォルトですが、今回25565番ポートはNginxのプロキシでリッスンするため別のポート、今回はわかりやすく25566に変更します。
変更したらMinecraftサーバーを再起動してください。

続いてNginxに25565番ポートをプロキシする設定をしていきます。

$ cd /etc/nginx/conf.d
$ vim minecraft.stream

今回はminecraft.streamというファイルに記載していきます。

upstream minecraft {
    server 127.0.0.1:25566;
}
server {
    listen 25565;
    proxy_pass minecraft;
}

上ように記載して、

$ systemctl restart nginx

最後にNginxを再起動します。以上でNginxでMinecraftサーバーの接続をプロキシできるようになりました。

4.アクセス制御

次に、国ごとのIPアドレスのアクセス制御を行います。
今回は日本以外の国からの接続を規制してみます。
まず、国ごとのIPアドレスのリストが記載されているサイト(http://nami.jp/ipv4bycc/)からそのリストをダウンロードします。

$ cd /usr/local
$ mkdir ipv4list
$ cd ipv4list
$ wget http://nami.jp/ipv4bycc/cidr.txt.gz
$ gunzip cidr.txt.gz

これで国別IPアドレスのリスト「cidr.txt」が入手できます。
続いて、このリストの中から日本国内のIPアドレスだけを抜き出し、許可するファイルを生成します。

$ sed -n 's/^JP\t\(.*\)/allow \1;/p' cidr.txt > /etc/nginx/japanip.conf

生成されたファイルをminecraft.streamに適用し、Nginxを再起動します。

$ cd /etc/nginx/conf.d
$ vim minecraft.stream


upstream minecraft {
    server 127.0.0.1:25566;
}
server {
    include /etc/nginx/japanip.conf;
    deny all;
    listen 25565;
    proxy_pass minecraft;
}


$ systemctl restart nginx

以上で、日本国内以外からのアクセスを制限することができました。

Tags:

Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です