読者です 読者をやめる 読者になる 読者になる

なんとなく

誰得感満載な記事が多いかも。Mono関係とLinuxのサーバ関係、レビューとか。

さくらのVPSでOSgridの運用設定-1

これまでのエントリでOpenSimを稼働する方法でしたが、さくらのVPSはグローバルIPアドレスを保持しています。そのため、firewallを設置して、リスクを軽減するのが望ましいです。
このエントリでは、ざっくりとしたOpenSim向けのfirewall(iptables)の設定について記述します。

内容

  • OpenSimでの使用ポート
    • スタンドアローン
    • OSgrid
  • iptablesの設定
    • iptablesのコンフィグ投入
    • ログの設定
    • iptablesの起動、確認
    • さくらのVPSでの注意点

OpenSimでの使用ポート

iptablesで必要なポートのみを開けるために、OpenSimで使用しているポートを確認します。

スタンドアローン

http://opensimulator.org/wiki/Network_Settings
を見ると、

UDP+TCP/9000 - Services and the single region simulator are used via this single port

とあり、OpenSimをスタンドアローンで動かす場合に必要なポートは、TCPの9000(デフォルト)とUDPの9000のようです。
複数のSimを上げる場合は、同じポートは使用できませんから、任意で変更する必要があります。

OSgrid

スタンドアローンと同様に、
http://opensimulator.org/wiki/Network_Settings
を見ると、

TCP/8002 - All externally and user accessible OpenSimulator services 
TCP/8003 - All internal OpenSimulator services

とあります。

Robustなどの(OSgrid)は、8002と8003のようです。8003は内部通信用との記述がありました。*1また、これに加えてスタンドアローン同様にOpenSimのTCPの9000(デフォルト)とUDPの9000が必要ポートです。
メガリージョンの場合は、任意のポートが更に必要となります。

SIP(Voicechat)を使用する場合は、http://opensimulator.org/wiki/Network_Settings
に記述してあるSIP用のポートを開ける必要がありますが、今回は使用しないため触れません。

iptablesの設定

OSgridに接続するためのiptablesの設定について書いていきます。
1年ほど前に、DTIのVPSを設定する際に参考にしたところを参考にしています。
http://daretoku-unix.blogspot.com/2010/05/serversmanvpsiptablesstate.html

念のため、iptablesをとめておきます。

[root@foo ~]# vi /etc/init.d/iptables stop

設定を作成します。

[root@foo ~]# vi /etc/sysconfig/iptables

以下に投入した設定を記述します。*2

#対応ポート:tcp7122,tcp/udp:9000-9015
#SSH: (7122)管理用に必須なので許可する。自宅、出先などいろいろなところからアクセスする必要があるので、すべてのIPアドレスからの接続を許可する
#OpenSim tcp/udp:9000-9015での通信用。16SIM分を割り当てここは開けているポートに従ってください。
#icmpも許可。ident(auth)はtcp resetで拒否、その他のすべての通信はDROPで拒否する。
#ローカルから外部へはフリー。

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-N MYCHAIN
-A MYCHAIN -m state --state RELATED,ESTABLISHED -j ACCEPT
-A MYCHAIN -p icmp -j ACCEPT
-A MYCHAIN -s 127.0.0.0/8 -d 127.0.0.0/8 -j ACCEPT
-A MYCHAIN -p tcp -m state --state NEW -m tcp --dport 7122 -j ACCEPT
-A MYCHAIN -p tcp -m state --state NEW -m tcp --dport 9000:9015 -j ACCEPT
-A MYCHAIN -p udp --dport 9000:9015 -j ACCEPT

-A MYCHAIN -p tcp -m tcp --dport 113 -j REJECT --reject-with tcp-reset
-A MYCHAIN -j LOG --log-level debug --log-prefix "[iptables] "
-A MYCHAIN -j DROP
-A INPUT -j MYCHAIN
COMMIT

詳しくは、他のiptablesについて説明しいるサイトを参考にしていただきつつ、私の参考にしたサイトを見ていただきながら、設定していただければ。

さくらのVPSは幸いなことにコンソールアクセスが可能ですので、もし失敗しだ場合もコンソールから入ってiptablesを止めれば、sshなどでアクセスできます。
dtiのはそうではなかったので、ヒヤヒヤしながら行いました。

まだ、iptablesは起動しません。

ログの設定

DROPしたものについて、ログを取る設定を入れていますので、その設定を行います。
ログは、/var/log/iptables.logに出力するようにします。ファイル名は任意です。
空のファイルを用意してあげます。

[root@foo ~]# cd /var/log/
[root@foo log]# touch iptables.log
[root@foo log]# chmod 600 iptables.log

LOGLEVELをdebugとしていますので、rsyslog.confでログが出力されるように追加します。

[root@foo ~]# vi /etc/rsyslog.conf

場所はどこでもいいので、以下を追加します。ログは、/var/log/iptables.logに出るようにしています。

kern.=debug                                             /var/log/iptables.log

ログのlogrotateの対象となるようにしてあげます。

[root@foo ~]# vi /etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
/var/log/iptables.log
{
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

とし、
rsyslogを再起動してあげます。

[root@foo ~]# /etc/init.d/rsyslog restart
iptablesの起動、確認

準備ができた所で、iptablesを起動します。

[root@foo ~]# /etc/init.d/iptables start

うまく起動したら、自分の意図したようになっているか確認します。

[root@foo ~]# /etc/init.d/iptables status
テーブル: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    MYCHAIN    all  --  0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

Chain MYCHAIN (1 references)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     all  --  127.0.0.0/8          127.0.0.0/8
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:7122
5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpts:9000:9015
6    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpts:8002:8003
7    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpts:9000:9015
8    REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:113 reject-with tcp-reset
9    LOG        all  --  0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 7 prefix `[iptables] '
10   DROP       all  --  0.0.0.0/0            0.0.0.0/0

こんな感じで出力されるはずです。

OpenSimの稼働に問題がないか確認します。
viewerでログインし、どこかにテレポートし、問題なく使用出来れば穴は開いているはずです。

また、DROPしたログが出ているかも確認しておきます。
さくらのVPSの場合は、iptablesを起動して30秒もすれば、何かDROPしているはずです。

[root@foo ~]# tail /var/log/iptables.log
さくらのVPSでの注意点

さくらのVPSでiptablesを設定してログを吐かせたら、UDPの17500をブロードキャストしているのをDROPしているログばかりでびっくりしました。同じネットワークにいる方が、dropboxのEnable LAN SyncをONにしていると発生するようです。30秒に一度きます。今日確認できた所で4つのIPアドレスから来ておりました。

ログが肥大化して、容量を圧迫する可能性がありますので、すこし運用して様子を見て、/etc/logrotate.confを編集して、調整するのがよいかと思われます。

さくらのVPSのデフォルトの環境だとEnable LAN SyncをOFFにして実行するのが、簡単ではないようなので場合によってはということも考えられますので、ご注意ください。

でも、OpenSim.logよりは少ないのかもしれないです。

次は、MySQLのバックアップについて書きたいと思っています。

*1:Robustとして動かしている場合のみに使用するポートなので必要ないようです。

*2:8002-8003は開ける必要が無いことがわかったので修正しました。