|
|
NTP SSH DHCPサーバーの構築
|
NTPサーバーについてntpdの設定(WBEL3,CentOS3)ntpdの設定(WBEL4,CentOS4)ntpdの設定(CentOS5)ntpdのコントロールntpdの動作チェックSSHサーバーについてsshdの設定(WBEL3,CentOS3)sshdの設定(WBEL4,CentOS4)sshdの設定(CentOS5)sshdのコントロールsshdの動作チェックポートフォワーディングの設定DHCPサーバーについてDHCPのインストールと設定DHCPのコントロールDHCPの動作チェック |
sshdの構築に必要なファイル(CentOS5)この コンテンツ に従って普通に CentOS5 を インストール すると、 sshd とその設定に必要なファイル類は既に 構築中のLinuxサーバー にインストールされているはずです。 以下に、CentOS5にインストールされているsshdで、操作や設定が必要なファイルを示します。 それ以外の ディストリビューション をお使いの場合や、標準添付以外のパッケージをインストールした場合には、ファイル名やディレクトリの パス が以下とは異なる場合がありますので注意してください。
sshdの必要ファイル一覧 sshdの本体プログラムは"/usr/sbin/sshd"ですが、これを直接呼び出すことはまずありません。 実際にはこの"/usr/sbin/sshd"を用いて、起動や終了を容易にコントロールできるように記述された スクリプト である "/etc/rc.d/init.d/sshd" を用います。 また"/etc/rc.d/init.d/"の シンボリックリンク が"/etc/init.d/"になっていますので、スクリプトは "/etc/init.d/sshd" でも呼び出すことができます。 例えば、 "/etc/init.d/sshd start" →sshdの起動 "/etc/init.d/sshd stop" →sshdの停止 という使い方になります。
"/etc/rc.d/init.d/"
には
パス
が通っていません
sshdの設定ファイルは "/etc/ssh/sshd_config" です。 sshdはほとんどの動作についてこの"/etc/ssh/sshd_config"の内容を参照しますから、設定に関して書き換えが必要なファイルはこの"/etc/ssh/sshd_config"だけだと思ってよいでしょう。 "/etc/ssh/sshd_config" と同じディレクトリに、 "/etc/ssh/ssh_config" という微妙に名前の違うファイルがありますが、これは SSHクライアント 用の設定ファイルですので間違えないようにしてください。 ちなみに、 鍵交換による認証 を行う場合には一般に、接続に利用する ユーザーアカウント の ホームディレクトリ に 「鍵ファイル」 を作成することになります。
|
|||||||||
"/etc/ssh/sshd_config"の編集(CentOS5)"/etc/ssh/sshd_config" を編集するときは、 SSHクライアント からのリモート接続は避けます。 |
||||||||||
|
|
もし設定を間違えて
SSH
で接続できなくなってしまうと、結局実機を操作しなければならなくなりますから、ここは素直に
構築中のLinuxサーバー
の実機に
ログイン
します
それから
su
コマンド
で
ユーザーアカウント
を
"root"
に変更し、
cp
コマンドでバックアップを作成した後、
nano
エディタで
"/etc/ssh/sshd_config"
を開きます
↓
nanoで"/etc/ssh/sshd_config"を開く "/etc/ssh/sshd_config" は、 sshd が動作中でも自由に書き換えることができます。 ただし、 CentOS の サーバー アプリケーション は通常、設定ファイルを保存しただけでは設定は反映されません。もちろんsshdもその例外ではありません。 サーバーアプリケーションの設定ファイルは、通常サーバーアプリケーションの起動時に参照されて読み込まれますから、設定ファイルの保存後にサーバーアプリケーションの再起動を行うか、設定ファイルの再読み込みのコマンドを実行しなければ、設定ファイルの修正は有効になりませんので注意してください。
sshdの再起動、設定ファイルの再読み込みについては、
|
|||||||||
"/etc/ssh/sshd_config"について(CentOS5)以下に編集前の"/etc/ssh/sshd_config"の内容を示します。 注釈の末尾にある()の値は、各キーワードの デフォルト の設定値です。 また、 灰色 で注釈を入れている設定値と、 赤色 で注釈を入れている範囲は、そのままでも特に支障はありませんし、深く理解する必要もありませんから、この コンテンツ では特に扱いません。ご了承ください。
"#" で始まる行はコメント行として無視されますが、本当の意味でのコメント行はごく一部です("#"の後に一つスペースが入ってから記述されている行です。) |
||||||||||
|
|
つまり"/etc/ssh/sshd_config"に記述されている大部分のコメント行は、 「設定値の記述の先頭に"#"を付けて無効化している。」 という形になっていますが、実はこれらの "#"で始まる設定はすべてデフォルトの設定値 です。 例えば、
という記述部分もすべてデフォルト値ですから、コメント記号をはずして、
と書き換えても結果は変わりません。もちろん、設定そのものを削除しても同じです。 ただ、設定が最初から全く記述されていなかったり、あるいは、
のような記述がなされていたとすると、 「何も設定を行わなかった場合の設定値」 、つまり本来のデフォルト値を知ることができなくなってしまいます。 |
|||||||||
| こういう記述の仕方は サーバー アプリケーション の設定ファイルでは比較的珍しいほうです。わかり易いようで解りにくいようで...。 |
つまり、"/etc/ssh/sshd_config"は、 「何も設定を行わなかった場合の設定値」 が解らなくなってしまわないように、わざわざデフォルト値を"#"でコメントアウトした形で記述されているわけです。 従って、デフォルト値を変更して設定する場合には、上の記述にもあるように、例えば、
あるいは、
のように"/etc/ssh/sshd_config"の作法に従って、 "#"+"デフォルトの値" は残したまま、変更後の設定値を下に記述するようにしましょう。 さて、これからこのファイルを編集していきますが、実は設定の変更が必要なのは、 1. と 3. だけです。 実はあと一つだけ、デフォルト値の設定がないキーワードの追加を行いますが、それでも合わせて三つのキーワードしか扱いません。他はデフォルトのままでOKです。 これらのキーワードの変更は、 パスワード認証 での ログイン にあたって セキュリティ を確保するために必要なものですが、 鍵交換認証 でのログインの設定を行う場合にも必要となりますので、いずれ鍵交換認証の設定を行う場合でもきちんと設定しておきましょう。
|
|||||||||
パスワード認証を用いる場合のsshdの設定(CentOS5)sshd は"/etc/ssh/sshd_config"を修正しなくても、パスワード認証でのリモート接続は可能になっていますから、このパートでは |
||||||||||
|
|
「 セキュリティ 上問題の起こりやすいパスワード認証でも、比較的安全にリモート接続を行うための設定。」 "Port"〜1.利用するポート番号の指定行の先頭が "Port" というキーワードで始まる設定は、 sshd が通信を受け付ける ポート番号 の指定です。 デフォルト の"/etc/ssh/sshd_config"では、
となっています。デフォルトはもちろん、 SSH の Well-Knownポート である 22 になっています。 常識的に考えればこの設定を変更する必要はなさそうに思えますが、実はセキュリティの面を考えると WAN 空間で ポート番号22を利用するのは望ましくありません 。 SSHや TELNET などの プロトコル は、一般的にリモート接続で サーバー機 をコントロールするのに使われます。 そしてその入り口ともいうべき 22 、 23 番というポート番号は、悪意を持って サーバー へ進入し、乗っ取りを企てているクラッカーにとっての進入経路でもあるわけです。 クラッカーは、 ポートスキャナー と呼ばれるプログラムを使い、 WAN 空間で公開運用されている ホスト を見つけると、まずはこういった 「ひょっとすると進入できるかもしれないポート番号」 が開放されているかどうかを調べます。 |
|||||||||
| ログインに必要なパスワードは、サーバーの ドメイン名 や FQDN から適当に推測したものが使われたり、例えば日本のドメイン名が使われているサーバーなら suzuki や tanaka などの文字列にドメイン名や連続した数字が組み合わされたものが使われます。 |
そしてポートが開放されていることがわかったら、そのサーバーに対して、 "root" や "admin" といった 「存在する可能性の極めて高い アカウント 」 で ログイン を試ます。 そして運よく(運悪く)パスワードが一致してしまえば、進入、乗っ取り、となってしまうわけです。 と、こういう説明をすると、 「そういうのは会社やなんかの大きなサーバーの世界の話で、自宅のちっちゃなサーバーなんか関係ないでしょ?。」 と思われるかもしれません。しかしそんなことはありません。 実はポートスキャナーの大半は自動探索プログラムで、攻撃対象にはサーバーの規模の大小は無関係といわれています。 実際にこの コンテンツ を運用しているサーバーも、自宅の片隅で細々と運用しているタイプですが、WAN側に 22 番ポートを開放していたサーバー構築直後は、毎日大量のポートスキャン攻撃をうけていました。 もちろん、きちんとしたパスワードを設定していれば実際に進入されることはありませんが、こういった攻撃をうけることで ルーター もsshdも余計な仕事をしなければならず、通信も無駄に使われてしまいますから本来のサービスに少なからず影響を及ぼすことになります。 という訳ですから設定のポイントは、 「攻撃を受けても大丈夫なシステムにする。」 だけではなく、 「できるだけ攻撃を受けないようなシステムにする。」 工夫を行うことにあるといえます。 では実際にはどうしたらポートスキャン攻撃を受けないようにできるのでしょうか。
幸いなことにポート番号は
0〜65535
まであり
そこで例えば 56765 のような 「クラッカーにとって予想できないポート番号」 を利用してSSH接続を行うようにしたらどうでしょうか。 もし、リモート接続に用いられているポート番号が予め 22 、 23 のように決まっていないとすると、そのサーバーに進入するためには、ポートスキャナーはまず全てのポート番号について開放されているかどうかを調べなくてはなりません。 もしも一つのポート番号を調べるのに1秒必要だとすれば、すべてのポート番号を調べ終わるのに必要な時間は約18時間です。 そして次に、開放されているポート番号の中からリモート接続のためのプロトコルが使われているものを探し出して進入を試みる、というとても長い手順を踏むことになります。 もちろん、それで進入に成功すれば御の字ですが、もし成功できなければ「丸一日が徒労」に終わってしまうことになります。 クラッカーの大半は愉快犯ですから、特定のサーバーへの進入にこれだけの時間を割くことはしません。 クラッカーにとっては 22 、 23 などのポート番号を開放していないような、「リモート接続を利用していないかもしれない」あるいは「ポートスキャン対策をきちんと行っている可能性の高い」サーバーに手間隙かけて進入を試みたりはしません。 それよりも 22 、 23 などポートを平気で開放しているような「ガードが甘い可能性の高いサーバー」を数多く探し出して攻撃を仕掛けるほうが、はるかに進入できる確率が高いからです。 要するに、 「サーバーの入口で厳重な警備を行う。」 だけではなく、 「サーバーの入口がどこにあるのかわかならいようにする。」 という対策をとり、最初からクラッカーの攻撃対象にならないようにしてしまうわけです。 さて、具体的には、
1.sshdの"Port"の設定はデフォルトの22のまま変更せず、ルーターのポート番号変換機能
2.sshdの"Port"の設定を変更し、ルーターのポート番号変換機能は使わずに、どこからでも同じポート番号で接続する。 の二種類の方法があります。 1. 場合は、"Port"キーワードの書き換えは不要ですが LAN 内の ホスト機 からSSH接続をする場合はポート番号 22 番で、WAN側からSSH接続を行う場合は別のポート番号でアクセスすることになりますのでやや面倒です。 ルーターのポート番号変換機能を使わず、LAN側からもWAN側からも同じポート番号で接続できるようにするには、 2. を選択することになります。この場合は"Port"キーワードの設定を次のように修正してください。
ルーターの種類によっては稀にポート番号変換機能がない場合や、設定可能であっても設定そのものが面倒なことがありますが、その場合は 2. の方法を用いることになります。 "Protocol"〜2.サポートするSSHのバージョンの指定行の先頭が "Protocol" というキーワードで始まる設定は、利用を許可する SSH プロトコル のバージョンを決定します。 SSHには初期バージョンの"1"と、 セキュリティ を高めた"2"がありますが、SSHを利用する場合はSSH クライアント 側と使用するバージョンを一致させておく必要があります。 デフォルト の"/etc/ssh/sshd_config"では、
となっていますから、バージョン"2"のみで利用できることになります。 現行のSSHクライアントソフトは普通バージョン"2"をサポートしていますから、このままの設定でも特に問題はないでしょう。 ただし古いSSHクライアントの中にはバージョン"1"しか使えないものもありますから、こういう場合は
"PermitRootLogin"〜3."root"アカウントのログイン認証行の先頭が "PermitRootLogin" というキーワードで始まる設定は、 root アカウント からのアクセスに対しての sshd の処理を決定します。 デフォルト の"/etc/ssh/sshd_config"では、
となっています。デフォルトは "yes" すなわち、 「rootによる ログイン を許可する」 になっています。 この"PermitRootLogin"では、例えば、
と設定すると、パスワード認証によるrootアカウントからのログインはできなくなりますが、鍵交換認証によるログインは許可されたままになります。 しかしながらこの コンテンツ では、どういう方法にしろrootアカウントでのSSHによるログインはお勧めしません。 |
|||||||||
|
|
それは、WAN空間からのSSHの利用に伴う
セキュリティ
上の問題ではなく、
従ってここでは、rootアカウントによるログインを一切禁止するため、
という設定を行ってください。 もちろん、禁止されるのはSSHでのログインだけですから、ログイン後に su コマンド でアカウントをrootに変更することはできます。 "AllowUsers"〜指定したユーザーアカウントのみログインを許可"AllowUsers" は、引数に記述された ユーザーアカウント にのみ ログイン 許可を与えるキーワードです。 デフォルト の "/etc/ssh/sshd_config" にはこのキーワードの記述はありませんが、デフォルトの設定は 「すべてのユーザーアカウントにログインを許可する」 になっています。 もちろん、こういう設定はあまり好ましいものではありません。 メールサーバー や FTPサーバー 、 ファイルサーバー などの運用を始めると、知らず知らずのうちに 構築中のLinuxサーバー 内のユーザーアカウントは増えていきます。 もし sshd の設定"/etc/ssh/sshd_config"で、この"AllowUsers"の指定を行わない場合、これらの全てのユーザーアカウントに対してログイン許可を与えることになります。 UNIX 系 OS の昔の運用形態である サーバー & クライアント 方式をとらなくなった今では、ユーザーアカウントに対してリモートログインのサービスを与える必要はありません。 SSHによるリモートログインが必要なのは、現在ではサーバー管理者のみです。 |
|||||||||
| "AllowUsers" の設定を追加すると、自動的にそのキーワードに記述されている以外の アカウント からのログインが禁止されます。 |
従ってここでは、"/etc/ssh/sshd_config"に以下の設定を追加して、ログインを行うべきユーザーアカウントを限定してしまいましょう。
これで、 tanaka というユーザーアカウントのみにSSHによるログイン許可を与えられるようになります。もし、複数のユーザーアカウントに対してログイン許可を与えるときは、アカウント名をスペースで区切って次のように記述してください。
これで、 tanaka 及び suzuki の二つのユーザーアカウントにログイン許可を与えられるようになります。 ただし、この"AllowUsers"キーワードでrootアカウントを記述しても、"PermitRootLogin no"の設定があればrootアカウントにはログイン許可は与えられませんので注意してください。
|
|||||||||
"/etc/ssh/sshd_config"の例(CentOS5)以上の内容で作成した "/etc/ssh/sshd_config" は、
sshd_conf5_sample01.txt
(ルーターのポート番号変換機能を使う場合) または、
sshd_conf5_sample02.txt
(ルーターのポート番号変換機能を使わない場合) をクリックすると表示できます。 |
||||||||||
|
|
これらの テキスト ファイルには余分な文字は入っていませんから、開いてコピー&ペーストで使用するか、 ダウンロード して使用してください。 もちろん、書き換えが必要な部分は適宜書き換えてください。
記述が終わったら
"/etc/ssh/sshd_config"
を保存し、nanoエディタを終了してください
"/etc/ssh/sshd_config"
の編集が終わったら、
sshd
の起動または再起動を行って設定を有効化してください
|
|
|
SSHサーバーについて
<<Previous
|
Next>>
sshdのコントロール
|
| このサイトは既に更新を終了していますが、今のところ店じまいの予定はありません。 リンクフリー ですので、趣味や勉強のためでしたら、引用、転用、コピー、朗読、その他OKです。このサイトへのリンクについては こちら をご覧ください。 |
| ”Linux”は、Linus Torvalds 氏の各国における登録商標です。”Red Hat”及びRed Hatのロゴおよび Red Hat をベースとしたすべての商標とロゴは、各国におけるRed Hat, Inc. 社の商標または登録商標です。その他のプログラム名、システム名、製品名などは各メーカー、ベンダの各国における登録商標又は商標です。 |