プラグイン集

無料ブログはココログ
2021年8月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

サンプルJS

  • ユーロバカ一代の締切
    ・・・初期化中・・・

マインクラフト

2015年4月 5日 (日)

はじめようMinecraft

ゲームの本を読んでちょっくら寄り道。翔泳社から『はじめようMinecraft』と言う本が出た。

著作人にスポーンブロックの詳細解説動画を出したかぼちゃ殿が居るのかと言う事で手に取った。

内容はMinecraftの入門で、これから始める人向けの内容となっており、対応バージョンはMinecraft 1.7.10~1.8.1ぐらいだ。Minecraftは結構頻繁に中身が変わるから、書籍の情報が使えなくなる覚悟が必要。
また、内容は正直、Minecraft非公式日本Wikiや、Minecraft公式Wiki日本語版の二番煎じとなっている。

これらのWikiは知っている人がアノ情報なんだっけを素早く探すのに特化しているが、書籍は初めての人へ手順を示す構成になっている。

すでにMinecraftに慣れている人があえて買うべきかと言えば悩む。多少の知らないノウハウは書いてあるとは思うが、巻末にレシピ・製錬・ポーションの一覧が挟んであるわけでもないし。

何と言うか、自分自身、自分でマイクラやるより人のプレイ動画見てた方が面白い口だし・・・。(プレイ動画見てて感化されてやっては見るけど・・・やっぱ動画の方に戻っちゃう。)

2014年4月 8日 (火)

第0回マインクラフトサーバーを構築する (立てるサーバー)

身内専用のマインクラフトのサーバー立てるのだけど、マインクラフトだけじゃ済まなくなった。(現在形で書いてるけど、過去の遺産です。)

  • 運営協議どうする?
  • 協議結果のユーザーへの通知はどうする?

運営に関しては、参加者全員にWiki編集スキルがあるので、Wikiを使うことになった。
SNSやクラブサイト・グループウエアとかさまざまなサービスがネット上にはあるけど、
使い方覚えなおすなら、全員がすでにスキルを持っている、Wikiが良いのではとまとまった。

協議の結果通知は、wiki見てもらえば分る事なんだけど、アクセスしてもらう手間と速報性に欠ける。
システムからの通知でよく使われているのがメール。最近だとその人のTwitterに通知もありかもしれない。その人がよく見ているものなら何でもいいんじゃないかな?
ただ、ユーザーのTwitter利用者は私だけ・・・。地震の時に最も繋がったメディアだから登録はしているが、IDもパスも最早脳みそに1bitも残ってないとのこと。
スタンダードにメールが良いんじゃねという結論。(受け取った方が、見る見ない・スパム登録するしないは、その人しだいで。)

メールとかするならやっぱりサーバーOS必要になる。Windowsサーバー買う金下さい。
参加者全員「お・こ・と・わ・り!鯖缶が出せよ⑨」
無償OSのLinuxしか手がない。前に某所で鯖缶して使い慣れたCentOSに独断と偏見で決定。Ubuntuは画面きれいなんだけど、端末開くまでに30分さまよった。Linuxは端末命だから不採用。
fedoraは、新しいのは良いけど・・・、クラッシュ激し過ぎ。
Scientific Linux は、実行ファイルと設定ファイルの配置がUbuntu臭い。REPL系で悪くはないが、積極的に採用する決定打も無い。
まぁ、CentOSに独断と偏見で決めてたんで、議論の余地なしだけどね。


その結果

  • マインクラフト
  • webサーバー(wiki)
  • メーリングリスト

以上3つのサーバーが立つことになった。

簡単に3つのサーバーとか決められたけど、簡単じゃないからな?

1.マインクラフト
バックエンドはJAVAだけ これは簡単。

2.Webサーバー(wiki)
-Apache、PHPエンジン、SSLモジュール群

3.メーリングリスト
-mailman
--postfix、dovecot
---ClamAV、SpamAssassin、ProcMail

メール周り依存多い。ただこれだけで終わらない。

出かけた先でも管理が必要:SSH
外部からの攻撃を防御したい:iptables、DenyHost、TCP wrapper
システムに正確な時刻:NTP
自動バックアップ:cron、rsync

図にすると下の感じ

Maindomappu全部示したわけじゃないけど、大まかな感じは、こうなるはず。

 

中核機能
マインクラフトで、建築や探索などを行い、wikiで情報交換や作品の展示。
巨大建築やネザーでの豚狩り、サーバー緊急シャットダウンの連絡から、飲みに行こうぜの連絡まで広く活用できるメーリングリスト。
バックエンド機能
wikiは、見られる分には問題ない。メンバー以外書き込みが問題だ。
パスワードを暗号化せずに送るのは危険すぎるSSLで暗号化が必要。
メールはweb以上に深刻。スパムやウイルスは、サーバーで撃退。
味噌ボールメールの中継はさせない。次のサーバーまでのSMTPもやはり暗号化が必要。
通信の監視は必須。余計なパケットやポートは潰す。しつこく送ってくるようなホストは、着拒。
要約
メールを送信する能力があれば、簡単に大人数が必要なクラフトが可能になる。
wikiを編集する能力があれば、製作した物を簡単に多くの人に公開が出来る。
その際に、利用者はセキュリティ等に注力する必要が無く、作品作りに集中できる。
一方で、鯖缶は、セキュリティ周りやLinux運営などのきめ細かな設定と運営が必要となる。マインクラフトの処理は、かなり重い部類になる。重い処理をこなしつつ、webに応答し、必要なメールの送受信を行わなければならない。webやメールのコネクションを維持しつつ、マインクラフトのコネクションを落とさないようにする必要がある。

相手の要求もわかったし使うソフトウエア群も決まった。
用件定義や、設計の段階までいけた事になるのかな?

これ以外に、別件でブログのホスティングを頼まれた。
wikiが外部へ公開のwebページとも言えるので、別ディレクトリにWordPress展開すればたしかに、ブログサービスの提供が可能だ。
「可能だ」と結論を出したことで、「じゃぁよろしく」と。えぇ~、これで契約成立なんですか?
面倒が増えるのが嫌なので、そこのディレクトリ以下は、全て向こうの責任にしてもらった。

次、注意書き編

2014年3月19日 (水)

第11回マインクラフトサーバーを構築する(メーリングリスト編)

注意事項は第1回へ。
前回は第10回へ。

今回は、メーリングリストサーバーの構築。

ーーーーーーやること一覧ーーーーーー

  • セキュリティで最低限やること一覧

1.Yumは確実にアップデートする
2.iptablesで確実に不要なポートをふさぐ
3.SSHのパスワード認証を切る→RSA認証
3.1.rootログインさせない
3.2.ポートを変える
3.3.しつこい奴はDenyHost
3.4.そもそも、SSH可能なユーザーを絞る
3.5.同時SSH可能な数を絞る
4.rootになれるユーザーを絞る
5.ウイルス対策ソフト
6.ファイル改ざん検知
7.rootkit検知
8.不要なサービス停止

9.攻撃検知・防御・排除(バッファーオーバーフローとかDOSとか)
10.ログ監視と調査
11.鯖情報の非表示(Apachやphpのレスポンスを返さないように設定)
12.ApachのSSL化
13.ポートスキャンを遮断
14.DDNSサーバーへの変更通知
15.バックアップ

  • サーバーの設定と起動

1.NTPサーバー
2.マインクラフトサーバー
3.(SQLサーバー)
4.webサーバー
5.webサーバーのSSL化
6.SNMP+MRTG
7.(アクセス解析サーバー)
8.メールサーバー(送信)
9.メールサーバー(受信)
10.メーリングリストサーバー

赤字は作業終了を示す。
※※DOSは、現在の状況だと、HTTPのアクセスしか検出できない。iptablesにも実装しないと全体としての安全性を上げられない。iptablesを取り上げた、第7回は無かったことになってるので、色を変えない。

ーーーーーーここからが作業ーーーーーー

メーリングリストソフトとして、mailmanを使う。ただ、5分ごとにcronでメール送ろうとするので、設定が終わったら、即座にmailmanのcronを止める必要がある。

yum install -y mailman でインストール。

/usr/local/を/etc/に置き換えて、centosサーバー構築ガイドにしたがう。

メーリングリストのページが出来たら、メンバーを登録しまくる。

ただ、勝手に登録されるのは気持ち悪いだろうから、招待メールを送りまくる。

登録があったら、承認して正会員に昇格。自分が旅行とかで管理できそうに無い場合に備えて、信頼出来る人をオーナー(管理者)に昇格する。

積極的に協力してくれて、ルール(規律)・マナー(礼儀)・モラル(倫理)のしっかりしている人を、モデレーター(司会者)に任命する。

これで、メーリングリスト宛にメールすれば、緊急シャットダウンやバージョンアップのお知らせ、飲みに行こうぜ、72時間耐久OFF会しようぜなどなどの連絡をメンバーで持つことが出来る。

wikiのメール送信機能を改造し、宛先をこのメーリングリストにすれば、wikiが変更される度に会員にメールが飛ぶ。

しかしながら、議論をいちいちメールするのは野暮ってもんだし、受けとるけどSPAM扱いするとか、JUNK箱に送ってしまい、結局みられない可能性が高い。

なので、あえて大事な議論「~」が有るから、皆様のご意見をwikiに寄せてください。と別作業にした方が回答を得やすいと考える。


あれだけ脅したのに、最後までサーバー立ててしまったのかよ。驚きだねぇ。

まぁ、目標としていた

  • マインクラフトサーバー
  • 運営協議用wiki
  • メーリングリスト
  • 最低限の最低限セキュリティ

が揃ったよ。

サーバーの管理運営は始まったばかり、これからが本番。技術よりも、人間関係の調節の方がずっと面倒だよ。

君のサーバーが末永く続く事を祈って。

第10回マインクラフトサーバーを構築する(メールサーバー編)

注意事項は第1回へ。
前回は第9回へ。

今回は、メールサーバーの構築。

ーーーーーーやること一覧ーーーーーー

  • セキュリティで最低限やること一覧

1.Yumは確実にアップデートする
2.iptablesで確実に不要なポートをふさぐ
3.SSHのパスワード認証を切る→RSA認証
3.1.rootログインさせない
3.2.ポートを変える
3.3.しつこい奴はDenyHost
3.4.そもそも、SSH可能なユーザーを絞る
3.5.同時SSH可能な数を絞る
4.rootになれるユーザーを絞る
5.ウイルス対策ソフト
6.ファイル改ざん検知
7.rootkit検知
8.不要なサービス停止

9.攻撃検知・防御・排除(バッファーオーバーフローとかDOSとか)
10.ログ監視と調査
11.鯖情報の非表示(Apachやphpのレスポンスを返さないように設定)
12.ApachのSSL化
13.ポートスキャンを遮断
14.DDNSサーバーへの変更通知
15.バックアップ

  • サーバーの設定と起動

1.NTPサーバー
2.マインクラフトサーバー
3.(SQLサーバー)
4.webサーバー
5.webサーバーのSSL化
6.SNMP+MRTG
7.(アクセス解析サーバー)
8.メールサーバー(送信)
9.メールサーバー(受信)
10.メーリングリストサーバー

赤字は作業終了を示す。
※※DOSは、現在の状況だと、HTTPのアクセスしか検出できない。iptablesにも実装しないと全体としての安全性を上げられない。iptablesを取り上げた、第7回は無かったことになってるので、色を変えない。

ーーーーーーここからが作業ーーーーーー

3本柱の最後メールサーバーを構築し、メーリングリストを作る。
緊急事態から、飲みに行こうぜまで使える同報リストを作り上げる。

メールサーバーはpostfixを使う。受信はDovecotを利用。
OP25B対策も頑張る。

これも、参考サイトCentOSでサーバー構築みれば大体出来る。
私が使ってるプロバイダは、smtp_sasl_auth_enable = yesに加えて、smtpd_sasl_auth_enable = yesも書かないとダメだったけど。

メールサーバー(送受信両方)が出来たら、暗号化

メールサーバー(送受信両方)の暗号化が終わったら、スパム&ウイルスメール対策

SpamAssassin使うとroot宛のメール通知がなくなるし、NOBODYの処理で文句言ってくる。NOBODYの処理は、nobody専用ディレクトリ作って、そこで処理させれば解決する。
ROOT宛のメッセージは、結局root以外の誰かに飛ばさないと通知されない。
また、ROOTのメッセージボックスには送信してくれずに、飛ばす人がいないとNOBODYに残ったままである。頻繁にNOBODYのメールボックスをチェックする必要がある。

コンソールに、メッセージ来ましたの表示、便利だったのになぁ。

2014年3月14日 (金)

第9回マインクラフトサーバーを構築する(webサーバー編)

注意事項は第1回へ。
前回は第8回へ。

2本目の柱、webサーバーの構築に入る。

ーーーーーーやること一覧ーーーーーー

  • セキュリティで最低限やること一覧

1.Yumは確実にアップデートする
2.iptablesで確実に不要なポートをふさぐ
3.SSHのパスワード認証を切る→RSA認証
3.1.rootログインさせない
3.2.ポートを変える
3.3.しつこい奴はDenyHost
3.4.そもそも、SSH可能なユーザーを絞る
3.5.同時SSH可能な数を絞る
4.rootになれるユーザーを絞る
5.ウイルス対策ソフト
6.ファイル改ざん検知
7.rootkit検知
8.不要なサービス停止

9.攻撃検知・防御・排除(バッファーオーバーフローとかDOSとか)
10.ログ監視と調査
11.鯖情報の非表示(Apachやphpのレスポンスを返さないように設定)
12.ApachのSSL化
13.ポートスキャンを遮断
14.DDNSサーバーへの変更通知
15.バックアップ

  • サーバーの設定と起動

1.NTPサーバー
2.マインクラフトサーバー
3.(SQLサーバー)
4.webサーバー
5.webサーバーのSSL化
6.SNMP+MRTG
7.(アクセス解析サーバー)
8.メールサーバー(送信)
9.メールサーバー(受信)
10.メーリングリストサーバー

赤字は作業終了を示す。

ーーーーーーここからが作業ーーーーーー

webサーバー構築

webサーバーソフトはapacheを使う。wikiはPHPで動作するPukiwiki無印。
wikiもいろいろ有るから、好きなの使えばいいと思うよ。

apacheインストールして、/etc/httpd/conf/httpd.confを自分好みにカスタム。

ServerTokens Prod にすると、セキュリティの11番、apacheが返すレスポンス量が減って、サーバー情報が隠される。

Listen 80 を書き換えると他のポートで待機させることが出来る。
余計なhttpの攻撃を防げるのはいいが、アドレスの後ろに:xxxx/とか打ってもらわなければならないので、一手間かかる。また、SELinux、iptablesの設定変更も必要。80番ポートでサーバー待機させて、DoS DetectorとかTCP Wrapper の辺りで手を打つ方が簡単。

ServerName ~:80 を自分のDDNS名に書き換える。

DocumentRoot "/var/www/html" .jp/かorg/かは知らないけど、ドメイン名だけ打たれたときに、index.htmlを保存するディレクトリを決める。そのままでいいんじゃないかな?

<Directory />
    Options FollowSymLinks この部分のIndexesとか削る。適当に打たれて、ディレクトリの中身丸見えが防げる。シンボル追跡も止めさせる方がいい。SSDで要領無いから、HDD側をしょうがなく使う場合用に、シンボリックリンクを追跡させる。<Directory "/var/www/html">にも、同等の記述があるので注意。
AllowOverride None
    Order allow,deny
Allow from all アクセス制御、アクセスされたくないない所を弾く時に使う。
Deny from fumino~ 文乃からのアクセス遮断とか
</Directory>

<IfModule mod_userdir.c>
    UserDir disabled
    #UserDir public_html
</IfModule>
ユーザーにwebページを持たせるかどうか、うちは持たせない。有効化して、コメントアウト取って、ユーザー、ニャル子に/home/nyaruko/public_html/ をパーミッション755作成させて、SELinux設定すれば、ドメイン名/~nyaruko/ でアクセスが可能になる。

次の<>にアクセス制御や.htaccess 関連があるんで、ご自由に。

ServerSignature off
サーバーの情報を隠せるけど、落ちてるぞ~とかの善意まで拒否してしまう。意図的に落としてるからうちはOFF。

AddDefaultCharset UTF-8
EUCの人は変更。webページ領域はUTF-8だとかならそのまま。SJISにしたいとか任意で。

余力のある人は、エラーページのコメント外して、Myエラーページ表示させる。
うちは、テキストで良いのでパス。

httpdの設定は人によるの一言なんで、ググるなり本買うなりして勉強する。
設定完了したら、service httpd start で起動。
エラー吐いたら、設定見直し。分かんないなら、直ちに構築作業を中止。
「自分のページ書き換えられたー」ならいいが、「お前のサイトからウイルス貰ったどうしてくれる!」ってゾンビ生成装置になるから。

ブラウザからhttp://localhost(:xxxx)/ でapacheのサンプルページが見られればサーバーは動いてる。※()の中はListenでポート変えた時に、ポート番号を指定する。

/var/www/html/ にindex.html を作成すると、サンプルページではなく、自分が作ったページがトップ画面になる。エディタで作るもよし、ホームページビルダーで作るもよし、何らかの手段で作る。


wikiのインストール

トップページが出来たら、PHPインストール。 <?php phpinfo() ?> だけを記した、phpinfo.html を /var/www/html/ に作成。
httpd を再起動し、localhost/phpinfo.html にアクセスし、PHPの情報がずらずら出れば問題無し。出なかったらPHPのインストールに失敗してる。
確認できたら、消すか、公開ディレクトリ以外に移動。システムの情報をわざわざ公開ディレクトリに置いて、データ垂れ流しにする必要は無いでしょう。

/etc/php.ini のexpose_php = Off に設定することで、余計なPHPの情報を出力しなくなる。

pukiwiki のUTF-8を落としてきて、解凍。/var/www/html/wiki/ あたりに全データ突っ込む。
chownでwikiの所有者とグループをapacheに変更。

pukiwiki.ini.phpを開いて設定。
ページタイトルとか、管理者名とかを編集。そして、$adminpassを変更。

勝手に書き換えられては困るので、$auth_users を設定。パスワードが漏れる恐れがあるので、SSL暗号化を行う。

$edit_auth = 1; を指定して、編集時に認証を要求する。(見るのにパスワード打つのは面倒くさいと要望があった。)

あとは、使うプラグイン入れて、スキン入れ替えたり・・・。regionとかnetvideosあたりは便利。
これもググるなり、本買って自分の欲しい機能を実現する。

終わったら、httpd を再起動してlocalhost/wiki/ にアクセスして、見られるかどうか確認する。


SSL化

第1回の参考サイトにお譲りする。それそのまんまやっただけだし。
wikiだけ暗号化出来ればいいので、SSLのバーチャルホストの設定を
DocumentRoot "/var/www/html/wiki/"
とした。これで、https://~/ でアクセスしてもらえば、直接wikiにつなげられる。

証明書エラーが嫌なら、証明書を発行して貰う。それなりにお高い。


DOS攻撃対策

mod_dosdetector というapacheのモジュールを使って防ぎます。
mod_dosdetectorでDoS対策を参考に、tar玉持ってきてmake;make install; 。
httpd.confにモジュールを読み込むように指示。
soは、modules に配置、設定は、conf.dに配置。

リミットのさじ加減と、何に書き換えさせるかはお好みで。

追記:
後に、mod_securityと言うXSSやインジェクション系も対処できるモジュールを追加している。


アクセス解析

webサーバー立てるからには、どのページが人気あるか知りたいですよね。
英語ですが、yumでwebalizer が簡単です。

/etc/webalizer.conf を設定する。
OutputDir 出力先
ReportTitle タイトル
HostName ホスト名
除外するURLやユーザー指定、グループ化、サーチエンジンの設定あたりを、webなり参考書見ながらコメントアウトを削ったり、増やしたりする作業をする。

終わったら、httpdのconf.dにあるwebalizer.confを編集。
自分しか見えないように設定する。deny→allowなんで、allow from 自分のネットワーク を記述すれば良い。

webalizer コマンドを実行して、httpdを再起動。
その後、http://localhost/usage/ にアクセス。
出来たばかりだと情報が無いが、運営していくうちにたまる。


php アクセラレータ

APCというphpの加速装置をインストールする。(キャッシュして結果返してるだけだから、メモリを食います。)

yum でapc入れて、/etc/php.d/apc.ini を編集。
APCのドキュメント を見ながら、shm_sizeを調整すればいいんじゃないか?
もうちょい、効果出させるならapc.optimization=1とか入れておく?
optimizationは実験項目だから、クラッシュしても知らんが。


ブログ

完全におまけ項目。スクショをブログに積み重ねていけば、ワールドの進歩が分かるね。
(緑のアレによる、リフォーム日記になるかもしれないが。)

mySQLをインストールして、ユーザー名wordpress 、パスワード wordpress で接続する、wordpress と言うデータベースを作る。

php-mysql パッケージをインストールして、wordpressを/var/www/html/wordpress に展開する。tar玉は、公式から適当に拾ってきてくれ。
展開したwordpressの所有者とグループをapacheに変更しておくこと。

/var/www/html/wordpress/wp-config.php を開いて

// ** MySQL 設定 - こちらの情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define('DB_NAME', 'wordpress');
/** MySQL データベースのユーザー名 */
define('DB_USER', 'wordpress');
/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'wordpress');
/** MySQL のホスト名 */
define('DB_HOST', 'localhost');
/** データベースのテーブルを作成する際のデータベースのキャラクターセット */
define('DB_CHARSET', 'utf8');

この辺りを自分の環境に合わせて調整。

SQLはサッパリわからんので、省略。参考書のままやっただけだし。
root設定→文字コード変更→wordpressって名前でユーザー作って、wordpressっていうパスワードを設定→wordpressに操作権限を与える
これぐらいの作業しかしてない。

セキュリティホールを作っても良ければ、 phpmyadmin をインストールすることで、データベースをGUI操作することが可能。


SNMP+MRTG

MRTG かどうかは分からないけど、素晴らしい例がある。
JPIXさんのトラフィック状況
こんな感じの、グラフが出来上がる。通信トラフィックのみならず、CPU使用率、ディスク使用率、メモリ使用率が分かる。

情報の取得に使われる技術がSNMPで、グラフを生成するのがMRTG。
なので、SNMPが動いてないと、グラフが作れない。

SNMP
snmpのパッケージと依存をすべてインストールして、/etc/snmp/snmpd.conf を編集。

com2sec local  localhost       private
com2sec mynetwork  192.168.0.0/24       public
group   MyROGroup v1           mynetwork
group   MyROGroup v2c           mynetwork
view     all           included   .1 80
access  MyROGroup  ""      any       noauth    exact  all none none
disk / 10000

この辺を設定したら動いた。(結構へそ曲がりでstatusはrunningなのに応答してくれない。)
もちろん、service snmpd start かけておくこと。
snmpwalk -v 2c -c public 192.168.0.2 .
辺りのコマンドで確認。

おぉ、今までの設定で、再起したらサーバー起動しないって場合は、chkconfig サービス名 on をやり忘れてる。これしないと、windows で言う所のサービスとかスタートアップに登録されない。

MRTG
yum でインストール。
cfgmakerで、あらかたの設定を作る。
/etc/mrtg/mrtg.cfg を編集して、自分の環境に整える。日本語を使わない方が無難。

手打ちするのは面倒なのと、一ヶ所でも間違えると通らない。
なので、参考サイトの記述を転用させてもらう方が間違えは無い。

LANG=C で端末を英語表示のみに切り替えて、mrtg /etc/mrtg/mrtg.cfg 3~5連打。
それでもエラーが出るなら記述が間違ってる。
LANG=Cからの復帰は、LANG=ja_JP.UTF-8
※文字コードがEUCならLANG必要無し。UTF-8の場合のみ。

/etc/httpd/conf.d/mrtg.conf を開いて、公開範囲を決める。出かけていてもSSHフォワーディングで見られるので、自分のローカルエリア内までにした。

httpd を再起動して、http://localhost/mrtg/eth0.htmlとかhttp://localhost/mrtg/cpu.html とか無事に開けたら、indexmaker コマンドで、インデックスページを作る。

インデックスページができると、http://localhost/mrtg/ でアクセスすると、監視している項目の一覧が出来る。

イーサーネット2枚刺しなら、eth1を追加したり、ディスク2基刺しなら、hdd2を作るとかお好みで設定を変える。

これも、webalizer同様に、時間経過で賑わってくる。


まとめ

webサーバーが立った。
協議とか情報交換に使えるwikiが出来た。
アクセス解析が出来るようになり、どのページが人気か分かる様になった。
おまけで、ブログサイトが出来た。
セキュリティを僅かに向上させた。
SNMP+MRTG環境を作り、webからサーバーの状態を把握できるようにした。

第8回マインクラフトサーバーを構築する(マインクラフトサーバー編)

注意事項は第1回へ。
前回は第7回へ。

ーーーーーーやること一覧ーーーーーー

  • セキュリティで最低限やること一覧

1.Yumは確実にアップデートする
2.iptablesで確実に不要なポートをふさぐ
3.SSHのパスワード認証を切る→RSA認証
3.1.rootログインさせない
3.2.ポートを変える
3.3.しつこい奴はDenyHost
3.4.そもそも、SSH可能なユーザーを絞る
3.5.同時SSH可能な数を絞る
4.rootになれるユーザーを絞る
5.ウイルス対策ソフト
6.ファイル改ざん検知
7.rootkit検知
8.不要なサービス停止

9.攻撃検知・防御・排除(バッファーオーバーフローとかDOSとか)
10.ログ監視と調査
11.鯖情報の非表示(Apachやphpのレスポンスを返さないように設定)
12.ApachのSSL化
13.ポートスキャンを遮断
14.DDNSサーバーへの変更通知
15.バックアップ

  • サーバーの設定と起動

1.NTPサーバー
2.マインクラフトサーバー
3.(SQLサーバー)
4.webサーバー
5.webサーバーのSSL化
6.SNMP+MRTG
7.(アクセス解析サーバー)
8.メールサーバー(送信)
9.メールサーバー(受信)
10.メーリングリストサーバー

赤字は作業終了を示す。

ーーーーーーここからが作業ーーーーーー

3本柱のうちの一本、主幹となるマインクラフトサーバー立てちゃいましょう。
とりあえず、which java を実行して、javaのパスが通っていれば、JAVAが使える。
インストールしたのに、javaのパスが表示されないなら、探して、環境変数に加える。
updatedb;locate;でも、findでも好きなコマンド使ってくれ。

無かったら、Oracleにアクセスして、 Java Runtime Environment (JRE) を落としてきて、インストール。makeでもrpmでもご自由に。MOD製作を考えている人は、JAVA SEでもOK。
まぁ、普通の人はJREでいい。SEは開発者向けだ。(実行環境に差は無いけど、コンパイラとかがついてくる分、SEの方が容量有る。)

which javaでjavaが表示され、javaの実行環境が揃ったら、マインクラフトのサイト行って、サーバーのjarファイルをダウンロードする。
あらかじめ、SELinux設定済みの専用ディレクトリにダウンロードする。ユーザーのhome以下の専用ディレクトリならまだしも、home直下とかrootとかに作る奴は間違えなく管理者失格。自分のデータがネットでさらされてm9(^Д^)プギャーされるだけです。/rootとか入れたら、俺rootかよ、超(^Д^)メシウマってマシンがスナイポの手下のゾンビにされます。

公式に、java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui で動かせって書いてあるから、その通りに、シェルスクリプト作成。毎回入力するぜって人は、作らなくても問題ない。

noguiオプションを外すと、ウインドウが表示される。X Window 立てっぱなしなら、外しても問題ない。
個人的には、スレッドの負荷のバーとか、メモリの状況が見られておもしろいが。リソース節約するなら、やはり、noguiで起動。

(Windows Serverだったら、exeダウンロードして、ダブルクリックで終了。実に簡単っすなぁ。)

シェルスクリプトに実行権限与えて、実行。終わったらSTOPで停止する。
初回は、ファイルが作られる。
2回目は、ワールドが作られる。
3回目で、データが出揃って、遊べるようになる。

@wikiに作られてるMinecraft Japan wikiのマルチプレイ項目、サーバーの設定を参考に自分の思い通りに設定する。
この辺の設定は、Windowsと共通だから、ググれば多量にでてくる。
screenコマンドでデタッチして、再接続方法が主流だけど、多大なるセキュリティリスクを背負って、rconを使用する。

enable-rcon=true
rcon.password=(」・ω・)」うー!(/・ω・)/にゃーLet's\(・ω・)/にゃー!
rcon.port=25575

こんな感じに設定して、マインクラフト海外フォーラムからrconユーティリティを落としてきて、接続すればよし。SSHでログインしなくても、マインクラフトサーバーにコマンドが送れる。
screenのデタッチに失敗するの私だけか?結構高頻度でデタッチ失敗して、kill -KILLせざる得なくなる。長時間タスクやらせてログアウトする時は、nohup コマンド < /dev/null で実行してた。screenのデタッチ失敗するから。

あとは、入らせたくないユーザーやIPは、banned~.txtに、管理者はops.txtに、許可者リストを使うなら、white-list.txtに必要事項を記述。

設定終わって、3度の起動が終わったら、遊べ流状態になる。
「さぁ、設定終わった。さっそく友達呼ぶぞ!」と思った人は、今すぐ全データ消してサーバー構築止めるべき。致命的に知識が足りてない。あれ?と思った人は、まだ資格有り、続行しよう。ファイアウォールとルーターのNAPTの設定がまだですね。

前回設定したiptables の設定を変える。/etc/sysconfig/iptables に直書きなら、
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25565 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25575 -j ACCEPT
の要領でファイアウォールに穴開ける。そして、iptables を再起動。
スクリプトなら、
/sbin/iptables -A INPUT -p tcp -m state --state NEW --dport 25565 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m state --state NEW --dport 25575 -m hashlimit --hashlimit-name t_mc --hashlimit 3/m --hashlimit-burst 15 --hashlimit-mode srcip --hashlimit-htable-expire 300000 -j ACCEPT
と言った感じでで記述して、スクリプト実行。

CentOSのファイアウォールを通過できるようになった。最後の砦、ルーターの設定を変更する。ルーターの設定変更を明確に打ち出すのは、マインクラフトサーバーシリーズで多分初の言及だと思う。
ルーターのNAPTの設定を行えば、外部→ルーター→サーバーが一直線に繋がる。
DDNSの反映が済んでいれば、マインクラフトのクライアントから、アドレス入力で、サーバーに繋がる。
「やったー」と思った人、明日は君が裁判所から出頭要請が出る。すぐに、構築作業を止め、マシーンの電源を切り、通信回線を引っこ抜こう。
スナイポからすれば、ルーターの先、プライベートエリアまで案内してもらえる事になる。
NAPTにより防げていた不正パケットの通過を許してしまう。怖いとは思わないか?

ん~、例えるなら山奥の静かな山村に立派なトンネルが出来た(NAPT越えで外部からマインクラフトサーバーに入れるようになった。)。
観光客(クラフター)が来るのは歓迎。だが、ゴミの不法投棄の輩が来たり(DOS攻撃など)、村の中で良しなにしてきた土地が、いつの間にか第3者に取得され元居た人が追い出されたり(クラッキング)、山の作物を根こそぎ持っていかれたり(データ流出)などなど・・・。
トンネルさえ無ければ、峠越えをする者もほとんどいない平和な状況だったのにと嘆いても遅い。

それでも、マインクラフトのサーバーは立ったんだ、おめでとうと言っておくか。
webによる情報共有や、メールによる同報装置がいらなければ、これで、サーバー構築は終わり。
ここまででやった対策は最低限も最低限だ、ブランチマイニングしてる暇が有ったら、セキュリティの勉強して秒進分歩(日進月歩では遅すぎる)のペースで、セキュリティを見直し、絶えずアップデートすることをお勧めするけどねぇ。立てて終わりじゃない、これから運用という長い長いプロセスが始まる。


まとめ
マインクラフトのサーバーを立てた。
ルーターのNAPTの設定を変更し、外部からのアクセスが可能になるようにした。
DDNSで名前解決が出来るようになってるので、IPアドレスでなく、文字列のアドレスでアクセスが可能になったので、みんなでマインクラフト出来る環境が揃った。
長い管理者生活が始まった。サーバーの状態をしっかり把握し、スナイポされないように、防衛する日々が続く。
クラフトよりも、セキュリティを勉強する時間の方が長くなっていく。

私は、サーバーなら某所の経験でごく僅かな事ならわかる。
しかしながら、マインクラフト参加者のコミュニティ運営については分からない。
なので、コミュニティ運営技術は、別途自分の頭にインストールしてください!!
(お絵描きソフトの絵心は別売となっております見たいなものだねw)

第7回マインクラフトサーバーを構築する(ファイアウォール(暫定)編)

注意事項は第1回へ。
前回は第6回へ。

すいません、iptablesは、私自身最低ラインの最低。ギリギリいや、スレスレだ。
(ギリギリは空間が有るが、スレスレは衣服や髪が擦れてる状態らしい。)

ーーーーーーやること一覧ーーーーーー

  • セキュリティで最低限やること一覧

1.Yumは確実にアップデートする
2.iptablesで確実に不要なポートをふさぐ
3.SSHのパスワード認証を切る→RSA認証
3.1.rootログインさせない
3.2.ポートを変える
3.3.しつこい奴はDenyHost
3.4.そもそも、SSH可能なユーザーを絞る
3.5.同時SSH可能な数を絞る
4.rootになれるユーザーを絞る
5.ウイルス対策ソフト
6.ファイル改ざん検知
7.rootkit検知
8.不要なサービス停止

9.攻撃検知・防御・排除(バッファーオーバーフローとかDOSとか)
10.ログ監視と調査
11.鯖情報の非表示(Apachやphpのレスポンスを返さないように設定)
12.ApachのSSL化
13.ポートスキャンを遮断
14.DDNSサーバーへの変更通知
15.バックアップ

  • サーバーの設定と起動

1.NTPサーバー
2.マインクラフトサーバー
3.(SQLサーバー)
4.webサーバー
5.webサーバーのSSL化
6.SNMP+MRTG
7.(アクセス解析サーバー)
8.メールサーバー(送信)
9.メールサーバー(受信)
10.メーリングリストサーバー

赤字は作業終了を示す。

ーーーーーーここからが作業ーーーーーー

最低限のセキュリティ設定、あと1項目になりましたね。あとはファイアウォールことiptablesです。

最初の状態だと、SSH、HTTP、HTTPSぐらいが有効で、NTPの作業をした人は、NTPも開いているでしょう。ここからはツールでポートを開けずに、シェルスクリプトでポート開放を行い、設定が良さそうならセーブして反映するという、繰り返し作業になります。

第1回の参考サイト見つつ、某所で鯖缶してたときの、秘伝のiptablesスクリプトを書き換えつつ作成。

とりあえず、現状のルール /etc/sysconfig/iptables をバックアップ。
カーネルへの指示は、先行して設定しておく。

ここにスクリプト晒そうかと思ったが、せっかくポート変えた意味がなくなるので止める。

#!/bin/bash
##########
#ICMP
##########
/sbin/iptables -A INPUT -p icmp --icmp-type echo-request -m hashlimit --hashlimit-name t_icmp --hashlimit 3/m --hashlimit-burst 15 --hashlimit-mode srcip --hashlimit-htable-expire 300000 -j ACCEPT #pingの要請
/sbin/iptables -A INPUT -p icmp --icmp-type echo-reply -m hashlimit --hashlimit-name t_icmp --hashlimit 3/m --hashlimit-burst 15 --hashlimit-mode srcip --hashlimit-htable-expire 300000 -j ACCEPT #着信は答える
/sbin/iptables -A INPUT -p icmp --icmp-type any -j DROP #それ以外通さない
#特定のICMPパケットは送れる
/sbin/iptables -A OUTPUT -p icmp -j ACCEPT

#---------------Communication rules---------------#
##########
#HTTP(80,tcp-udp)
##########
/sbin/iptables -A INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p udp -m state --state NEW --dport 80 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT
/sbin/iptables -A OUTPUT -p udp -m state --state NEW --dport 80 -j ACCEPT
##########
#FTP(20-21&other,tcp-upd)
##########
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
#/sbin/iptables -A INPUT -p tcp -m state --state NEW --dport 20:21 -j ACCEPT
#/sbin/iptables -A INPUT -p udp -m state --state NEW --dport 20:21 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m state --state NEW --dport 20:21 -j ACCEPT
/sbin/iptables -A OUTPUT -p udp -m state --state NEW --dport 20:21 -j ACCEPT

#########
#Minecraft(25565,tcp,udp)
#########
/sbin/iptables -A INPUT -p udp -m state --state NEW --dport 25565 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m state --state NEW --dport 25565 -j ACCEPT
/sbin/iptables -A OUTPUT -p udp -m state --state NEW --dport 28265 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m state --state NEW --dport 28265 -j ACCEPT

#########
#Minecraft rcon(25575,tcp,udp)
#########
/sbin/iptables -A INPUT -p udp -m state --state NEW --dport 25575 -m hashlimit --hashlimit-name t_mc --hashlimit 3/m --hashlimit-burst 15 --hashlimit-mode srcip --hashlimit-htable-expire 300000 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m state --state NEW --dport 25575 -m hashlimit --hashlimit-name t_mc --hashlimit 3/m --hashlimit-burst 15 --hashlimit-mode srcip --hashlimit-htable-expire 300000 -j ACCEPT
/sbin/iptables -A OUTPUT -p udp -m state --state NEW --dport 28275 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m state --state NEW --dport 28275 -j ACCEPT

ICMPは、無いと困るし、多いとゴミなので制限をつける。毎分3パケット、1接続15回までのトライアル可。制限を越えた場合300秒(5分)の接続拒否。
普通のlimitだと、攻撃受けてる最中は、自分の接続が出来なくなる。よって、hashlimitを使う。

普通に制限無く設定する場合は、HTTPの設定みたく書けば良い。プロトコルとポートを許可する。こんな感じか?

FTPは事情が複雑。(知りたければ、アクティブ・パッシブなどで調査)ip_conntrack_ftpとip_nat_ftpをロードして、ルールを書く。
これが分からなくて、昔、「FTP全面禁止だ」(特別の場合は、申請書書かせて、上位ネットワークに直接)でゴリ押ししてたからなぁ。
実験と勉強素晴らしいですなぁ。

あとは、マインクラフトのポートを開ける。マインクラフトRCONポートは、ICMPの要領でアクセス回数制限を設けて、パスワード解析にかかる時間を増大させる。無対策なら1秒で1億通り試せたが、5分で15通りしか試せない。単純計算で、効率を20億分の1に落とせる。

なお、省略しているDNSとか、DHCP、前回設定したNTPなどなどの通信が必要な物は、もれなく列挙しておくこと!通信が出来なくなる。

ここの作業が面倒な人は、サーバー何て立ててはいけない。スナイポの手下ゾンビになって、ネット中を攻撃する。そして貴方は、タイ━━━━||Φ|(|´|Д|`|)|Φ||━━━━ホ!!される。

もちろん、 上の例だと、-j ACCEPT でパケットを通している。だが、マインクラフト本体や、Wiki・メーリングリストは、国内の人としかやらないと言うのであれば、絞るべきだろう。
参考サイトを例に、ACCEPT_COUNTRYで日本国内かどうかをチェックするチェーンに回し、そこで、通す通さないを決めた方が、ポート番号が合っててかつ日本のIPと絞り込めるので、セキュリティがわずかに増す。
もちろん、例外も作りたいだろう。完全拒否IP群を列挙しておいたり、特別許可IPをACCEPT_COUNTRYチェーンに潜り込ませたりする処理を書くことで、もう少しセキュリティをあげつつ、使いやすいファイアウォールが出来る。

これで、半固定して運用したい場合は。service iptables save でセーブすれば良い。/etc/sysconfig/iptables の内容が更新される。


まとめ

Linuxのファイアウォールのiptables を設定した。
iptablesは奥が深く、より柔軟勝つ高度のファイアウォールを組めることが分かった。

第6回マインクラフトサーバーを構築する(セキュアシェル(SSH)編)

注意事項は第1回へ。
前回は第5回へ。

外部サイトのパワーで、セキュリティ周りがだいぶ終わって来ました。

ーーーーーーやること一覧ーーーーーー

  • セキュリティで最低限やること一覧

1.Yumは確実にアップデートする
2.iptablesで確実に不要なポートをふさぐ
3.SSHのパスワード認証を切る→RSA認証
3.1.rootログインさせない
3.2.ポートを変える
3.3.しつこい奴はDenyHost
3.4.そもそも、SSH可能なユーザーを絞る
3.5.同時SSH可能な数を絞る
4.rootになれるユーザーを絞る
5.ウイルス対策ソフト
6.ファイル改ざん検知
7.rootkit検知
8.不要なサービス停止

9.攻撃検知・防御・排除(バッファーオーバーフローとかDOSとか)
10.ログ監視と調査
11.鯖情報の非表示(Apachやphpのレスポンスを返さないように設定)
12.ApachのSSL化
13.ポートスキャンを遮断
14.DDNSサーバーへの変更通知
15.バックアップ

  • サーバーの設定と起動

1.NTPサーバー
2.マインクラフトサーバー
3.(SQLサーバー)
4.webサーバー
5.webサーバーのSSL化
6.SNMP+MRTG
7.(アクセス解析サーバー)
8.メールサーバー(送信)
9.メールサーバー(受信)
10.メーリングリストサーバー

赤字は作業終了を示す。

ーーーーーーここからが作業ーーーーーー

1.SSH
やっとこさ、リモート接続環境の整備です。
windowsのSSHクライアントは、なす探!で紹介されてる、Poderosa
昔使ってた、Tera Term
軽量なのに高機能(特に鍵生成ツール群が) puTTY
この辺が3強らしい。
私個人、はCygwinインストールしてるので、直接sshコマンド叩いちゃうけどね。
これが、リモートでサーバーにつなぐためのツール。もちろんCUI。

マインクラフト参加者や、サーバーに負荷かけても大丈夫と言う人なら、
VNCやTeamViewerが使える。
作業画面そのまま飛ばせて便利、だけど通信回線の負荷とサーバー負荷が高いよ。

TeamViewer使うなら、SSHの設定作業不要。数字覚えて外出すればいい。
数字変わると困る人のために、VNC同様に、パスワード方式もできる。
ついでにファイルの転送出来るのもおいしいよ。

SSHクライアント使う場合は、ファイル転送のために、WinSCP も導入する。
FFFTPライクの操作性だから、FFFTP 使える人なら迷わないんじゃないかな。
(FTPは暗号化されないから、危ないけどscpは暗号化されるから、少しは安心。)
Cygwinで逝くぜって人は、もちろんscp・sftpコマンドでOKさ!(゚∀゚)人(゚∀゚)ナカーマ

長々と書いたけど、接続しに行くクライアントがLinuxなら、ソフト不要。
sshとscpのパッケージ無かったら入れといて。sloginでもいい。

サーバー側の設定
/etc/ssh/sshd_config を編集。ssh_configは、クライアント側の設定。ssh_configいじるなら、エージェントとX11有功にする位?ポートは-p自分で打つし・・・。書いといてバレるとか悲しいからな。historyからバレそうな気がするが・・・。
サーバーの設定に戻る。

・3.1.rootログインさせない
PermitRootLogin no 頭の#消して、文末のyesをnoに書き換える。

・3.2.ポートを変える
Port 22 の頭の#消して、数字を1024以上を指定する。1024未満は、指定されてるから使えない。変えたら、SELinuxと/etc/servicesの変更を忘れないこと。繋がらない。
ポート変えると攻撃が減るらしいので、少々の手間をかけてもSSHのポートは変えた方がいいと思う。
ポートスキャンすれば分かるのだが、前回portsentry入れたおかげで、検知・対策が可能。

・3.4.そもそも、SSH可能なユーザーを絞る
AllowUsers nyaruko nozomi を書き足す。
これで、ニャル子と希のSSHでのログインが許可され、その他ユーザーは拒否される。

・3.5.同時SSH可能な数を絞る
MaxStartups 5:50:10 を書き換える。
端末100コネクション張るとかしないわけなので、5コネクション越えたら、半分拒否。
10コネクション越えたら、全拒否の設定をする。
X Window Systemのおかげで、端末たくさん同時に見られると言っても、
4端末越えると、効率駄々下がりなので、5個で止める設定にしている。全部同時に見てるって訳じゃないし、screenコマンドで、バックに送ればいい話しだし。

・3.SSHのパスワード認証を切る→RSA認証
いじる項目多いから、後回しにした。
Protocol 2 #プロトコルを安全性の高い2のみにする。
RSAAuthentication no #ssh_version1のRSA
PubkeyAuthentication yes #ssh_version2のRSA。Version2のRSAだけ有効にする。
PermitEmptyPasswords no #空パスを許可しない。
PasswordAuthentication no #パスワード認証を使用しない。(RSAキーのみに絞る)
ChallengeResponseAuthentication no #チャレンジレスポンス認証を使用しない。
UsePAM no #PAMを使用しない。

とりあえず、この設定でsshd再起動。(service sshd restart)
エラー吐いたら、何とかする。
3.3のDenyHostは、正常に通信できるか確認してから、あれこれ試していると、自分が、拒否リスト入りする。

ー鍵を作る。
RSAキーを作らないとログインできません。
ssh-keygen -t rsa
保存場所そのままEnter。パスフレーズを2回打つと作られる。
cd ~/.ssh/ でディレクトリ移動して、cat id_rsa.pub >> authorized_keys
sshが参照する鍵ファイルを作る。パーミッション600(自分のみ読み書き)に設定しないと使えなかった気がする。(他人からファイル見られるとか警告されて終わった気がする。)
id_rsaを遠隔元のPCにコピー。(FDでもUSBでも取られない好きな手段使って。)
その後メディアは破壊。方法は何でもいい。ゴル○ィオンハンマーでも、SLBでも、御坂○琴のビリビリ粉砕でも、宇宙C○Cエンハンサーでも・・・。怪我しないように気をつけてな。
(再利用する場合は、十分注意して使用する。)
1回フォーマットしたくらいじゃ楽勝で読めるからな。せめて完全フォーマット->0フィル->1フィル->ランダムデータ書き込み->0フィル->完全フォーマット位はやっておかないと。

TeraTermは、直接RSAキーを扱えるけど、Poderosaは使った事無いから分からない。
puttyはputtygenにインポートして変換しないと使えない。pubとppk作る必要有り。
cygwinはそのままでOkさ。だってPOSIX。

どのクライアント使おうが、IP・ポート・SSHのバージョン・ユーザー名・パスフレーズが合えば繋がる。
2回線使っている場合(光やADSLとモバイルなど)なら、一方から他方に接続がかけられる。DDNSのドメイン名とIPが正しく関連付けられていてなおかつ、ルーターのNAPT・ポートフォワーディングが正しく設定されていればだけど。
ただ、ファイアウォールを構築していないので、お勧めできない。
LAN内から192.168.x.xで繋ぐことが望ましい。

繋がったら、適当にコマンド打って、suやsudoが使えるかどうかテスト。一通り問題無ければここまではOK。ダメなら設定の見直し。
ダメで面倒臭いなら、サーバー構築止めれ。この程度の原因特定できないのに、サーバー運営されたらネット界が迷惑だ。今やっている操作は、リモート操作の最低限のセキュリティで重要な設定だ。それすら出来ないのに、サーバー運営したらスナイポの皆さんにゾンビ作ってくださいとマシーン提供するような行為だ。

無事に入れたら、DenyHostで仕上げ。
後で、時間当たりに要求できるSSHの量の制限を行うが、この2つを組み合わせる事でわずかにセキュリティを上げられる。総当たり攻撃や辞書にしろトライアル系の効率を落とすことが出来る。(1秒で1千万回トライ出来たのが、10秒で1回のトライしか出来ないなら、アタック効率を1億分の1に落とせる。銀行の数回とは言わないが、それなりの試行回数が来たら永久BANとかが可能になる。)

・3.3.しつこい奴はDenyHost
外部サイト頼り。 
いまさら さくらVPS(CentOS5) を設定をしてみた。denyhosts編
DenyHostsでSSHブルートフォースや辞書攻撃を阻止
CentOS on X40:SSHブルートフォース対策(DenyHosts編)
しきい値の設定と、自ホスト・自ネットワークの設定しておけば良さそう。
DenyHosts効いていても、自分がログイン出来て、先ほどのとおり、コマンドやrootになれれば、リモート環境は出来ました。
次回からの作業をリモートでやるもよし、直接実機叩くのもよし。
私は、通信回線が細いので、直接実機を叩く。


まとめ
リモート操作を可能にするSSHの設定をして、実際にログインして操作が行えることを確認した。
SSHできるユーザーを絞ったり、パスワード認証を止めたり、Denyhostsを導入して、セキュリティを僅かながら高めた。

第5回マインクラフトサーバーを構築する(NTP&セキュリティ編)

注意事項は第1回へ。
前回は第4回へ。

これも過去の(ry

前回までで、普通に使える状態にCentOSを持っていったので、いよいよサーバーや保安中枢(セキュリティコア)の設定です。

コマンドは一例。他にもやり方が有る。好きなやり方を使えばいい。
登山と一緒だったけ?山頂と言う目的地は一緒だが、登山道入り口や途中のルート・山小屋は複数有る。

ーーーーーーやること一覧ーーーーーー

  • セキュリティで最低限やること一覧

1.Yumは確実にアップデートする
2.iptablesで確実に不要なポートをふさぐ
3.SSHのパスワード認証を切る→RSA認証
3.1.rootログインさせない
3.2.ポートを変える
3.3.しつこい奴はDenyHost
3.4.そもそも、SSH可能なユーザーを絞る
3.5.同時SSH可能な数を絞る
4.rootになれるユーザーを絞る
5.ウイルス対策ソフト
6.ファイル改ざん検知
7.rootkit検知
8.不要なサービス停止
9.攻撃検知・防御・排除(バッファーオーバーフローとかDOSとか)
10.ログ監視と調査
11.鯖情報の非表示(Apachやphpのレスポンスを返さないように設定)
12.ApachのSSL化
13.ポートスキャンを遮断
14.DDNSサーバーへの変更通知
15.バックアップ

  • サーバーの設定と起動

1.NTPサーバー
2.マインクラフトサーバー
3.(SQLサーバー)
4.webサーバー
5.webサーバーのSSL化
6.SNMP+MRTG
7.(アクセス解析サーバー)
8.メールサーバー(送信)
9.メールサーバー(受信)
10.メーリングリストサーバー

ーーーーーーここからが作業ーーーーーー

1.NTPデーモンを立てる

セキュリティ設定してからと言ってましたが、予定変更。
ログの日時が正しくないと困る。

特に難しいことはない。(と思う。)
とりあえず、 ntpdate ntp.nict.jp やって、システムの時刻を同期する。
その後、 /etc/ntp.conf をエディタで開き、

server ntp.nict.jp
server ntp.jst.mfeed.ad.jp

のserver ~ を好きな所に書き換える。ただし、福岡大学は止めてあげて。サーバー過負荷で、時刻がズレまくってるらしい。
nictと自分のISPしておけば問題無し。うちのISPはNTP提供していないので、ST2のmfeedを指定してる。

書き換えたら保存して、 service ntpd start で起動。service ntpd status で(プロセスの)状態が表示できる。
chkconfig ntpd on を実行すれば、システム起動時に自動的にNTPデーモンが起動する。
windowsで言えば、スタートアップかサービスに登録するのと同じ。

ファイアウォールがブロックしているならば、/etc/sysconfig/iptables を編集、
-A OUTPUT -p tcp -m state --state NEW -m tcp --dport 123 -j ACCEPT
-A OUTPUT -p udp -m state --state NEW -m udp --dport 123 -j ACCEPT
を追記して、service iptables restart 。NTPのポートが開放される。
※ファイアウォールの設定がインストール時のままだと、PC→ネットへの通信は駄々漏れだから、大体通信できる。

NTPが機能しているかどうか知りたい場合は、 ntpq -p で指定したサーバーとの時刻調整の状態が確認できる。

これで、正確な時刻が手に入るようになった。

2.パッケージの自動アップデート

yum-cronパッケージを使うもよし、yum -y update コマンドをcrontabに登録してもいい。
私は、 /ect/cron.daily/yum_auto_update.sh を作り、毎日アップデートさせるようにしている。

中身
#!/bin/bash
/usr/bin/yum -y update > /dev/null 2>&1
まんまですね。

3.不要なサービス停止

chkconfig --list | grep :on でシステム起動時に起動するデーモンの一覧が取得できる。
ONの奴をググりながら、要るか要らないか決める。
chkconfig サービス名 off で次回から自動起動しない。今すぐ止めたいならservice サービス名 stop
分からなかったら、触らない。触らぬ神に祟りなし。

windowsでもそうだけど、余計なサービス・スタートアップ・常駐を起動させないようにすると、起動速くなる。メモリの空きも増えて自分が使いたいソフトにメモリ使える。ハイバネーション移行時に、メモリ使用量が減っている分書き込み量が減ってハイバネーション移行も速くなるとか結構いいこと多い。
速いSSDのおかげで、スタートアップ気にならなくなってきたけど、必要最小限に整理すると、只でさえ速いSSDが更に爆速化する。

Linuxもメモリと起動時間短縮になるし、クラッカーの的を減らすことができるのでおいしい。

4.rootになれるユーザーを絞る

rootは神様だから、通常作業は一般人で行う。
いきなり、神様でサーバーに入ることも出来るけど、神様の証たるパスワード奪われたらどうなるか分かるな。利用可能な人でも、神様権限必要なのは、まぁ、自分と「どうしても」の時に頼む、信頼の置ける人だけでしょう。自分とそのユーザーだけに神様になれる設定を施す。

Linuxはwheelという、神様になれるグループが存在している。 /etc/group を開いて、wheel:rootの後ろに、カンマ区切りで、ユーザー名を書いていく
wheel:x:10:root,nyaruko,nozomi
こんな要領。ニャル子と希を追加した。保存したら、 /etc/login.defs にSU_WHEEL_ONLY yes を追記。
/etc/pam.d/su を開いて、auth        required    pam_wheel.so use_uidを有効化(頭の#を取る)

suコマンドが規制されたので、sudoを規制する。suは神になるコマンドで、sudoは1回神様の権限を借りるコマンド。
visudo 実行して、/etc/sudoersを開く。※エディタで直接/etc/sudoers開いちゃダメ。visudoは文法チェックがついてる。

さっき、せっかく神様になっていい人をwheelグループに登録したので、%wheel  ALL=(ALL)   ALLを有効化。(頭の#を消す。)
文末が、NOPASSWD: ALLの物が有るけど、放置。ちなみにこっち有効化すると、パスワード聞かれずに神様になれる。いいじゃん、便利じゃんと思った人は、管理者の資格無し。権限与えた友達のなりすましが、パスワード無しで、神になるんだぜ?手下のゾンビにするに決まってるじゃん。
ってことで、NOPASSWDの付いて無い方を有効化する。
保険かけて、 /etc/pam.d/sudo にも auth       required     pam_wheel.so use_uid これ書いておく。/etc/sudoersで規制してるから、多分要らないけど。

5.ウイルス対策・ファイル改竄・rootkit検知・ログ監視など

参考サイトに書いた、外部サイトの力を借りましょう。

5.ウイルス対策ソフト{Clam AV}
6.ファイル改ざん検知{Tripwire}
7.rootkit検知{chkrootkit}
9.攻撃検知・防御・排除(バッファーオーバーフロー){exec-shield}※DOSは別の対策が必要
10.ログ監視と調査{logwatch}
13.ポートスキャンを遮断{portsentry}
14.DDNSサーバーへの変更通知{Dice}

この辺の設定が、一気に可能。
11.鯖情報の非表示(Apachやphpのレスポンスを返さないように設定)は、待った。
webサーバーが正しく構築できてからじゃないと、原因特定が難しくなる。

上のソフト入れる過程でサードパーティのリポジトリを使う。
サードパーティのリポジトリは、無効化しておいた方がいい。
コンフリクト起こして、公式のyum updateが通らなくなる。
/etc/yum.repos.d/内の追加したレポジトリのファイルを開きEnable=0にしておく。
必要になったら、yum --enablerepo=レポジトリ名 を追加して、インストールする。
yum priorityプラグインを使って、レポジトリに優先度を付けることができる。
/etc/yum.repos.d/の各ファイルのセクションの最後にpriority=数字 を書くことで、適応される。小さい数字ほど優先される。公式を1、追加したレポジトリ順に5刻みで増やしていけば、公式を最優先にして、古参レポジトリを優先する仕組みを作れる。

6.バックアップ
いつぞやに書いたrsyncを使って、バックアップする。
うちのサーバーはSSD+HDDの構成になっているので、HDDにバックアップする。

インストール時のパーティション設定で、HDDのマウントポイントを/soukoとか適当に指定して、フォーマットしなければ、データを残したまま参照できる。(FAT32領域とか)
フォーマットすれば、真っ新な状態でディスクを使える。

やってない場合は、mount -t ファイルシステムの種類 /dev/デバイス名 /media/マウントディレクトリ名 でマウントする。
内蔵メディアや、取り外す気のない外部メディアなら、/etc/fstabに書いておいて、起動時に自動マウントされると楽。
※NTFSは、サードパーティレポジトリからパッケージ取ってきて頑張る。書き込んでWindowsのファイルが破損しても泣かない。
Windowsからext2fsdとかでドライブ認識かけて書き込むのは、比較的トラブル無い。流石オープンソース。

シェルスクリプト作って、バックアップしたい周期のcronに放りこんでおけばいいんじゃないかな。
#!/bin/bash
#minecraft backup
rsync -avzrH --progress /minecraft/ /souko/backup/minecraft/ > /dev/null 2>&1
#web page backup
rsync -avzrH --progress /var/www/html/ /souko/backup/web/ > /dev/null 2>&1
文末のリダイレクトは、コンソール出力しないようにするため。
rsyncのオプションに-u と --delete を指定すると同期になる。
今のコマンドのままだと、もとディレクトリから消したデータもバックアップ先は保持している。
同期にすると、元のディレクトリからデータ消したら、バックアップ先も消してくれる。

うちはやってないけど、rsyncは別のコンピュータにSSH経由コピーも可能。


まとめ
NTPデーモンを開始して、システムの時計を正確にした。
パッケージを自動アップデートするようにして、セキュリティホールを迅速に塞ぐようにした。
不要なサービスを止めて、システムを軽くした。
ルートになれるユーザーを絞った。
外部サイトを利用して、ウイルス対策・ファイル改竄・rootkit検知・ログ監視などの設定を行った。
rsyncを使って、HDDにバックアップを取るようにした。

第4回マインクラフトサーバーを構築する(OS設定編)

注意事項は第1回へ。
前回は第3回へ。
これも過去の(ry

OSインストール終了し、ログイン画面までこぎつけた。んじゃ、ログイン。

慣れているなら、rootでもいいんじゃない、管理者権限要るコマンド叩きまくるし。
それ以外は、一般ユーザーでログインしてsu - やsudo するのが安全。
sudoers設定してないや。

うちの蟹NICはmodprobeしなくても認識した。
ifconfigで設定見るとちゃんと振るように命じたIPがきてる。
pingでルータへの導通問題なし。
同様に外部サイトのpingやtraceroute問題なし。レイヤー3までの通信が確立しているので、ブラウザ使って、外界を見る。繋がったら終了。
ネット繋がってないと、(出来ないことは無いけど)何も出来ないからね。
Linuxの世界ネット前提だからねぇ。

  • 利用環境の整備

LANの設定はしてしまったので、それ以外の利用環境を整える。

1.ドライバーのインストール
2.サードパーティ提供のソフトのインストール

大体のドライバーは入るが、やっぱり公式ドライバーを使った方が何かといいのも事実。
引っかかったのは、グラフィクスドライバのインストール。
nvidiaビデオカードドライバのインストール方法
CentOS6の標準ドライバが悪さするようだ。

これで、温度とかクロックがGUIで見られる。

サードパーティ製ソフトは、入れたいソフト入れればいいんじゃない?
Adobe Reader入れるとか
Flush Player入れるとか
もうさっさとoracle JAVA入れてしまうとか。
※oracle javaと書いているのは、CentOSリポジトリのOpen JAVAと区別するため。

他に、Opera入れたり、google Chrome入れてるかな。
炎狐あんまり好きじゃないんで・・・。

恐竜(mozilla)がかわいい狐に生まれ変わったと思ったら、みんながおいしい餌(アドオン)を食べさせまくって、気がつけば、メタボリック紳士のIEよりも豚な狐だもんなぁ。

ユーザーのお好みで、これ入れるべきって物が有れば、入れてしまおう。

入れ終わったら、端末開いてyum -y update;reboot。
システムメニュー->管理->ソフトウエアの更新でもOK。カーネル更新来てるから、アップデートしよう。

※nvidiaドライバーは、カーネル毎にモジュール作るみたいだから、多分再インストールが必要。

------これからの予定------

  • セキュリティで最低限やること一覧

1.Yumは確実にアップデートする
2.iptablesで確実に不要なポートをふさぐ
3.SSHのパスワード認証を切る→RSA認証
3.1.rootログインさせない
3.2.ポートを変える
3.3.しつこい奴はDenyHost
3.4.そもそも、SSH可能なユーザーを絞る
3.5.同時SSH可能な数を絞る
4.rootになれるユーザーを絞る
5.ウイルス対策ソフト
6.ファイル改ざん検知
7.rootkit検知
8.不要なサービス停止
9.攻撃検知・防御・排除(バッファーオーバーフローとかDOSとか)
10.ログ監視と調査
11.鯖情報の非表示(Apachやphpのレスポンスを返さないように設定)
12.ApachのSSL化
13.ポートスキャンを遮断
14.DDNSサーバーへの変更通知
15.バックアップ

順不同。
この順番でやら無ければならないということは無い。ウイルス対策や改ざん検知は早いに越したことが無い。
11、12は、webサーバー立てて、運転が確認できたらすることになる。
バックアップは、最後の大仕事でしょう。
sshはリモート操作の事だが、強力に防壁を施した後で設定を行うと、大体どっかでやらかして、自分がブラックリスト入りする。
そこまで強力にする前に入れるようにして、超強力にしてからも入れるかどうかの確認が要る。

最低限のセキュリティを確保した後に、必要なサーバーソフトのセットアップを行う。

  • サーバーの設定と起動

1.NTPサーバー
2.マインクラフトサーバー
3.(SQLサーバー)
4.webサーバー
5.webサーバーのSSL化
6.SNMP+MRTG
7.(アクセス解析サーバー)
8.メールサーバー(送信)
9.メールサーバー(受信)
10.メーリングリストサーバー

大体順番合ってるんじゃないかな。
マインクラフトのログも時間正確な方が、特定のときに役立つし。
マイクラサーバーだけなら1、2に加えて6もやると良いと思う。
どの時間にサーバーに負荷が掛かってて、性能が足りてるかとか、ディスクやメモリが導使われているかとか、確認することが出来る。
けどうちは、wikiとメーリングリストが要るので、結構手順が要る。
括弧書きはオプション。どのページが人気か分かる。SQL何に使ったか忘れた。WordPressだったら関係ない。(マインクラフト開発日記とかやるなら、ブログサーバーあってもいいかもね)
(SQLは後に、電DランキングのDBとして有効活用される事になるとは、このときは考えていなかった。)
自分のサーバーだから、見る人が文句言わない限り、ビデオ置こうが、ワールドデータ置こうが、ディスク容量が有れば問題ないからなぁ。(著作権要注意。転送量でISPから文句くるかも・・・。)


まとめ

ドライバをインストールした。
俺仕様のソフト群を追加し、使えるようにした。
パッケージ群を更新し、新カーネルにした。
最低限やらなければならないセキュリティ項目が多く、愕然とした。
いきなりサーバー構築に行けず、がっかりした。


後書き

今回は、デスクトップ利用可能な所までの構築と、今後の設定一覧の確認。
ここまでなら、ウイルス対策インストールしてないけど、パッケージ更新により穴を塞いだソフトにしたり、SELinuxやファイアウォールの通信規制でまだ、スナイポされずに済んだ。
ルーターと言う名の砦の活躍も忘れてはならない。