互联网新闻服务器INN与NNTP的使用与配置指南
1. NNTP访问与授权
NNTP(网络新闻传输协议)是互联网上传输新闻文章的常用协议。在使用NNTP时,
nntp_access
文件用于控制不同主机的访问权限。以下是一个示例
nntp_access
文件:
#
# by default, anyone may transfer news, but not read or post
default
xfer
no
#
# public.vbrew.com offers public access via modem. We allow
# them to read and post to any but the local.* groups
public.vbrew.com
read
post
!local
#
# all other hosts at the brewery may read and post
*.vbrew.com
read
post
在这个文件中,
default
表示默认设置,
xfer
表示传输权限,
no
表示不允许默认用户传输新闻。对于
public.vbrew.com
,允许其读取和发布新闻,但不能访问以
local.
开头的新闻组。而所有以
.vbrew.com
结尾的主机都可以读取和发布新闻。
NNTP授权方面,
nntpd
守护进程提供了一个简单的授权方案。如果在
nntp_access
文件中使用大写的访问令牌,
nntpd
会要求客户端进行相应操作的授权。例如,当指定权限为
Xfer
或
XFER
时,客户端必须通过授权才能将文章传输到你的站点。授权过程通过新的NNTP命令
AUTHINFO
实现,客户端使用该命令向NNTP服务器传输用户名和密码,
nntpd
会将其与
/etc/passwd
数据库进行比对,并验证用户是否属于
nntp
组。不过,当前的NNTP授权实现仅为实验性的,只能与普通风格的密码数据库配合使用,不支持影子密码。如果你从源代码编译并安装了PAM包,更改密码检查相对简单。
2. nntpd与C News的交互
当
nntpd
接收到一篇文章时,它需要将其传递给新闻子系统。根据文章是通过
IHAVE
还是
POST
命令接收的,文章会分别交给
rnews
或
inews
处理。你也可以在编译时进行配置,将传入的文章批量处理,并将结果批次移动到
/var/spool/news/in.coming
,由
relaynews
在下一次队列运行时拾取。
nntpd
需要访问历史文件才能正确执行
ihave/sendme
协议。编译时,必须确保历史文件的路径设置正确。如果你使用C News,要保证C News和
nntpd
对历史文件的格式达成一致。C News使用
dbm
哈希函数来访问历史文件,但
dbm
库有多种不同且略有不兼容的实现。如果C News链接的
dbm
库与标准
libc
中的不同,你也需要将
nntpd
与该库链接。
当
nntpd
和C News不一致时,系统日志中可能会出现
nntpd
无法正确打开文件的错误消息,或者你可能会看到通过NNTP接收的重复文章。测试新闻传输是否故障的一个好方法是从新闻池区域选择一篇文章,通过
telnet
连接到NNTP端口,并将文章提供给
nntpd
,示例如下:
$ telnet localhost nntp
Trying 127.0.0.1...
Connected to localhost
Escape characters is '^ ]'.
201 vstout NNTP[auth] server version 1.5.11t (16 November 1991) ready at
Sun Feb 6 16:02:32 1194 (no posting)
IHAVE msg@id435 Got it.
QUIT
如果收到
Got it
消息,说明
nntpd
已经有这篇文章;如果收到
335 Ok
消息,则表示历史文件查找失败。可以通过检查系统日志来查看具体问题,
nntpd
会将各种消息记录到系统日志的守护进程设施中。不兼容的
dbm
库通常会表现为
dbminit
失败的消息。
3. INN概述
INN(Internet News Daemon)是目前最流行的网络新闻服务器之一,具有极高的灵活性,适用于除最小型新闻站点之外的所有站点,并且扩展性良好,适合大型新闻服务器配置。
INN的核心程序是
innd
守护进程,它的任务是处理所有传入的文章,将其本地存储,并在需要时将其传递给任何传出的新闻源。
innd
在启动时开始运行,并作为后台进程持续运行。作为守护进程运行可以提高性能,因为它只需在启动时读取一次状态文件。根据新闻源的流量,某些文件(如包含所有最近处理文章列表的历史文件)的大小可能从几兆字节到几十兆字节不等。
INN的另一个重要特性是任何时候都只有一个
innd
实例在运行,这对性能非常有益,因为守护进程可以处理所有文章,而不必担心与同时在新闻池中搜索的其他
innd
副本同步其内部状态。然而,这种选择影响了新闻系统的整体设计。由于尽快处理传入新闻非常重要,因此服务器不应被诸如为通过NNTP访问新闻池的新闻阅读器提供服务或解压缩通过UUCP到达的新闻批次等日常任务所占用。因此,这些任务已从主服务器中分离出来,并在单独的支持程序中实现。
如今,NNTP是传输新闻文章最常见的方式,
innd
不直接支持其他方式。这意味着
innd
在TCP套接字(端口119)上监听连接,并使用
ihave
协议接受新闻文章。通过非NNTP传输方式到达的文章通过另一个进程间接支持,该进程接受文章并通过NNTP将其转发给
innd
。例如,通过UUCP链接传入的新闻批次传统上由
rnews
程序处理,INN的
rnews
会在必要时解压缩批次,并将其拆分为单个文章,然后逐个提供给
innd
。
4. INN的文章处理流程
当
innd
接收到一篇文章时,它首先在历史文件中查找其消息ID。重复的文章将被丢弃,并且可以选择记录其出现情况。对于太旧或缺少某些必需标题字段(如
Subject:
)的文章也是如此。如果
innd
认为文章可以接受,它会查看
Newsgroups:
标题行,以确定文章发布到了哪些新闻组。如果这些新闻组中的一个或多个在
active
文件中找到,则文章将被存储到磁盘;否则,它将被存储到特殊组
junk
中。
单个文章存储在
/var/spool/news
(也称为新闻池)下,每个新闻组都有一个单独的目录,其中每篇文章都存储在一个单独的文件中。文件名是连续的数字,例如,
comp.risks
中的一篇文章可能存储为
comp/risks/217
。当
innd
发现要存储文章的目录不存在时,它会自动创建该目录。
除了本地存储文章外,你可能还希望将其传递给传出的新闻源,这由
newsfeeds
文件控制,该文件列出了所有下游站点以及应提供给它们的新闻组。
与
innd
的接收端一样,传出新闻的处理也由单个接口处理。
innd
不自己进行所有特定于传输的处理,而是依赖各种后端来管理文章向其他新闻服务器的传输。传出设施统称为通道,根据其用途,通道可以具有不同的属性,这些属性决定了
innd
向其传递的确切信息。
对于传出的NNTP新闻源,例如,
innd
可能在启动时派生
innxmit
程序,并为应通过该新闻源发送的每篇文章将其消息ID、大小和文件名传递给
innxmit
的标准输入。对于传出的UUCP新闻源,它可能将文章的大小和文件名写入一个特殊的日志文件,另一个进程会定期读取该文件,以创建批次并将其排队到UUCP子系统。
此外,还有一些不是严格意义上传出新闻源的通道类型,例如用于存档某些新闻组或生成概述信息。概述信息旨在帮助新闻阅读器更有效地对文章进行线程化处理。旧风格的新闻阅读器必须单独扫描所有文章,以获取线程化所需的标题信息,这会给服务器机器带来巨大压力,尤其是在使用NNTP时,而且速度非常慢。INN的概述机制通过为每个新闻组在单独的文件(称为
.overview
)中预先记录所有相关标题来缓解这个问题。新闻阅读器可以直接从新闻池目录中读取该信息,也可以在通过NNTP连接时使用
XOVER
命令获取该信息。INN让
innd
守护进程将所有文章提供给
overchan
命令,该命令通过通道与守护进程相连。
5. 新闻阅读器与INN的交互
运行在与服务器同一台机器上(或通过NFS挂载了服务器新闻池的)新闻阅读器可以直接从新闻池中读取文章。要发布用户撰写的文章,它们会调用
inews
程序,该程序会添加任何缺失的标题字段,并通过NNTP将文章转发给守护进程。
新闻阅读器也可以通过NNTP远程访问服务器。这种类型的连接与基于NNTP的新闻源处理方式不同,以避免占用守护进程。每当新闻阅读器连接到NNTP服务器时,
innd
会派生一个名为
nnrpd
的单独程序,该程序处理会话,而
innd
则返回处理更重要的事情(例如接收传入的新闻)。
innd
进程通过NNTP协议来区分传入的新闻源和连接的新闻阅读器。NNTP协议要求基于NNTP的新闻阅读器在连接到服务器后发出
mode reader
命令,当服务器收到此命令时,它会启动
nnrpd
进程,将连接交给它,并返回监听来自另一个新闻服务器的连接。曾经有至少一个基于DOS的新闻阅读器没有配置为执行此操作,因此在与INN通信时会失败,因为如果
innd
不知道连接来自新闻阅读器,它本身不识别用于读取新闻的任何命令。
6. INN的安装与配置
在深入了解INN的配置之前,先介绍其安装。即使你从各种Linux发行版中安装了INN,也建议阅读这部分内容,因为它包含一些关于安全性和兼容性的提示。
Linux发行版在相当长的一段时间内包含了INN - 1.4sec版本,但该版本存在两个微妙的安全问题。现代版本没有这些问题,大多数发行版包含INN 2或更高版本的预编译Linux二进制文件。
如果你愿意,也可以自己构建INN。你可以从
ftp.isc.org
的
/isc/inn/
目录获取源代码。构建INN需要编辑一个配置文件,该文件告诉INN有关操作系统的一些详细信息,并且某些功能可能需要对源代码进行一些小的修改。编译包本身相当简单,有一个名为
BUILD
的脚本会引导你完成整个过程,源代码中还包含了关于如何安装和配置INN的详细文档。
安装所有二进制文件后,可能需要进行一些手动调整,以使INN与可能想要访问其
rnews
或
inews
程序的其他应用程序兼容。例如,UUCP期望在
/usr/bin
或
/bin
中找到
rnews
程序,而INN默认将其安装在
/usr/lib/bin
中。因此,要确保
/usr/lib/bin/
在默认搜索路径中,或者有符号链接指向
rnews
和
inews
命令的实际位置。
7. INN的基本配置
INN正常运行需要一个有效的网络设置,即使在独立主机上运行也是如此。因此,在运行INN时,内核必须支持TCP/IP网络,并且需要按照相关说明设置回环接口。
接下来,必须确保
innd
在启动时启动。默认的INN安装在
/etc/news/
目录中提供了一个名为
boot
的脚本文件。如果你的发行版使用SystemV风格的
init
包,只需从
/etc/init.d/inn
文件创建一个符号链接指向
/etc/news/boot
;对于其他类型的
init
,必须确保
/etc/news/boot
从某个
rc
脚本中执行。由于INN需要网络支持,因此启动脚本应在网络接口配置完成后运行。
8. INN的配置文件
INN的所有配置文件都位于
/etc/news
目录中。INN 2版本对配置文件进行了一些更改,下面将详细介绍这些文件。
8.1 inn.conf文件
inn.conf
是INN的主要配置文件,它决定了你的机器在Usenet上的名称。INN 2版本允许在该文件中配置大量参数,幸运的是,大多数参数都有适合大多数站点的默认值。
inn.conf(5)
文件详细列出了所有参数,如果遇到问题,应仔细阅读该文件。
以下是一个简单的
inn.conf
示例:
# Sample inn.conf for the Virtual Brewery
server:
vlager.vbrew.com
domain:
vbrew.com
fromhost:
vbrew.com
pathhost:
news.vbrew.com
organization:
The Virtual Brewery
mta:
/usr/sbin/sendmail -oi %s
moderatormailer: %s@uunet.uu.net
#
# Paths to INN components and files.
#
pathnews:
/usr/lib/news
pathbin:
/usr/lib/news/bin
pathfilter:
/usr/lib/news/bin/filter
pathcontrol:
/usr/lib/news/bin/control
pathdb:
/var/lib/news
pathetc:
/etc/news
pathrun:
/var/run/news
pathlog:
/var/log/news
pathhttp:
/var/log/news
pathtmp:
/var/tmp
pathspool:
/var/spool/news
patharticles:
/var/spool/news/articles
pathoverview:
/var/spool/news/overview
pathoutgoing:
/var/spool/news/outgoing
pathincoming:
/var/spool/news/incoming
patharchive:
/var/spool/news/archive
pathuniover:
/var/spool/news/uniover
overviewname:
.overview
-
server:行告诉rnews和inews程序在传递文章时应联系的主机,这是绝对关键的,因为要将文章传递给innd,它们必须与服务器建立NNTP连接。 -
domain:关键字应指定主机的完全限定域名的域名部分。一些程序必须查找主机的完全限定域名,如果解析器库只返回未限定的主机名,则会将domain属性中给出的名称附加到它后面。 -
fromhost:行定义了inews在为本地用户发布的文章添加From:行时将使用的主机名。大多数新闻阅读器在撰写对文章作者的回复邮件时使用From:字段。如果省略该字段,它将默认为新闻主机的完全限定域名,但这并不总是最佳选择。例如,如果新闻和邮件由两个不同的主机处理,则应在fromhost语句后提供邮件主机的完全限定域名。 -
pathhost:行定义了INN在收到文章时要添加到Path:标题字段的主机名。在大多数情况下,你可能希望使用新闻服务器的完全限定域名,因为这是默认值,所以可以省略该字段。但在某些情况下,可能希望使用通用名称,如news.vbrew.com,以便在需要时轻松将新闻系统移动到不同的主机。 -
organization:语句允许你配置inews将在本地用户发布的文章的Organization:行中放置的文本。正式情况下,应在此处放置组织的描述或组织的全名。如果不想这么正式,有幽默感的组织可以在这里展示一些有趣的内容。 -
mta:指定了用于发布版主消息的邮件传输代理的路径名,%s将被版主的电子邮件地址替换。 -
moderatormailer:定义了用户尝试发布到受版主管理的新闻组时使用的默认地址。每个新闻组的版主地址列表通常保存在一个单独的文件中,但很难跟踪所有这些地址。因此,moderatormailer条目作为最后手段被参考,如果定义了该条目,inews会将%s字符串替换为(略有转换的)新闻组名称,并将整个文章发送到该地址。
文件的其余部分指定了INN组件和文件的路径。如果从包中安装了INN,这些路径应该已经为你配置好了;如果从源代码安装,则需要确保它们反映了INN的安装位置。
8.2 active和newsgroups文件
active
和
newsgroups
文件用于存储和描述新闻服务器托管的新闻组。它们列出了我们感兴趣接收和发布文章的新闻组,以及关于它们的管理信息。这些文件位于
/var/lib/news/
目录中。
active
文件确定了服务器支持哪些新闻组,其语法很简单。
active
文件中的每一行有四个由空格分隔的字段:
| 字段 | 说明 |
| — | — |
| name | 新闻组的名称 |
| himark | 该新闻组中文章使用的最高编号 |
| lomark | 该新闻组中使用的最低活动编号 |
| flags | 标志位,可能包含特定的值 |
例如,对于一个新创建的新闻组,
himark
和
lomark
都为0,因为没有文章。如果发布了5篇文章,它们将编号为1到5,此时
himark
将等于5,
lomark
将等于1。如果文章5被取消,
himark
将保持在5,以确保该文章编号不会被重新分配,
lomark
将保持在1。如果取消文章1,
himark
将保持不变,但
lomark
将变为2。如果再发布一篇新文章,它将被分配文章编号6,因此
himark
将变为6,而
lomark
保持在2。这种机制允许我们轻松为新文章分配唯一的文章编号,并计算该组中大约有多少活动文章:
himark - lomark
。
flags
字段可能包含以下值之一:
- 用于表示新闻组的不同属性和状态。
通过合理配置这些文件,可以有效地管理新闻组,为用户提供良好的新闻阅读和发布体验。在实际使用中,还需要根据具体需求对INN进行进一步的优化和调整。例如,可以根据新闻流量调整历史文件的存储策略,或者根据不同的网络环境配置传出新闻源的传输方式。同时,定期检查系统日志,及时发现和解决可能出现的问题,确保INN服务器的稳定运行。
总之,INN是一个功能强大且灵活的网络新闻服务器,通过深入了解其各个组件和配置文件,可以根据不同的应用场景构建出高效、稳定的新闻系统。无论是小型的内部新闻站点还是大型的公共新闻服务器,INN都能提供可靠的支持。
互联网新闻服务器INN与NNTP的使用与配置指南
9. 新闻组的管理与配置
新闻管理员可以通过
active
和
newsgroups
文件控制用户对新闻组的访问。下面详细说明如何管理和配置这些新闻组。
9.1 新闻组的添加与删除
要添加一个新的新闻组,需要在
active
文件中添加一行,指定新闻组的名称、初始的
himark
和
lomark
值(通常为 0)以及相应的
flags
。例如,要添加一个名为
test.group
的新闻组,可以在
active
文件中添加如下行:
test.group 0 0 <flags>
其中
<flags>
需要根据新闻组的具体属性进行设置。
如果要删除一个新闻组,只需从
active
文件中删除对应的行。但需要注意的是,删除新闻组后,该新闻组下的所有文章并不会自动删除,需要手动清理相关的文件。
9.2 新闻组的属性设置
flags
字段用于设置新闻组的各种属性,常见的属性设置如下:
| 标志 | 说明 |
| — | — |
| m | 表示该新闻组是受版主管理的,用户发布的文章需要经过版主审核才能发布 |
| y | 表示该新闻组是活动的,用户可以正常访问和发布文章 |
| n | 表示该新闻组是非活动的,用户不能访问和发布文章 |
例如,如果要将
test.group
设置为受版主管理的活动新闻组,可以将
flags
设置为
my
:
test.group 0 0 my
10. 新闻源的配置
新闻源的配置主要通过
newsfeeds
文件来完成,该文件列出了所有下游站点以及应提供给它们的新闻组。以下是一个简单的
newsfeeds
文件示例:
# 下游站点1
news.site1.com comp.* sci.*
# 下游站点2
news.site2.com misc.*
在这个示例中,
news.site1.com
会接收到所有以
comp.
和
sci.
开头的新闻组的文章,而
news.site2.com
会接收到所有以
misc.
开头的新闻组的文章。
配置新闻源时,需要注意以下几点:
-
新闻组选择
:根据下游站点的需求,合理选择要提供的新闻组。可以使用通配符(如
*
)来指定一组新闻组。
-
权限控制
:确保只有授权的下游站点才能接收新闻文章。可以通过
nntp_access
文件来控制不同站点的访问权限。
11. 概述信息的生成与使用
概述信息对于新闻阅读器非常重要,它可以帮助新闻阅读器更高效地对文章进行线程化处理。INN 通过
overchan
命令来生成概述信息。
生成概述信息的流程如下:
graph LR
A[innd守护进程接收到文章] --> B{文章是否可接受}
B -- 是 --> C[将文章提供给overchan命令]
C --> D[overchan命令生成概述信息]
D --> E[将概述信息存储到.overview文件]
B -- 否 --> F[丢弃文章]
新闻阅读器可以通过以下两种方式获取概述信息:
-
直接读取
:直接从新闻池目录中的
.overview
文件中读取概述信息。
-
使用
XOVER
命令
:在通过 NNTP 连接到服务器时,使用
XOVER
命令获取概述信息。
12. 安全性与性能优化
在使用 INN 时,安全性和性能是两个重要的方面。以下是一些安全性和性能优化的建议:
12.1 安全性优化
- 更新版本 :使用最新版本的 INN,以避免已知的安全漏洞。如前面提到的,INN - 1.4sec 版本存在安全问题,应使用现代版本。
-
权限控制
:通过
nntp_access文件和newsfeeds文件严格控制不同主机和站点的访问权限,只允许授权的用户和站点访问和接收新闻文章。 - 密码保护 :如果使用 NNTP 授权,确保使用强密码,并定期更换密码。同时,注意密码数据库的安全性,避免使用不支持的密码类型(如影子密码)。
12.2 性能优化
- 硬件升级 :如果新闻流量较大,可以考虑升级服务器的硬件配置,如增加内存、提高 CPU 性能等。
- 缓存设置 :合理设置缓存,减少对磁盘的频繁访问。例如,可以设置历史文件的缓存大小,提高文章查找的速度。
- 并行处理 :对于一些可以并行处理的任务,如文章的解压缩和转发,可以使用多线程或多进程技术来提高处理效率。
13. 故障排查与日志分析
在使用 INN 过程中,可能会遇到各种问题,如文章重复、无法访问新闻组等。通过分析系统日志可以帮助我们快速定位和解决问题。
nntpd
会将各种消息记录到系统日志的守护进程设施中。常见的错误信息及解决方法如下:
| 错误信息 | 可能原因 | 解决方法 |
| — | — | — |
|
dbminit failed
|
dbm
库不兼容 | 确保 C News 和
nntpd
链接的
dbm
库一致 |
|
nntpd can not open it properly
| 历史文件路径设置错误或文件权限问题 | 检查历史文件的路径设置,并确保
nntpd
有足够的权限访问该文件 |
|
Article lookup failed
| 历史文件损坏或文章编号冲突 | 检查历史文件是否损坏,如有必要,重建历史文件 |
通过定期检查系统日志,及时发现和解决问题,可以确保 INN 服务器的稳定运行。
14. 总结
INN 作为一款功能强大且灵活的网络新闻服务器,为互联网新闻的传输和管理提供了可靠的支持。通过合理配置 INN 的各个组件和文件,如
nntp_access
、
inn.conf
、
active
、
newsfeeds
等,可以实现对新闻组的有效管理、新闻源的灵活配置以及概述信息的高效生成。
同时,在使用 INN 过程中,要注重安全性和性能优化,通过更新版本、权限控制、硬件升级等方式确保服务器的安全和高效运行。当遇到问题时,通过分析系统日志可以快速定位和解决问题。
无论是小型的内部新闻站点还是大型的公共新闻服务器,INN 都能根据不同的应用场景构建出高效、稳定的新闻系统,满足用户对新闻阅读和发布的需求。希望本文的介绍能帮助你更好地理解和使用 INN 服务器。
超级会员免费看
12

被折叠的 条评论
为什么被折叠?



