<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
   <channel>
      <title>専用サーバHACKS</title>
      <link>http://www.sensaba.net/senyo/</link>
      <description>専用サーバサービスを使いこなすテクニック集</description>
      <language>ja</language>
      <copyright>Copyright 2008</copyright>
      <lastBuildDate>Fri, 05 Sep 2008 17:47:48 +0900</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/?v=3.2-ja-2</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

            <item>
         <title>カーネルバージョンの確認</title>
         <description>カーネルバージョンをコマンドで確認する場合は uname コマンドを使用します。

カーネルバージョンに関する情報は /proc/version ファイルに記録されています。 
</description>
         <link>http://www.sensaba.net/senyo/2008/09/post_19.html</link>
         <guid>http://www.sensaba.net/senyo/2008/09/post_19.html</guid>
         <category>Red Hat</category>
         <pubDate>Fri, 05 Sep 2008 17:47:48 +0900</pubDate>
      </item>
            <item>
         <title>OSバージョンの確認</title>
         <description>OSバージョンに関する情報は、Fedora Coreでは、/etc/fedora-release ファイルに、Red Hat Enterprise Linuxでは /etc/redhat-release ファイルに記録されています。</description>
         <link>http://www.sensaba.net/senyo/2008/09/os.html</link>
         <guid>http://www.sensaba.net/senyo/2008/09/os.html</guid>
         <category>Red Hat</category>
         <pubDate>Fri, 05 Sep 2008 17:45:08 +0900</pubDate>
      </item>
            <item>
         <title>mysqlユーザ設定</title>
         <description><![CDATA[mysqlのユーザ設定あれこれです。
<div class="shell1"># mysql -u root -p xxxxxxxx
mysql> grant all privileges on *.* to root@localhost identified by 'xxxxxxxx' with grant option;
mysql> flush privileges;
</div>]]></description>
         <link>http://www.sensaba.net/senyo/2008/06/mysql.html</link>
         <guid>http://www.sensaba.net/senyo/2008/06/mysql.html</guid>
         <category>データベース</category>
         <pubDate>Mon, 02 Jun 2008 21:22:06 +0900</pubDate>
      </item>
            <item>
         <title>Movable Type mysqlユーザーの作成</title>
         <description><![CDATA[MySQL にログインして、ユーザーを作成します。
たとえば、ユーザー名を mtuser、パスワードを mtpasswd とする場合です。
<div class="shell1"># mysql -u root -p xxxxxxxx
mysql> grant all on mt.* to mtuser@localhost identified by 'mtpasswd';
</div>]]></description>
         <link>http://www.sensaba.net/senyo/2008/06/movable_type_mysql.html</link>
         <guid>http://www.sensaba.net/senyo/2008/06/movable_type_mysql.html</guid>
         <category>ウェブアプリ</category>
         <pubDate>Mon, 02 Jun 2008 20:46:18 +0900</pubDate>
      </item>
            <item>
         <title>[mysql]rootのパスワード忘れ</title>
         <description><![CDATA[rootユーザーで行います。
いったんmysqlを停止し--skip-grant-tablesオプションをつけてmysqlを起動し、パスワードを変更します。
その後mysqlを停止し、通常の方法で起動させます。
<div class="shell1"># /usr/bin/mysqld_safe -u root --skip-grant-tables &
# mysql -u root
mysql> select user,host,password from mysql.user;
mysql> update mysql.user set password="" where user = "root";
</div>

]]></description>
         <link>http://www.sensaba.net/senyo/2008/06/mysqlroot.html</link>
         <guid>http://www.sensaba.net/senyo/2008/06/mysqlroot.html</guid>
         <category>データベース</category>
         <pubDate>Mon, 02 Jun 2008 20:15:19 +0900</pubDate>
      </item>
            <item>
         <title>サーバ接続の冗長化</title>
         <description>サーバ接続の冗長化には、NICチーミングと呼ばれる、NICを冗長化させる障害対策手法がとられます。NICチーミングには大別して次の三つがあります。

①NICテイク・オーバー
②イーサネット・チャネル
③スパニング・ツリー・プロトコル（STP）

①NICテイク・オーバー
二つのNICをそれぞれ二つのスイッチに接続する構成。
アクティブのNICが障害を検知するとバックアップ側にネットワーク経路を切り替える仕組みです。ネットワーク経路を二つ設けることができ、経路の冗長化は可能ですが、二つの経路を同時に利用して負荷を二つのリンクに分散することができません。

②イーサネット・チャネル
二つのNICを一つのスイッチに接続する構成。
スイッチとのチャネル・リンクを構成します。一つのリンク、NICが障害となった場合に即時に片チャネル運用が可能であり、またリンクのアグリゲーション機能によりリンクへの負荷を両リンクに分散させることが可能です。しかし、同一のスイッチ内での接続を前提としているため、複数のネットワーク経路を作ることはできず、スイッチが単一障害点になってしまいます。

③スパニング・ツリー・プロトコル（STP）
二つのNICをそれぞれ二つのスイッチに接続する構成。
サーバが１台のスイッチと同様に動作し、バックアップ側のNICポートをブロッキング状態にすることで経路冗長を図る方式です。しかし、スパニング・ツリー・プロトコルを用いるために切替時間に50秒以上かかってしまう上に経路の分散もできません。

以上の三つの方式を簡単に表にまとめてみました。

　｜冗長化｜負荷分散｜切替時間｜
①｜　○　｜　×　　｜　○　　｜
②｜　×　｜　○　　｜　○　　｜
③｜　○　｜　×　　｜　×　　｜　　
</description>
         <link>http://www.sensaba.net/senyo/2006/12/post_18.html</link>
         <guid>http://www.sensaba.net/senyo/2006/12/post_18.html</guid>
         <category>エンタープライズ</category>
         <pubDate>Thu, 28 Dec 2006 11:06:38 +0900</pubDate>
      </item>
            <item>
         <title>サブミッションポート + postfix</title>
         <description><![CDATA[postfixでのサブミッションポート(submission port)対応はとても簡単です。

/etc/postfix/master.cfファイルを編集し、コメントアウトされているsubmissionポートを有効にします。

▼/etc/postfix/master.cf
<div class="file1">...
submission   inet    n       -       n       -       -       smtpd
  -o smtpd_enforce_tls=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_etrn_restrictions=reject
...
</div>

/etc/servicesファイルを編集し、サービス一覧にサブミッションポートを追加しますが、デフォルトですでに追加されています。

▼/etc/services
<div class="file1">...
submission      587/tcp         msa             # mail message submission
submission      587/udp         msa             # mail message submission
...
</div>

postfixを再起動します。

<div class="shell1"># service postfix restart
</div>]]></description>
         <link>http://www.sensaba.net/senyo/2006/10/_postfix.html</link>
         <guid>http://www.sensaba.net/senyo/2006/10/_postfix.html</guid>
         <category>メールサーバ</category>
         <pubDate>Fri, 13 Oct 2006 18:29:38 +0900</pubDate>
      </item>
            <item>
         <title>サブミッションポートの変換</title>
         <description><![CDATA[Outbound Port 25 Blocking（OP25B）対策として、外部メールサーバへの接続はサブミッションポート(submission port; Port587)を使用します。メールサーバ側でPort587を受け付けるようにしなければいけませんが、設定をするのが不安という場合には、とりあえず手っ取り早い対策として、iptablesでPort587をPort25に変換します。

<div class="shell1"># iptables -t nat -A PREROUTING -p tcp --dport 587 -j DNAT --to aaa.bbb.ccc.ddd:25
</div>]]></description>
         <link>http://www.sensaba.net/senyo/2006/10/post_17.html</link>
         <guid>http://www.sensaba.net/senyo/2006/10/post_17.html</guid>
         <category>メールサーバ</category>
         <pubDate>Fri, 13 Oct 2006 18:11:59 +0900</pubDate>
      </item>
            <item>
         <title>サービス監視</title>
         <description><![CDATA[<b>■ サービス監視スクリプト</b>

▼/usr/local/bin/check_active
<div class="file1">#!/bin/sh
 
# service check interval
#!/bin/sh
# service check intervalINTERVAL=10
 
# service IP address
CVIP=210.230.64.251
 
 
# service check interval
INTERVAL=10
 
# service IP address
CVIP=210.230.64.251
 
CURL=/usr/bin/curl
GREP=/bin/grep
 
while true
do
 
# check vsftpd
${CURL} ftp://127.0.0.1/ 2>&1 | ${GREP} 'pub' > /dev/null
# check httpd${CURL} --retry 4 --retry-delay 15 http://127.0.0.1/ 2>&1 | ${GREP} 'html' > /dev/nullif [ $? -ne 0 ]; then
/usr/lib/heartbeat/heartbeat -k
exit 100
fi
 
sleep ${INTERVAL}
</div>]]></description>
         <link>http://www.sensaba.net/senyo/2006/07/post_16.html</link>
         <guid>http://www.sensaba.net/senyo/2006/07/post_16.html</guid>
         <category>エンタープライズ</category>
         <pubDate>Wed, 05 Jul 2006 23:05:18 +0900</pubDate>
      </item>
            <item>
         <title>heartbeatの起動</title>
         <description><![CDATA[<b>■ハートビートの起動</b>

稼動系のサーバと待機系のサーバの両方を起動します。
<div class="shell1">[www1]# /etc/init.d/heartbeat start
Starting High-Availability services: [ OK ]
</div>
<div class="shell1">[www2]# /etc/init.d/heartbeat start
Starting High-Availability services: [ OK ]
</div>

<b>■起動確認</b>

heartbeatを起動するとwww1にVIPの設定が行われます。
<div class="shell1">[www1]# ifconfig -a eth0:0
...
eth0:0 Link encap:Ethernet HWaddr...
...
</div>

また、httpdサービスも自動的に開始されています。
<div class="shell2"><pre>[www1]# ps -C httpd
  PID TTY          TIME CMD
 7980 ?        00:00:18 httpd
 4212 ?        00:00:06 httpd
 5239 ?        00:00:06 httpd
13190 ?        00:00:04 httpd
13191 ?        00:00:06 httpd
17484 ?        00:00:02 httpd
17485 ?        00:00:01 httpd
21871 ?        00:00:01 httpd
22005 ?        00:00:00 httpd
22007 ?        00:00:00 httpd
22008 ?        00:00:00 httpd
</pre></div>

www2ではhttpdは起動されません。
<div class="shell1">[www2]# ps -C httpd
  PID TTY          TIME CMD
</div>

<b>■フェイルオーバーの確認</b>

稼動系サーバを強制的にフェイルオーバーさせて正しく待機系サーバに切り替わるかを確認します。強制的に待機系サーバに切り替えるには、www1でheartbeatサービスを停止します。
<div class="shell1">[www1]# /etc/init.d/heartbeat stop
Stopping High-Availability services: [ OK ]
</div>

正しく設定が行われていれば、VIPとサービスが待機系サーバに引き継がれます。
www2にVIPが設定されていることを確認します。
<div class="shell1">[www2]# ifconfig -a eth0:0
...
eth0:0 Link encap:Ethernet HWaddr...
...
</div>

また、httpdサービスも自動的に開始されています。
<div class="shell2">[www2]# ps -C httpd
  PID TTY          TIME CMD
 7980 ?        00:00:18 httpd
...
</div>

<b>■フェイルバックの確認</b>

今度は稼動系サーバを復活させてフェイルバック動作を確認します。www1のheartbeatサービスと起動します。
<div class="shell1">[www1]# /etc/init.d/heartbeat start
Starting High-Availability services: [ OK ]
</div>

www1にVIPが設定されていることと、httpdプロセスが起動していることを確認します。

<b>■heartbeatの自動起動</b>

<div class="shell1"># chkconfig --add heartbeat
# chkconfig heartbeat on
</div>

<b>■サービスの自動起動の停止</b>

/etc/ha.d/haresourcesファイルに登録したサービスのうち、システムの自動起動の設定が行われているサービスがあれば、自動起動の対象から削除する必要があります。ここでは、Webサーバを冗長化するためhttpdをheartbeatの管理にしていますので、httpdの自動起動を停止しておく必要があります。
<div class="shell1"># chkconfig httpd off
</div>

]]></description>
         <link>http://www.sensaba.net/senyo/2006/07/heartbeat_2.html</link>
         <guid>http://www.sensaba.net/senyo/2006/07/heartbeat_2.html</guid>
         <category>エンタープライズ</category>
         <pubDate>Wed, 05 Jul 2006 22:22:26 +0900</pubDate>
      </item>
            <item>
         <title>heartbeatの設定</title>
         <description><![CDATA[2台のWebサーバのホスト名をwww1, www2とします。どちらのサーバもNICが二つあり、eth0がサービス系、eth1が監視系です。IPアドレスについて、サービス系のIPアドレスは、www1: 192.168.1.1, www2: 192.168.1.2とし、VIPとして192.168.1.3を使用するとします。監視系のIPアドレスは、www1: 10.0.0.1, www2: 10.0.0.2とします。

<b>1. クラスタの設定</b>

それぞれのサーバの/etc/ha.d/ha.cfファイルを編集します。デフォルトではほとんどの行がコメントアウトされていますので、必要に応じてコメントを外し設定します。

▼/etc/ha.d/ha.cf (www1)
<div class="file1"># ログ
logfile /var/log/ha-log
# 時間
keepalive 2
deadtime 10
warntime 10
initdead 120
# ハートビート
udpport 694
baud 19200
serial /dev/tty0
ucast eth1 10.0.0.2
# 自動フェイルバック
auto_failback on
# ウォッチドック
watchdog /dev/watchdog
# クラスタノード
node www1 www2
# PING監視
ping 192.168.1.254
# 外部プログラム
respawn hacluster /usr/local/lib/heartbeat/ipfail
# クライアントAPIのアクセス制御
apiauth ipfail gid=haclient uid=hacluster
</div>

▼/etc/ha.d/ha.cf (www2)
<div class="file1"># ログ
logfile /var/log/ha-log
# 時間
keepalive 2
deadtime 10
warntime 10
initdead 120
# ハートビート
udpport 694
baud 19200
serial /dev/tty0
ucast eth1 10.0.0.1
# 自動フェイルバック
auto_failback on
# ウォッチドック
watchdog /dev/watchdog
# クラスタノード
node www1 www2
# PING監視
ping 192.168.1.254
# 外部プログラム
#respawn hacluster /usr/local/lib/heartbeat/ipfail
# クライアントAPIのアクセス制御
#apiauth ipfail gid=haclient uid=hacluster
</div>

www2の設定はwww1の設定とほぼ同じですが、ucastの設定と外部プログラムipfailの呼び出しがなくなっている部分が異なります。

<b>2. 共有リソースの設定</b>

それぞれのサーバの/etc/ha.d/haresourcesファイルを編集します。必ず両方のサーバのファイルが同一になるようにします。

▼/etc/ha.d/haresources (www1, www2)
<div class="file1">www1 192.168.0.3/24 httpd
</div>

これは、www1を稼動系として、httpdサービスを起動したい場合の設定です。VIP: 192.168.0.3を稼動系サーバに付与させる設定です。]]></description>
         <link>http://www.sensaba.net/senyo/2006/07/heartbeat_1.html</link>
         <guid>http://www.sensaba.net/senyo/2006/07/heartbeat_1.html</guid>
         <category>エンタープライズ</category>
         <pubDate>Wed, 05 Jul 2006 21:52:44 +0900</pubDate>
      </item>
            <item>
         <title>heartbeatのインストール</title>
         <description><![CDATA[heartbeatによるクラスタシステムを構築するには、稼動系サーバ、待機系サーバの2つのサーバにheartbeatというソフトウェアをインストールします。

1. libnetのコンパイル

まずlibnetをコンパイルします。パッケージを展開し、configureプログラムを実行します。
<div class="shell1">$ tar xvzf libnet.tar.gz
$ cd linbet
$ ./configure --prefix=/usr/local
</div>

makeを実行しコンパイルを行います。
<div class="shell1">$ make
$ su
# make install
</div>

2. heartbeatのコンパイル]]></description>
         <link>http://www.sensaba.net/senyo/2006/07/heartbeat.html</link>
         <guid>http://www.sensaba.net/senyo/2006/07/heartbeat.html</guid>
         <category>エンタープライズ</category>
         <pubDate>Wed, 05 Jul 2006 21:33:12 +0900</pubDate>
      </item>
            <item>
         <title>冗長構成</title>
         <description><![CDATA[NW機器を使用せずにLinuxサーバだけでサーバ冗長構成を実現する方法をいくつか紹介します。

1. DNS1を使用した冗長構成

DNSを利用して二台のWebサーバ冗長構成を実現します。

<img alt="redundancy-dynamicdns.gif" src="<$MTBlogURL$>images/redundancy-dynamicdns.gif">

監視サーバより二台のサーバのWebサービスを監視し、現在稼動しているサーバがダウンしたら、DNSのゾーンを更新することでサーバを切り替えます。

設定は簡単ですが、クライアントから見ると、DNSキャッシュの影響ですぐには切り替わらないことが欠点です。


2. ハートビートを利用した冗長構成

ハートビートを利用して二台のWebサーバ冗長構成を実現します。

heartbeatはクラスタリングを実現するためのソフトウェアであり、フリーで入手してRHEL3にインストールすることが可能です。2台のサーバでアクティブ・スタンバイ型のクラスタリングを実現し、サービス停止を防ぎます。

<img alt="redundancy-heartbeat.gif" src="<$MTBlogURL$>images/redundancy-heartbeat.gif">

2台のWebサーバのeth0（サービス側）にはそれぞれグローバルIPアドレスが振られており、バーチャルIP（VIP）としてもう一つグローバルIPアドレスを使用します。それぞれのサーバのeth1はハートビート送受信用にします。

通常の状態では、稼動系のWebサーバのeth0にVIPがついており、Webサーバが起動しています。待機系サーバのWebサーバは停止しています。

稼動系サーバについて次のような現象が起こったとき、待機系サーバのeth0にVIPがつけられ、Webサーバが起動します。
・Webサーバ停止
・ネットワークダウン
・サーバ停止

切替時間は1秒程度ですので、サービス断の時間がほとんどなくサービスを継続できる利点があります。
ただし、欠点としては、グローバルIPアドレスをもう一つ使用すること、eth1側も使用すること、設定がやや複雑になることがあげられます。]]></description>
         <link>http://www.sensaba.net/senyo/2006/03/post_15.html</link>
         <guid>http://www.sensaba.net/senyo/2006/03/post_15.html</guid>
         <category>エンタープライズ</category>
         <pubDate>Sat, 18 Mar 2006 19:10:46 +0900</pubDate>
      </item>
            <item>
         <title>フリー管理ツール</title>
         <description><![CDATA[LinuxですとCPU、メモリ、ディスク、プロセス、ネットワークといったシステム情報をコマンドで簡単に取得できますが、Windowsでも同様にコマンドまたはGUIで簡単にシステム情報を閲覧するためのツール群があります。

<a href="http://www.systeminternals.com/">Sysinternals freeware</a>
http://www.systeminternals.com/

Process Explorerを使用すれば、あるファイルを使用しているプロセスを見つけることもできます。]]></description>
         <link>http://www.sensaba.net/senyo/2006/03/post_14.html</link>
         <guid>http://www.sensaba.net/senyo/2006/03/post_14.html</guid>
         <category>Windows</category>
         <pubDate>Fri, 10 Mar 2006 14:13:20 +0900</pubDate>
      </item>
            <item>
         <title>rootkitの検出</title>
         <description><![CDATA[攻撃者がコンピュータに侵入した後によく利用するツール類をまとめたrootkitと呼ばれるツールキットがあります。rootkitは攻撃者の足跡を消し去り、バックドアを設置します。また、rootkit自体の存在を隠すために、psコマンドやlsコマンドなどのシステム自体を改ざんします。

rootkitには様々種類が存在するために、それらを手動で検出することは非常に困難ですが、chkrootkit を使うことにより自動的な検出ができます。現在のところ、chkrootkitでは60種類以上のrootkitを検出することができます。

詳細は以下のサイトを参照してください。
<a href="http://www.chkrootkit.org/">chkrootkit -- locally checks for signs of a rootkit</a>
http://www.chkrootkit.org/

1. インストール

上記のサイトより最新のソースをダウンロードしてインストールします。（一般ユーザ権限でもインストール可能です。）
<div class="shell1">$ tar zxvf chkrootkit.tar.gz
$ cd chkrootkit-0.46a
$ su
# make sense
# cp ./chkrootkit /usr/local/bin/
</div>

chkrootkitプログラムが作業ディレクトリ内に出来上がります。コマンドから実行しやすいように、/usr/local/binディレクトリにコピーしておくとよいでしょう。

2. chkrootkitの実行

root権限で実行します。
<div class="shell1"># chkrootkit
ROOTDIR is `/'
Checking `amd'... not infected
Checking `basename'... not infected
Checking `biff'... not found
Checking `chfn'... not infected
Checking `chsh'... not infected
Checking `cron'... not infected
Checking `date'... not infected
（省略）
...
</div>

rootkitが検出された場合は、「INFECTED」と表示されます。

3. cronで実行

chkrootkitをcronに登録して定期的に実行させます。
また、実行結果を記録するとともに、rootあてにメールを送信します。

/etc/cron.dailyディレクトリにchkrootkitを実行するシェルスクリプト /etc/cron.daily/chkrootkitを作成します。
▼/etc/cron.daily/chkrootkit
<div class="file1">#!/bin/sh
/usr/local/bin/chkrootkit > /var/log/chkrootkit.log
grep "INFECTED" /var/log/chkrootkit.log | mail -s "chkrootkit log" root
chmod 600 /var/log/chkrootkit.log
</div>

スクリプトに実行権を付加します。
<div class="shell1"># chmod 755 chkrootkit
</div>
&nbsp;
<div class="note1">注1： "INFECTED"と出力されたら改ざんされている可能性が高いですが、誤って検知される事も多いようですので、必ずしも改ざんされているとは限りません。また、まだ一般的に知られていない新しい rootkit も検知される事はありませんので、検出されなかったら安全というわけではありません。
&nbsp;
注2： 攻撃者にrootkitそのものを改ざんされてしまったら意味がありません。chkrootkitをCD-ROMなどの書き込みできないメディアに移しておくとよいでしょう。
また、chkrootkitが呼び出すコマンドは、awk、cut、egrep、find、head、id、ls、netstat、ps、strings、sed、unameですが、これらのコマンドが汚染されている場合もありますので、汚染されていないと想定できるシステム（KNOPPIXなど、CDブートできるディストリビューション）で一時的にブートし、そのシステムのコマンドを使ってchkrootkitを実行するのがより望ましいでしょう。
</div>]]></description>
         <link>http://www.sensaba.net/senyo/2006/02/rootkit.html</link>
         <guid>http://www.sensaba.net/senyo/2006/02/rootkit.html</guid>
         <category>セキュリティ</category>
         <pubDate>Wed, 22 Feb 2006 15:02:59 +0900</pubDate>
      </item>
      
   </channel>
</rss>
