注意事項は第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からサーバーの状態を把握できるようにした。