章 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 mobile workstations can be configured just with full featured GUI based email clients without mail transfer agent (MTA) program after Debian 12 Bookworm.

Debian traditionally installed some MTA program to support programs expecting the /usr/sbin/sendmail command. Such MTA on mobile workstations must cope with 節 6.2.2, “現代郵件服務限制” and 節 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 (SMTPS) 埠 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.8, “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" 裡,描述了埠用途.