2008年09月05日
カーネルバージョンの確認
カーネルバージョンをコマンドで確認する場合は uname コマンドを使用します。
カーネルバージョンに関する情報は /proc/version ファイルに記録されています。
OSバージョンの確認
OSバージョンに関する情報は、Fedora Coreでは、/etc/fedora-release ファイルに、Red Hat Enterprise Linuxでは /etc/redhat-release ファイルに記録されています。
カーネルバージョンをコマンドで確認する場合は uname コマンドを使用します。
カーネルバージョンに関する情報は /proc/version ファイルに記録されています。
OSバージョンに関する情報は、Fedora Coreでは、/etc/fedora-release ファイルに、Red Hat Enterprise Linuxでは /etc/redhat-release ファイルに記録されています。
mysqlのユーザ設定あれこれです。
MySQL にログインして、ユーザーを作成します。
たとえば、ユーザー名を mtuser、パスワードを mtpasswd とする場合です。
rootユーザーで行います。
いったんmysqlを停止し--skip-grant-tablesオプションをつけてmysqlを起動し、パスワードを変更します。
その後mysqlを停止し、通常の方法で起動させます。
サーバ接続の冗長化には、NICチーミングと呼ばれる、NICを冗長化させる障害対策手法がとられます。NICチーミングには大別して次の三つがあります。
①NICテイク・オーバー
②イーサネット・チャネル
③スパニング・ツリー・プロトコル(STP)
①NICテイク・オーバー
二つのNICをそれぞれ二つのスイッチに接続する構成。
アクティブのNICが障害を検知するとバックアップ側にネットワーク経路を切り替える仕組みです。ネットワーク経路を二つ設けることができ、経路の冗長化は可能ですが、二つの経路を同時に利用して負荷を二つのリンクに分散することができません。
②イーサネット・チャネル
二つのNICを一つのスイッチに接続する構成。
スイッチとのチャネル・リンクを構成します。一つのリンク、NICが障害となった場合に即時に片チャネル運用が可能であり、またリンクのアグリゲーション機能によりリンクへの負荷を両リンクに分散させることが可能です。しかし、同一のスイッチ内での接続を前提としているため、複数のネットワーク経路を作ることはできず、スイッチが単一障害点になってしまいます。
③スパニング・ツリー・プロトコル(STP)
二つのNICをそれぞれ二つのスイッチに接続する構成。
サーバが1台のスイッチと同様に動作し、バックアップ側のNICポートをブロッキング状態にすることで経路冗長を図る方式です。しかし、スパニング・ツリー・プロトコルを用いるために切替時間に50秒以上かかってしまう上に経路の分散もできません。
以上の三つの方式を簡単に表にまとめてみました。
|冗長化|負荷分散|切替時間|
①| ○ | × | ○ |
②| × | ○ | ○ |
③| ○ | × | × |
postfixでのサブミッションポート(submission port)対応はとても簡単です。
/etc/postfix/master.cfファイルを編集し、コメントアウトされているsubmissionポートを有効にします。
▼/etc/postfix/master.cf
/etc/servicesファイルを編集し、サービス一覧にサブミッションポートを追加しますが、デフォルトですでに追加されています。
▼/etc/services
postfixを再起動します。
Outbound Port 25 Blocking(OP25B)対策として、外部メールサーバへの接続はサブミッションポート(submission port; Port587)を使用します。メールサーバ側でPort587を受け付けるようにしなければいけませんが、設定をするのが不安という場合には、とりあえず手っ取り早い対策として、iptablesでPort587をPort25に変換します。
■ サービス監視スクリプト
▼/usr/local/bin/check_active
■ハートビートの起動
稼動系のサーバと待機系のサーバの両方を起動します。
■起動確認
heartbeatを起動するとwww1にVIPの設定が行われます。
また、httpdサービスも自動的に開始されています。
www2ではhttpdは起動されません。
■フェイルオーバーの確認
稼動系サーバを強制的にフェイルオーバーさせて正しく待機系サーバに切り替わるかを確認します。強制的に待機系サーバに切り替えるには、www1でheartbeatサービスを停止します。
正しく設定が行われていれば、VIPとサービスが待機系サーバに引き継がれます。
www2にVIPが設定されていることを確認します。
また、httpdサービスも自動的に開始されています。
■フェイルバックの確認
今度は稼動系サーバを復活させてフェイルバック動作を確認します。www1のheartbeatサービスと起動します。
www1にVIPが設定されていることと、httpdプロセスが起動していることを確認します。
■heartbeatの自動起動
■サービスの自動起動の停止
/etc/ha.d/haresourcesファイルに登録したサービスのうち、システムの自動起動の設定が行われているサービスがあれば、自動起動の対象から削除する必要があります。ここでは、Webサーバを冗長化するためhttpdをheartbeatの管理にしていますので、httpdの自動起動を停止しておく必要があります。
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とします。
1. クラスタの設定
それぞれのサーバの/etc/ha.d/ha.cfファイルを編集します。デフォルトではほとんどの行がコメントアウトされていますので、必要に応じてコメントを外し設定します。
▼/etc/ha.d/ha.cf (www1)
▼/etc/ha.d/ha.cf (www2)
www2の設定はwww1の設定とほぼ同じですが、ucastの設定と外部プログラムipfailの呼び出しがなくなっている部分が異なります。
2. 共有リソースの設定
それぞれのサーバの/etc/ha.d/haresourcesファイルを編集します。必ず両方のサーバのファイルが同一になるようにします。
▼/etc/ha.d/haresources (www1, www2)
これは、www1を稼動系として、httpdサービスを起動したい場合の設定です。VIP: 192.168.0.3を稼動系サーバに付与させる設定です。
heartbeatによるクラスタシステムを構築するには、稼動系サーバ、待機系サーバの2つのサーバにheartbeatというソフトウェアをインストールします。
1. libnetのコンパイル
まずlibnetをコンパイルします。パッケージを展開し、configureプログラムを実行します。
makeを実行しコンパイルを行います。
2. heartbeatのコンパイル
NW機器を使用せずにLinuxサーバだけでサーバ冗長構成を実現する方法をいくつか紹介します。
1. DNS1を使用した冗長構成
DNSを利用して二台のWebサーバ冗長構成を実現します。

監視サーバより二台のサーバのWebサービスを監視し、現在稼動しているサーバがダウンしたら、DNSのゾーンを更新することでサーバを切り替えます。
設定は簡単ですが、クライアントから見ると、DNSキャッシュの影響ですぐには切り替わらないことが欠点です。
2. ハートビートを利用した冗長構成
ハートビートを利用して二台のWebサーバ冗長構成を実現します。
heartbeatはクラスタリングを実現するためのソフトウェアであり、フリーで入手してRHEL3にインストールすることが可能です。2台のサーバでアクティブ・スタンバイ型のクラスタリングを実現し、サービス停止を防ぎます。

2台のWebサーバのeth0(サービス側)にはそれぞれグローバルIPアドレスが振られており、バーチャルIP(VIP)としてもう一つグローバルIPアドレスを使用します。それぞれのサーバのeth1はハートビート送受信用にします。
通常の状態では、稼動系のWebサーバのeth0にVIPがついており、Webサーバが起動しています。待機系サーバのWebサーバは停止しています。
稼動系サーバについて次のような現象が起こったとき、待機系サーバのeth0にVIPがつけられ、Webサーバが起動します。
・Webサーバ停止
・ネットワークダウン
・サーバ停止
切替時間は1秒程度ですので、サービス断の時間がほとんどなくサービスを継続できる利点があります。
ただし、欠点としては、グローバルIPアドレスをもう一つ使用すること、eth1側も使用すること、設定がやや複雑になることがあげられます。
LinuxですとCPU、メモリ、ディスク、プロセス、ネットワークといったシステム情報をコマンドで簡単に取得できますが、Windowsでも同様にコマンドまたはGUIで簡単にシステム情報を閲覧するためのツール群があります。
Sysinternals freeware
http://www.systeminternals.com/
Process Explorerを使用すれば、あるファイルを使用しているプロセスを見つけることもできます。
攻撃者がコンピュータに侵入した後によく利用するツール類をまとめたrootkitと呼ばれるツールキットがあります。rootkitは攻撃者の足跡を消し去り、バックドアを設置します。また、rootkit自体の存在を隠すために、psコマンドやlsコマンドなどのシステム自体を改ざんします。
rootkitには様々種類が存在するために、それらを手動で検出することは非常に困難ですが、chkrootkit を使うことにより自動的な検出ができます。現在のところ、chkrootkitでは60種類以上のrootkitを検出することができます。
詳細は以下のサイトを参照してください。
chkrootkit -- locally checks for signs of a rootkit
http://www.chkrootkit.org/
1. インストール
上記のサイトより最新のソースをダウンロードしてインストールします。(一般ユーザ権限でもインストール可能です。)
chkrootkitプログラムが作業ディレクトリ内に出来上がります。コマンドから実行しやすいように、/usr/local/binディレクトリにコピーしておくとよいでしょう。
2. chkrootkitの実行
root権限で実行します。
rootkitが検出された場合は、「INFECTED」と表示されます。
3. cronで実行
chkrootkitをcronに登録して定期的に実行させます。
また、実行結果を記録するとともに、rootあてにメールを送信します。
/etc/cron.dailyディレクトリにchkrootkitを実行するシェルスクリプト /etc/cron.daily/chkrootkitを作成します。
▼/etc/cron.daily/chkrootkit
スクリプトに実行権を付加します。
コンピュータが不正アクセスの被害を受け、システムが改ざんされてしまった場合に、改ざんされたファイルを調査する方法として、RPMパッケージの改ざん検出をする方法があります。
RPMパッケージをインストールする時には、ファイルすべてのMD5チェックサムを保存しています。また、ファイルのサイズ、ユーザー、グループ、モード、更新時刻などについても保存しています。これらの情報を用いて、変更が加えられていないか調べることができます。rpmコマンドで-Vオプションを使用して調査します。
ここでは試しにWEBサーバ(httpd)やメールサーバ(sendmail)など、いくつかのパッケージについて調べてみます。
インストール時から変更されているファイルについて、8個の文字と属性マークの形式で変更されている内容が出力されます。
文字の意味
属性マークの意味
文字の部分で、". "(ピリオド) はテストを通過した こと意味し、"?" (クエスチョンマーク) はテストが実施されなかった (すなわち、ファイルパーミッションにより読み込めなかった) ことを意味しています。
オプションをつけることによって検証結果を絞り込むことができます。設定ファイルなどのように管理者によって変更されたファイルを除外することができます。次はそれらのオプションの一部です。
すべてのパッケージについて検証を行う場合は次のようにします。
この出力結果をファイルにリダイレクトして記録しておくとよいでしょう。
rsyncは、rshやsshを使ったファイル転送をサポートしています。環境によっては、rsyncのプロトコル(TCP873番ポート)を使用した通信ができない場合がありますが、そのような場合でもsshが許可されていればrsyncを利用することができます。
sshを使ってファイル転送を行うには、次のようにrsyncのコマンドを指定します。
(1)と(2)はサーバへファイルをアップロードする場合、(3)と(4)はサーバからファイルをダウンロードする場合で、それぞれどちらの指定方法でも同じです。
サーバ(192.168.0.10)からデータディレクトリをクライアントのbackupディレクトリに同期転送します。
rsyncサーバはスーパーサーバ配下で動作するため、tcp_wrapperによるアクセス制御が可能です。rsyncサーバへのアクセス制御設定は、rsyncd.confファイルで行うこともできますが、rsync自体のセキュリティホールが発生した場合などを考慮すると、スーパーサーバでのアクセス制御が望ましいです。
/etc/hosts.allow と /etc/hosts.deny を利用してアクセス制御を行います。
まず、すべての接続を拒否する設定をします。
▼/etc/hosts.deny
次に、接続を許可するホストのホスト名またはIPアドレスを記述します。
▼/etc/hosts.allow
rsync はネットワーク経由でファイルの同期を取るプログラムです。rsync は独特のアルゴリズムにより、遠隔にあるファイルとの同期を最速で実現する方法を使っています。rcpやscpが必ずファイルやディレクトリ全体を扱うのに対して、rsyncではファイルやディレクトリの差分だけを扱うことができるため、効率よく同期を取ることができます。そのため、ファイルやディレクトリのバックアップや、複数のサーバ間でのデータの同期など、広い用途で使われています。rsyncはTCP873番ポートを使用して独自プロトコルで通信を行いますが、sshやrshなどのセッション上で動作させることも可能です。
RHEL3ではrsyncがデフォルトでインストールされています。
バージョン
接続先サーバA(192.168.0.10)から接続元クライアントB(192.168.0.20)に標準のWEBディレクトリを同期転送することを仮定して設定方法を説明します。
1. 設定ファイル作成
接続先サーバAに /etc/rsyncd.conf ファイルを作成します。
(1) rsyncサーバ全体に対するグローバル設定と呼ばれる部分です。ここでは、サーバ全体に対してapacheの実行権限と同じ権限で動作するように指定しています。ユーザ権限の設定は以下の各モジュール内で行うこともできます。
(2) "[]"で囲まれた名称をモジュール名と呼び、それ以下にモジュールごとの設定を行います。
(3) 同期対象のディレクトリを指定します。
(4) クライアントがモジュールの一覧を表示したときに指定部分が表示されます。
(5) ここでは、サーバのデータをクライアントに同期しますので、サーバ側へのデータの書き込みを禁止しています。
(6) 指定のIPアドレスのホストからの接続のみを許可しています。ただし、アクセス制御はスーパーサーバで行うほうが望ましいです。
2. 接続先サーバAとネットワーク側のファイアウォール設定
rsyncはTCP873番ポートを使用しますので、接続先サーバAまたはネットワーク側でファイアウォールが存在している場合には、適切な設定変更を行い、クライアントBからサーバAのTCP873番ポートに対するアクセスを可能な状態にします。
3. 接続
rsyncのコマンド使用法です。
サーバAからWEBコンテンツをクライアントBのhtml_contentsディレクトリに同期転送します。ここでは、本記事の差分だけ同期転送されます。
POP3/IMAP4サーバでもSSLサポートをしており、通常リクエストとは別に、それぞれ995, 993番ポートでリクエストを待ち受けます。
RHEL3ではデフォルトでUW IMAPがインストールされていますが、SSLサポート機能が組み込まれていますので、サービスを有効化するだけで、簡単にSSL対応にさせることができます。
バージョン
1. 証明書の作成
SSL対応のPOP3/IMAP4サーバを使用する場合には証明書が必要です。ただし、HTTPSのように認証局発行のものである必要はなく自己署名の付いたもので十分です。
作成された証明書は /usr/share/ssl/certs/ に置くことになっています。このディレクトリには、すでにダミーファイルが置かれていてこのままでも使用できないことはないですが、念のため自己署名の証明書を作成します。ipop3sd.pemがPOP3のための証明書、imapsd.pemがIMAP4のために証明書です。
2. サービスの起動
SSL対応のPOP3/IMAP4サービスを起動します。
3. クライアントから接続
クライアントからPOP3の場合はサーバの995番ポートに、IMAP4の場合はサーバの993番ポートに接続します。証明書が公的なものでない場合は、警告が出る場合がありますが無視してください。
なお、サーバおよびネットワークでファイアウォールを導入している場合は、上記のポートへの接続を許可しておいてください。