第 6 章 网络应用

目录

6.1. 网页浏览器
6.1.1. 浏览器配置
6.2. 邮件系统
6.2.1. 电子邮件基础
6.2.2. 现代邮件服务基础
6.2.3. 工作站的邮件配置策略
6.3. 邮件传输代理 (MTA)
6.3.1. exim4 的配置
6.3.2. 带有 SASL 的 postfix 配置
6.3.3. 邮件地址配置
6.3.4. 基础 MTA 操作
6.4. 邮件用户代理 (MUA)
6.4.1. 基础 MUA — Mutt
6.4.2. 高级 MUA — Mutt + msmtp
6.5. 远程邮件检索和转发实用工具
6.5.1. getmail 配置
6.5.2. fetchmail 配置
6.6. 带有过滤器的邮件投递代理 (MDA)
6.6.1. maildrop 配置
6.6.2. procmail 配置
6.6.3. 重新投递 mbox 内容
6.7. POP3/IMAP4 服务器
6.8. 打印服务和工具
6.9. 服务器远程访问和工具 (SSH)
6.9.1. SSH 基础
6.9.2. SMTP/POP3 隧道的端口转发
6.9.3. 免密码远程连接
6.9.4. 处理其它 SSH 客户端
6.9.5. 建立 ssh 代理
6.9.6. 怎样通过 SSH 关闭远程系统
6.9.7. SSH 故障排查
6.10. 其它网络应用服务
6.11. 其它网络应用客户端
6.12. 系统后台守护进程(daemon)诊断

建立网络连接后(参加 第 5 章 网络设置),你可以运行各种网络应用。

[提示] 提示

对于现代的 Debian 网络基础设施的具体说明,阅读 Debian 管理员手册 —— 网络基础设施

[提示] 提示

在某些 ISP 下,如果你启用“两步验证”,你可能需要获取一个应用密码以从你的程序访问 POP 和 SMTP 服务。你也可能需要事先允许你的主机 IP 进行访问。

有许多网页浏览器软件包,使用超文本传输协议(HTTP)访问远程内容。


在某些浏览器中,你可以使用下列特殊的 URL 来确认它们的设置。

  • "about:"

  • "about:config"

  • "about:plugins"

Debian 提供了在 main 档案库中提供了许多自由的浏览器插件软件包,不仅可以处理 Java(软件平台)Flash,也可以处理 MPEGMPEG2MPEG4DivXWindows Media Video (.wmv)QuickTime (.mov)MP3 (.mp3)Ogg/Vorbis 文件、DVD、VCD 等等。Debian 也提供相关辅助程序,可以用来安装来自 contrib 或 non-free 的 non-free 浏览器插件软件包。


[提示] 提示

尽管使用上述的 Debian 软件包会更容易,但你依旧可以手动启用插件,你需要将 “*.so” 文件安装到插件目录中(例如 “/usr/lib/iceweasel/plugins/”)并重启浏览器。

有些网站拒绝基于你所使用浏览器的用户代理字符串的连接。你可以通过 伪装用户代理字符串 来解决这个问题。例如,你可以添加下面这行到用户配置文件中(例如 “~/.gnome2/epiphany/mozilla/epiphany/user.js” 或 “~/.mozilla/firefox/*.default/user.js”)。

user_pref{"general.useragent.override","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"};

或者,你也可以通过输入 “about:config” 到 URL,并右击它所显示的内容,来添加并重置这个变量。

[小心] 小心

伪装的用户代理字符串可以会导致 来自 Java 的不良副作用

[小心] 小心

如果你想设置邮件服务器来直接通过互联网交换邮件,你应该最好阅读一下这个基本文档。

邮件系统涉及到运行在多个主机上的许多服务器程序和客户端程序。从功能来说,有3种类型的邮件代理程序:

[注意] 注意

对于那些消费者级网络连接的典型移动工作站,以下的配置例子是有效的。

电子邮件 由三个部分组成,消息的信封,邮件标头及邮件正文。

SMTP 用电子邮件信封上的 "To" 和 "From" 信息来投递邮件。(信封上的 "From" 信息也被叫做退回地址, 例如 From_ 等等)。

电子邮件头的"To" 和 "From" 信息,显示在 电子邮件客户端上. (在大部分情况下,这些信息是跟电子邮件信封一致,但并不全是这样。)

为了处理正文数据类型及其编码,电子邮件客户端 (MUA) 需要用多用途互联网邮件扩展 (MIME)来解释邮件标头和邮件正文。

为了尽可能减少垃圾邮件 (不想要的和未经请求的电子邮件) 的问题,许多提供消费者级互联网连接的 ISP 服务商正在采取应对措施。

当配置电子邮件系统或解决邮递问题时,你必须考虑这些新的限制。

[小心] 小心

在消费者级的网络上运行 SMTP 服务器来直接发送邮件到远端可信赖主机是不现实的。

[小心] 小心

期望单个智能主机可靠的发送不相关的源邮件地址到远程主机,这是不现实的。

[小心] 小心

一个邮件能够被任何主机静悄悄的拒绝,即使路由到了目的地。发送一个邮件到远程主机的可靠方法,就是使你的邮件尽可能的看起来是经过认证的。

鉴于这些不利的互联网情况和限制,像 Yahoo.com 和 Gmail.com 这样的独立互联网邮件 ISP 提供了安全的邮件服务,使用传输层安全协议 (TLS) 和它的前身,安全套接层协议 (SSL) 就可以在任何地方通过网络连接到这些邮件服务。

  • 智能主机上的 465 端口服务,是过时的在 SSL 上的 SMTP (SMTPS 协议).

  • 智能主机上的 587 端口服务使用 STARTTLS 协议。

  • TLS/POP3 端口 (995) 是用 POP3 协议来接受邮件的。

为了简便起见,在接下来的文本中,我假定 smarthost 是 "smtp.hostname.dom", 需要 SMTP 认证并且使用带有STARTTLS 协议的信息发送端口 (587) 。

最简单的电子邮件配置是使用 MUA 发送邮件到 ISP 的 smarthost,然后从 ISP 的 POP3 服务器接收邮件 (参见第 6.4 节 “邮件用户代理 (MUA)”)。这种类型的配置流行使用全功能的基于 GUI 的 MUA,例如icedove(1)evolution(1) 等等。如果需要通过邮件的类型来过滤它们,你应该使用 MUA 的过滤功能。对于这种情况,本地 MTA (参见第 6.3 节 “邮件传输代理 (MTA)”) 只需在本地投递 (当发送者和接收者在同一主机上)。

请注意 Debian 是多用户系统。即使你是唯一的用户,这里仍然有许多以 root 用户运行的程序并且它们会给你发送电子邮件。

另外可选的邮件配置是通过本地 MTA 发送邮件到 ISP 的 smarthost,通过邮件检索 (参见第 6.5 节 “远程邮件检索和转发实用工具”) 从 ISP 的 POP3 服务器接受邮件,并把邮件保存到本地邮箱。如果需要通过邮件的类型来过滤它们,你应该使用 MDA 的过滤功能 (参见第 6.6 节 “带有过滤器的邮件投递代理 (MDA)”) 来过滤邮件到单独的邮箱。这种类型的配置流行使用基于终端的简单 MUA,例如 mutt(1)mew(1)等等,尽管使用任何 MUA 都是可以的 (参见第 6.4 节 “邮件用户代理 (MUA)”)。对于这种情况,本地 MTA (参见第 6.3 节 “邮件传输代理 (MTA)”) 需要做 smarthost 投递和本地投递。因为移动工作站没有有效的 FQDN,你必须配置本地 MTA 来隐藏和伪装外发邮件中的真实本地邮件名称,来避免邮件投递错误 (参见第 6.3.3 节 “邮件地址配置”)。

[提示] 提示

你可能想要配置 MUA/MDA 来使用 Maildir,以便存储邮件到你用户目录的某个位置。

对于一般的工作站而言,邮件传输代理 (MTA) 的主流选择是 exim4-* 或者 postfix 软件包,这由你决定。


尽管在流行度投票数上,exim4-* 某些时候看起来要比 postfix 流行,但这并不意味着 postfix 在 Debian 开发者中不流行。Debian 服务器系统使用 exim4postfix。著名的 Debian 开发者发到邮件列表的帖子的邮件标头分析的结果也表明这两种 MTA 一样受欢迎。

exim4-* 软件包最为人所知的是,有着非常小的内存消耗和非常灵活的配置。postfix 软件包最为人所知的是,它的简洁、快速、简单和安全的特性。这两种工具都带有充足的文档,在质量和许可证上都同样是不错的。

在 Debian 档案库里,有许多不同性能和不同关注点的邮件传输代理 (MTA) 软件包可供选择。


[小心] 小心

配置exim4 来发送互联网邮件,多个源电子邮件地址使用多个相应的智能主机,这是不寻常的。对于 popconcron 这样的系统程序,配置 exim4 仅仅只使用一个电子邮件地址;对于mutt 这样的用户程序,配置msmtp 来使用多个源电子邮件地址。

对于那些通过 smarthost 的网络邮件,你应该按如下所示的 (重新) 配置 exim4-* 软件包。

$ sudo /etc/init.d/exim4 stop
$ 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.3.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

$ sudo /etc/init.d/exim4 start

"/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" 子目录中创建新文件或编辑已存在的文件。(分割的配置)

  • 运行 "invoke-rc.d exim4 reload" 命令。

请阅读 "/usr/share/doc/exim4-base/README.Debian.gz" 官方指导和 update-exim4.conf(8)

[小心] 小心

如果 debconf 询问 "Keep number of DNS-queries minimal (Dial-on-Demand)?" 这个问题时,选择 了 "No" (默认值),那么启动 exim4 会花很长时间并且系统在启动的时候不会连接到互联网。

[警告] 警告

虽然你的 ISP 允许,但是使用没有加密的明文密码是不安全的。

[提示] 提示

尽管推荐在 587 端口上使用 STARTTLSSMTP 协议,但是有些 ISP 仍然使用废弃的 SMTPS 协议 (在 465 端口上的 SSL)。4.77 版本以后的 Exim4 支持在客户端和服务器上的废弃 SMTPS 协议。

[提示] 提示

如果你正在为笔记本电脑寻找一个遵守 "/etc/aliases" 规则的轻量 MTA,你应该考虑配置 exim4(8),在 "/etc/default/exim4" 文件中写入 "QUEUERUNNER='queueonly'","QUEUERUNNER='nodaemon'" 等等。

这里有一些用于邮件传输、投递和用户代理的邮件地址配置文件


"/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/" 来获得可用的命令。

如果你订阅了 Debian 相关的邮件列表,使用像 muttmew 这样的 MUA 会是个不错主意,同时对用户来说,它们也是事实上的标准并且可以像预期的那样工作良好。


按如下所示的自定义 "~/.muttrc" ,与 vim 结合使用邮件用户代理 (MUA) 软件 mutt

#
# User configuration file to override /etc/Muttrc
#
# spoof source mail address
set use_from
set hostname=example.dom
set from="Name Surname <username@example.dom>"
set signature="~/.signature"

# vim: "gq" to reformat quotes
set editor="vim -c 'set tw=72 et ft=mail'"

# "mutt" goes to Inbox, while "mutt -y" lists mailboxes
set mbox_type=Maildir           # use qmail Maildir format for creating mbox
set mbox=~/Mail                 # keep all mail boxes in $HOME/Mail/
set spoolfile=+Inbox            # mail delivered to $HOME/Mail/Inbox
set record=+Outbox              # save fcc mail to $HOME/Mail/Outbox
set postponed=+Postponed        # keep postponed in $HOME/Mail/postponed
set move=no                     # do not move Inbox items to mbox
set quit=ask-yes                # do not quit by "q" only
set delete=yes                  # always delete w/o asking while exiting
set fcc_clear                   # store fcc as non encrypted

# Mailboxes in Maildir (automatic update)
mailboxes `cd ~/Mail; /bin/ls -1|sed -e 's/^/+/' | tr "\n" " "`
unmailboxes Maillog *.ev-summary

## Default
#set index_format="%4C %Z %{%b %d} %-15.15L (%4l) %s"
## Thread index with senders (collapse)
set index_format="%4C %Z %{%b %d} %-15.15n %?M?(#%03M)&(%4l)? %s"

## Default
#set folder_format="%2C %t %N %F %2l %-8.8u %-8.8g %8s %d %f"
## just folder names
set folder_format="%2C %t %N %f"

增加下面的内容到"/etc/mailcap" 或 "~/.mailcap" 来内镶显示 HTML 邮件和微软 Word 附件.

text/html; lynx -force_html %s; needsterminal;
application/msword; /usr/bin/antiword '%s'; copiousoutput; description="Microsoft Word Text"; nametemplate=%s.doc
[提示] 提示

Mutt 能够作为 IMAP 客户端和 mailbox 格式转换器.你可以使用"t", "T"等标识邮件.这些标识的邮件能够使用";C"在不同的邮箱之间拷贝,并可以使用";d" 来一次性删除.

Mutt 能够使用 msmtp 来配置多个源电子邮件地址使用多个相应的智能主机。

[提示] 提示

Msmtp 是一个 sendmail 模拟器,它允许和其它提供 /usr/sbin/sendmail 命令的 sendmail 模拟器一起安装。所以你可以保留你系统上的邮件系统为 exim4postfix

让我们考虑支持 3 个电子邮件地址作为例子:

一个定制的 ~/.muttrc 例子,支持 3 个智能主机用于 3 个不同的源电子邮件地址。

set use_from
set from="My Name3 <myaccount3@example.org>"
set reverse_name
alternates myaccount1@gmail\.com|myaccount1@gmail\.com|myaccount3@example\.org

# ...

# MACRO
macro compose "1" "<edit-from>^UMy Name1 \<myaccount1@gmail.com\>\n"
macro compose "2" "<edit-from>^UMy Name2 \<myaccount2@gmail.com\>\n"
macro compose "3" "<edit-from>^UMy Name3 \<myaccount3@example.org\>\n"

send2-hook '~f myaccount1@gmail.com' "set sendmail = '/usr/bin/msmtp --read-envelope-from'"
send2-hook '~f myaccount2@gmail.com' "set sendmail = '/usr/bin/msmtp --read-envelope-from'"
send2-hook '~f myaccount3@example.org' "set sendmail = '/usr/bin/msmtp --read-envelope-from'"

# ...

让我们来安装 msmtp-gnome 并按下面的方式设置 ~/.msmtprc

defaults
logfile ~/.msmtp.log
domain myhostname.example.org
tls on
tls_starttls on
tls_certcheck on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
auth on
port 587
auto_from

account myaccount1@gmail.com
host smtp.gmail.com
from  myaccount1@gmail.com
user  myaccount1@gmail.com

account myaccount2@gmail.com
host smtp.gmail.com
from  myaccount2@gmail.com
user  myaccount2@gmail.com

account myaccount3@example.org
host mail.example.org
from  myaccount3@example.org
user  myaccount3@example.org

account default : myaccount3@example.org

然后,增加密码数据到 Gnome 钥匙环。例如:

 $ secret-tool store --label=msmtp \
     host smtp.gmail.com \
     service smtp \
     user myaccount1@gmail.com
 ...
[提示] 提示

如果你不想使用 Gnome 钥匙环,你可以通过安装 msmtp 软件包来代替,在 ~/.msmtprc 文件里面,给每一个账号增加一个类似 "password secret123" 的条目。更多信息请参见 memtp 文档

而不是手动运行 MUA 去访问远程邮件并去处理它们,你可能希望自动化这些过程,然后把所有邮件都投递到本地。远程邮件检索和转发实用工具很适合你使用。

尽管 fetchmail(1) 已经成为 GNU/Linux 用于远程邮件检索的事实上的标准,作者现在还是喜欢 getmail(1)。如果你想要在下载邮件之前拒绝邮件来达到节省带宽的目的,mailfiltermpop 工具可能是很有用的。不管使用哪种邮件检索实用程序,配置系统使之能够投递已检索的邮件到 MDA 会是个不错的主意,例如通过管道的 maildrop


getmail(1) 的配置在getmail documentation里描述.这里是我作为用户搭建访问多个 POP3帐号.

按如下所示的创建 "/usr/local/bin/getmails"。

#!/bin/sh
set -e
if [ -f $HOME/.getmail/running ]; then
  echo "getmail is already running ... (if not, remove $HOME/.getmail/running)" >&2
  pgrep -l "getmai[l]"
  exit 1
else
  echo "getmail has not been running ... " >&2
fi
if [ -f $HOME/.getmail/stop ]; then
  echo "do not run getmail ... (if not, remove $HOME/.getmail/stop)" >&2
  exit
fi
if [ "x$1" = "x-l" ]; then
  exit
fi
rcfiles="/usr/bin/getmail"
for file in $HOME/.getmail/config/* ; do
  rcfiles="$rcfiles --rcfile $file"
done
date -u > $HOME/.getmail/running
eval "$rcfiles $@"
rm $HOME/.getmail/running

按如下所示的配置它。

$ sudo chmod 755 /usr/local/bin/getmails
$ mkdir -m 0700 $HOME/.getmail
$ mkdir -m 0700 $HOME/.getmail/config
$ mkdir -m 0700 $HOME/.getmail/log

按如下所示的为每个 POP3 账户创建 "$HOME/.getmail/config/pop3_name" 配置文件。

[retriever]
type = SimplePOP3SSLRetriever
server = pop.example.com
username =  pop3_name@example.com
password = <your-password>

[destination]
type = MDA_external
path = /usr/bin/maildrop
unixfrom = True

[options]
verbose = 0
delete = True
delivered_to = False
message_log = ~/.getmail/log/pop3_name.log

按如下所示的配置它。

$ chmod 0600 $HOME/.getmail/config/*

计划使用 cron(8) 每 15 分钟运行一次 "/usr/local/bin/getmails",通过执行 "sudo crontab -e -u <user_name>" 并把如下所示的命令添加到用户的 cron 条目中。

5,20,35,50 * * * * /usr/local/bin/getmails --quiet
[提示] 提示

POP3 访问的问题可能并不来自于 getmail。一些主流的免费 POP3 服务可能违反了 POP3 协议并且它们的垃圾邮件过滤机制可能不是非常完美。例如,它们可能在刚刚接收到 RETR 命令并且没有接收到 DELE 命令就可能删除了邮件并且可能隔离邮件到垃圾邮件信箱。你应该尽可能的减少损害,通过配置它们使之成为可访问的归档文件并且不要删除它们。参见 "Some mail was not downloaded"

大多数 MTA 程序,例如 postfixexim4,兼任 MDA (邮件投递代理)。这里有专门的带有过滤功能的 MDA。

尽管 procmail(1) 已经成为 GUN/Linux 上关于带有过滤器的 MDA 的事实标准,作者现在还是喜欢 maildrop(1)。不管使用哪种过滤程序,配置系统使之能投递已过滤的邮件到 qmail 风格的 Maildir 都是一个好主意。


maildrop(1) 配置在 maildropfilter documentation 中有说明。这里有一个关于 "$HOME/.mailfilter 文件的配置例子。

# Local configuration
MAILROOT="$HOME/Mail"
# set this to /etc/mailname contents
MAILHOST="example.dom"
logfile $HOME/.maildroplog

# rules are made to override the earlier value by the later one.

# mailing list mails ?
if (     /^Precedence:.*list/:h || /^Precedence:.*bulk/:h )
{
    # rules for mailing list mails
    # default mailbox for mails from mailing list
    MAILBOX="Inbox-list"
    # default mailbox for mails from debian.org
    if ( /^(Sender|Resent-From|Resent-Sender): .*debian.org/:h )
    {
        MAILBOX="service.debian.org"
    }
    # default mailbox for mails from bugs.debian.org (BTS)
    if ( /^(Sender|Resent-From|Resent-sender): .*@bugs.debian.org/:h )
    {
        MAILBOX="bugs.debian.org"
    }
    # mailbox for each properly maintained mailing list with "List-Id: foo" or "List-Id: ...<foo.bar>"
    if ( /^List-Id: ([^<]*<)?([^<>]*)>?/:h )
    {
        MAILBOX="$MATCH2"
    }
}
else
{
    # rules for non-mailing list mails
    # default incoming box
    MAILBOX="Inbox-unusual"
    # local mails
    if ( /Envelope-to: .*@$MAILHOST/:h )
    {
        MAILBOX="Inbox-local"
    }
    # html mails (99% spams)
    if ( /DOCTYPE html/:b ||\
         /^Content-Type: text\/html/ )
    {
        MAILBOX="Inbox-html"
    }
    # blacklist rule for spams
    if ( /^X-Advertisement/:h ||\
         /^Subject:.*BUSINESS PROPOSAL/:h ||\
         /^Subject:.*URGENT.*ASISSTANCE/:h ||\
         /^Subject: *I NEED YOUR ASSISTANCE/:h )
    {
        MAILBOX="Inbox-trash"
    }
    # whitelist rule for normal mails
    if ( /^From: .*@debian.org/:h ||\
         /^(Sender|Resent-From|Resent-Sender): .*debian.org/:h ||\
         /^Subject: .*(debian|bug|PATCH)/:h )
    {
        MAILBOX="Inbox"
    }
    # whiltelist rule for BTS related mails
    if ( /^Subject: .*Bug#.*/:h ||\
         /^(To|Cc): .*@bugs.debian.org/:h )
    {
        MAILBOX="bugs.debian.org"
    }
    # whitelist rule for getmails cron mails
    if ( /^Subject: Cron .*getmails/:h )
    {
        MAILBOX="Inbox-getmails"
    }
}

# check existance of $MAILBOX
`test -d $MAILROOT/$MAILBOX`
if ( $RETURNCODE == 1 )
{
    # create maildir mailbox for $MAILBOX
    `maildirmake $MAILROOT/$MAILBOX`
}
# deliver to maildir $MAILBOX
to "$MAILROOT/$MAILBOX/"
exit
[警告] 警告

不像 procmailmaildrop 不会自动创建不存在的 maildir 目录。你必须提前使用 maildirmake(1) 手动创建它们,正如 "$HOME/.mailfilter" 例子里的那样。

如果将要在局域网上运行一个私有服务器,你应该考虑运行 POP3 / IMAP4 服务器,用来投递邮件到局域网客户端。


在老的类 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 系统。

Secure SHell (SSH) 是因特网上的 安全 连接方式。在 Debian 里面,有一个叫 OpenSSH 的免费 SSH 版本,在 openssh-clientopenssh-server 包里。


[小心] 小心

如果你的 SSH 是从因特网来访问,参见 第 4.7.3 节 “互联网额外的安全方式”

[提示] 提示

请使用 screen(1) 程序来让远程 shell 在中断的连接上存活(参见 第 9.1 节 “screen 程序”).

[警告] 警告

如果想要运行 OpenSSH 服务,"/etc/ssh/sshd_not_to_be_run"必须不存在。

SSH 有两个认证协议。


[小心] 小心

如果你使用一个非 Debian 的系统,请小心注意这些不同。

细节参见 "/usr/share/doc/ssh/README.Debian.gz", ssh(1), sshd(8), ssh-agent(1), and ssh-keygen(1).

下面是秘钥配置文件。


[提示] 提示

参见 ssh-keygen(1), ssh-add(1)ssh-agent(1) 来了解怎样使用 SSH 公钥和私钥。

[提示] 提示

一定要通过连接测试来确认设置。有任何问题的连接,使用 "ssh -v".

[提示] 提示

稍后可以使用 "ssh-keygen -p" 改变密码来加密本地 SSH 私钥.

[提示] 提示

你可以在 "~/.ssh/authorized_keys" 里给条目增加选项来限制主机和运行特定的命令。细节请参见 sshd(8).

从客户端启动一个 ssh(1) 连接.


如果本地和远程主机,使用同样的用户名,你可以省略输入 "username@". 即使在本地和远程主机使用不同的用户名,你可以使用 "~/.ssh/config" 来省略输入用户名.对于 Debian Salsa 服务器,使用账户名 "foo-guest",你可以设置 "~/.ssh/config" 包含下面的内容。

Host salsa.debian.org people.debian.org
    User foo-guest

对于用户来讲, ssh(1) 功能比telnet(1) 更加智能和安全. 不像 telnet命令, ssh 命令不会在遇到 telnet 的退出字符(初始默认是 CTRL-])时停止.

你可以使用 at(1) 命令 (参见 第 9.3.13 节 “单次任务时间安排”)来从 SSH 终端里保护"shutdown -h now" (参见 第 1.1.8 节 “怎样关闭系统”)操作过程。

# echo "shutdown -h now" | at now

screen(1) (参见 第 9.1 节 “screen 程序”) 会话里运行 "shutdown -h now",是另外一个方法来做这同样的事情。

这里是其它网络应用服务。


通用互联网文件系统协议(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" 里,描述了端口用途.