ハウルが動く城を使って荒地の魔女やサリマン先生の脅威から巧みに身を隠したように、サーバ管理者もセキュリティを強化していろいろな脅威からサーバを守らないといけません。 ハウルは魔法陣を用いて強力に守られた動く城を構築しました。 同様にサーバ管理者も強力なアプリケーションやコマンド群を駆使して頑丈なサーバを構築しないといけません。 構築が終われば運用となります。そうなるとネットワークを介した脅威が考えられます。 自分の管理するサーバに対して、どこかセキュリティホールになっているポートがないかといったアクセスが頻繁にあります。 ハウルはそういう時、ドアのダイヤルを回して出入り口を切り替えるようにして追っ手を惑わせていました。 サーバ管理者もまた、不要なポートは閉じて脅威を未然に防がないといけません。
ハウルが動く城を使って荒地の魔女やサリマン先生の脅威から巧みに身を隠したように、サーバ管理者もセキュリティを強化していろいろな脅威からサーバを守らないといけません。
ハウルは魔法陣を用いて強力に守られた動く城を構築しました。 同様にサーバ管理者も強力なアプリケーションやコマンド群を駆使して頑丈なサーバを構築しないといけません。
構築が終われば運用となります。そうなるとネットワークを介した脅威が考えられます。 自分の管理するサーバに対して、どこかセキュリティホールになっているポートがないかといったアクセスが頻繁にあります。
頑丈なシステムづくりを実現するには、なんと言っても構造がシンプルであること!(Simple is the best!) これに尽きます。 複雑になればなるほど、工程が多くなればなるほど人間の把握しきれないところに弱点が潜む可能性が高くなります。 したがってアクセス制御・ファイヤーウォールのたぐいでさえ複数入れる必要はなく、どれか一つを把握して使いこなせばいいということになります。 犬が自分のシッポを追い掛け回すような無駄な工程は要らないということです。 もしそれでサーバに侵入されたとしたら原因がはっきりしています。自分の設定ミスということです。だからこそ把握しきれるようにシンプルであるべきだと思います。 サーバに侵入されたらもうアウト、あとできることと言ったらネットワークケーブルを引き抜いて被害が他に及ぶのを防ぐくらいしかありません。 なので侵入された後の対処法を学ぶくらいなら、侵入されない為の予防策を学ばないといけません。 最低限、開いているポート(サーバがアクセス受け入れ状態)は全て把握していないといけないことになります。そうすれば攻撃を受けた後に「こんなポートが開いていたなんて知らなかった」ということがなくなります。
頑丈なシステムづくりを実現するには、なんと言っても構造がシンプルであること!(Simple is the best!)
これに尽きます。
複雑になればなるほど、工程が多くなればなるほど人間の把握しきれないところに弱点が潜む可能性が高くなります。
したがってアクセス制御・ファイヤーウォールのたぐいでさえ複数入れる必要はなく、どれか一つを把握して使いこなせばいいということになります。
犬が自分のシッポを追い掛け回すような無駄な工程は要らないということです。
もしそれでサーバに侵入されたとしたら原因がはっきりしています。自分の設定ミスということです。だからこそ把握しきれるようにシンプルであるべきだと思います。
サーバに侵入されたらもうアウト、あとできることと言ったらネットワークケーブルを引き抜いて被害が他に及ぶのを防ぐくらいしかありません。 なので侵入された後の対処法を学ぶくらいなら、侵入されない為の予防策を学ばないといけません。
▼ どのOSをインストールする? まずPC−UNIX(Linux, FreeBSD)をインストールします。 タダなのでサポートがなく少々不便ではありますが、これを逆手に取ってプラス思考を加えればサーバに関する技術が身につくってなもんですよ。 そしてできるだけ最新の安定版を入れます。(セキュリティ&対応デバイス) 重大なセキュリティホールが発見された時はすぐにパッチを当てるとかできたらカッコいいです。 ▼ パーティション分け 次にブチ当たる問題がパーティションをどう分けるかになります。 よくスワップを杓子定規的にメモリの2倍にしてるケースがありますが、これはメモリが128MB程度の時代までの話でGB単位のメモリを積むことができるようになった今は、スワップさせたら負けだと思います。 とは言ってもスワップを必ず作らないといけないOS&バージョンもあったりするのでそういう時は最小限(2MBとか?)確保しておくしかないですね。ページングの関係でもっと確保していないと処理がもたつくような話もありますが知ったこっちゃありません。 とりあえず以下のような切り分け ファイルシステム容量説明 /1GBOS起動の大事な部分 /tmp1GB一時ファイル用に使われる領域は/とは切り分けた方がよさそう swap―できればメモリを十分に搭載して作らない方向で /var20GB想定されるログの最大容量分 /usr残り全部アプリケーション領域 /は300MB程度確保すればイケるとどこかで聞いた事ありますが、今はディスクも大容量なのでGB単位で割り当てて大味に攻めたいと思います。/bootも切り分けた方がいいと言う人もいるみたいです。 /tmpはいちばん大事そうな/と切り分けることで一時ファイル作成が頻発しても/に影響が及ばないように甘やかす方向でいきます。 頻繁にログ書き込みの発生する/varを真っ先に割り当てて、ハードディスクの最も書き込み速度の速そうな最内周を確保させる手法とかありましたが、今のディスク内部構造は複雑そうなので出たとこ勝負、それよりも今は安価で速くて大容量のSATA2あたりを使っておけばいいかなという感じですね。 残り全部を/usrに割り当てるとだいたい数十GB〜数百GB程度は確保できると思います。インストール直後の時点でアプリケーションに2・3GB使っているとしてそれ以降アプリケーションを追加インストールしたところでそんなには容量を使うことにはならないです。 では、どうして想定される最大容量を/usrに割り当てたかは以下のような理由からです。 /usrを最後に多く割り当てる理由 /usrの区分説明 アプリケーション置き場だいたい2・3GB止まり。サーバなのにXウィンドウまでインストールしたとしてもこれの倍程度には収まる ユーザのホーム領域/home以下に存在する(システム)ユーザが個別に使う領域の実体は/usr/homeにある Webのコンテンツ置き場/usr/local/www辺りに置かれるWebコンテンツは最終的にどれくらいの容量にまでなるか不確定 という理由から、将来膨れ上がるかも知れないデータ量にできるだけ対応するために/usrは多めに確保しておきます。
まずPC−UNIX(Linux, FreeBSD)をインストールします。
タダなのでサポートがなく少々不便ではありますが、これを逆手に取ってプラス思考を加えればサーバに関する技術が身につくってなもんですよ。
そしてできるだけ最新の安定版を入れます。(セキュリティ&対応デバイス)
重大なセキュリティホールが発見された時はすぐにパッチを当てるとかできたらカッコいいです。
次にブチ当たる問題がパーティションをどう分けるかになります。
よくスワップを杓子定規的にメモリの2倍にしてるケースがありますが、これはメモリが128MB程度の時代までの話でGB単位のメモリを積むことができるようになった今は、スワップさせたら負けだと思います。
とは言ってもスワップを必ず作らないといけないOS&バージョンもあったりするのでそういう時は最小限(2MBとか?)確保しておくしかないですね。ページングの関係でもっと確保していないと処理がもたつくような話もありますが知ったこっちゃありません。
とりあえず以下のような切り分け
/usrを最後に多く割り当てる理由
という理由から、将来膨れ上がるかも知れないデータ量にできるだけ対応するために/usrは多めに確保しておきます。
▼ 自分の使うユーザ作成 インストール直後、もしroot以外のユーザを作成していなければまず自分の使うユーザアカウントを作成します。 ユーザ名「admin」とかどうでしょう。いかにも管理者って感じでカッコいいです! でも実はセキュリティのことを考えるとユーザ名として失格(参照)ですが、最初のうちは使いやすい名前重視でもしょうがないでしょう。 ユーザ作成方法 ▼ リモート接続できる環境を整える サーバにOSをインストールしたらあとは直接サーバを触ることはほとんどありません。細かな設定はリモートで接続して行います。 リモートで接続するために必要な物は「ハブ」一個と「LANケーブル(カテゴリー5)」2本です。 通信する時はネットワークカードに割り振られたIPアドレスで通信相手を見分ける(MACアドレスのことはここでは触れない)ので、互いのネットワークカードにはTCP/IP通信するときのIPアドレスが割り当てられている必要があります。 ネットワークの設定 次にリモートPC内に、SSHで接続するためのソフトが入ってなければこれをインストールする。(Tera Term) SSH(セキュアーシェル)は、通信の際に暗号路(通信経路を暗号化)を確立してくれます。以前広く使われてた暗号化無しのtelnetに取って代わるものです。 ▼ SSHでリモート接続 SSHクライアント(Tera Termなど)を立ち上げて、サーバに割り振ったIPアドレスを入力し、その22番ポートに対して接続を試みる。 login: ■ 無事にloginの応答があればユーザ名を入力してEnterキーを、次にpasswordを聞いてくるので設定したとおりに入力してEnterキーを押すとこれでSSH接続が完了となる。あとはまるでサーバ内を自由に行き来するかのように操作できるようになる。 login時に表示されるメッセージは、/etc/motdの編集で自由に変えられる。 ※ちなみにrootでのSSH接続は通常は拒否する設定になっている。 SSH接続できない場合はコチラへ ▼ アプリケーション追加 FreeBSDならportsを、Linuxならrpmコマンドなどで追加します。 自分の使いやすいエディタなんかはこの段階で追加しておきたいですね。クォータやクーロンの設定、vipwコマンドなんかも環境変数EDITORに設定されたエディタが起動されるので使いやすいエディタは必須です。 圧縮ファイルを落としてきて手動でインストールする原始的な方法もあります。 ▼ その他のユーザ作成 rootおよび自分が使う一般ユーザは既に作成済みなので、あとはその他にサーバを利用するユーザがいれば作成します。 サーバは自分ひとりだけで使うことよりも複数人(マルチユーザ)で使うことの方が多いのでユーザ管理はサーバ管理者にとってメインの仕事の一つになります。 ユーザ作成方法 ▼ 環境設定 環境設定はユーザ各自が自分の使いやすいように変えて構わない部分です。 各ユーザのホームディレクトリにあるドットで始まるファイルが設定ファイルになります。 例えば自分の使い慣れたシェルによって環境設定ファイルも違ってきます。 [~/.cshrc] ...Cシェル使用者 alias vi jvim3 alias ls ls -aF alias rm rm -i alias cp cp -i alias mv mv -i alias elog tail -f /var/log/error_log alias alog tail -f /var/log/access_log alias mlog tail -f /var/log/maillog alias msg tail -f /var/log/messages setenv EDITOR vi setenv PAGER more setenv BLOCKSIZE K setenv LANG ja_JP.eucJP umask 22 set path = (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin /usr/X11R6/bin $HOME/bin) set prompt="[`whoami`@%c]% " [~/.shrc] ...Bourneシェル使用者 alias vi='jvim3' alias ls='ls -aF' alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' alias elog='tail -f /var/log/error_log' alias alog='tail -f /var/log/access_log' alias mlog='tail -f /var/log/maillog' alias msg='tail -f /var/log/messages' PS1="[`whoami`@`hostname -s`]% " export LANG=ja_JP.eucJP [~/.vimrc] ...viエディタ使用者 " set autoindent set tabstop=4 set shiftwidth=4 set nobackup set nojkanaconv " ab alpha abcdefghijklmnopqrstuvwxyz ▼ カーネル再構築 カーネルの再構築(リビルド)をしないと使いたい機能が使えない! といった場合にはする必要がありますが、 基本的に今は再構築しないでパラメータ値を設定して起動時に値を反映させてチューニングすることができます。 再構築したところでなにか軽くなったみたいな体感はないと思います。暇ならやってみるのもいいか程度ですが私達には残された時間がありません。 [/boot/loader.conf]の例 userconfig_script_load="YES" kern.maxusers="384" kern.ipc.nmbclusters="32768" autoboot_delay="3" [/etc/sysctl.conf]の例 vm.defer_swapspace_pageouts=1 vm.disable_swapspace_pageouts=1 net.inet.icmp.icmplim=400 net.inet.tcp.delayed_ack=0 net.inet.tcp.inflight_enable=1 net.inet.tcp.rexmit_min=10 net.inet.tcp.rexmit_slop=10 net.inet.tcp.msl=10000 ▼ パーティションテーブルのバックアップ 余力があれば行う(fdiskコマンドほか)
インストール直後、もしroot以外のユーザを作成していなければまず自分の使うユーザアカウントを作成します。
ユーザ名「admin」とかどうでしょう。いかにも管理者って感じでカッコいいです!
でも実はセキュリティのことを考えるとユーザ名として失格(参照)ですが、最初のうちは使いやすい名前重視でもしょうがないでしょう。
ユーザ作成方法
サーバにOSをインストールしたらあとは直接サーバを触ることはほとんどありません。細かな設定はリモートで接続して行います。
リモートで接続するために必要な物は「ハブ」一個と「LANケーブル(カテゴリー5)」2本です。
通信する時はネットワークカードに割り振られたIPアドレスで通信相手を見分ける(MACアドレスのことはここでは触れない)ので、互いのネットワークカードにはTCP/IP通信するときのIPアドレスが割り当てられている必要があります。
ネットワークの設定
次にリモートPC内に、SSHで接続するためのソフトが入ってなければこれをインストールする。(Tera Term) SSH(セキュアーシェル)は、通信の際に暗号路(通信経路を暗号化)を確立してくれます。以前広く使われてた暗号化無しのtelnetに取って代わるものです。
SSHクライアント(Tera Termなど)を立ち上げて、サーバに割り振ったIPアドレスを入力し、その22番ポートに対して接続を試みる。
無事にloginの応答があればユーザ名を入力してEnterキーを、次にpasswordを聞いてくるので設定したとおりに入力してEnterキーを押すとこれでSSH接続が完了となる。あとはまるでサーバ内を自由に行き来するかのように操作できるようになる。
login時に表示されるメッセージは、/etc/motdの編集で自由に変えられる。
※ちなみにrootでのSSH接続は通常は拒否する設定になっている。
SSH接続できない場合はコチラへ
FreeBSDならportsを、Linuxならrpmコマンドなどで追加します。
自分の使いやすいエディタなんかはこの段階で追加しておきたいですね。クォータやクーロンの設定、vipwコマンドなんかも環境変数EDITORに設定されたエディタが起動されるので使いやすいエディタは必須です。
圧縮ファイルを落としてきて手動でインストールする原始的な方法もあります。
rootおよび自分が使う一般ユーザは既に作成済みなので、あとはその他にサーバを利用するユーザがいれば作成します。
サーバは自分ひとりだけで使うことよりも複数人(マルチユーザ)で使うことの方が多いのでユーザ管理はサーバ管理者にとってメインの仕事の一つになります。
環境設定はユーザ各自が自分の使いやすいように変えて構わない部分です。 各ユーザのホームディレクトリにあるドットで始まるファイルが設定ファイルになります。
例えば自分の使い慣れたシェルによって環境設定ファイルも違ってきます。
カーネルの再構築(リビルド)をしないと使いたい機能が使えない! といった場合にはする必要がありますが、 基本的に今は再構築しないでパラメータ値を設定して起動時に値を反映させてチューニングすることができます。
再構築したところでなにか軽くなったみたいな体感はないと思います。暇ならやってみるのもいいか程度ですが私達には残された時間がありません。
余力があれば行う(fdiskコマンドほか)
▼ サーバの起動 起動は電源を入れれば自動的に進んでいくので特にやることはない。表示される文字を眺めるぐらいしかできない。 表示スクロールが速いので起動が終わった後に改めて起動ログを見るしかない。 % dmesg 起動時のログは/var/log/boot.logに残ってる場合もあります。 その他ログを見て起動時エラーが出てないか確認する。 /var/log/messagesを始めとするsyslog関連(/etc/syslog.confを見てログの振り分けを確認)をチェック ログの中にはバイナリ形式で保存されている/var/log/wtmpや/var/log/utmpがあるのでこれはwhoコマンドなどを使って見ることができる。 ユーザのログイン履歴を見る % who /var/log/wtmp 一通りログを見て一つもエラー・警告、不振な点がない状態であることを確認しておく。 見慣れないメッセージがあればとりあえずググる。 OS起動時に実行させたいスクリプトが用意されていなければ起動スクリプトを自作することになる。 簡単な起動スクリプト例 #!/bin/sh case $1 in start) /path/to/foo start && echo "food starting .." ;; stop) /path/to/foo stop && echo "food stopping .." ;; *) echo "Usage: `basename $0` {start|stop}" >&2 ;; esac 上記スクリプトは、"foo"というプログラムの常駐(デーモン)"food"を起動/停止させるためのごく簡単なシェルスクリプトになる。 Linuxなら/etc/rc.d/init.d/foodというファイル名で保存して実行権を与え、chkconfig --level 3 food onのようにしてランレベルごとの起動設定(リンク張り)を行う。 FreeBSDなら/usr/local/etc/rc.d/foo.shというファイル名で保存(拡張子を必ず.shにする)して実行権を与える。 OSは起動時に所定の場所に存在するスクリプトに引数"start"を渡して実行していく。 ▼ サーバの終了 サーバはノンストップで運用して、まるでサーバ管理者はなにもしてないんじゃないかと思わせるくらい安定稼動させつづけたいものだが、移設などがあれば電源を落とさざるを得ない。 % sync % sync % sync % halt メモリ上にバッファされているすべてのデータをディスクに書き込むよう、まずsyncを3回ぐらいブチかます。 「電源が切れる状態になりました。」みたいなメッセージが出て、もし電源を切らずにどれかキーを押せば再起動される。 電源を落とす場合にはストンと落ちるまでボタンを長押しする。(機種によりけりなので元電源を引き抜く方が楽) syncを連打するのが面倒なら、内部でsyncしてくれているshutdownコマンドを使うとよい。 % shutdown -h now FreeBSDではAPMを有効にすることで、電源を完全に落とすことができる。 [/etc/rc.conf] apm_enable="YES" % shutdown -p now サーバの再起動はコチラ
起動は電源を入れれば自動的に進んでいくので特にやることはない。表示される文字を眺めるぐらいしかできない。
表示スクロールが速いので起動が終わった後に改めて起動ログを見るしかない。
起動時のログは/var/log/boot.logに残ってる場合もあります。
その他ログを見て起動時エラーが出てないか確認する。
/var/log/messagesを始めとするsyslog関連(/etc/syslog.confを見てログの振り分けを確認)をチェック
ログの中にはバイナリ形式で保存されている/var/log/wtmpや/var/log/utmpがあるのでこれはwhoコマンドなどを使って見ることができる。
ユーザのログイン履歴を見る
一通りログを見て一つもエラー・警告、不振な点がない状態であることを確認しておく。
見慣れないメッセージがあればとりあえずググる。
OS起動時に実行させたいスクリプトが用意されていなければ起動スクリプトを自作することになる。
上記スクリプトは、"foo"というプログラムの常駐(デーモン)"food"を起動/停止させるためのごく簡単なシェルスクリプトになる。
Linuxなら/etc/rc.d/init.d/foodというファイル名で保存して実行権を与え、chkconfig --level 3 food onのようにしてランレベルごとの起動設定(リンク張り)を行う。
FreeBSDなら/usr/local/etc/rc.d/foo.shというファイル名で保存(拡張子を必ず.shにする)して実行権を与える。
OSは起動時に所定の場所に存在するスクリプトに引数"start"を渡して実行していく。
サーバはノンストップで運用して、まるでサーバ管理者はなにもしてないんじゃないかと思わせるくらい安定稼動させつづけたいものだが、移設などがあれば電源を落とさざるを得ない。
メモリ上にバッファされているすべてのデータをディスクに書き込むよう、まずsyncを3回ぐらいブチかます。
「電源が切れる状態になりました。」みたいなメッセージが出て、もし電源を切らずにどれかキーを押せば再起動される。 電源を落とす場合にはストンと落ちるまでボタンを長押しする。(機種によりけりなので元電源を引き抜く方が楽)
syncを連打するのが面倒なら、内部でsyncしてくれているshutdownコマンドを使うとよい。
FreeBSDではAPMを有効にすることで、電源を完全に落とすことができる。
サーバの再起動はコチラ
サーバを公開して世界中からアクセスしてもらうにはホスト名を付けなくても、グローバルなIPアドレスが割り振られていれば可能です。 ですがせっかく公開するからには企業名や扱う商品または個人的に好きなフレーズなどが盛り込まれたホスト名にしたいものです。 こういう場合はまずレジストラ(お名前.comやバリュードメインなど)へ行き、まだ他で使われていないドメインを取得します。 他で使われているかどうかは「whoisドメイン検索」でチェックします。 無事に自分のドメインを取得できたら、次は自分の公開するサーバがどのDNSサーバを使うかで選択が分かれます。 ▼ 自分でDNSサーバを構築する場合 「example.com」というドメインを取得したとすると、DNSサーバに「ns.example.com」や「dns.example.com」みたいなホスト名を付けます。 "ns"や"dns"といったサブドメイン部分は自分で自由に決められる部分です(63文字以内?)。 このホスト名と自分の所有するグローバルなIPアドレスを関連付けるためにレジストラの管理画面でNSレコードとAレコード設定します。 あとは最大24時間(実際は数時間程度?)待てば反映されて、「example.com」ドメイン関係のアクセスが自分のDNSサーバに来るようになります。 サブドメインは自由に付けられるので自分のDNSサーバ設定でメールサーバを「mail.example.com」に、ウェブサーバを「www.example.com」に、FTPサーバを「ftp.example.com」に・・ などいくつでも好きに付けられます。 「mitsumeautosunaonioshaberidekinai.example.com」のようなホスト名でも問題ないかも知れません。 グローバルなIPアドレスは、固定IPアドレスが望ましいです。プロバイダに接続する度に違うIPアドレスが動的に割り振られるものだとダイナミックDNSを使う手もありますが、やはりなにかと不便です。 ▼ レジストラ所管のDNSサーバを利用する場合 初期設定ではレジストラ所管のDNSが設定されていると思います。 管理画面で使うホスト名の分をAレコード設定します。メールサーバはMXレコード設定もすることになります。
サーバを公開して世界中からアクセスしてもらうにはホスト名を付けなくても、グローバルなIPアドレスが割り振られていれば可能です。 ですがせっかく公開するからには企業名や扱う商品または個人的に好きなフレーズなどが盛り込まれたホスト名にしたいものです。
こういう場合はまずレジストラ(お名前.comやバリュードメインなど)へ行き、まだ他で使われていないドメインを取得します。 他で使われているかどうかは「whoisドメイン検索」でチェックします。
無事に自分のドメインを取得できたら、次は自分の公開するサーバがどのDNSサーバを使うかで選択が分かれます。
「example.com」というドメインを取得したとすると、DNSサーバに「ns.example.com」や「dns.example.com」みたいなホスト名を付けます。 "ns"や"dns"といったサブドメイン部分は自分で自由に決められる部分です(63文字以内?)。
このホスト名と自分の所有するグローバルなIPアドレスを関連付けるためにレジストラの管理画面でNSレコードとAレコード設定します。
あとは最大24時間(実際は数時間程度?)待てば反映されて、「example.com」ドメイン関係のアクセスが自分のDNSサーバに来るようになります。
サブドメインは自由に付けられるので自分のDNSサーバ設定でメールサーバを「mail.example.com」に、ウェブサーバを「www.example.com」に、FTPサーバを「ftp.example.com」に・・ などいくつでも好きに付けられます。 「mitsumeautosunaonioshaberidekinai.example.com」のようなホスト名でも問題ないかも知れません。
グローバルなIPアドレスは、固定IPアドレスが望ましいです。プロバイダに接続する度に違うIPアドレスが動的に割り振られるものだとダイナミックDNSを使う手もありますが、やはりなにかと不便です。
初期設定ではレジストラ所管のDNSが設定されていると思います。
管理画面で使うホスト名の分をAレコード設定します。メールサーバはMXレコード設定もすることになります。
▼ DNSサーバ DNSは、ホスト名とIPアドレスの情報をメモリ上にデータベース化して持つことで、問い合わせに素早く応答します。 したがってひと昔・ふた昔前の古いマシンを使っても十分なパフォーマンスを発揮できるということになります。 安定稼動さえできればその辺の粗大ごみとして捨てられているようなマシンでも十分イケるでしょう。 設定で気をつけることは、再帰クエリを許可しないこと(recursion no)、 セカンダリーDNSを有する場合はゾーン転送を制限すること(allow-transfer) DNSサーバ構築 ▼ メールサーバ メール送信(転送)は認証の要らないバケツリレーなので、リレーを制限することがスパム対策になります。 スパム発信者はなんでもリレーしてくれる寛大な踏み台用サーバを探しています。 ここでは心を狭く持ち、渡ってきたバケツの水をぶち撒けるような設定にします。 メールサーバ構築 ▼ Webサーバ Webサーバのログは定期的に切り分けて古いものから削除していかないと膨れ上がってディスクスペースを圧迫してしまいます。 Webサーバ構築
DNSは、ホスト名とIPアドレスの情報をメモリ上にデータベース化して持つことで、問い合わせに素早く応答します。
したがってひと昔・ふた昔前の古いマシンを使っても十分なパフォーマンスを発揮できるということになります。 安定稼動さえできればその辺の粗大ごみとして捨てられているようなマシンでも十分イケるでしょう。
設定で気をつけることは、再帰クエリを許可しないこと(recursion no)、 セカンダリーDNSを有する場合はゾーン転送を制限すること(allow-transfer)
DNSサーバ構築
メール送信(転送)は認証の要らないバケツリレーなので、リレーを制限することがスパム対策になります。
スパム発信者はなんでもリレーしてくれる寛大な踏み台用サーバを探しています。 ここでは心を狭く持ち、渡ってきたバケツの水をぶち撒けるような設定にします。
メールサーバ構築
Webサーバのログは定期的に切り分けて古いものから削除していかないと膨れ上がってディスクスペースを圧迫してしまいます。
Webサーバ構築
ポート番号とサービス名の割り当ては、/etc/servicesファイルに記述されている。 ポート番号はIANAが定義/管理している。 ▼ ポート番号の大別 ポート番号説明 0 - 1023 well-known portと呼ばれ、root権限で使用される 1024 - 49151アプリケーションで主に使われる 49152 - 65535ユーザが自由に利用できる範囲 ポート番号は0番から65535番まである。 ▼ 押えておきたいポート一覧 ポート番号説明 tcp/20ftpファイル転送 tcp/21ftpコマンド操作 tcp,udp/22ssh tcp/23telnet tcp,udp/25smtp tcp,udp/53dns tcp,udp/80http tcp/110pop3 udp/123ntp tcp,udp/161snmp tcp,udp/443https udp/514syslog なお、pingコマンドやtracerouteコマンド(Windowsではtracert)でお馴染みのICMPというプロトコルにはポートというものはない。 IP(ネットワーク層レベル)による通信において、ネットワーク状況を事前に把握するためのもの ▼ 開いているポートを確認するコマンド % netstat -an ネットワーク設定に不備があると-nオプションを付けないで実行した場合、延々と待たされるので注意 [Linux] % nmap -sT localhost ポートスキャンを行う [FreeBSD] % sockstat -4l
ポート番号とサービス名の割り当ては、/etc/servicesファイルに記述されている。
ポート番号はIANAが定義/管理している。
ポート番号は0番から65535番まである。
なお、pingコマンドやtracerouteコマンド(Windowsではtracert)でお馴染みのICMPというプロトコルにはポートというものはない。 IP(ネットワーク層レベル)による通信において、ネットワーク状況を事前に把握するためのもの
▼ 開いているポートを確認するコマンド
ネットワーク設定に不備があると-nオプションを付けないで実行した場合、延々と待たされるので注意
ポートスキャンを行う
▼ 使ってないサーバを停止させる 前述のコマンドを使って、開いてるポートを確認します。 telnet(ポート番号23)などがもし動いていたら停止させます。 Linuxの場合は [/etc/xinetd.d/telnet] disable = yes yesに変更したらスーパーサーバの再起動 % /etc/rc.d/init.d/xinetd restart FreeBSDの場合は [/etc/inetd.conf] #telnet stream tcp nowait root /usr/libexec/telnetd telnetd コメントにしたらスーパーサーバの再起動 % /etc/rc.d/inetd restart または % kill -HUP `cat /var/run/inetd.pid` ▼ TCPWrapperでアクセス制限 インストール時にlibwrapオプション付きでコンパイルされたものはTCPWrapperでアクセス制限することになります。 多くはinetd(スーパーサーバ)で起動するものになります。 TCPWrapper制限に関係するファイルは「hosts.deny」と「hosts.allow」の2つ。 [/etc/hosts.deny] ...初期状態ではファイルが無い場合もある ALL: ALL [先頭にサービス名] : [制限する対象] の並びで指定する。 これで一旦はすべてを拒否することになる。すべてを拒否しておいて、次に許可設定を書いていく。 [/etc/hosts.allow] ALL: 127.0.0.1 [先頭にサービス名] : [許可する対象] の並びで指定する。 この例では、ローカルホストのみがすべてのサービスを使える設定になる。 更に細かい設定を加えていくと、 [/etc/hosts.allow] ALL: 127.0.0.1 sshd,ftpd,sendmail,qpopper: 192.168.0.2 sshd,ftpd,sendmail,qpopper: .myprovider.example.co.jp 192.168.0.2はサーバと同じLAN内にあるリモートPCといった感じで、もう一つはプロバイダー経由でサーバを利用するなどの場合 最後にTCPWrapperの設定内容をチェックするコマンドで確認します。 % tcpdchk -v その他書き方の例として以下のようなものがある。 sshd: 192.168.0. sshd: username@192.168.0.1 ALL: .example.com ALL: *.example.com sshd: 192.168.0.1,192.168.0.2
前述のコマンドを使って、開いてるポートを確認します。
telnet(ポート番号23)などがもし動いていたら停止させます。
Linuxの場合は
yesに変更したらスーパーサーバの再起動
FreeBSDの場合は
コメントにしたらスーパーサーバの再起動
インストール時にlibwrapオプション付きでコンパイルされたものはTCPWrapperでアクセス制限することになります。 多くはinetd(スーパーサーバ)で起動するものになります。
TCPWrapper制限に関係するファイルは「hosts.deny」と「hosts.allow」の2つ。
[先頭にサービス名] : [制限する対象] の並びで指定する。
これで一旦はすべてを拒否することになる。すべてを拒否しておいて、次に許可設定を書いていく。
[先頭にサービス名] : [許可する対象] の並びで指定する。
この例では、ローカルホストのみがすべてのサービスを使える設定になる。
更に細かい設定を加えていくと、
192.168.0.2はサーバと同じLAN内にあるリモートPCといった感じで、もう一つはプロバイダー経由でサーバを利用するなどの場合
最後にTCPWrapperの設定内容をチェックするコマンドで確認します。
その他書き方の例として以下のようなものがある。
▼ バックアップ バックアップの取り方や取る先はいろいろなパターンが考えられる。 同マシンの別ディスクにバックアップを取る場合はネットワークを使わないで済む分ハードルが低い。USB接続のバックアップ用ディスクを増設してそこに取るのが楽そう。 tarコマンド % tar -cf - from/ | tar -xpf - -C to/ fromディレクトリ以下をtoへバックアップ ネットワークを使わないで済むケースでは圧縮しないで送った方が効率がいい? rsyncコマンド % rsync -a from/ to/ fromディレクトリ以下をtoへバックアップ バックアップ機へ転送 バックアップ機を用意してローカルネットワークでつないだ場合は暗号化は不要なのでその分楽かと思いきや、ログイン認証とかもあるし結局やるならSSH認証+転送をやっておいた方がグローバルネットワーク経由にも対応できて手堅い。 ローカルネットワークでつないでバックアップするならいっそのことNFSマウントもありですね。 SSHを利用したバックアップを行う場合の下準備 まずはバックアップ機にバックアップ用ユーザを作成 % adduser rsyncman と、いきたいところですがバックアップ機側でも全ユーザ・グループのアクセス権に対応できるユーザじゃないとバックアップを取れません。 つまりバックアップ機側もrootを使うしかないということですね。 まずバックアップ機側のrootのSSH認証をコマンドのみ許可する設定にする。 [バックアップ機/etc/ssh/sshd_confの編集] % vi /etc/ssh/sshd_conf ... PermitRootLogin forced-commands-only ... % /etc/init.d/sshd restart sshdの再起動で設定変更が反映されます。 次はバックアップ元でSSH鍵を生成(パスフレーズなし) [バックアップ元でSSH鍵の作成] % ssh-keygen -t dsa -N "" % ssh-copy-id -i ~/.ssh/id_dsa.pub remote.example.com こうして作成したバックアップ元~/.ssh/id_dsa.pub内容を、ssh-copy-idコマンドでバックアップ機 /root/.ssh/authorized_keys2に追加している。 (これがauthorized_keysの場合もある) [バックアップ機/root/.ssh/authorized_keys2の編集] command="rsync --server -logDtprz . /path/to/backup/",from="192.168.0.1",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-dss AAAAFOOBAR... ssh-dssの前に使用コマンドおよび制限を追加 このコマンドの記述内容はrsyncを-vvオプション付きで実行してみないとわからない。 編集後はパーミッションが[600]になってなければchmod 600 authorized_keys2 あとはcronまたは/etc/rsyncd.conf設定でrsyncコマンドを定期実行させるようにすればよい。 [非圧縮でリモートへバックアップ] % rsync -a -e ssh /path/to/target/ remote.example.com:/path/to/backup/ 圧縮率の高いテキストファイル系が多い場合は以下のように圧縮したほうが転送効率がよさそう。 [圧縮でリモートへバックアップ] % rsync -az -e ssh /path/to/target/ remote.example.com:/path/to/backup/ 削除されたファイルがあればバックアップ側でも削除する(同期させる)場合には--deleteオプションを使う。 [同期させる] % rsync -az -e ssh --delete /path/to/target/ remote.example.com:/path/to/backup/ なんかここまでしなきゃいけないの?って感じですね。完全にミラー化していつでもスペアマシンとして待機させておくならここまで必要ですが、データ量がさほどないならとりあえずrootに暗号化したアーカイブの圧縮ファイルを作らせておいてメールに添付して送るなり一般ユーザが定期的に退避させるとかでもよさそうです。 それ以外だと、少し銭はかかりますがRAID5を導入して手抜きをするなんてどうでしょ ▼ 負荷を監視 サーバのどの部分に負荷がかかっているか推察するためのコマンドがある。 【CPU】 CPUの処理速度が追いついてるかどうか判断するためのコマンドです。 vmstatコマンド % vmstat 1 3 procs memory page disk faults cpu r b w avm fre flt re pi po fr sr mf0 in sy cs us sy id 1 1 0 50160 820012 81 0 0 0 74 0 0 176 1244 401 1 0 99 3 0 0 50368 819744 81 0 0 0 10 0 4 260 616 576 0 2 98 0 0 0 41540 825572 1667 0 0 0 2995 0 6 304 15889 642 14 2 85 プロセス、仮想メモリ、ディスク、トラップ、CPU の活動状況などについてカーネルが持っている統計情報を報告します 例として1秒間隔で3回表示させている。 先頭procsのr値は実行待ちのプロセス数です。搭載しているCPUの数x4以内にだいたい収まっていれば問題なしです。 cpuのus値はユーザタスクの実行時間、sy値はシステムタスクの実行時間、idはアイドル状態だった時間 uptimeコマンド % uptime 11:39pm up 66days, 2:11, 3 users, load averages: 1.68, 0.80, 0.52 本来はシステムの稼働時間を表示させるコマンドだが、CPUの処理待ち数を知ることもできる。 load averageは1分間 5分間 15分間で見た平均負荷を表している。 1分間で見ると瞬間的に上がる場合も多いので、私的には5分間平均の値がCPU数x4を超えることが多いとCPUの処理能力が足りてないかと topコマンド % top CPU使用率の高いプロセスから順に表示 psコマンド % ps aux USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND root 10 99.0 0.0 0 8 ?? RL 23 710 15884:44.33 [idle] root 0 0.0 0.0 0 0 ?? WLs 23 710 0:00.00 [swapper] root 1 0.0 0.0 772 356 ?? ILs 23 710 0:01.31 /sbin/init -- root 2 0.0 0.0 0 8 ?? DL 23 710 0:41.25 [g_event] root 3 0.0 0.0 0 8 ?? DL 23 710 0:46.25 [g_up] root 4 0.0 0.0 0 8 ?? DL 23 710 0:49.36 [g_down] root 144 0.0 0.1 1252 720 ?? Is 23 710 0:00.00 adjkerntz -i root 459 0.0 0.0 528 388 ?? Is 23 710 0:00.00 /sbin/devd root 507 0.0 0.1 1376 1016 ?? Ss 23 710 0:06.00 /usr/sbin/syslogd -l /var/ bind 575 0.0 0.5 6528 5688 ?? Ss 23 710 16:35.65 /usr/sbin/named -t /var/na root 687 0.0 0.3 3524 3000 ?? Is 23 710 0:35.62 /usr/sbin/sshd root 701 0.0 0.3 3496 2980 ?? Ss 23 710 0:12.19 sendmail: accepting connec smmsp 707 0.0 0.3 3384 2776 ?? Is 23 710 0:00.13 sendmail: Queue runner@00: root 713 0.0 0.1 1388 1092 ?? Is 23 710 0:01.97 /usr/sbin/cron -s root 723 0.0 0.2 2148 1700 ?? Ss 23 710 0:13.44 /usr/local/sbin/httpd (lib root 758 0.0 0.1 1464 1212 ?? Is 23 710 0:00.17 /usr/sbin/inetd -wW -C 60 nobody 63206 0.0 0.2 2208 1796 ?? I 4:00AM 0:00.36 /usr/local/sbin/httpd (lib nobody 63207 0.0 0.2 2208 1796 ?? I 4:00AM 0:00.39 /usr/local/sbin/httpd (lib nobody 63208 0.0 0.2 2208 1796 ?? I 4:00AM 0:00.35 /usr/local/sbin/httpd (lib nobody 63209 0.0 0.2 2208 1796 ?? I 4:00AM 0:00.36 /usr/local/sbin/httpd (lib nobody 63210 0.0 0.2 2208 1796 ?? I 4:00AM 0:00.39 /usr/local/sbin/httpd (lib nobody 63212 0.0 0.2 2208 1796 ?? I 4:00AM 0:00.42 /usr/local/sbin/httpd (lib nobody 63220 0.0 0.2 2220 1804 ?? I 4:00AM 0:00.41 /usr/local/sbin/httpd (lib nobody 63297 0.0 0.2 2220 1804 ?? I 4:11AM 0:00.40 /usr/local/sbin/httpd (lib nobody 63645 0.0 0.2 2220 1808 ?? I 5:08AM 0:00.37 /usr/local/sbin/httpd (lib nobody 63646 0.0 0.2 2208 1796 ?? I 5:08AM 0:00.38 /usr/local/sbin/httpd (lib root 81978 0.0 0.3 3736 3196 ?? I 12:53AM 0:00.00 sendmail: o73Frq7V081978 d root 82005 0.0 0.3 3736 3196 ?? I 12:55AM 0:00.00 sendmail: o73FtFwg082005 d root 82009 0.0 0.3 3736 3196 ?? I 12:56AM 0:00.00 sendmail: o73Fucen082009 d root 82136 0.0 0.3 6268 3292 ?? Is 1:01AM 0:00.02 sshd: admin [priv] (sshd) admin 82179 0.0 0.3 6252 3284 ?? S 1:02AM 0:00.05 sshd: admin@ttyp0 (sshd) root 776 0.0 0.1 1344 944 v0 Is+ 23 710 0:00.00 /usr/libexec/getty Pc ttyv root 777 0.0 0.1 1344 944 v1 Is+ 23 710 0:00.00 /usr/libexec/getty Pc ttyv root 778 0.0 0.1 1344 944 v2 Is+ 23 710 0:00.00 /usr/libexec/getty Pc ttyv root 779 0.0 0.1 1344 944 v3 Is+ 23 710 0:00.00 /usr/libexec/getty Pc ttyv root 780 0.0 0.1 1344 944 v4 Is+ 23 710 0:00.00 /usr/libexec/getty Pc ttyv root 781 0.0 0.1 1344 944 v5 Is+ 23 710 0:00.00 /usr/libexec/getty Pc ttyv root 782 0.0 0.1 1344 944 v6 Is+ 23 710 0:00.00 /usr/libexec/getty Pc ttyv root 783 0.0 0.1 1344 944 v7 Is+ 23 710 0:00.00 /usr/libexec/getty Pc ttyv admin 82180 0.0 0.3 4884 2892 p0 Ss 1:02AM 0:00.02 -csh (csh) admin 82851 0.0 0.1 1504 1068 p0 R+ 1:16AM 0:00.00 ps aux %CPUや%MEMなどからプロセスごとの負荷を見ることができるので、長時間負荷をかけているプロセスを監視したり強制終了したりする場合に使える。 【メモリ】 メモリが十分足りてるかどうか判断するためのコマンドです。 psコマンド % ps aux 上記CPUのところで書いたように、プロセスごとに確保しているメモリ量を知ることができる。 topコマンド % top Shift+Mキーで、メモリ使用量の多いプロセスから順に表示できる。 freeコマンド % free 物理メモリ、仮想メモリの使用状況を確認できる。 vmstatコマンド % vmstat 1 1 procs memory page disk faults cpu r b w avm fre flt re pi po fr sr mf0 in sy cs us sy id 1 0 0 38428 825608 81 0 0 0 74 0 0 176 1245 401 1 0 99 memoryのavmは使用中の仮想メモリページ数の平均値、freは利用可能な残りのページ 【ディスク読み書き】 ディスクの読み書き速度がボトルネックになってないか調べる iostatコマンド [Linux] % iostat 1 3 この例では1秒間隔で3回表示させる指定になる。 vmstatと指定方法は似ている [FreeBSD] % iostat -c 3 システム内の最初の4つのデバイスの統計情報を、1秒間隔で3回表示させる指定 % iostat -c 3 /dev/foo /dev/bar デバイスを指定したやり方 【ネットワーク】 トラフィック(転送量)が増大するとネットワークはボトルネックになりやすい部分です。 pingコマンド % ping foo.example.com 指定ホストまでのネットワークがつながってるか確認 tracerouteコマンド % traceroute foo.example.com 指定ホストまでのネットワーク経路を調べる。経路上のボトルネックなども推測できる。 netstatコマンド % netstat -i Name Mtu Network Address Ipkts Ierrs Opkts Oerrs Coll em0 1500 00:15:17:3n:16:5n 10594759 0 11271705 0 0 em0 1500 192.168.0.1 ns 10589606 - 11271556 - - lo0 16384 858198 0 858198 0 0 lo0 16384 nn80:3::1 nn80:3::1 0 - 0 - - lo0 16384 ::1 ::1 0 - 0 - - lo0 16384 your-net localhost 858200 - 858200 - - ネットワークインターフェイスごとの送受信を見ることができる。Ipktsが受信パケット数、Opktsが送信パケット数 tcpdumpコマンド % tcpdump -c 10 -i em0 tcpdumpを使えばネットワークでやり取りしてるデータをモニタリングできる。つまり平文のデータなら簡単に見えてしまうので取り扱い注意。 特定のネットワークインターフェイスやプロトコルやホストに関して、送信のみや受信のみを指定した抽出もできるので、うまく使えば送受信トラブルの原因究明も可能。 ▼ グラフ化 定期的にサーバ負荷をグラフ化して管理を楽にする方法が広く用いられています。 グラフ化することで人間が直感的に把握しやすくなります。 MRTGを使う ネットワーク管理用のプロトコルSNMPを使って統計を採り、それをグラフ化する。 MRTGを使ってグラフ化できることはだいたい以下のとおり CPUの使用率 メモリ使用量 ウェブの起動プロセス数 ディスクの使用量と残り ネットワークの転送量 ▼ 時刻合わせ サーバの時刻を常に日本標準時(JST)に合わせておきたいものです。 ネットワーク上には時刻合わせのために使ってもいいよと公開されているNTPサーバというものがあるので、そのサーバに問い合わせます。 「ntpサーバ 公開」で検索すればいくつもあります。 できるだけレスポンスが速くて安定稼動してそうなものを選ぶようにしたいものですね。 わたしはRing Server Projectのntp.ring.gr.jpサーバを使うことにします。 こちらの組織はプロジェクトに参加している学術機関や産業界といった、産学がよってたかってやってる感じが安定してそうです。ホスト名もなんだか強そうです。 ラウンドロビンDNSを使って組織の複数のサーバに飛ばしているようです。 時刻合わせにはntpdateコマンドを使います。 そして当然のことながらネットワークトラフィックが少ない時間帯を狙います。 一日一回時刻合わせを行えば十分でしょう。 ということでクーロンを使って簡単に行います。 % crontab -e エディタが起動します。 32 4 * * * /usr/sbin/ntpdate ntp.ring.gr.jp >/dev/null 2>&1 # Over Firewall(123番ポートが閉じられている場合) #32 4 * * * /usr/sbin/ntpdate -u ntp.ring.gr.jp >/dev/null 2>&1 朝方4時32分に問い合わせに行く設定にしています。だいたいネットワークトラフィックは朝の3時30分ぐらいから減少のピークが始まる(私調べ)ので4時32分は絶妙です。 このntpdateコマンド、余りにも時刻がズレ過ぎていた場合は最初だけ手動で合わせるように要求してくるような記憶があるので、まず手動で試してそういうメッセージが出た場合にはBIOSの時刻合わせを行ったほうがいいです。 もし複数台のサーバを有してる管理者の場合には、一台を公開NTPサーバに問い合わせに行かせてそのサーバ自体をNTPサーバにすることで残りのサーバは自分で構築したNTPサーバへ問い合わせるようにすればいい感じですね。
バックアップの取り方や取る先はいろいろなパターンが考えられる。
同マシンの別ディスクにバックアップを取る場合はネットワークを使わないで済む分ハードルが低い。USB接続のバックアップ用ディスクを増設してそこに取るのが楽そう。
fromディレクトリ以下をtoへバックアップ
ネットワークを使わないで済むケースでは圧縮しないで送った方が効率がいい?
バックアップ機へ転送
バックアップ機を用意してローカルネットワークでつないだ場合は暗号化は不要なのでその分楽かと思いきや、ログイン認証とかもあるし結局やるならSSH認証+転送をやっておいた方がグローバルネットワーク経由にも対応できて手堅い。
ローカルネットワークでつないでバックアップするならいっそのことNFSマウントもありですね。
SSHを利用したバックアップを行う場合の下準備
まずはバックアップ機にバックアップ用ユーザを作成
と、いきたいところですがバックアップ機側でも全ユーザ・グループのアクセス権に対応できるユーザじゃないとバックアップを取れません。
つまりバックアップ機側もrootを使うしかないということですね。
まずバックアップ機側のrootのSSH認証をコマンドのみ許可する設定にする。
sshdの再起動で設定変更が反映されます。
次はバックアップ元でSSH鍵を生成(パスフレーズなし)
こうして作成したバックアップ元~/.ssh/id_dsa.pub内容を、ssh-copy-idコマンドでバックアップ機 /root/.ssh/authorized_keys2に追加している。 (これがauthorized_keysの場合もある)
ssh-dssの前に使用コマンドおよび制限を追加
このコマンドの記述内容はrsyncを-vvオプション付きで実行してみないとわからない。
編集後はパーミッションが[600]になってなければchmod 600 authorized_keys2
あとはcronまたは/etc/rsyncd.conf設定でrsyncコマンドを定期実行させるようにすればよい。
圧縮率の高いテキストファイル系が多い場合は以下のように圧縮したほうが転送効率がよさそう。
削除されたファイルがあればバックアップ側でも削除する(同期させる)場合には--deleteオプションを使う。
なんかここまでしなきゃいけないの?って感じですね。完全にミラー化していつでもスペアマシンとして待機させておくならここまで必要ですが、データ量がさほどないならとりあえずrootに暗号化したアーカイブの圧縮ファイルを作らせておいてメールに添付して送るなり一般ユーザが定期的に退避させるとかでもよさそうです。 それ以外だと、少し銭はかかりますがRAID5を導入して手抜きをするなんてどうでしょ
サーバのどの部分に負荷がかかっているか推察するためのコマンドがある。
【CPU】
CPUの処理速度が追いついてるかどうか判断するためのコマンドです。
プロセス、仮想メモリ、ディスク、トラップ、CPU の活動状況などについてカーネルが持っている統計情報を報告します
例として1秒間隔で3回表示させている。
先頭procsのr値は実行待ちのプロセス数です。搭載しているCPUの数x4以内にだいたい収まっていれば問題なしです。
cpuのus値はユーザタスクの実行時間、sy値はシステムタスクの実行時間、idはアイドル状態だった時間
本来はシステムの稼働時間を表示させるコマンドだが、CPUの処理待ち数を知ることもできる。
load averageは1分間 5分間 15分間で見た平均負荷を表している。 1分間で見ると瞬間的に上がる場合も多いので、私的には5分間平均の値がCPU数x4を超えることが多いとCPUの処理能力が足りてないかと
CPU使用率の高いプロセスから順に表示
%CPUや%MEMなどからプロセスごとの負荷を見ることができるので、長時間負荷をかけているプロセスを監視したり強制終了したりする場合に使える。
【メモリ】
メモリが十分足りてるかどうか判断するためのコマンドです。
上記CPUのところで書いたように、プロセスごとに確保しているメモリ量を知ることができる。
Shift+Mキーで、メモリ使用量の多いプロセスから順に表示できる。
物理メモリ、仮想メモリの使用状況を確認できる。
memoryのavmは使用中の仮想メモリページ数の平均値、freは利用可能な残りのページ
【ディスク読み書き】
ディスクの読み書き速度がボトルネックになってないか調べる
iostatコマンド
この例では1秒間隔で3回表示させる指定になる。
vmstatと指定方法は似ている
システム内の最初の4つのデバイスの統計情報を、1秒間隔で3回表示させる指定
デバイスを指定したやり方
【ネットワーク】
トラフィック(転送量)が増大するとネットワークはボトルネックになりやすい部分です。
指定ホストまでのネットワークがつながってるか確認
指定ホストまでのネットワーク経路を調べる。経路上のボトルネックなども推測できる。
ネットワークインターフェイスごとの送受信を見ることができる。Ipktsが受信パケット数、Opktsが送信パケット数
tcpdumpを使えばネットワークでやり取りしてるデータをモニタリングできる。つまり平文のデータなら簡単に見えてしまうので取り扱い注意。
特定のネットワークインターフェイスやプロトコルやホストに関して、送信のみや受信のみを指定した抽出もできるので、うまく使えば送受信トラブルの原因究明も可能。
定期的にサーバ負荷をグラフ化して管理を楽にする方法が広く用いられています。 グラフ化することで人間が直感的に把握しやすくなります。
MRTGを使う
ネットワーク管理用のプロトコルSNMPを使って統計を採り、それをグラフ化する。
サーバの時刻を常に日本標準時(JST)に合わせておきたいものです。
ネットワーク上には時刻合わせのために使ってもいいよと公開されているNTPサーバというものがあるので、そのサーバに問い合わせます。 「ntpサーバ 公開」で検索すればいくつもあります。
できるだけレスポンスが速くて安定稼動してそうなものを選ぶようにしたいものですね。
わたしはRing Server Projectのntp.ring.gr.jpサーバを使うことにします。 こちらの組織はプロジェクトに参加している学術機関や産業界といった、産学がよってたかってやってる感じが安定してそうです。ホスト名もなんだか強そうです。 ラウンドロビンDNSを使って組織の複数のサーバに飛ばしているようです。
時刻合わせにはntpdateコマンドを使います。 そして当然のことながらネットワークトラフィックが少ない時間帯を狙います。
一日一回時刻合わせを行えば十分でしょう。
ということでクーロンを使って簡単に行います。
エディタが起動します。
朝方4時32分に問い合わせに行く設定にしています。だいたいネットワークトラフィックは朝の3時30分ぐらいから減少のピークが始まる(私調べ)ので4時32分は絶妙です。
このntpdateコマンド、余りにも時刻がズレ過ぎていた場合は最初だけ手動で合わせるように要求してくるような記憶があるので、まず手動で試してそういうメッセージが出た場合にはBIOSの時刻合わせを行ったほうがいいです。
準備は整った、いざ運用開始! と、その前にホスト名やネットワーク設定を最終確認
準備は整った、いざ運用開始!
と、その前にホスト名やネットワーク設定を最終確認
▼ fsckコマンド ファイルシステムの整合性をチェックするfsckというコマンドがあります。 fsckコマンドをかけるファイルシステムはマウントされてないか、読み出し専用モードでマウントされてるものに対して行う。 もし読み書きモードでマウントされたファイルシステムに対してfsckをかけると破壊の原因になる恐れがある。 ファイルシステムの内訳は/etc/fstab参照 ファイルシステムが指定されなければ/etc/fstabを参照してすべてを順にチェックしていく。 全ファイルシステムをチェックするならシングルユーザモードで起動させる シングルユーザモード起動はコチラ 起動後シングルユーザモードに落とすには % shutdown now シングルユーザモード起動直後は、ルート"/"だけが読み出し専用でマウントされた状態になっている。 つまり設定ファイルや基本コマンドのある「/etc」「/sbin」「/bin」あたりは読めるという状態(パーティションの切り分け方による) もし正しくshutdown等が行われずに運用中に不完全な終了をしてしまった場合は-pオプションで実行させる。 % fsck -p もしこれがエラー終了すれば、そのファイルシステムに対してfsck -y /dev/fooをかけ直す。 -yオプションは、修復するかどうかの確認があった場合にすべてyesと答えるようにするもの。修復箇所が多い場合は何百回とか確認されるのでその度に答えるのは結構大変。 「クリーン」マークの付いたファイルシステムも検査を行いたい場合は-fオプションを付ける。 % fsck -fy もしfsckによる修復が行われたら、そこでsyncするとトラックバッファ(ハードディスクドライブ内のバッファ)上のファイルシステムイメージと実際のディスク上のファイルシステムとの間に不整合があった場合に破壊される恐れがあるのでrebootする。 % reboot -n BSD系なら-nオプション付きの方が手堅い 特定のファイルシステムをチェックするならまずumountコマンドで落とす % sync;sync;sync % umount /dev/foo % fsck -y /dev/foo 問題なければmount /dev/foo、修復が行われたらreboot -n ▼ SUPERBLOCKが壊れたら fsckかけても修復できない場合に"SUPERBLOCK"というフレーズがエラー内容に出ていたら、点在するSUPERBLOCK位置を取得して組み替えることで修復できることがある。 [FreeBSD] % newfs -N /dev/foo super-block backups (for fsck -b #) at: 32, 160, 51392, 102624, 153856 % fsck_ffs -b 32 /dev/foo 表示されたスーパーブロック位置(より小さい値)を、fsck_ffsで指定してやる。 [Linux] % mke2fs -n /dev/foo Superblock backups stored on blocks: 32768, 98304, 163840 % e2fsck -b 32768 /dev/foo
ファイルシステムの整合性をチェックするfsckというコマンドがあります。
fsckコマンドをかけるファイルシステムはマウントされてないか、読み出し専用モードでマウントされてるものに対して行う。 もし読み書きモードでマウントされたファイルシステムに対してfsckをかけると破壊の原因になる恐れがある。
ファイルシステムの内訳は/etc/fstab参照
ファイルシステムが指定されなければ/etc/fstabを参照してすべてを順にチェックしていく。
全ファイルシステムをチェックするならシングルユーザモードで起動させる
シングルユーザモード起動はコチラ
シングルユーザモード起動直後は、ルート"/"だけが読み出し専用でマウントされた状態になっている。 つまり設定ファイルや基本コマンドのある「/etc」「/sbin」「/bin」あたりは読めるという状態(パーティションの切り分け方による)
もし正しくshutdown等が行われずに運用中に不完全な終了をしてしまった場合は-pオプションで実行させる。
もしこれがエラー終了すれば、そのファイルシステムに対してfsck -y /dev/fooをかけ直す。 -yオプションは、修復するかどうかの確認があった場合にすべてyesと答えるようにするもの。修復箇所が多い場合は何百回とか確認されるのでその度に答えるのは結構大変。
「クリーン」マークの付いたファイルシステムも検査を行いたい場合は-fオプションを付ける。
もしfsckによる修復が行われたら、そこでsyncするとトラックバッファ(ハードディスクドライブ内のバッファ)上のファイルシステムイメージと実際のディスク上のファイルシステムとの間に不整合があった場合に破壊される恐れがあるのでrebootする。
BSD系なら-nオプション付きの方が手堅い
特定のファイルシステムをチェックするならまずumountコマンドで落とす
問題なければmount /dev/foo、修復が行われたらreboot -n
fsckかけても修復できない場合に"SUPERBLOCK"というフレーズがエラー内容に出ていたら、点在するSUPERBLOCK位置を取得して組み替えることで修復できることがある。
表示されたスーパーブロック位置(より小さい値)を、fsck_ffsで指定してやる。
SSH接続がうまくいかない場合はネットワーク設定ができてないか、サーバ側でsshdが起動してないとか接続拒否の設定になっている可能性が考えられます。 こういう時はサーバを直接操作して確認します。 サーバログイン後、psコマンドを打ち込みます。その前に、一般ユーザがpsコマンドで全部見れる設定になっていない可能性もあるのでsuコマンドで先にrootに成ります。 ▼ sshdプロセスの存在を確認 % su % ps auxww | grep sshd これでsshdプロセスがなければ起動させる設定に、起動済みなら接続できない原因を更に絞ります。 接続を拒否したことがログに残されていれば接続許可設定にして、ログがなければネットワーク設定がまだ不十分ということになります。 ▼ sshdの起動 今ははじめからsshがインストールされていないことはないので、起動させる設定をしてサーバを再起動させます。最初にsshdが起動する際に暗号鍵が作成されます。 Linuxでは/etc/rc.d/init.d/sshdの存在を確認し、起動させたいランレベルごとに直接リンクを張るか、chkconfigコマンドを実行します。 % /sbin/chkconfig --level 35 sshd on FreeBSDでは/etc/rc.confに以下の設定を追加します。 [/etc/rc.conf] sshd_enable="YES" 設定が完了すれば再起動させます。 ▼ ssh接続ログの確認 % tail /var/log/messages または % tail /var/log/secure TcpWrapperで拒否されてる場合は/etc/hosts.allowにログインを許可するIPアドレスを書き加えます。 [/etc/hosts.allow] sshd: ログインを許可するIPアドレス これは設定変更した後に再起動やHUPシグナルを送る必要はないので、ログインできるようになったかそのまま試すことができます。
SSH接続がうまくいかない場合はネットワーク設定ができてないか、サーバ側でsshdが起動してないとか接続拒否の設定になっている可能性が考えられます。
こういう時はサーバを直接操作して確認します。
サーバログイン後、psコマンドを打ち込みます。その前に、一般ユーザがpsコマンドで全部見れる設定になっていない可能性もあるのでsuコマンドで先にrootに成ります。
これでsshdプロセスがなければ起動させる設定に、起動済みなら接続できない原因を更に絞ります。 接続を拒否したことがログに残されていれば接続許可設定にして、ログがなければネットワーク設定がまだ不十分ということになります。
今ははじめからsshがインストールされていないことはないので、起動させる設定をしてサーバを再起動させます。最初にsshdが起動する際に暗号鍵が作成されます。
Linuxでは/etc/rc.d/init.d/sshdの存在を確認し、起動させたいランレベルごとに直接リンクを張るか、chkconfigコマンドを実行します。
FreeBSDでは/etc/rc.confに以下の設定を追加します。
設定が完了すれば再起動させます。
TcpWrapperで拒否されてる場合は/etc/hosts.allowにログインを許可するIPアドレスを書き加えます。
これは設定変更した後に再起動やHUPシグナルを送る必要はないので、ログインできるようになったかそのまま試すことができます。
サーバは複数人(マルチユーザ)で使うこともよくあります。 ユーザを作成できるのは管理者rootだけです。 つまりユーザ作成は責任重大な作業ということになります。 また、suコマンドでrootになれるのはwheelグループ所属のユーザのみです。 ▼ adduser(useradd)コマンドでユーザ作成 試しに"foo"というユーザを作成してみます。 % adduser foo fooユーザを作成してみました。 この場合、ホームディレクトリや使用するシェルなどはデフォルトのものが設定されます。 デフォルト以外を指定したい場合adduserを単独で打ち込んで、 % adduser Login name for new user []: foo : 以後対話式なので、聞かれる度に指定していけば作成できます。(わからなければEnterキーでデフォルト指定) オプション指定で作る方法もあります。 % adduser -d /home/foo -g foo -s /bin/csh foo -dディレクトリ、-gグループ、-sシェルをそれぞれ指定しています。 vipwコマンドでユーザ作成する方法もあります。この場合は事前にホームディレクトリを作成し、所属グループが未登録なら追加してから実行します。 実行するとエディタが起動してpasswdファイルを編集する形になります。編集後はadduserコマンドと同様、passwdコマンドにてパスワード設定を行います。それに加えて、指定したホームディレクトリ以下に存在するファイルのユーザ:グループを正しく設定します。(chownコマンド) ▼ passwdコマンドでパスワード設定 つぎにfooユーザのパスワード設定です。 % passwd foo このパスワード設定は管理者にとって非常に大事な仕事になります。簡素な"abcd"やら"1234"などを設定してしまったらすぐに破られてしまいます。(チェックするCrackなどのソフトがある) また、ユーザがパスワードを忘れた場合は管理者がこのpasswdコマンドで再設定してあげることになります。(管理者がパスワードを忘れたら) このpasswdコマンドはfooユーザ自身でも使用してパスワード変更できるものです。しかしセキュリティ上重要な部分なので管理者の立場としては、簡素なパスワードにならないようにチェックする必要があります。 理想的なパスワードは、英大小文字・数字・記号を混ぜた12文字以上みたいな感じです。 各ユーザがパスワード変更を希望する度に管理者がチェックして許可出すような二度手間は面倒なので、変更文字をチェックするPAMを設定しておくと便利です。
サーバは複数人(マルチユーザ)で使うこともよくあります。
ユーザを作成できるのは管理者rootだけです。 つまりユーザ作成は責任重大な作業ということになります。
また、suコマンドでrootになれるのはwheelグループ所属のユーザのみです。
▼ adduser(useradd)コマンドでユーザ作成
試しに"foo"というユーザを作成してみます。
fooユーザを作成してみました。 この場合、ホームディレクトリや使用するシェルなどはデフォルトのものが設定されます。
デフォルト以外を指定したい場合adduserを単独で打ち込んで、
以後対話式なので、聞かれる度に指定していけば作成できます。(わからなければEnterキーでデフォルト指定)
オプション指定で作る方法もあります。
-dディレクトリ、-gグループ、-sシェルをそれぞれ指定しています。
vipwコマンドでユーザ作成する方法もあります。この場合は事前にホームディレクトリを作成し、所属グループが未登録なら追加してから実行します。 実行するとエディタが起動してpasswdファイルを編集する形になります。編集後はadduserコマンドと同様、passwdコマンドにてパスワード設定を行います。それに加えて、指定したホームディレクトリ以下に存在するファイルのユーザ:グループを正しく設定します。(chownコマンド)
▼ passwdコマンドでパスワード設定
つぎにfooユーザのパスワード設定です。
このパスワード設定は管理者にとって非常に大事な仕事になります。簡素な"abcd"やら"1234"などを設定してしまったらすぐに破られてしまいます。(チェックするCrackなどのソフトがある)
また、ユーザがパスワードを忘れた場合は管理者がこのpasswdコマンドで再設定してあげることになります。(管理者がパスワードを忘れたら)
このpasswdコマンドはfooユーザ自身でも使用してパスワード変更できるものです。しかしセキュリティ上重要な部分なので管理者の立場としては、簡素なパスワードにならないようにチェックする必要があります。 理想的なパスワードは、英大小文字・数字・記号を混ぜた12文字以上みたいな感じです。
各ユーザがパスワード変更を希望する度に管理者がチェックして許可出すような二度手間は面倒なので、変更文字をチェックするPAMを設定しておくと便利です。
非常にカッコ悪い話ですが、これが有り得ます。でもやり方があるので安心です。 一言で言えば、シングルユーザモード(rootだけのモード)で起動させればいいということになります。 ▼ FreeBSDのシングルユーザモード 起動させた後、カウントダウン中にEnter以外のキーを押す。(最近の起動画面だとSingle User mode 4番? とかを選択) "ok?"というプロンプトが現れるのでそこに"boot -s"を入力してEnterキー ok? boot -s 次に、使用するシェルを聞いてくるのでそのままEnterキーを押せばシングルユーザモードです。 とりあえずパスワード再設定(/etc/passwdを書き換える)できるように先にマウントしておく。 # mount -a # passwd # exit パスワードを新しく設定したらexitでシングルユーザモードを抜ける FreeBSDではシングルユーザモード起動時にルート"/"パーティションのみが読み出し専用でマウントされている状態なので、パーティションの分け方にもよりますが "/sbin" "/bin" にあるコマンドが使える程度です。 /etc/passwd(/etc/master.passwd)の書き換えができるようにする必要があることと、/usrパーティションにあるpasswdコマンド(/usr/bin/passwd)を使えるようにするためにも先にマウント(/sbin/mount)しておく必要がある。 ▼ Linuxのシングルユーザモード LILOの場合は、"boot"というプロンプトが現れたらそこに"linux single"を打ち込んでEnterキーを押す。 boot: linux single Linuxではそのままpasswdコマンドで設定変更できる場合が多い。
非常にカッコ悪い話ですが、これが有り得ます。でもやり方があるので安心です。
一言で言えば、シングルユーザモード(rootだけのモード)で起動させればいいということになります。
起動させた後、カウントダウン中にEnter以外のキーを押す。(最近の起動画面だとSingle User mode 4番? とかを選択)
"ok?"というプロンプトが現れるのでそこに"boot -s"を入力してEnterキー
次に、使用するシェルを聞いてくるのでそのままEnterキーを押せばシングルユーザモードです。
とりあえずパスワード再設定(/etc/passwdを書き換える)できるように先にマウントしておく。
パスワードを新しく設定したらexitでシングルユーザモードを抜ける
FreeBSDではシングルユーザモード起動時にルート"/"パーティションのみが読み出し専用でマウントされている状態なので、パーティションの分け方にもよりますが "/sbin" "/bin" にあるコマンドが使える程度です。 /etc/passwd(/etc/master.passwd)の書き換えができるようにする必要があることと、/usrパーティションにあるpasswdコマンド(/usr/bin/passwd)を使えるようにするためにも先にマウント(/sbin/mount)しておく必要がある。
LILOの場合は、"boot"というプロンプトが現れたらそこに"linux single"を打ち込んでEnterキーを押す。
Linuxではそのままpasswdコマンドで設定変更できる場合が多い。
ZIPファイルなどの圧縮形式のソースファイルを落としてきて、自分の環境にインストールするやり方があります。 まず大事なのは、そのソース(&バージョン)が自分の環境(OS&バージョン)にインストールできるものなのかどうか確認しておくべきです。 次は圧縮ファイルの展開です。 ▼ *.tar.gzや*.tgzの場合 % cat *.tar.gz | gzip -d | tar xvf - または % gzcat *.tar.gz | tar xvf - または % tar zxvf *.tar.gz ▼ *.tar.bz2や*.tbzの場合 % cat *.tar.bz2 | bzip2 -d | tar xvf - または % bzcat *.tar.bz2 | tar xvf - または % tar jxvf *.tar.bz2 ▼ *.tar.Zや*.Zの場合 % cat *.Z | uncompress | tar xvf - または % gzcat *.Z | tar xvf - 展開が終わるとそこに出来たディレクトリに入り、"README"や"INSTALL"などがあれば読みます。 だいたいの流れとしては「configure」で環境に合ったMakefileを作成し、「make」でソースをコンパイルし、「make install」で使える場所にコピーします。が、多少違う場合もあります。
ZIPファイルなどの圧縮形式のソースファイルを落としてきて、自分の環境にインストールするやり方があります。
まず大事なのは、そのソース(&バージョン)が自分の環境(OS&バージョン)にインストールできるものなのかどうか確認しておくべきです。
次は圧縮ファイルの展開です。
展開が終わるとそこに出来たディレクトリに入り、"README"や"INSTALL"などがあれば読みます。
だいたいの流れとしては「configure」で環境に合ったMakefileを作成し、「make」でソースをコンパイルし、「make install」で使える場所にコピーします。が、多少違う場合もあります。
ユーザ名が"foo"でパスワードが"bar"のアカウントがあったとします。 これがもしパスワードだけだと当てるのはそう難しくありません。 "a","b",..."z"まで行って、次に"aa","ab"..."zz"のように総当たりしていけば、そう時間を要しないで破ることができそうです。 ではこれに加えてユーザ名も一致しないと破ることができないとなると、先ほどの数十万倍もの時間を要することになりそうで一気にハードルが上がります。 わずか3桁のユーザ名とパスワードでも破るのにかなりの時間がかかりそうですからこれが8桁・12桁となった時にはもう気の遠くなるような時間を要しそうです。 ところが、もしユーザ名がはっきり知られてる場合は例えパスワードが12桁でも一気にハードルが下がります。ユーザ名は固定でパスワードだけ総当たりすればいいということになりますからね。 だからパスワードはもちろんのこと、ユーザ名もできるだけ知られない方がセキュリティの面からは重要なことだと言えます。 つまりユーザ名は推測されやすい名前を付けるよりも、なんの意味があるのかわからないような名前を付けたほうがいいということになります。 ちなみに固定で決まっているrootでのネットワーク経由ログイン(telnet, ssh, ftpなど)は、普通はできないようになっているはずです。
ユーザ名が"foo"でパスワードが"bar"のアカウントがあったとします。 これがもしパスワードだけだと当てるのはそう難しくありません。
"a","b",..."z"まで行って、次に"aa","ab"..."zz"のように総当たりしていけば、そう時間を要しないで破ることができそうです。
ではこれに加えてユーザ名も一致しないと破ることができないとなると、先ほどの数十万倍もの時間を要することになりそうで一気にハードルが上がります。
わずか3桁のユーザ名とパスワードでも破るのにかなりの時間がかかりそうですからこれが8桁・12桁となった時にはもう気の遠くなるような時間を要しそうです。
ところが、もしユーザ名がはっきり知られてる場合は例えパスワードが12桁でも一気にハードルが下がります。ユーザ名は固定でパスワードだけ総当たりすればいいということになりますからね。
だからパスワードはもちろんのこと、ユーザ名もできるだけ知られない方がセキュリティの面からは重要なことだと言えます。
つまりユーザ名は推測されやすい名前を付けるよりも、なんの意味があるのかわからないような名前を付けたほうがいいということになります。
ちなみに固定で決まっているrootでのネットワーク経由ログイン(telnet, ssh, ftpなど)は、普通はできないようになっているはずです。
まず基本は、一枚のネットワークカード(NIC)に対して一つのIPアドレスを割り振ることになるという認識でいいと思います。 つまり1台のマシンに刺さってるネットワークカードは一枚かも知れないし、複数枚刺さってるかも知れないので、どのネットワークカードにどのIPアドレスを割り振るか指定するためにもまずはネットワークカードの識別が必要です。 ▼ ネットワークカードの識別 ifconfigコマンドを-aオプション付きで打ち込んですべてのネットワークデバイスを表示させてみます。 % ifconfig -a fxp0: flags=8843 mtu 1500 inet 192.168.1.2 netmask 0xffffff00 broadcast 192.168.1.255 ether 00:00:n8:21:2n:11 media: autoselect (10baseT/UTP) status: active supported media: autoselect 10base5/AUI manual 10baseT/UTP 10baseT/UTP lo0: flags=8049 mtu 16384 inet 127.0.0.1 netmask 0xff000000 "fxp0"という部分がデバイス名になります。Linuxの場合は複数枚あれば"eth0" "eth1"と順に続いていきますが、FreeBSDの場合は"de0" "fxp0" "pn0"のようにメーカーごとのデバイス名に0番から割り振られる形となります。 "lo0"はすべてのホストが自分自身を表すために持つローカルループバックと呼ばれる仮想デバイスで、おなじみのローカルIPアドレス127.0.0.1とホスト名localhostが割り振られてる場合が多い。 ▼ ネットワーク設定 具体的な設定値を例に書いていきます。 項目設定値 ゲートウェイ192.168.0.1 DNSサーバ/IPアドレスns.example.com/192.168.0.2 自サーバ名/IPアドレスmyhost.example.com/192.168.0.3 ※説明のためにローカルなIPアドレスを使っています。 ネットマスク、ネットワークアドレス、ブロードキャストアドレス等がわからない場合はコチラ [/etc/hosts] 127.0.0.1 localhost 192.168.0.3 myhost.example.com [/etc/resolv.conf] search example.com nameserver 192.168.0.2 domain行とsearch行は共存不可なのでどちらか一方を書く。通常searchには6ドメインまで書ける。 nameserver行はDNSが複数あれば複数行書く 自サーバ内でDNSサーバも起動させてるなら [/etc/hosts] 127.0.0.1 localhost 192.168.0.3 myhost.example.com ns.example.com [/etc/resolv.conf] search example.com nameserver 127.0.0.1 これ以外にhostsとDNSの優先順位を設定する/etc/host.confや/etc/nsswitch.confなどもある。(あまり触ることはない) その他はディストリビューションによって設定方法が分かれる。 【FreeBSDの設定】 [/etc/rc.conf] defaultrouter="192.168.0.1" hostname="myhost.example.com" ifconfig_fxp0="inet 192.168.0.3 netmask 255.255.255.0" FreeBSDの場合はhostnameコマンドでホスト名を変更しても結局rc.confに書き込んでいないと再起動したら元に戻ることになる。 ifconfig_fxp0の部分でデバイスを指定してそれにIPアドレスを割り振ることをしている。 【Linuxの設定(Red Hat系)】 [/etc/sysconfig/network] NETWORKING=yes HOSTNAME=myhost.example.com DOMAINNAME=example.com GATEWAY=192.168.0.1 GATEWAYDEV=eth0 これはネットワーク全体の設定 [/etc/sysconfig/network-scripts/ifcfg-eth0] DEVICE=eth0 BOOTPROTO=static HWADDR=00:0n:24:02:n9:n3 IPADDR=192.168.0.3 NETMASK=255.255.255.0 ONBOOT=yes これはネットワークデバイスごとの設定 設定変更を反映させる(できればマシンを再起動させた方がよい) % /etc/init.d/network restart 【Linuxの設定(Debian系)】 [/etc/network/interfaces] auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.0.3 netmask 255.255.255.0 gateway 192.168.0.1 設定変更を反映させる(できればマシンを再起動させた方がよい) % /etc/init.d/networking restart ▼ 設定が終わればサーバを再起動 再起動の方法
まず基本は、一枚のネットワークカード(NIC)に対して一つのIPアドレスを割り振ることになるという認識でいいと思います。
つまり1台のマシンに刺さってるネットワークカードは一枚かも知れないし、複数枚刺さってるかも知れないので、どのネットワークカードにどのIPアドレスを割り振るか指定するためにもまずはネットワークカードの識別が必要です。
ifconfigコマンドを-aオプション付きで打ち込んですべてのネットワークデバイスを表示させてみます。
"fxp0"という部分がデバイス名になります。Linuxの場合は複数枚あれば"eth0" "eth1"と順に続いていきますが、FreeBSDの場合は"de0" "fxp0" "pn0"のようにメーカーごとのデバイス名に0番から割り振られる形となります。
"lo0"はすべてのホストが自分自身を表すために持つローカルループバックと呼ばれる仮想デバイスで、おなじみのローカルIPアドレス127.0.0.1とホスト名localhostが割り振られてる場合が多い。
具体的な設定値を例に書いていきます。
ネットマスク、ネットワークアドレス、ブロードキャストアドレス等がわからない場合はコチラ
domain行とsearch行は共存不可なのでどちらか一方を書く。通常searchには6ドメインまで書ける。
nameserver行はDNSが複数あれば複数行書く
自サーバ内でDNSサーバも起動させてるなら
これ以外にhostsとDNSの優先順位を設定する/etc/host.confや/etc/nsswitch.confなどもある。(あまり触ることはない)
その他はディストリビューションによって設定方法が分かれる。
【FreeBSDの設定】
FreeBSDの場合はhostnameコマンドでホスト名を変更しても結局rc.confに書き込んでいないと再起動したら元に戻ることになる。
ifconfig_fxp0の部分でデバイスを指定してそれにIPアドレスを割り振ることをしている。
【Linuxの設定(Red Hat系)】
これはネットワーク全体の設定
これはネットワークデバイスごとの設定
設定変更を反映させる(できればマシンを再起動させた方がよい)
【Linuxの設定(Debian系)】
▼ 設定が終わればサーバを再起動
再起動の方法
▼ reboot % sync % sync % sync % reboot メモリ上にバッファされているすべてのデータをディスクに書き込むよう、まずsyncを3回ぐらいブチかます。 この時祈るようにsyncするのがミソ ▼ shutdown % shutdown -r now これは内部でsyncしているのでsyncを連打する必要がない。 ▼ Ctrl+Alt+Delキー同時押し Ctrl+Alt+Del(ホットキー)を使って再起動させる方法もある。 リセットボタン押すよりも安全だが、効かない設定になってることもある。 ▼ リセットボタン 禁断の最終手段。アクセスランプが点滅しなくなった頃合を見計らって押す。 この時「ジーザス!」と叫ぶかどうかは任意
この時祈るようにsyncするのがミソ
これは内部でsyncしているのでsyncを連打する必要がない。
Ctrl+Alt+Del(ホットキー)を使って再起動させる方法もある。 リセットボタン押すよりも安全だが、効かない設定になってることもある。
禁断の最終手段。アクセスランプが点滅しなくなった頃合を見計らって押す。 この時「ジーザス!」と叫ぶかどうかは任意