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

目次

6.1. ウェッブブラウザー
6.1.1. User-Agent 文字列をスプーフィングする
6.1.2. ブラウザー拡張
6.2. メールシステム
6.2.1. Eメールの基本
6.2.2. 現代的なメールサービスの制約
6.2.3. 歴史的なメールサービスへの期待
6.2.4. メール転送エージェント (MTA)
6.2.4.1. exim4 設定
6.2.4.2. SASL を使う postfix の設定
6.2.4.3. メールアドレス設定
6.2.4.4. 基本的な MTA の操作
6.3. リーモートアクセスサーバーとユーティリティー (SSH)
6.3.1. SSH の基本
6.3.2. リモートホストでのユーザ名
6.3.3. リモートパスワード無しでの接続
6.3.4. 外部 SSH クライアントへの対処法
6.3.5. ssh-agent の設定
6.3.6. リモートホストからメールを送信する
6.3.7. SMTP/POP3 トンネルをするためのポートフォワーディング
6.3.8. SSH 上のリモートシステムをシャットダウンする方法
6.3.9. SSH のトラブルシュート
6.4. プリントサーバーとユーティリティー
6.5. 他のネットワークアプリケーションサーバー
6.6. 他のネットワークアプリケーションクライアント
6.7. システムデーモンの診断

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

[ヒント] ヒント

現代的な Debian に特化したネットワークインターフェースのガイドは、 The Debian Administrator's Handbook — Network Infrastructure を参照下さい。

[ヒント] ヒント

もしどこかの ISP で "2段階認証" を有効にした場合、あなたのプログラムから POP や SMTP サービスにアクセスするアプリケーションパスワードを入手する必要があります。事前にあなたのホスト IP を許可する必要があるかもしれません。

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


本セクションは消費者用インターネット接続上の典型的モービルワークステーションにフォーカスします。

[注意] 注意

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

email メッセージは、メッセージのエンベロープ(封筒)と、メッセージのヘッダーと、メッセージの本体との、3 構成要素から成り立っています。

  • メッセージエンベロープ中の "To" (宛先)と "From" (差出人) 情報は SMTP が電子メールを配達するのに用いられます。(メッセージエンベロープの "From" 情報は バウンスアドレス、 From_、 等とも呼ばれます。)

  • メッセージヘッダー中の "To" (宛先)と "From" (差出人) 情報は email クライアント が email を表示するのに用いられます。(これらはメッセージエンベロープの情報と共通のことがよくありますが、必ずしもそうとは限りません。)

  • ヘッダーやボディーデーターを包含する電子メールのメッセージの書式は、多目的インターネットメール拡張 (MIME) を持ちいて、プレーンな ASCII テキストから他の文字エンコーディングに、またオーディオやビデオや画像アプリケーションプログラムに拡張されています。

フル機能の GUI を使った 電子メールクライアントは GUI を使った直感的な設定を使い以下の全機能を提供します。

  • コンテントのデータータイプやエンコーディングを扱いメッセージヘッダーやボディーのデーターは多目的インターネットメール拡張 (MIME) を持ちいて解釈されます。

  • 旧来の基本アクセス認証か 現代的な OAuth 2.0 を用いて ISP の SMTP や IMAP サーバーから認証をうけます。(OAuth 2.0 に関しては、デスクトップ環境経由で設定します。例えば "Settings" -> "Online Accounts".)

  • メッセージ サブミッションポート (587) を聞いている ISP のスマートホスト SMTP サーバーにメッセージを送ります。

  • TLS/IMAP4 ポート (993) から ISP のサーバー上に保存されたメッセージを受け取ります。

  • 属性によってメールのフィルタリングができます。

  • 連絡先、カレンダー、タスク、メモといった追加の機能を提供することがあります。


スパム(迷惑メール)問題にさらされるのを最小化するために、現代的なメールサービスには様々な制約があります。

  • 確実にメールをリモートホストに直接送るために消費者用インターネット接続上で SMTP サーバーを実行するのは現実的ではありません。

  • メールは可能な限り真正に見えない限り、送付先に到達する途中のどこかのホストによって黙って拒否されるでしょう。

  • 無関係の複数の送信元メールアドレスのメールを、単一のスマートホストを使って確実にリモートホストに送ることを期待するのは現実的ではありません。

なぜなら:

Debian にモービルワークステーションは、Debian 12 Bookworm 以降 メール転送エージェント (MTA)を使わず、フル機能の GUI を使った 電子メールクライアント だけで設定可能です。

Debian は伝統的に、 /usr/sbin/sendmail コマンドを期待するプログラムのために何らかの MTA プログラムをインストールしました。モービルワークステーション上のそのような MTA は「現代的なメールサービスの制約」「歴史的なメールサービスへの期待」に対処しなければいけません。

モービルワークステーションでは、MTA の典型的選択肢は インストールオプションとして "Mail sent by smarthost; received via SMTP or fetchmail" 等を選択した exim4-daemon-lightpostfix です。これらの軽量 MTA は "/etc/aliases" を尊重します。

[ヒント] ヒント

exim4 を設定して複数の送信元メールアドレスに対応する複数のスマートホストを経由してインターネットメールを送ることは簡単ではありません。特定のプログラムためにそのような機能が必要な場合には、複数の送信元アドレスを簡単に設定できる msmtp を設定し使用しましょう。そして、MTA は単一送信元アドレスだけのままにしましょう。


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

$ sudo systemctl stop exim4
$ sudo dpkg-reconfigure exim4-config

"General type of mail configuration" に関して、"スマートホストでメール送信; SMTP または fetchmail で受信する" を選択します。

"System mail name:" をそのデフォルトである FQDN (「ホスト名の解決」を参照下さい) に設定します。

"IP-addresses to listen on for incoming SMTP connections:" をそのデフォルトである "127.0.0.1 ; ::1" と設定します。

"Other destinations for which mail is accepted:" の内容を消去します。

"Machines to relay mail for:" の内容を消去します。

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

"Hide local mail name in outgoing mail?" に対して "No" を選択します。(この代わりに、「メールアドレス設定」にある "/etc/email-addresses" を使用します。)

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

  • ブート時にインターネットに接続されている場合は、"No" とします。

  • ブート時にインターネットに接続されていない場合は、"Yes" とします。

"Delivery method for local mail:" を"mbox format in /var/mail/" と設定します。

"Split configuration into small files?:" に対して "Yes" を選択します。

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

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

"/etc/default/exim4" 中で "QUEUERUNNER='queueonly'" や "QUEUERUNNER='nodaemon'" 等と設定しシステムリソースの消費を最小限とした exim4(8) (optional)

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

$ sudo systemctl start exim4

"/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 はおそらく動きます。

以下のようにすれば exim4 の設定を手動で更新できます。

  • "/etc/exim4/" 中の exim4 設定ファイルの更新。

    • MACRO を設定するために "/etc/exim4/exim4.conf.localmacros" を作成し 、"/etc/exim4/exim4.conf.template" を編集します。(非分割設定)

    • "/etc/exim4/exim4.conf.d" サブディレクトリー中で、新規ファイルを作成したり既存ファイルを編集したりします。(分割設定)

  • "systemctl reload exim4" を実行します。

[注意] 注意

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

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

[警告] 警告

現実的な各種配慮から、ポート 587 上で STARTTLS を用い SMTP を用いるか、ポート 25 上の プレーンの SMTP の代わりのポート 465 上の SMTPS (SSL使用のSMTP) を用いています。

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


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

$ sudo systemctl stop postfix
$ 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 systemctl start postfix

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

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


通常 "/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" をエキスポートしてその値をオーバーライドします。

[ヒント] ヒント

普通 popularity-contest パッケージは root アカウントからメールを FQDN 付きで送信します。/usr/share/popularity-contest/default.conf に記載された様に /etc/popularity-contest.conf 中に MAILFROM を設定する必要があります。こうしないと、smarthost の SMTP サーバーによってあなたのメールは拒否されます。少々面倒ですが、root からの全メールの発信元を書き替えるより、この方法は安全ですし、他のデーモンや cron スクリプトに関してもこの方法を適用するべきです。

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/" を参照下さい。

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

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


shellinabox は SSH プログラムではありませんが、リモートターミナルアクセスのための興味深い代替策としてここにリストしています。

リモート X クライアントプログラムへの接続のために「Xサーバ接続」も参照下さい。

[注意] 注意

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

[ヒント] ヒント

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

OpenSSH SSH デーモンは SSH プロトコル2のみをサポートします。

"/usr/share/doc/openssh-client/README.Debian.gz" と ssh(1) と sshd(8) と ssh-agent(1) と ssh-keygen(1) と ssh-add(1) と ssh-agent(1) を参照下さい。

[警告] 警告

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

rhost に基づく認証を有効化してはいけない (/etc/ssh/sshd_config 中の HostbasedAuthentication )。


クライアントから ssh(1) 接続を開始するには以下のようにします。


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

# echo "shutdown -h now" | at now

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

旧来の Unix 的システムでは BSD のラインプリンターデーモン (lpd)が標準で、古典的フリーソフトウェアーの標準プリント出力フォーマットは PostScript (PS) でした。Ghostscript とともに何らかのフィルターシステムを使うことで non-PostScript プリンターへの印刷が可能になっていました。「Ghostscript」を参照下さい。

現代的な Debian システムでは Common UNIX Printing System (CUPS) がデファクトスタンダードで、現代的なフリーソフトの標準プリント出力フォーマットは Portable Document Format (PDF) です。

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

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

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


[ヒント] ヒント

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

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


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

[ヒント] ヒント

サーバーシステムの統合には、「集中システム管理」 を参照下さい。

[ヒント] ヒント

ホスト名の解決は通常 DNS サーバーによって提供されます。ホストの IP アドレスが DHCP によって動的にアサインされる場合には Debian wiki 上のDDNS ページ に書かれているようにして bind9isc-dhcp-server を使いホスト名解決のための ダイナミック DNS が設定できます。

[ヒント] ヒント

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

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


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

プレーンな POP3 サービスをテストするには、以下のようにします。

$ telnet mail.ispname.net pop3

一部の ISP が提供する TLS/SSL を有効にした POP3 サービスをテストするには、telnet-sslopenssl パッケージによる、TLS/SSL を有効にした telnet クライアントが必要です。

$ telnet -z ssl pop.gmail.com 995
$ openssl s_client -connect pop.gmail.com:995

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


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