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