第6章 ネットワークアプリケーション

目次

6.1. ウェッブブラウザー
6.1.1. ブラウザー設定
6.2. メールシステム
6.2.1. 近代的メールサービスの基礎
6.2.2. ワークステーションのメール設定戦略
6.3. メールトランスポートエージェント(MTA)
6.3.1. exim4設定
6.3.2. SASLを使うpostfixの設定
6.3.3. メールアドレス設定
6.3.4. 基本的なMTAの操作
6.4. メールユーザーエージェント(MUA)
6.4.1. 基本MUA — Mutt
6.5. リモートメールの取得および転送ユーティリティー
6.5.1. getmailの設定
6.5.2. fetchmailの設定
6.6. フィルター付きのメールデリバリーエージェント(MDA)
6.6.1. maildropの設定
6.6.2. procmailの設定
6.6.3. mboxの内容の再配達
6.7. POP3/IMAP4サーバー
6.8. プリントサーバーとユーティリティー
6.9. リーモートアクセスサーバーとユーティリティー(SSH)
6.9.1. SSHの基本
6.9.2. SMTP/POP3トンネルをするためのポートフォワーディング
6.9.3. リモートパスワード無しでの接続
6.9.4. 外部SSHクライアントへの対処法
6.9.5. ssh-agentの設定
6.9.6. SSH上のリモートシステムをシャットダウンする方法
6.9.7. SSHのトラブルシュート
6.10. 他のネットワークアプリケーションサーバー
6.11. 他のネットワークアプリケーションクライアント
6.12. システムデーモンの診断

ネットワーク接続を確立した(5章ネットワークの設定参照)あとで、各種のネットワークアプリケーションを実行できます。

6.1. ウェッブブラウザー

多くのウェッブブラウザーパッケージがハイパーテキストトランスファープロトコル(HTTP)を使って遠隔コンテントにアクセスするために存在します。

表6.1 ウェッブブラウザーのリスト

パッケージ ポプコン サイズ タイプ ウェッブブラウザーの説明
iceweasel * V:30, I:52 3852 X ブランドを外した Mozilla Firefox
iceape-browser * V:1.6, I:2 36424 , , 非商標化されたMozillabug#505565というセキュリティー問題で削除済
epiphany-browser * V:15, I:37 1036 , , GNOME HIG準拠、Epiphany
galeon * V:1.1, I:1.8 1684 , , GNOMEGaleonEpiphanyが継承
konqueror * V:10, I:18 3248 , , KDEKonqueror
w3m * V:22, I:84 1964 テキスト w3m
lynx * I:24 248 , , Lynx
elinks * V:2, I:6 1444 , , ELinks
links * V:3, I:9 1372 , , Links (テキストのみ)
links2 * V:0.9, I:4 3280 グラフィクス Links (Xを使わないコンソールグラフィクス)

6.1.1. ブラウザー設定

次に示す特別のURL文字列を使うと一部のブラウザーでその設定値を確認する事ができます。

  • "about:"
  • "about:config"
  • "about:plugins"

Debianは、Java (ソフトウエアープラットフォーム)Flashのみならず、MPEGMPEG2MPEG4DivXWindows Media Video (.wmv)QuickTime (.mov)MP3 (.mp3)Ogg/VorbisファイルやDVDsやVCDs等を取り扱えるブラウザーのプラグインコンポーネントを提供します。Debianではnon-freeのブラウザープラグインパッケージをcontribかnon-freeのコンポーネントのブラウザープラグインとしてインストールできます。

表6.2 ブラウザープラグインのリスト

パッケージ ポプコン サイズ コンポーネント 説明
icedtea-gcjwebplugin * V:0.5, I:0.7 204 main Hotspot JITを使うJavaプラグイン
sun-java6-plugin * I:10 52 non-free SunのJava SE 6(i386専用)のためのJavaプラグイン
swfdec-mozilla * V:10, I:23 244 main libswfdecに基づくFlashのプラグイン
mozilla-plugin-gnash * V:0.4, I:1.8 164 main Gnashに基づくFlashのプラグイン
flashplugin-nonfree * V:1.4, I:13 132 contrib Adobe Flash Player (i386とamd64専用)をインストールするFlashのプラグインヘルパー
mozilla-plugin-vlc * V:3, I:4 140 main VLCメディアプレイヤーに基づくマルチメディアプラグイン
totem-mozilla * V:21, I:37 600 main GNOME's Totemメディアプレイヤーに基づくマルチメディアプラグイン
gecko-mediaplayer * V:0.4, I:0.5 716 main (GNOME) MPlayerに基づくマルチメディアプラグイン
nspluginwrapper * V:1.2, I:2 472 contrib i386 Netscapeプラグインをamd64アーキテクチャー上で実行するためのラッパー

[ティップ] ティップ

上記のDebianパッケージを使うのが遥に簡単であるとはいえ、今でもブラウザーのプラグインは"*.so"をプラグインディレクトリー(例えば"/usr/lib/iceweasel/plugins/")等にインストールしブラウザーを再起動することで手動で有効にすることができます。

ウェッブサイトによっては使っているブラウザーのユーザーエージェント文字列によって接続を拒否します。こういう状況はユーザーエージェント文字列を誤魔化すことで回避できます。例えば、これは次の内容を "~/.gnome2/epiphany/mozilla/epiphany/user.js"か"~/.mozilla/firefox/*.default/user.js"といったユーザー設定ファイル追加すればできます。

user_pref{"general.useragent.override","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"};

こうする代わりに、URLに"about:config"を入力して表示画面内容を右クリックしてこの変数を追加や再設定することでもできます。

[注意] 注意

誤魔化されたユーザーエージェント文字列はJavaに対して良からぬ副次効果を引き起こすかもしれません。

6.2. メールシステム

[注意] 注意

もしインターネットと直接メール交換するメールサーバーを設定するなら、このような初歩的文書が不要なぐらいシステムを熟知しているべきです。

6.2.1. 近代的メールサービスの基礎

スパム(望みも頼みもしないe-mail)問題を封じ込めるために、多くの消費者用インターネット接続を提供するISPは対抗措置を実施しています。

  • 彼らの顧客がメッセージを送信するためのスマートホストサービスは、rfc4954で規定される(SMTP AUTHサービスの)パスワードを使いrfc4409で規定されるメッセージサブミッションポート(587)を使います。
  • ISPのネットワーク内部(但しISP自身の送信メールサーバーを除く)からのSMTPポート(25)からインターネットへの接続はブロックされます。
  • 外部ネットワークの怪しげなホストからISPの受信メールサーバーへのSMTPポート(25)接続はブロックされます。(ダイヤルアップ接続等の消費者用インターネット接続に用いられる動的IPアドレス範囲上のホストからの接続はほぼ確実にブロックされます。)

メールシステムを設定したりメール配達問題を解決する際には、こうした新たな制約に配慮しなければいけません。

このような敵意のあるインターネットの状況と制約を考慮して、Yahoo.comやGmail.com等の独立インターネットメールISPはトランスポートレイヤーセキュリティー(TLS)やその前駆者であるセキュアーソケットレイヤー(SSL)を使ってインターネット上のどこからでも接続できるセキュアーなメールサービスを提供しています。

  • 彼らの顧客がメッセージを送信するためのスマートホストサービスはパスワード(SMTP AUTHサービス)を使いSMTP/SSLポート(465)かメッセージサブミッションポート(587)を使います。
  • 受信メールにはPOP3を使ってTLS/POP3ポート(995)でアクセスできます。
[注意] 注意

リモートホストに確実にメールを直接送るために、消費者用インターネット接続上でSMTPサーバーを実行するのは現実的ではありません。メールは拒否されるでしょう。あなたの接続ISPもしくは独立メールISPが提供する何らかのスマートホストサービスを使わなければいけません。次の文章では簡単のために、そのスマートホストが"smtp.hostname.dom"にあり、SMTP AUTHを必要とし、メッセージサブミッションポート(587)を使うと仮定します。

6.2.2. ワークステーションのメール設定戦略

最も簡単なメール設定は、MUA(「メールユーザーエージェント(MUA)」参照)自身がISPのスマートホストにメールを送信しISPのPOP3サーバーからメールを受信する設定です。この設定タイプは機能が充実したicedove(1)やevolution(1)等のGUIのMUAでよく使われます。メールを種類毎にフィルターする必要がある際にはMUAのフィルター機能を使う必要があります。このような場合にはローカルのMTA(「メールトランスポートエージェント(MTA)」参照)はローカル配送のみをする必要があります。

これに代わるメール設定は、ローカルのMTA経由でISPのスマートホストにメールを送信しISPのPOP3サーバーからメール取得プログラム(「リモートメールの取得および転送ユーティリティー」参照)によってローカルのメイルボックスに受信する設定です。メールの種類毎にフィルターする必要がある場合には、フィルター付きのMDA(「フィルター付きのメールデリバリーエージェント(MDA)」参照)を使って別々のメイルボックスにフィルターします。このタイプの設定は、どんなMUAで設定することができるのですが、単純なmutt(1)やgnus(1)等のコンソールのMUA(「メールユーザーエージェント(MUA)」参照)でよく使われます。がある際にはMUAのフィルター機能を使う必要があります。このような場合にはローカルのMTA(「メールトランスポートエージェント(MTA)」参照)はスマートホストへの配送とローカル配送の両方をする必要があります。

6.3. メールトランスポートエージェント(MTA)

普通のワークステーションでは、メールトランスポートエージェント(MTA)にexim4-*postfixパッケージのどちらがよく選ばれます。この選択は全くあなた次第です。

表6.3 ワークステーションでの基本的メールトランスポートエージェント関連パッケージのリスト

パッケージ ポプコン サイズ 説明
exim4-daemon-light * V:60, I:66 944 Exim4メールトランスポートエージェント(MTA: Debianのデフォールト)
exim4-base * V:62, I:68 1576 Exim4文書(text)と共通ファイル
exim4-doc-html * I:0.7 3452 Exim4文書(html)
exim4-doc-info * I:0.4 556 Exim4文書(info)
postfix * V:17, I:19 3236 Postfixメールトランスポートエージェント(MTA: Debianの代替候補)
postfix-doc * I:2 3336 Postfix文書(html+text)
sasl2-bin * V:2, I:5 448 Cyrus SASL APIの実装(SMTP AUTHについてpostfixを補完)
cyrus-sasl2-doc * I:3 284 Cyrus SASL - 文書

ポプコンの投票数ではexim4-*postfixより何倍も人気があるようですが、postfixがDebianのデベロッパーに人気がないということではありません。Debianのサーバーシステムはexim4postfixも使っています。目立つDebianのデベロッパーからのメーリングリスト投稿メールのヘッダーの分析は、これら両方のMTAがともに人気があることを示唆しています。

exim4-*パッケージは非常に小さなメモリー消費とその設定が非常にフレキシブルであることで知られています。postfixパッケージは非常にコンパクトで高速で単純でセキュアーであることで知られています。両ソフトウエアーは十分な文書とともに提供され、品質とライセンスでもともに良好です。

Debianアーカイブ中には異なった能力と狙いを持ったメールトランスポートエージェント(MTA)パッケージに関して多くの選択肢があります。

表6.4 Debianアーカイブ中のメールトランスポートエージェント(MTA)パッケージに関する選択肢リスト

パッケージ ポプコン サイズ 能力と狙い
exim4-daemon-light * V:60, I:66 944 高機能
postfix * V:17, I:19 3236 高機能(セキュリティー)
exim4-daemon-heavy * V:1.8, I:2 1056 高機能(柔軟性)
sendmail-bin * V:2, I:2 2080 高機能(既に慣れている場合)
nullmailer * V:0.6, I:0.8 436 超軽量、ローカルメール無し
ssmtp * V:0.9, I:1.5 0 超軽量、ローカルメール無し
courier-mta * V:0.17, I:0.2 4032 超高機能
xmail * V:0.16, I:0.19 836 軽量
masqmail * V:0.04, I:0.06 556 軽量
esmtp * V:0.10, I:0.2 152 軽量
esmtp-run * V:0.07, I:0.12 60 軽量(esmtpのsendmail互換性拡張)
msmtp * V:0.2, I:0.7 328 軽量
msmtp-mta * V:0.09, I:0.12 32 軽量(msmtpのsendmail互換性拡張)

6.3.1. exim4設定

スマートホスト経由のインターネットメールに関しては、exim4-*パッケージを次のように(再)設定します。

$ sudo /etc/init.d/exim4 stop
$ sudo dpkg-reconfigure exim4-conf

"スマートホストでメール送信; SMTP または fetchmail で受信する"を選択します。

"送出スマートホストの IP アドレスまたはホスト名:"を"smtp.hostname.dom:587"と設定します。

"DNSクエリの数を最小限に留めますか(ダイヤルオンデマンド)?"に次の内のひとつの返答をします。

  • 起動時にインターネットに接続されている場合は、"No"。
  • 起動時にインターネットに接続されていない場合は、"Yes"。

" /etc/exim4/passwd.client"を編集しスマートホストのためのパスワードエントリーを作成

$ sudo vim /etc/exim4/passwd.client
 ...
$ cat /etc/exim4/passwd.client
^smtp.*\.hostname\.dom:username@hostname.dom:password

次のようにしてexim4を起動します。

$ sudo /etc/init.d/exim4 start

"/etc/exim4/passwd.client"中のホスト名はエリアスであってはいけません。真のホスト名は次の様にして確認できます。

$ host smtp.hostname.dom
smtp.hostname.dom is an alias for smtp99.hostname.dom.
smtp99.hostname.dom has address 123.234.123.89

エリアス問題を回避するために"/etc/exim4/passwd.client"の中に正規表現を用いています。もしISPがエリアスで示されるホストを移動させてもSMTP AUTHがきっと動きます。

[注意] 注意

"/etc/exim4/"中のexim4設定ファイルを手動で改変した後にはupdate-exim4.conf(8)を実行しなければいけません。

[注意] 注意

"DNSクエリの数を最小限に留めますか(ダイヤルオンデマンド)?"というdebconfの質問に"No" (デフォールト値)が選ばれシステムがブート時にインターネットに繋がっていない場合、exim4の起動は長い時間がかかります。

[注記] 注記

次に示す正式のガイドを読んで下さい: "/usr/share/doc/exim4-base/README.Debian.gz"とupdate-exim4.conf(8)。

[ティップ] ティップ

ローカルのカスタム化ファイル"/etc/exim4/exim4.conf.localmacros"を作成してMACROを設定してもいいです。例えば、Yahooのメールサービスでは"MAIN_TLS_ENABLE = true"と"AUTH_CLIENT_ALLOW_NOTLS_PASSWORDS = yes"がその設定の中に必要だと言われています。

[ティップ] ティップ

あなたのラップトップPC用に"/etc/aliases"を尊重する軽量MTAを探しているなら、exim4(8)の設定を"/etc/default/exim4"中に"QUEUERUNNER='nodaemon'"等とする事を考慮するべきです。

6.3.2. SASLを使うpostfixの設定

スマートホスト経由のインターネットメールに関してはpostfix文書と重要マニュアルページを読むことから始めるべきです。

表6.5 重要postfixマニュアルページのリスト

コマンド 機能
postfix(1) Postfixコントロールプログラム
postconf(1) Postfixの設定ユーティリティー
postconf(5) Postfix設定パラメーター
postmap(1) Postfix検索テーブルのメンテナンス
postalias(1) Postfixエリアスデーターベースのメンテナンス

postfixsasl2-binパッケージを次のように(再)設定します。

$ sudo /etc/init.d/postfix stop
$ sudo dpkg-reconfigure postfix

"スマートホストを使ってインターネット"を選択します。

"SMTP リレーホスト (なければ空):"を"[smtp.hostname.dom]:587"と設定します。

$ sudo postconf -e 'smtp_sender_dependent_authentication = yes'
$ sudo postconf -e 'smtp_sasl_auth_enable = yes'
$ sudo postconf -e 'smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd'
$ sudo postconf -e 'smtp_sasl_type = cyrus'
$ sudo vim /etc/postfix/sasl_passwd

スマートホストのパスワードエントリーを作成します。

$ cat /etc/postfix/sasl_passwd
[smtp.hostname.dom]:587     username:password
$ sudo postmap hush:/etc/postfix/sasl_passwd

次に記すようにpostfixを起動します。

$ sudo /etc/init.d/postfix start

dpkg-reconfigureダイアログと"/etc/postfix/sasl_passwd"の中で"["と"]"を使うことでMXレコードを確認せずに指定されたhostnameその物を直接使うように確実にします。"usr/share/doc/postfix/html/SASL_README.html"の中の"Enabling SASL authentication in the Postfix SMTP client"を参照下さい。

6.3.3. メールアドレス設定

メールのトランスポートとデリバリーとユーザーのエージェントが使うメールアドレス設定ファイルが少々存在します。

表6.6 メールアドレス関連のファイルのリスト

ファイル 機能 アプリケーション
/etc/mailname (送出)メールのデフォールトのホスト名 Debian固有、mailname(5)
/etc/email-addresses 送出メールのホスト名のなりすまし exim(8)固有、exim4-config_files(5)
/etc/postfix/generic 送出メールのホスト名のなりすまし postfix(1)固有、postmap(1)コマンド実行後有効。
/etc/aliases 受入メールのためのアカウント名のエリアス 一般的、newaliases(1)コマンド実行後有効。

通常"/etc/mailname"ファイル中のmailnameはホストのIPの一つとして解決できる完全修飾ドメイン名(FQDN)です。解決できるIPアドレスのあるホスト名を持たない可動ワークステーションの場合には、このmailnameを"hostname -f"に設定します。(これはexim4-*postfixの両方に有効な安全な選択肢です。)

[ティップ] ティップ

"/etc/mailname"の内容は多くのMTA以外のプログラムによってそのデフォールト挙動のために使われます。muttの場合、~/muttrcファイル中の"hostname"と"from"変数を設定してmailnameの値をオーバーライドします。bts(1)やdch(1)等のdevscriptsパッケージ中のプログラムの場合、環境変数の"$DEBFULLNAME"や"$DEBEMAIL"をエキスポートしてその値をオーバーライドします。

mailnameを"hostname -f"と設定した時には、次によってMTAで発信元メールアドレスを誤魔化すことが実現できます。

  • exim4(8)の場合、exim4-config_files(5)に説明されているように"/etc/email-addresses"
  • postfix(1)の場合、generic(5)に説明されているように"/etc/postfix/generic"

postfixの場合、次に記す追加ステップが必要です。

# postmap hash:/etc/postfix/generic
# postconf -e 'smtp_generic_maps = hash:/etc/postfix/generic'
# postfix reload

フィルターを次の様にして確認します。

  • exim(8)の場合、-brw, -bf, -bF, -bV, …オプションを使用
  • postmap(1)の場合、-qオプションを使用
[ティップ] ティップ

Eximはexiqgrep(8)やexipick(8)のようないくつかのユーティリティープログラムとともに供給されます。利用可能なコマンドは"dpkg -L exim4-base|grep man8/"を参照下さい。

6.3.4. 基本的なMTAの操作

基本的なMTA操作が存在します。その一部はsendmail(1)互換性インターフェース経由で実行する事もできます。

表6.7 基本的MTA操作のリスト

eximコマンド postfixコマンド 説明
sendmail sendmail 標準入力からメールを読み配送を手配(-bm)
mailq mailq メールキューを状態とキューIDとともにリスト(-bp)
newaliases newaliases エリアスデーターベースを初期化(-I)
exim4 -q postqueue -f 待機メールを排出(-q)
exim4 -qf postsuper -r ALL deferred; postqueue -f 全メールを排出
exim4 -qff postsuper -r ALL; postqueue -f 凍結メールをも排出
exim4 -Mg queue_id postsuper -h queue_id キューIDによってメッセージを凍結
exim4 -Mrm queue_id postsuper -d queue_id キューIDによってメッセージを削除
N/A postsuper -d ALL 全メッセージを削除

[ティップ] ティップ

"/etc/ppp/ip-up.d/*"中のスクリプトで全メールを排出するのは良い考えかも知れません。

6.4. メールユーザーエージェント(MUA)

Debian関連のメーリングリストを購読する場合、参加者のデファクトスタンダードで期待通り挙動をするmuttgnus等のMUAを使うのは良い考えかも知れません。

表6.8 メールユーザーエージェント(MUA)のリスト

パッケージ ポプコン サイズ タイプ
iceweasel * V:30, I:52 3852 X GUIプログラム(ブランドを外した Mozilla Firefox)
evolution * V:22, I:37 11180 X GUIプログラム(グループウエアスイートの一部)
icedove * V:10, I:14 38048 X GUIプログラム(ブランドを外した Mozilla Thunderbird)
mutt * V:20, I:83 5996 きっとvimとともに使われるキャラクターターミナルプログラム
gnus * V:0.05, I:0.4 6421 (x)emacsの下でキャラクターターミナルプログラム

6.4.1. 基本MUA — Mutt

vimと組み合わせてmuttをメールユーザーエージェント(MUA)として使うように"~/.muttrc"を使って次に示すようにカスタム化します。

# use visual mode and "gq" to reformat quotes
set editor="vim -c 'set tw=72 et ft=mail'"
#
# header weeding taken from the manual (Sven's Draconian header weeding)
#
ignore *
unignore from: date subject to cc
unignore user-agent x-mailer
hdr_order from subject to cc date user-agent x-mailer
set hostname=spoof.example.org
set from="First Last <username@example.org>"
....

HTMLメールやMSワードのインラインのアッタチメントを表示するように、"/etc/mailcap"か"~/.mailcap"に次に記す内容を追加します。

text/html; lynx -force_html %s; needsterminal;
application/msword; /usr/bin/antiword '%s'; copiousoutput; description="Microsoft Word Text"; nametemplate=%s.doc

6.5. リモートメールの取得および転送ユーティリティー

fetchmail(1)はGNU/Linux上のリモートメールの取得のデファクト標準でしたが、著者は現在getmail(1)が気に入っています。もしバンド幅を節約するためにメールをダウンロードする前に拒否したいなら、mailfiltermpopが役に立つかもしれません。どのメールの取得ユーティリティーを使おうとも、取得したメールをパイプ経由でmaildrop等のMDAに配送するようにシステム設定をすることをお勧めします。

表6.9 リモートメールの取得および転送ユーティリティーのリスト

パッケージ ポプコン サイズ 説明
fetchmail * V:2, I:6 1816 メール取得ユーティリティー(POP3、APOP、IMAP) (旧式)
getmail4 * V:0.3, I:0.8 648 メール取得ユーティリティー(POP3、IMAP4、SDPS) (単純、セキュアー、高信頼)
mailfilter * V:0.01, I:0.07 332 メール取得ユーティリティー(POP3)、regexフィルター機能付き
mpop * V:0.01, I:0.07 264 メール取得ユーティリティー(POP3)かつMDA、フィルター機能付き

6.5.1. getmailの設定

getmail(1)の設定はgetmail文書に記載されています。次に示すのがユーザーとして複数のPOP3アカウントにアクセスする著者の設定です。

"/usr/local/bin/getmails"を次のように作成します。

#!/bin/sh
set -e
rcfiles="/usr/bin/getmail"
for file in $HOME/.getmail/config/* ; do
  rcfiles="$rcfiles --rcfile $file"
done
exec $rcfiles $@

次のように設定します。

$ sudo chmod 755 /usr/local/bin/getmails
$ mkdir -m 0700 $HOME/.getmail
$ mkdir -m 0700 $HOME/.getmail/config
$ mkdir -m 0700 $HOME/.getmail/log

各POP3アカウント毎に"$HOME/.getmail/config/pop3_name"設定ファイルを次のように作成します。

[retriever]
type = SimplePOP3SSLRetriever
server = pop.example.com
username =  pop3_name@example.com
password = secret

[destination]
type = MDA_external
path = /usr/bin/maildrop
unixfrom = True

[options]
verbose = 0
delete = True
delivered_to = False
message_log = ~/.getmail/log/pop3_name.log

次のように設定します。

$ chmod 0600 $HOME/.getmail/config/*

"/usr/local/bin/getmails"が15分毎にcron(8)により実行されるようにスケジュールするために、"sudo crontab -e -u <user_name>"と実行して次に記すユーザーのcronエントリーを追加します。

5,20,35,50 * * * * /usr/local/bin/getmails --quiet
[ティップ] ティップ

POP3へのアクセス問題はgetmailに起因しないかもしれません。一部の有名な無償のPOP3サービスはPOP3のプロトコルに違反しているかも知れませんし、それらのスパムフィルターが完璧でないかも知れません。例えば、RETRコマンドを受信するとDELEコマンドの受信を待たずにメッセージを消去するかもしれませんし、スパムメールボックスに隔離するかも知れません。被害を最小限にするにアクセスされたメッセージをアーカイブして消去しないようにサービスの設定をします。"Some mail was not downloaded"を参照下さい。

6.5.2. fetchmailの設定

fetchmail(1)を設定するには、"/etc/default/fetchmail"や"/etc/fetchmailrc"や"$HOME/.fetchmailrc"を設定します。"/usr/share/doc/fetchmail/examples/fetchmailrc.example"中の例を参照下さい。

6.6. フィルター付きのメールデリバリーエージェント(MDA)

postfixexim4等のほとんどのMTAプログラムは、MDA(メールデリバリーエージェント)として機能します。フィルター機能のある専門のMDAがあります。

procmail(1)はGNU/Linux上のフィルター付きのMDAのデファクト標準でしたが、著者は現在maildrop(1)が気に入っています。どのフィルターユーティリティーを使おうとも、フィルターされたメールをqmailスタイルのMaildirにデリバリーするようにシステムを設定します。

表6.10 フィルター付きのMDAのリスト

パッケージ ポプコン サイズ 説明
procmail * V:17, I:85 364 フィルター付きMDA(旧式)
mailagent * V:0.4, I:6 1692 Perlフィルター付きMDA
maildrop * V:0.3, I:0.8 1060 構造化フィルター言語付きMDA

6.6.1. maildropの設定

maildrop(1)の設定はmaildropfilter文書に記載されています。次に"$HOME/.mailfilter"の設定例を示します。

logfile $HOME/.maildroplog
# clearly bad looking mails: drop them into X-trash and exit
if (    /^X-Advertisement/ ||\
        /^Subject:.*BUSINESS PROPOSAL/ ||\
        /^Subject:.*URGENT.*ASISSTANCE/ ||\
        /^Subject: *I NEED YOUR ASSISTANCE/ )
    to "$HOME/Maildir/X-trash/"

# Delivering mailinglist messages using automatically generated mailbox
if (    /^Precedence:.*list/ || /^Precedence:.*bulk/ )
{
    if ( /^List-Id:[ <]*([^<>]*)[ >]*/)
    {
        MAILBOX="$MATCH1"
    }
    else
    {
        if ( /^X-Loop: *(.*)@(.*)/)
        {
            MAILBOX="$MATCH1.$MATCH2"
        }
        else
        {
            if (    /Return-Path:.*\.debian\.org/ )
            {
                MAILBOX="automatic.debian.org"
            }
            else
            {
                MAILBOX="unknown-list"
            }
        }
    }
    `test -d $MAILROOT/$MAILBOX`
    if ( $RETURNCODE == 1 )
        `maildirmake $MAILROOT/$MAILBOX`
    to "$MAILROOT/$MAILBOX/"
}
to "$HOME/Maildir/Inbox/"
exit
[警告] 警告

procmailと違い、maildropは欠落したmaildirディレクトリーを自動的に作りません。"$HOME/.mailfilter"の例中のように事前にmaildirmake(1)を使ってディレクトリーを作らなければいけません。

6.6.2. procmailの設定

procmail(1)用の"$HOME/.procmailrc"を使う同様の設定を次に記します。

MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/Inbox/
LOGFILE=$MAILDIR/Maillog
# clearly bad looking mails: drop them into X-trash and exit
:0
* 1^0 ^X-Advertisement
* 1^0 ^Subject:.*BUSINESS PROPOSAL
* 1^0 ^Subject:.*URGENT.*ASISSTANCE
* 1^0 ^Subject: *I NEED YOUR ASSISTANCE
X-trash/

# Delivering mailinglist messages
:0
* 1^0 ^Precedence:.*list
* 1^0 ^Precedence:.*bulk
* 1^0 ^List-
* 1^0 ^X-Distribution:.*bulk
{
:0
* 1^0 ^Return-path:.*debian-devel-admin@debian.or.jp
jp-debian-devel/

:0
* ^Resent-Sender.*debian-user-request@lists.debian.org
debian-user/

:0
* ^Resent-Sender.*debian-devel-request@lists.debian.org
debian-devel/

:0
* ^Resent-Sender.*debian-announce-request@lists.debian.org
debian-announce

:0
mailing-list/
}

:0
Inbox/

6.6.3. mboxの内容の再配達

もしあなたのホームディレクトリーが一杯になりprocmail(1)がうまく機能しなかった場合には、"/var/mail/<username>"からホームディレクトリー内の仕分けられたメールボックスの中に手動でメールを配達しなければいけません。ディスク空間を確保した後に、次を実行します。

# /etc/init.d/${MAILDAEMON} stop
# formail -s procmail </var/mail/<username>
# /etc/init.d/${MAILDAEMON} start

6.7. POP3/IMAP4サーバー

LAN上でプライベートのサーバーを実行する場合、LANクライアントにメールを配達するためにPOP3 / IMAP4サーバーを実行することを考えます。

表6.11 POP3/IMAPサーバーのリスト

パッケージ ポプコン サイズ タイプ 説明
qpopper * V:1.1, I:5 644 POP3 Qualcomm拡張のBSD POP3サーバー
courier-pop * V:1.5, I:2 244 POP3 Courierメールサーバー - POP3サーバー(maildirフォーマットのみ)
ipopd * V:0.11, I:0.2 212 POP3 Washington大学POP2とPOP3サーバー
cyrus-pop3d-2.2 * V:0.18, I:0.3 852 POP3 Cyrusメールシステム(POP3サポート)
xmail * V:0.16, I:0.19 836 POP3 ESMTP/POP3メールサーバー
courier-imap * V:3, I:4 1616 IMAP Courierメールサーバー - IMAPサーバー(maildirフォーマットのみ)
uw-imapd * V:0.8, I:5 272 IMAP Washington大学IMAPサーバー
cyrus-imapd-2.2 * V:0.5, I:0.7 2632 IMAP Cyrusメールシステム(IMAPサポート)

6.8. プリントサーバーとユーティリティー

旧来のUnix的システムではBSDのラインプリンターデーモンが標準でした。 Unix的システム上のフリーソフトの標準プリント出力フォーマットはPostScriptなので、Ghostscriptとともに何らかのフィルターシステムを使ってnon-PostScriptプリンターへの印刷が可能になっています。

最近、共通UNIX印刷システム(CUPS)が新しいデファクトスタンダードです。CUPSは、インターネット印刷プロトコル(IPP)を使います。IPPは現在Windows XPやMac OS X等の他のOSでもサポートされ、新たなクロスプラットフォームの両方向通信能力のあるリモート印刷のデファクト標準となっています。

Debianシステム上のアプリケーションの標準の印刷可能データーフォーマットは、ページ記述言語であるPostScript (PS)です。PSフォーマットのデーターはGhostscriptというPostScriptのインタープリターに供給され、プリンター固有の印刷可能なデーターを生成します。「Ghostscript」を参照下さい。

CUPSシステムのファイルフォーマット依存の自動変換機能のおかげで、どんなデーターでもlprコマンドに供給すると期待される印刷出力が生成されます。(CUPSでは、lprcups-bsdパッケージをインストールすると有効となります。)

Debianシステムには、プリントサーバーやユーティリティーで留意すべきパッケージがいくつかあります。

表6.12 プリントサーバーとユーティリティーのリスト

パッケージ ポプコン サイズ ポート 説明
lpr * V:2, I:3 440 printer (515) BSD lpr/lpd (ラインプリンターデーモン)
lprng * V:0.8, I:1.1 2904 , , , , (拡張)
cups * V:33, I:43 7584 IPP (631) インターネット印刷CUPSサーバー
cups-client * V:15, I:45 440 , , CUPS用System Vプリンターコマンド: lp(1)とlpstat(1)とlpoptions(1)とcancel(1)とlpmove(8)とlpinfo(8)とlpadmin(8)等
cups-bsd * V:8, I:40 180 , , CUPS用BSDプリンターコマンド: lpr(1)とlpq(1)とlprm(1)とlpc(8)等
cups-driver-gutenprint * V:10, I:37 1292 非該当 CUPS用のプリンタードライバー

[ティップ] ティップ

CUPSシステムはウェッブブラウザーを"http://localhost:631/" に向けることで設定できます。

6.9. リーモートアクセスサーバーとユーティリティー(SSH)

セキュアーシェル(SSH)はインターネット経由で接続するセキュアーな方法です。Debianでは、OpenSSHと呼ばれるSSHのフリーバージョンがopenssh-clientopenssh-serverパッケージとして提供されています。

表6.13 リモートアクセスサーバーとユーティリティーのリスト

パッケージ ポプコン サイズ ツール 説明
openssh-client * V:52, I:99 2076 ssh(1) セキュアーシェルクライアント
openssh-server * V:67, I:80 808 sshd(8) セキュアーシェルサーバー
ssh-askpass-fullscreen * V:0.08, I:0.4 92 ssh-askpass-fullscreen(1) ユーザーにssh-add用のパスフレーズを質問する(GNOME2)
ssh-askpass * V:0.7, I:4 156 ssh-askpass(1) ユーザーにssh-add用のパスフレーズを質問する(プレーンX)

[注意] 注意

あなたのSSHがインターネットからアクセスできる場合には、「インターネットのためのセキュリティー強化策」を参照下さい。

[ティップ] ティップ

リモートのシェルプロセスが回線接続の中断の際にも継続するようにするためにscreen(1)プログラムを使いましょう(「screenプログラム」参照)。

6.9.1. SSHの基本

[警告] 警告

OpenSSHサーバーを実行したい場合には、"/etc/ssh/sshd_not_to_be_run"が存在してはいけません。

SSHには2つの認証プロトコルがあります。

表6.14 SSHの認証プロトコルと方法のリスト

SSHプロトコル SSH手法 説明
SSH-1 "RSAAuthentication" RSAアイデンティティ鍵を用いるユーザー認証
, , "RhostsAuthentication" ".rhosts"に基づくホスト認証(インセキュアー、無効化済み)
, , "RhostsRSAAuthentication" RSAホストキーと組み合わせの、".rhosts"に基づくホスト認証(無効化済み)
, , "ChallengeResponseAuthentication" RSAチャレンジ応答認証
, , "PasswordAuthentication" パスワードを用いる認証
SSH-2 "PubkeyAuthentication" 公開鍵を用いるユーザー認証
, , "HostbasedAuthentication" 公開キークライアントホスト認証と組み合わせの、"~/.rhosts"か"/etc/hosts.equiv"に基づくホスト認証(無効化済み)
, , "ChallengeResponseAuthentication" チャレンジ応答認証
, , "PasswordAuthentication" パスワードを用いる認証

[注意] 注意

非Debianシステムを使う際にはこれらの相違点に注意します。

詳細は、"/usr/share/doc/ssh/README.Debian.gz"とssh(1)とsshd(8)とssh-agent(1)とssh-keygen(1)を参照下さい。

次に示すのがキーとなる設定ファイルです。

表6.15 SSH設定ファイルのリスト

設定ファイル 設定ファイルの説明
/etc/ssh/ssh_config SSHクライアントのデフォールト、ssh_config(5)参照
/etc/ssh/sshd_config SSHサーバーのデフォールト、sshd_config(5)参照
~/.ssh/authorized_keys 当該SSHサーバーの当該アカウント接続用にクライアントが使用するデフォールト公開SSHキー
~/.ssh/identity ユーザーの秘密SSH-1 RSAキー
~/.ssh/id_rsa ユーザーの秘密SSH-2 RSAキー
~/.ssh/id_dsa ユーザーの秘密SSH-2 DSAキー

[ティップ] ティップ

公開と秘密のSSHキーをどう使うかに関しては、ssh-keygen(1)とssh-add(1)とssh-agent(1)を参照下さい。

[ティップ] ティップ

接続をテストして設定を確認します。何らかの問題がある際には、"ssh -v"を使います。

[ティップ] ティップ

ローカルの秘密SSHキーを暗号化するパスフレーズは"ssh-keygen -p"として後から変更できます。

[ティップ] ティップ

ホストを制限したり特定コマンドを実行するように"~/.ssh/authorized_keys"中に記載してオプションを追加できます。詳細は、sshd(8)を参照下さい。

次に示す内容は、クライアントからssh(1)接続をスタートします。

表6.16 SSHクライアント起動例のリスト

コマンド 説明
ssh username@hostname.domain.ext デフォールトモードで接続します。
ssh -v username@hostname.domain.ext デバグメッセージを有効にしてデフォールトモードで接続します。
ssh -1 username@hostname.domain.ext SSH version 1での接続を強制します。
ssh -1 -o RSAAuthentication=no -l username hostname.domain.ext SSH version 1でパスワードを使うことを強制します。
ssh -o PreferredAuthentications=password -l username hostname.domain.ext SSH version 2でパスワードを使うことを強制します。

もしローカルとリモートで同一ユーザー名を使う際には、"username@"とタイプするのを省略できます。たとえローカルとリモートで異なるユーザー名を使う際にでも、"~/.ssh/config"とタイプするのを省略できます。例えばDebian Aliothサービスでのユーザー名が"foo-guest"という場合には、"~/.ssh/config"が次を含むように設定します。

Host alioth.debian.org svn.debian.org git.debian.org
    User foo-guest

ssh(1)はユーザーにとってより賢明でよりセキュアーなtelnet(1)として機能します。telnetコマンドと異なり、sshコマンドはtelnetエスケープ文字(初期デフォールト CTRL-])に出会うことで中断される事がありません。

6.9.2. SMTP/POP3トンネルをするためのポートフォワーディング

sshを通してlocalhostのポート4025からremote-serverのポート25へと、localhostのポート4110からremote-serverのポート110へと接続するパイプを設定するには、ローカルホスト上で次のように実行します。

# ssh -q -L 4025:remote-server:25 4110:remote-server:110 username@remote-server

このようにするとインターネット経由でSMTP/POP3サーバーへとセキュアーに接続できます。リモートホストの"/etc/ssh/sshd_config"中の"AllowTcpForwarding"エントリーを"yes"と設定します。

6.9.3. リモートパスワード無しでの接続

"RSAAuthentication" (SSH-1プロトコル)もしくは"PubkeyAuthentication" (SSH-2プロトコル)を使うと、リモートシステムのパスワードを覚える必要が無くなります。

リモートシステム上の"/etc/ssh/sshd_config"中に"RSAAuthentication yes"か"PubkeyAuthentication yes"という対応する設定をします。

次に示すように、ローカルで認証キーを生成しリモートシステム上に公開キーをインストールします。

  • "RSAAuthentication": SSH-1のRSAキー(置き換えられたので非推奨。)
$ ssh-keygen
$ cat .ssh/identity.pub | ssh user1@remote "cat - >>.ssh/authorized_keys"
  • "PubkeyAuthentication": SSH-2のRSAキー
$ ssh-keygen -t rsa
$ cat .ssh/id_rsa.pub | ssh user1@remote "cat - >>.ssh/authorized_keys"
  • "PubkeyAuthentication": SSH-2のDSAキー(遅いので非推奨。)
$ ssh-keygen -t dsa
$ cat .ssh/id_dsa.pub | ssh user1@remote "cat - >>.ssh/authorized_keys"
[ティップ] ティップ

SSH-2のDSAキーを使うことは、キーが小さく遅いので非推奨です。特許が期限切れとなったのでDSAを使ってRSA特許を回避する理由はありません。DSAはデジタル署名アルゴリズムで遅いです。またDSA-1571-1も参照下さい。

[注記] 注記

SSH-2で"HostbasedAuthentication"が機能するには、サーバーホストの"/etc/ssh/sshd_config"と、クライアントホストの"/etc/ssh/ssh_config"か"~/.ssh/config"という両方のホスト設定で"HostbasedAuthentication"を"yes"と調節する必要があります。

6.9.4. 外部SSHクライアントへの対処法

他のプラットフォーム上で使えるフリーなSSHクライアントがいくつかあります。

表6.17 他のプラットフォーム上で使えるフリーなSSHクライアントのリスト

環境 フリーのSSHプログラム
Windows puTTY (http://www.chiark.greenend.org.uk/~sgtatham/putty/) (GPL)
Windows (cygwin) cygwin中のSSH (http://www.cygwin.com/) (GPL)
古典的Macintosh macSSH (http://www.macssh.com/) (GPL)
Mac OS X OpenSSH; ターミナルアプリケーションのsshを使用しましょう(GPL)

6.9.5. ssh-agentの設定

SSHの認証キーをパスフレーズで保護する方がより安全です。もしパスフレーズが設定されていない場合には"ssh-keygen -p"で設定できます。

上記のようにパスワードを使って接続したリモートホスト上の"~/.ssh/authorized_keys"中にあなたの公開SSHキー(例えば"~/.ssh/id_rsa.pub")を設定します。

$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /home/<username>/.ssh/id_rsa:
Identity added: /home/<username>/.ssh/id_rsa (/home/<username>/.ssh/id_rsa)

次に示すように、今後リモートパスワードは必要ありません。

$ scp foo <username>@remote.host:foo

ssh-agentのセッションを終了するのに^Dを押します。

Xサーバーの場合、通常のDebianの起動スクリプトは親プロセスとしてssh-agentを実行します。だからssh-addは1回だけ実行される必要しかありません。詳細はssh-agent(1)and ssh-add(1)を参照下さい。

6.9.6. SSH上のリモートシステムをシャットダウンする方法

You need to protect the process doing "shutdown -h now"(「システムをシャットダウンする方法」参照)を実行しているプロセスをat(1)コマンド(「タスク1回実行のスケジュール」参照)を使って次のようにしてSSHが終了することから守る必要がある。

# echo "shutdown -h now" | at now

"shutdown -h now"をscreen(1)(「screenプログラム」参照)セッション中で実行しても同様のことができます。

6.9.7. SSHのトラブルシュート

問題に出会ったら、設定ファイルのパーミッションを確認し、sshを"-v"オプションとともに実行します。

rootでファイアーウォールと問題を起こした場合には、"-P"オプションを使いましょう; こうするとサーバーポートの 1 — 1023 を使うのを回避します。

リモートサイトへのssh接続が急に動作し無くなった際は、システム管理者による変更、特に可能性が高いのはシステムメンテナンス中に"host_key"が変更された結果かもしれません。実際にこういう状況で誰も洒落たハックでリモートホストとしてなりすまそうとしていないことを確認した後に、"host_key"エントリーをローカルホストの"~/.ssh/known_hosts"から削除すると再び接続できるようになります。

6.10. 他のネットワークアプリケーションサーバー

他のネットワークアプリケーションサーバーを次に示します。

表6.18 他のネットワークアプリケーションサーバー

パッケージ ポプコン サイズ プロトコル 説明
telnetd * V:0.4, I:1.2 156 TELNET TELNETサーバー
telnetd-ssl * V:0.15, I:0.4 152 , , , , (SSLサポート)
nfs-kernel-server * V:13, I:22 328 NFS Unix式ファイル共有
samba * V:20, I:33 17348 SMB Windowsのファイルとプリンター共有
netatalk * V:5, I:10 2452 ATP Apple/Macのファイルとプリンター共有(AppleTalk)
proftpd-basic * V:4, I:6 2008 FTP 汎用ファイルダウンロード
wu-ftpd * V:0.3, I:0.7 820 , , , ,
apache2-mpm-prefork * V:37, I:42 80 HTTP 汎用ウェッブサーバー
apache2-mpm-worker * V:6, I:7 80 , , , ,
squid * V:6, I:7 1840 , , 汎用ウェッブプロキシサーバー
squid3 * V:1.3, I:1.5 2452 , , , ,
slpd * V:0.17, I:0.3 228 SLP LDAP サーバーとしてのOpenSLP サーバー
bind9 * V:9, I:18 864 DNS 他のホストのIPアドレス
dhcp3-server * V:5, I:9 808 DHCP クライアント自身のIPアドレス

コモンインターネットファイルシステムプロトコル(CIFS)はサーバーメッセージブロック(SMB)と同じプロトコルでMicrosoft Windowsで広く使われています。

[ティップ] ティップ

Debianアーカイブの全内容のローカルのミラーサーバーを使うより、squid等のプロキシサーバーを使う方がはるかにバンド幅を節約上ではるかに効率的です。

6.11. 他のネットワークアプリケーションクライアント

他のネットワークアプリケーションクライアントを次に示します。

表6.19 他のネットワークアプリケーションクライアント

パッケージ ポプコン サイズ プロトコル 説明
netcat * I:42 36 TCP/IP TCP/IP用万能ツール(スイス陸軍ナイフ)
stunnel4 * V:0.5, I:1.9 512 SSL 万能SSLラッパー
telnet * V:14, I:90 200 TELNET TELNETクライアント
telnet-ssl * V:0.3, I:1.2 208 , , , , (SSLサポート)
nfs-common * V:48, I:81 516 NFS Unix式ファイル共有
smbclient * V:6, I:38 34220 SMB MS Windowsのファイルとプリンター共有
smbfs * V:5, I:26 5400 , , リモートのMS Windowsファイルをマウントやアンマウントするコマンド
ftp * V:10, I:86 120 FTP FTPクライアント
lftp * V:1.4, I:6 1864 , , , ,
ncftp * V:1.6, I:8 1212 , , フルスクリーンのFTPクライアント
wget * V:29, I:99 2356 HTTPFTP ウェッブダウンローダー
curl * V:6, I:21 324 , , , ,
bind9-host * V:41, I:90 180 DNS bind9由来のhost(1)コマンド、"Priority: standard"
dnsutils * V:12, I:91 396 , , bind由来のdig(1)コマンド、"Priority: standard"
dhcp3-client * V:47, I:94 608 DHCP IPアドレス獲得
ldap-utils * V:1.5, I:7 696 LDAP LDAPサーバーからデーター獲得

6.12. システムデーモンの診断

telnetプログラムを使うとシステムデーモンへの手動接続とその診断ができます。

例えば、次を試してみて下さい:

$ telnet mail.ispname.net pop3

次のRFCは各システムデーモンに関する必要な知見を提供します。

表6.20 よく使われるRFCのリスト

RFC 説明
rfc1939rfc2449 POP3サービス
rfc3501 IMAP4サービス
rfc2821 (rfc821) SMTPサービス
rfc2822 (rfc822) メールファイルフォーマット
rfc2045 Multipurpose Internet Mail Extensions (MIME)
rfc819 DNSサービス
rfc2616 HTTPサービス
rfc2396 URI定義

"/etc/services"の中にポートの使用され方が記載されています。

[注記] 注記

HTTPS等のTLS/SSLサービスをテストするには、TLS/SSLを有効にしたtelnetプログラムが必要です。