章 6. 網路應用

內容目錄

6.1. 網頁瀏覽器
6.1.1. 偽裝使用者代理字串
6.1.2. 瀏覽器擴充套件
6.2. 郵件系統
6.2.1. 電子郵件基礎
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 代理
6.3.6. 從遠端主機發送郵件
6.3.7. SMTP/POP3 隧道的埠轉發
6.3.8. 怎樣通過 SSH 關閉遠端系統
6.3.9. SSH 故障排查
6.4. 列印服務和工具
6.5. 其它網路應用服務
6.6. 其它網路應用客戶端
6.7. 系統後臺背景程式(daemon)診斷

建立網路連線後(參加 章 5, 網絡設置),你可以執行各種網路應用。

[提示] 提示

對於現代的 Debian 網路基礎設施的具體說明,閱讀 Debian 管理員手冊 —— 網路基礎設施

[提示] 提示

在某些 ISP 下,如果你啟用“兩步驗證”,你可能需要獲取一個應用密碼以從你的程式訪問 POP 和 SMTP 服務。你也可能需要事先允許你的主機 IP 進行訪問。

有許多網頁瀏覽器軟體包,使用超文字傳輸協議(HTTP)存取遠端內容。


本章節關注於消費者級網際網路連線的典型的移動工作站。

[注意] 注意

如果你想設定郵件伺服器來直接通過網際網路交換郵件,你應該最好閱讀一下這個基本文件。

電子郵件 由三個部分組成,訊息的信封,郵件標頭及郵件正文。

  • SMTP 用電子郵件信封上的 "To" 和 "From" 資訊來投遞郵件。(信封上的 "From" 資訊也被叫做退回地址, 例如 From_ 等等)。

  • 電子郵件頭的"To" 和 "From" 資訊,顯示在 電子郵件客戶端上. (在大部分情況下,這些資訊是跟電子郵件信封一致,但並不全是這樣。)

  • 覆蓋郵件頭和正文資料的電子郵件訊息格式被 多用途網際網路郵件擴充套件 (MIME) 擴充套件,從純文字的 ASCII 到其它字元編碼,包括作為附件的音訊、影片、影象和應用程式。

功能全面的基於 電子郵件客戶端的 GUI 程式使用基於 GUI 的直觀的配置,提供下列所有功能。

  • 為了處理正文資料型別及其編碼,它建立和使用多用途網際網路郵件擴充套件 (MIME)來解釋郵件標頭和郵件正文。

  • 它使用舊的 基礎訪問認證 或現代的 OAuth 2.0向 ISP(網際網路服務提供商)的 SMTP 和 IMAP 伺服器認證它自己。 (對於 OAuth 2.0,透過桌面環境設定來設定它,例如,"Settings" -> "Online Accounts".)

  • 它傳送訊息到 ISP 的智慧主機的 SMTP 服務監聽的訊息遞交埠(587)。

  • 從 TLS/IMAP4 埠(993)接收儲存在 ISP 的伺服器上的訊息。

  • 它能夠透過他們的屬性過濾郵件。

  • 它能夠提供額外的功能:聯絡人、日曆、任務、備忘錄。


在 Debian 12 Bookworm 後,在沒有 mail transfer agent (MTA) 程式的情況下,Debian 移動工作站可以基於 電子郵件客戶端,配置為全功能的 GUI (影象使用者介面)。

以往的 Debian 會安裝某個 MTA 程式來支援期望 /usr/sbin/sendmail 命令的程式。移動工作站上這樣的 MTA 必須和 節 6.2.2, “現代郵件服務限制” 節 6.2.3, “歷史郵件服務端期望” 協同工作。

對於移動工作站,典型的 MTA 選擇是 exim4-daemon-lightpostfix,並選擇類似這樣的安裝選項:“Mail sent by smarthost; received via SMTP or fetchmail”。這些是輕量 MTA 和 "/etc/aliases" 匹配。

[提示] 提示

配置 exim4 來發送網際網路郵件,多個源電子郵件地址使用多個相應的智慧主機,這是不尋常的。如果一些程式需要這樣的能力,使用 msmtp 來設定他們,它比較容易來設定多個源電子郵件地址。然後給主 MTA 僅僅保留單個電子郵件地址。


對於那些通過 smarthost 的網路郵件,你應該按如下所示的 (重新) 調配 exim4-* 軟體包。

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

調配 "General type of mail configuration" 時,選擇 "mail sent by smarthost; received via SMTP or fetchmail"。

設定 "System mail name:" 為預設的 FQDN (參見節 5.1.1, “主機名解析”)。

設定 "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 address or host name of the outgoing smarthost:" 為 "smtp.hostname.dom:587"。

設定 "Hide local mail name in outgoing mail?" 選項為 "NO"。(或者像節 6.2.4.3, “郵件地址調配”描述的那樣使用 /etc/email-addresses" 代替)

選擇如下所示的其中一個來回答 "Keep number of DNS-queries minimal (Dial-on-Demand)?"。

  • "No" 如果啟動的時候,系統就連上了網際網路。

  • "Yes" 如果啟動的時候,系統沒有連上網際網路。

設定 "Delivery method for local mail:" 選項為 "mbox format in /var/mail/"。

"Split configuration into small files?:" 選項設為 "Yes"。

通過修改 "/etc/exim4/passwd.client" 檔案,來建立用於 smarthost 的密碼條目。

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

配置 exim4(8),在 "/etc/default/exim4" 檔案中寫入 "QUEUERUNNER='queueonly'","QUEUERUNNER='nodaemon'" 等等,來最小化系統資源使用。(可選的)

通過如下所示的啟動 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 組態檔案。

    • 建立 "/etc/exim4/exim4.conf.localmacros" 來設定巨集指令和修改 "/etc/exim4/exim4.conf.template" 檔案。(沒有分割的調配)

    • 在 ”/etc/exim4/exim4.conf.d" 子目錄中建立新檔案或編輯已存在的檔案。(分割的調配)

  • 執行 "systemctl reload exim4".

[注意] 注意

如果 debconf 詢問 "Keep number of DNS-queries minimal (Dial-on-Demand)?" 這個問題時,選擇 了 "No" (預設值),那麼啟動 exim4 會花很長時間並且系統在啟動的時候不會連線到網際網路。

請閱讀 "/usr/share/doc/exim4-base/README.Debian.gz" 官方指導和 update-exim4.conf(8)。

[警告] 警告

從所有的實踐考慮,使用帶 STARTTLSSMTP 埠 587,或者 SMTPS (SSL 之上的 SMTP ) 埠 465, 代替純 SMTP 埠 25。

這裡有一些用於郵件傳輸、投遞和使用者代理的郵件地址組態檔案


"/etc/mailname" 檔案中的 mailname 通常是全稱域名 (FQDN),這個全程域名將會被解析成主機的 IP 地址。對於沒有可解析成 IP 地址的主機名的移動工作站,設定 mailname 為 "hostname -f" 的值。(這對於 exim4-*postfix 都是安全有效的選擇。)

[提示] 提示

"/etc/mailname" 中的內容被許多非 MTA 程式用作它們的預設行為。對於 mutt, 在~/muttrc 檔案中設定 "hostname" 和 "from" 變數來覆蓋 mailname 值。對於 devscripts 軟體包的程式,例如 bts(1) 和 dch(1),匯出環境變數 "$DEBFULLNAME" 和 "$DEBEMAIL" 的值來覆蓋它。

[提示] 提示

popularity-contest 軟體包一般以 FQDN 形式的 root 帳號傳送郵件。你需要像 /usr/share/popularity-contest/default.conf 檔案中描述的那樣去設定 /etc/popularity-contest.conf 檔案中的 MAILFROM 值。否則,你的郵件會被 smarthost SMTP 伺服器拒絕。儘管這些過程很乏味,這種方法比為所有通過 MTA 並且是以 root 使用者傳送的郵件重寫源地址更安全。這也可以被其他背景程式或者是 cron 指令碼使用。

當設定 mailname 為 "hostname -f" 的值時,通過 MTA 的源郵件地址的偽裝可以通過如下所示的來實現。

  • 用於 exim4(8) 的 "/etc/email-addresses" 檔案,exim4-config_files(5) 手冊頁中有關於它的解釋

  • 用於 postfix(1) 的 "/etc/postfix/generic" 檔案,generic(5) 手冊頁中有關於它的解釋

對於 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/" 來獲得可用的指令。

Secure SHell (SSH) 是因特網上的 安全 連線方式。在 Debian 裡面,有一個叫 OpenSSH 的免費 SSH 版本,在 openssh-clientopenssh-server 包裡。

對於使用者來講, ssh(1) 功能比telnet(1) 更加智慧和安全. 不像 telnet指令, ssh 指令不會在遇到 telnet 的退出字元(初始預設是 CTRL-])時停止.


雖然 shellinabox 不是一個 SSH 程式,它列在這裡作為遠端終端訪問的一個有趣的替代。

連線到遠端 X 客戶端程式,參見:節 7.9, “X 服務端連線”

[注意] 注意

如果你的 SSH 是從因特網來存取,參見 節 4.6.3, “網際網路額外的安全方式”

[提示] 提示

請使用 screen(1) 程式來讓遠端 shell 在中斷的連線上存活(參見 節 9.1.2, “screen 程式”).

你可以使用 at(1) 指令 (參見 節 9.4.13, “單次任務時間安排”)來從 SSH 終端裡保護"shutdown -h now" (參見 節 1.1.8, “怎樣關閉系統”)操作過程。

# echo "shutdown -h now" | at now

screen(1) (參見 節 9.1.2, “screen 程式”) 會話裡執行 "shutdown -h now",是另外一個方法來做這同樣的事情。

在老的類 Unix 系統中,BSD Line printer daemon(lpd) 行印表機後臺守護 曾經是標準。傳統的自由軟體的標準列印輸出格式是 PostScript (PS)。為了能夠列印到非 PostScript 印表機,需要將一些過濾器系統和 Ghostscript 一道使用。參見 節 11.4.1, “Ghostscript”

在現代的 Debian 系統中,Common UNIX Printing System 通用 UNIX 列印系統是事實上的標準。現代自由軟體的標準列印輸出格式是 Portable Document Format (PDF)可移植檔案格式

CUPS 使用 Internet Printing Protocol 網際網路列印協議 (IPP). IPP 現在已經被其它作業系統,如 Windows XP 和 Mac OS X 支援。它已經變成新的具備雙向通訊能力的跨平臺遠端列印的事實標準。

幸虧有 CUPS 系統的檔案格式依賴自動轉化特徵,簡單的傳送任何資料到 lpr 指令,都將產生期望的列印輸出。(在 CUPS 裡, lpr 能夠通過安裝 cups-bsd 軟體包來獲取.)

Debian 系統有一些不錯的軟體包用於列印服務和作為列印工具。


[提示] 提示

你可以讓你的 web 瀏覽器存取 "http://localhost:631/" 來調配 CUPS 系統。

這裡是其它網路應用服務。


通用網際網路檔案系統協議(CIFS) 和服務訊息塊(SMB) 協議一樣,被微軟 Windows 廣泛應用。

[提示] 提示

參見 節 4.5.2, “現代的集中式系統管理” 服務系統整合。

[提示] 提示

主機名解析通常由 DNS 服務提供. 對於由 DHCP 動態分配的主機 IP 地址, 動態 DNS 能夠使用 bind9isc-dhcp-server 建立主機名解析,Debian wiki 的 DDNS 頁 有說明.

[提示] 提示

使用 squid 之類的代理伺服器,和使用 Debian 文件庫的完全本地映象伺服器相比,能夠大量節省頻寬。

這裡是其它網路應用客戶端。


telnet 程式能夠手工連線到系統後臺背景程式(daemon),並進行診斷。

測試純 POP3 服務,嘗試用下面的操作

$ telnet mail.ispname.net pop3

部分 ISP 提供 TLS/SSL 加密的POP3 服務,為了測試它,你需要用到 telnet-ssl 包裡支援 TLS/SSL 的 telnet 客戶端,或 openssl 軟體包。

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

下面的 RFCs 提供每一個系統後臺背景程式(daemon)所需要的知識。


在 "/etc/services" 裡,描述了埠用途.