第 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" 里,描述了端口用途.