月別アーカイブ: 12月 2011

Windows化したさくらVPSでVPNを利用する – IPSec メインモード MR504DV

 先日、RTX1000とさくらのVPS(Windows化済み)の間でアグレッシブモードのIPSecによるVPNを構築したが、3rdルータに固定IPがあるので、メインモードで再構築した(前回はShrewだったが、今回はWindows標準のVPN機能IPSecで実現)
3rdルータはOMRONのMR504DVである。

MR504DVのIPSecに関わる設定
ipsec 2 valid on
ipsec 2 policy localip 192.168.0.0/24
ipsec 2 policy remoteip さくらのip
ipsec 2 policy dstgwip さくらのip
ipsec 2 ike dir responder
ipsec 2 ike psk 事前共有鍵
ipsec 2 ike enc des
ipsec 2 ike keepalive on d=さくらのip
ipsec 2 ike autocon on
ipsec 2 ike lifetime isakmp 3600
ipsec 2 ike lifetime ipsec 3600
ipsec 2 esp enc des
ipsec 2 pmtud dfbit off
ipsec 2 mss mode on
ipsec 2 natt mode on
ipsec 2 natt nego on

Windows(さくらのVPS)側の設定
スタート>コンパネ>管理ツール>ローカルセキュリティの設定
左ツリー:IPセキュリティポリシー
右ペインで右クリック>IPセキュリティポリシーの作成
ウィザードが起動、名前と説明を適当に設定、既定の応答規則をアクティブにする:Checked、次の文字列をキー交換(事前共有キー)の保護に使う:Checked&事前共有鍵を設定、プロパティを編集する:Checked

既定の応答フィルタの編集
セキュリティメソッド>追加>カスタム>暗号化をしないデータとアドレスの整合性:Unchecked,データの整合性と暗号化:Checked,整合性アルゴリズム:MD5,暗号化アルゴリズム:DES,新しいキーの生成間隔:Checked&3600秒に1回
認証方法>追加>次の文字列を使う:Checked&事前共有鍵を設定

追加の規則の作成
規則>追加>次のIPアドレスでトンネルエンドポイントを指定する:Checked&MR504DVの固定IPを指定>全てのネットワーク接続:Checked>IPフィルタ:追加>名前と説明を適当に設定、追加>ミラー化:Checked>発信元アドレス:このコンピュータのIPアドレス>宛先アドレス:特定のIPアドレス:192.168.0.0&255.255.255.0>プロトコルの種類の選択:任意
作成したフィルタを選択>セキュリティが必要>事前共有鍵を設定して終了。

作ったポリシーを右クリックして、割り当てをすると即座に適用される。
ping 192.168.0.1
とか打つと
Negotiating IP Securityとか、何回か出てくるが、IPSecが確立すれば、後は普通にVPN通信できる。

  • 関連
  • 関連
  • (248)


    カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | タグ: , | コメントをどうぞ

    安いサーバには安いなりの設定を その2 – Apache設定 httpd.conf prefork.c

     httpd.confのデフォルト設定では、
    MaxClinets 256
    ServerLimit 256
    になっている。

     これは、Apacheが最大256プロセス起動して256コネクションに応答するという設定。
     さて、これは適切な設定なのだろうか?
     メモリ状況をベースに検討してみる。
     Apacheが停止した状態でメモリ状況を確認。
    #free

    total used free shared buffers cached
    Mem: 514912 376800 138112 0 144052 203260
    -/+ buffers/cache: 29488 485424
    Swap: 1048568 2852 1045716

     Apacheの1プロセスが消費するメモリを確認。
    #ps alx|grep httpd
    F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
    5 48 32222 32212 21 0 39112 3872 374588 S ? 0:00 /usr/sbin/httpd
    ・・・

     RSSが実際に使用されているメモリ量で、この場合、3872KB使われていると言うこと。
     256プロセスだと、3872KB*256=968MBのメモリを消費するという計算。
     空きメモリはいくつあったかというと、freeの結果に、138112KB(134MB)と書かれている。 Linuxでは、bufferとcacheについては必要に応じて切り出して使用できる(と言っても、少し残しておかないと応答が低下するので、全ては使えないが)ので、buffers:144052KB(140MB)とcached:203260KB(198MB)を加えた472MB位まで使える(-/+ buffers/cache:のfree値)わけだが、使えるメモリの2倍ほどを消費してしまうことになる。

     使えるメモリをhttpdの消費メモリで除算すると
    485424/3872=125
    であるから、125プロセスまでが物理メモリに収まると言うことになる。

     ServerLimit 256だと、126プロセス目が立ち上がるとスワップが発生し、その応答が遅くなり、処理できないうちに次のリクエストが来ると127プロセス目を立ち上げようとして、処理できずに更に128プロセス・・・となって、プロセスが増え続ける。
    すると最終的にシステムが応答不能に陥って見かけ上ダウンする(あるいは、高負荷で実際にダウンする)
     故に、MaxClients/ServerLimitを125以下に制限するべきである。

     ついでなので、prefork.c設定を解説しておく。
    ・StartServers
     httpd startしたときに起動するプロセスの数。 多くすると初期の起動が遅くなるし、必要に応じてプロセスはServerLimitまで追加されていくので、数個起動しておけば問題ないはずだ。
    ・MinSpareServers
     プロセスの予備数の最低値で、アクセスがない状態ではプロセスを自動終了するけど、この数のプロセスは最低限残しておく。 これが小さいと、急にアクセスが来たときにプロセスを起動する遅延が発生するが、大きいとアクセスがない状態でもメモリを消費し続ける。
    ・MaxSpareServers
     MinSpareServersの逆で、アクセスが集中してプロセスが大量に立ち上がった後に、アクセスが減ると、アクティブな接続がないプロセスはこの数を残して自動終了される。
    ・MaxRequestsPerChild
     一つのプロセスが処理するリクエストの上限を設定する。 この数までリクエストを受け付けたプロセスは終了される。 プロセス内でメモリリークを起こした場合等に一度停止させることでメモリを解放させる効果などがある。

     あるPHPプログラムでメモリを消費したときに、Apacheの1プロセスが300MB近いメモリを確保しながら、ページ読み込みが終了しても開放せず、予想外のメモリ消費を起こしてシステムがダウンする事があったので、MaxRequestsPerChildに適当な値を設定しておくことで運用的に暫定対応した事もある。

    (43)


    カテゴリー: サーバ設定 | コメントをどうぞ

    安いサーバには安いなりの設定を その1 – OS 基本設定 ServersMan@VPS さくらVPS

     そもそもの基本
     x86_64(64bit)だと消費メモリがとても多い(Apacheのデフォルトで実メモリ30MB以上消費する)
     安いプランでレンタルサーバを使う場合には、i386(32bit)をインストールする。
     これは、単純な話、変数の基本型を特に指定せずに使う場合、32bit環境では32bit、64bit環境では64bitの長さになるので、64bit環境は32bit環境の2倍のメモリを消費する。
     32bitの長さで表現できる値を扱う限りにおいては、64bit環境より32bit環境の方がコンパクトであるわけである。
     基本的には64bit環境はメモリアドレスが4GBを超える場合に必要になってくる物と考えて良いだろう(私は4GBプランを32bitで使っている)

     後は、デフォルトで入っていて不要なiSCSIサービスを止める。
    chkconfig iscsi off
    chkconfig iscsid off
    iSCSIはSCSIをIP上に乗っけたプロトコルだが、レンタルサーバで使うことはまず無いだろう。

     さくらのVPS 512では、512MBメモリで64bitOSがデフォルトになっているが、パフォーマンスを考えると、64bit変数が重要でなければ32bitに切り替えるのをオススメしたい。 256MBしか保証メモリがない ServersMan@VPS
    Entryプランだったら必ず32bitを選ぶべきだろう。

    (55)


    カテゴリー: サーバ設定 | コメントをどうぞ

    パーミッションを許可すると逆に動作しなくなる – sendmail 777 error World writable directory

     普通、パーミッションが不足して読み書きできずに動作不良が起こることがあるけど、sendmailは逆に、パーミッションが許可しすぎで止まることがある。
     このとき出るのが、World writable directoryと言うエラーメッセージ。

     /etc/mail と言うディレクトリにsendmailの設定ファイルが入っているのだけど、このディレクトリを777にしていると、このエラーが出て止まってしまう。
     セキュリティを考慮して、sendmailは自由に読み書きできるディレクトリを許容しない。
     755とかに変更して、書き込み権限を除去すると動作するようになる。
     デフォルトの設定では問題ないんだけど、操作ミスとかで許可してしまったりすると動作停止してしまうので注意したい。

     また、sudoを許可する /etc/sudoers も0440に設定しないと動作しない。

    (345)


    カテゴリー: サーバ設定 | コメントをどうぞ

    cronでログ出力とメール送信を同時にしたい – パイプ リダイレクト tee

     cronでバッチを走らせた場合に良くやるのが、リダイレクトを利用したロギング

    0 * * * * /root/test.sh >> /va/log/test.log

    みたいにリダイレクトすればtest.shを実行して標準出力の内容をtest.logに追記できる(上書きなら>一個)

     また、出力内容をメールしたい場合には、リダイレクト(>)の代わりにパイプ(|)を使って、

    0 * * * * /root/test.sh | mail user@hoge.piyo

    みたいにmailコマンドに入力してメールを飛ばす。

     で、本題はロギング(リダイレクト)しつつ、メール送信(パイプ)もしたい場合。
     プログラムの中に何かしら書いてしまえば出来るけど、手を入れずに済ませる場合に使えるのが tee と言うコマンド。
     tee は、入力された情報をファイルに書き込みつつ標準出力にエコーするだけの単純なプログラムだ。

    0 * * * * /root/test.sh | tee /var/log/test.log | mail user@hoge.piyo

    のように使うと、/var/log/test.log に書き込んで、メールも飛ばせる。

    デフォルトで上書きなので、追記したい場合は

    0 * * * * /root/test.sh | tee -a /var/log/test.log | mail user@hoge.piyo

    のように、-a(append)オプションを付けてやればいい。

     ほんとに単純なコマンドではあるが覚えていると便利である。

    (375)


    カテゴリー: サーバ設定 | コメントをどうぞ

    wordpressでmeta descriptionをいじる

     色々なSEOパッケージにはMETA DESCRIPTIONをセットする機能があるんだけど、これの動作がGoogle先生に嫌われてしまった。
     具体的には、メインインデックスのDESCRIPTIONと別ページのDESCRIPTIONが同じになっていたんだけど、これが重複判定されて、インデックスの殆どが補足に回されてしまった。
    なので、独自にDESCRIPTIONを作る。 header.phpの</head>の手前あたりに設置

    <?php
    if(isset($_SERVER[‘REDIRECT_URL’])){
    if(is_array($posts)){
    $local_array = array();
    foreach($posts as $local_post){
    $local_array[] = $local_post->post_title;
    }
    echo(“<meta name=’description’ value='”.implode(‘, ‘, $local_array).”‘ />”);
    }
    }else{
    echo(“<meta name=’description’ value=’こちらはServersMan@VPSインデックスのDESCRIPTIONです。’ />”);
    }
    ?>

    このコードでは、/に接続されたときには、’こちらはServersMan@VPSインデックスのDESCRIPTIONです。’ を書き出して、それ以外のページの場合には、記事のタイトルをカンマ区切りで列挙するようにしてある。

    (6)


    カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ

    サブクエリを使う場合のパフォーマンス低下 – MySQL サブクエリ IN

     WHERE句でINを使ってサブクエリを構築する場合

    SELECT * FROM main_table WHERE id IN (SELECT main_id FROM sub_table WHERE date=’2011-12-21′ GROUP BY main_id) AND type=1

     みたいに書くとパフォーマンスが低下する。
     メインテーブルの条件になるmain_idをグループにすると重複が無くなって良さそうな感じがするんだけど、このGROUP BYをするとインデックス動作が低速化するので、GROUP BY main_idを除去する方が良い。
     サブクエリの戻り値が複数あっても、結局、INを展開するとid=1 OR id=1 OR id=2みたいな事になるんで、JOINした場合と違って論理的に被らないので、こういったグループ化はしない方が良い。
     また、関数を使って値を処理した場合にもインデックスが動作せずにクエリが著しく低下するので、インデックスが動作する形でSELECTして、プログラム側で処理をした方が高速なこともあるのに注意したい。

    (19)


    カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ