ネットワークサービスデーモン・SSH

ネットワークサービスデーモン

ネットワークサービスデーモンとは

クライアントからの接続依頼を受けて、入出力をネットワーク経由で行なう プログラムをネットワークサービスデーモンという。 サービスデーモンのうち、つねに起動していて直接クライアントからの 接続を待ち受けするものと、接続要求が発生してから起動されるものの 2つがある。

ネットワークサービスデーモンを作る

簡単なプログラムを作成し実際にサービスデーモンとして動かしてみる。

標準入力から1行読み取り、その行に "GET" が含まれれば Hello と、そうでなければ "Bye bye" とメッセージを出すだけのものを作る。

server.rb

#!/usr/bin/env ruby
cmd = gets
if /GET/ =~ cmd then
  puts "Hello!"
else
  puts "Bye bye"
end

これを保存し chmod +x で実行属性をつけた後、 自分専用のポート番号でサービスデーモンとして起動する。 tcpserver コマンドを使うと標準入出力を使うだけのプログラムを ネットワークサービスデーモンプログラムに転換できる。

hostname		# このホスト名を覚えておきブラウザでアクセスするときに使う
chmod +x server.rb
./server.rb		# 一度試しに起動してみる
tcpserver 0 ポート番号 ./server.rb

ポート番号 の部分は学籍番号の3桁目から7桁目を指定する。
例: C1234567 → 23456

tcpserverプログラムが起動したら、Webブラウザで自分の指定した ポート番号にアクセスしてみる。

http://ホスト名:ポート番号/

ホスト名の部分は上記 hostname コマンドの実行結果(ピリオドより前)を 入力する。

スーパーサーバー

クライアントから特定のポートに接続要求が来たことを検知して、 対応するネットワークサービスデーモンを起動するデーモンを スーパーデーモンといい、代表的なものとして inetd, xinetd, tcpserver がある。

セキュリティ上の問題から、悪意あるホストから 特定のネットワークサービスに対する接続を拒否する必要が出ることがある。 スーパーデーモンには特定のクライアントアドレスに対して接続拒否したり、 最大同時接続数を制限したりする機能がある。

代表的なスーパーサーバ

inetd

伝統的なスーパーサーバ。/etc/inetd.conf から定義を読み込む。

inetd+libwrap

アクセス制御を行なう tcpwrapper のライブラリ(libwrap)を 組み込んだinetd。PC-Unixでは一般的。

xinetd

Linuxで主に使われている改良版inetd。

tcpserver

高速大量のアクセス制御機能を持つスーパーサーバ。1つの tcpserverプログラムで1つのネットワークサービスデーモン起動を 受け持つ。

SSH

リモートホストとの通信全般を暗号化できるのがSSHである。 リモート管理をするには必須ツールである。

基本的使用

ssh [オプション] リモートホスト [リモートコマンド]

覚えておくべきオプション -l, -C, -p, -A, -a, -f, -X, -x, -o, -L, -R

-L と -R でポートフォワードを行なうことで、様々なサービスを 暗号化トンネルに通すことができる。

例1: リモートホスト rem で上がっているSMTPサービス(25 番ポート)へローカルホストの10025番ポートをフォワードする。

% ssh -L 10025:rem:25 rem

例2: ローカルホストで上がっているPOPサービス(110 番ポート)へリモートホスト rem2 の10110番ポートをフォワードする。

% ssh -R 10110:localhost:110 rem2

rsyncとの組み合わせ

リモートホスト間でファイルの同期を取るツールである。 ホスト間の通信にSSHを利用するため、 リモートバックアップ、リモートコピーを安全に行なうことができる。

-L オプションに与えるホスト名はリモートホストから見たホスト名、 -R オプションに与えるホスト名は、ローカルホストから見たホスト名。

覚えておくべきオプション -a, -v, -z, -H, -x, --delete, --exclude

例: ローカルホストの ./foo ディレクトリを リモートホスト rem の ~/bak/foo と同期させる。

% rsync -azH --delete foo rem:bak
yuuji@koeki-u.ac.jp