源出处:
http://www.linuxsir.org/bbs/showthread.php?t=173637
http://www.nl.debian.org/doc/manual...ervices.en.html
翻译:etony 转载请注明源自www.linuxsir.org
翻译谬误之处,敬请指正,多谢
Debian 安全手册
第 5 章 - 增强系统上运行服务的安全性
有两种方式来增强系统中运行的服务的安全性:
* 使其只能通过它们应当所在的访问点(接口)访问.
* 正确配置, 使其只能由合法的用户使用授权方式访问.
限制服务, 使之只能由指定地点访问, 可以通过从内核级(如防火墙)限制其访问, 配置其只监听指定接口(某些服务可能没有提供此类特性)或者使用其它的方法, 例如linux Vserver(2.4.16)补丁强制进程只能在一个借口使用.
注意由inetd运行的服务(telnet, ftp, finger, pop3...) 是 不能将服务配置的只监听一个接口的. 但是, 其替代版本xinetd 超级守护进程中的 bind 恰好解决了这个问题. 参阅xinetd.conf(5).
service nntp
{
socket_type = stream
protocol = tcp
wait = no
user = news
group = news
server = /usr/bin/env
server_args = POSTING_OK=1 PATH=/usr/sbin/:/usr/bin:/sbin/:/bin
+/usr/sbin/snntpd logger -p news.info
bind = 127.0.0.1
}
以下部分将详细介绍如何根据其用途正确的配置各项服务.
5.1 ssh 安全化
如果您仍然使用telnet, 而不是ssh, 则需要改变对本手册的阅读方式. 应当用ssh来取代所有的telnet远程登录. 任何时候通过嗅探互联网通讯来获取明文密码都是相当简单的, 您应该采用使用加密算法的协议. 那么, 现在在你的系统上执行 apt-get install ssh .
鼓励您系统上的所有用户使用 ssh 取代 telnet, 或者更进一步, 卸载telnet/telnetd. 另外您应该避免使用 ssh 以 root 身份登录, 其替代的方法是使用su 或sudo 转换成 root 用户. 最后, /etc/ssh目录下的 sshd_config文件, 应当作如下修改, 以增强安全性:
* ListenAddress 192.168.0.1
使得ssh只监听一个指定的接口, 如果你有多个(并不想在其上边获得ssh服务)接口, 或者将来会增加一块新网卡(但并不想通过它连接ssh服务).
* PermitRootLogin no
尝试任何情况先都不允许 Root 登录. 如果有人想通过 ssh 成为 root, 需要两次登录, 并且root的密码现在仍不可能通过SSH暴力破解.
* Listen 666
改变监听端口, 这样入侵者不能完全确定是否运行了sshd守护进程(事先警告,这是模糊安全的).
* PermitEmptyPasswords no
空密码是对系统安全的嘲弄.
* AllowUsers alex ref me@somewhere
只允许某些用户通过 ssh 访问主机. user@host 也可用于限制指定用户通过指定主机访问.
* AllowGroups wheel admin
仅允许某个组的成员通过 ssh 访问主机. AllowGroups 和 AllowUsers 对于拒绝访问主机有同样的效果. 当称它们为"DenyUsers" 和"DenyGroups" 时不要觉得奇怪.
* PasswordAuthentication yes
这完全取决于您的选择. 仅仅允许用户使用置于 ~/.ssh/authorized_keys 文件中的 ssh-keys 登录主机将更加安全. 如果要达到这种效果,将其设为"no".
* 禁用所有的您不需要的认证方式, 如果您用不到, 例如 RhostsRSAAuthentication, HostbasedAuthentication, KerberosAuthentication 或 RhostsAuthentication(例如), 您应该将其禁用,即使它们是缺省设置(参阅联机帮助 sshd_config(5)).
* Protocol 2
禁用版本1协议, 因为其设计缺陷, 很容易使密码被黑掉. 更多信息,参阅 ssh协议问题报告 或 Xforce 通告.
* Banner /etc/some_file
为用户连接到 ssh 服务器增加一个标题(它将从文件检索), 在一些国家, 登入给定系统前, 给出未经授权或者用户监视警告信息, 将会受到法律的保护.
您也可以在限制 ssh 登录的PAM控制文件中使用 pam_listfile 或 pam_wheel 来限制对 ssh 服务器的访问. 例如, 您可以使某人没有列入 /etc/loginusers 文件, 并在 /etc/pam.d/ssh 中增加如下行:
auth required pam_listfile.so sense=allow onerr=fail item=user file=/etc/loginusers
最后, 应当注意那些存放OpenSSH配置文件的目录. 现在, 有三种常用的 SSH 守护进程, ssh1, ssh2, 和 OpenBSD 用户使用的 OpenSSH. ssh1是第一个可以使用的 ssh 守护进程, 并且仍然有很大的用户群(甚至谣传有windows版本). ssh2和ssh1相比有更多高级特性, 但是它是基于保留源代码协议的. OpenSSH 是完全自由的 ssh 守护进程, 它支持 ssh1, 和 ssh2. OpenSSH 是在 Debian 系统中选择安装的 ssh 软件包.
更多有于如何设定带有 PAM 支持的 SSH 的信息,请查阅安全邮件列表文档.
5.1.1 Chrooting ssh
当前的 OpenSSH 没有提供用户连接后自动完成 chroot 的方法(商业版本提供这种功能). 但是有个项目为 OpenSSH 提供这种功能,参见http://chrootssh.sourceforge.net, 尽管它不在当前Debian的软件包中. 然而, 您可以使用pam_chroot模块,如 限制用户访问, 第 4.10.8 节 所述.
在 SSH 的 chroot 环境, 附录 G 中有几个选项用于设置SSH的chroot环境.
5.1.2 Ssh 客户端
如果您使用的 SSH 客户端不能访问 SSH 服务器, 则需要确认是否支持在服务器端被强制执行的协议. 例如, 如果您使用了只支持 version 1 协议的 mindterm 软件包. 但是 sshd 服务器默认配置为只接受 version 2 协议(基于安全的原因).
5.1.3 禁止文件传送
如果您不想用户将文件传送到 ssh 服务器和从服务器向外传送文件, 则需要限制对 sftp-server 和 scp 的访问. 您可以通过适当的配置 /etc/ssh/sshd_config 来限制sftp-server. 但是, 要限制 scp 访问, 则必需做以下两者之一:
* 禁止用户通过 login 登录 ssh 服务器(如上所述或通过配置文件或PAM 配置).
* 不要赋予不允许安全传送用户以合法的shell。然而提供shell对于连接到ssh服务器的根本需求, 比如程序的菜单栏(ala BBS) 。否则前边的选项更好.
5.2 Squid 安全化
Squid 是一款非常流行的 proxy/cache 服务器, 并且涉及一些应该被考虑的安全问题. Squid 的默认配置文件拒绝所有的用户请求. 但是 Debian 的软件包, 允许源自 'localhost' 的访问, 您只需要正确的配置您的浏览器就可以了. 您应当通过在 /etc/squid.conf 中定义一个访问控制, 来配置 squid, 以允许可信任的用户, 主机, 网络访问, 有关定义ACL规则的更多信息参见Squid 用户指南. 注意, debian 提供了Squid 的最小化配置, 其只允许 localhost 使用您的代理服务器(使用默认端口3128), 您需要根据需求定制 /etc/squid.conf 文件. 推荐的最小化配置(在软件包中提供)如下:
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT
(...)
# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access deny manager
# Only allow purge requests from localhost
http_access allow purge localhost
http_access deny purge
# Deny requests to unknown ports
http_access deny !Safe_ports
# Deny CONNECT to other than SSL ports
http_access deny CONNECT !SSL_ports
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
http_access allow localhost
# And finally deny all other access to this proxy
http_access deny all
#Default:
# icp_access deny all
#
#Allow ICP queries from eveyone
icp_access allow all
您还应当基于系统资源来配置 Squid, 包括高速缓存(cache_mem项), 本地缓存文件, 及其占用的空间大小(cache_dir项).
注意, 如果配置不当, 某些人也许可以通过 Squid 传递邮件消息, 因为HTTP和SMTP协议设计的非常相似. Squid 的默认配置文件拒绝访问 25 端口. 如果您希望允许连接 25 端口, 仅需要将其加入 Safe_ports 列表即可. 但是, 这里推荐 NOT.
只有正确的设定和配置 proxy/cache 服务器才能保证您的站点安全. 其它必要的任务是分析 Squid 的日志, 以确保所有的都正常运转. 在 Debian GNU/Linux 中有一些软件包帮助管理员完成这些工作. 在woody(Debian 3.0)中提供以下软件包:
* calamaris - Squid 或 Oops代理的日志分析工具.
* modlogan - 日志分析工具组件.
* squidtaild - Squid 日志监控程序.
当以加速方式使用 Squid 时, 它又象一个web服务器. 这里的选项代码越复杂, 则越不可靠. 默认 Squid 不是被配作 web 服务器的, 所以这一点您不需要担心. 注意, 如果您要使用这一特性, 则需要确认这是真正必要的. 也可以从Squid 用户指南第9章查询关于加速模式的更多信息.
5.3 FTP 安全化
如果您真的必须使用 FTP (没有使用sslwarp或插入SSL或使用SSH通道), 则应当chroot ftp 为 ftp 用户的主目录, 这样用户就不会看到其目录以外的东西. 否则他们就可以遍历您的文件系统, 就象他们拥有这样的shell一样. 您应当在 proftpd.conf 中的global 部分增加以下行以启用chroot的这个特点:
DefaultRoot ~
通过 /etc/init.d/proftpd restart 重起 proftpd, 然后检查您是否能从您的主目录逃出来.
使用 ../../.. 以防止Proftp DoS 攻击, 增加以下行到 /etc/proftpd.conf 文件: DenyFilter \\*.*/
要记住, FTP 使用明码传送登录和认证密码(如果你提供的是匿名公共服务, 那么这不算什么问题), 不过在 Debian 中于此有更好的选择. 例如, sftp(ssh提供). 也有一些基于其它系统的有关 SSH 的自由软件: 例如 putty 和 cygwin.
但是, 当您维护一个用户通过 SSH 访问的 FTP 服务器时, 您可能会碰到一个典型问题. 用户在 SSH-secured 系统里访问匿名FTP服务器时可能会试图登入FTP服务器. 当访问被拒绝时, 密码则会以明码的方式在网络上传送. 为了避免这一点, ProFTPd的开发者 TJ Saunders, 创建了阻止拥有合法 SSH 账号的用户访问匿名FTP. 可以从ProFTPD Patches获取更多信息和补丁. Debian 中也提交了这个补丁, 参见 Bug #145669.
5.4 对 X 窗口系统的安全访问
今天, 越来越多的使用一台服务器带多台工作站的公司会使用 X 终端. 这可能是很危险的, 因为您需要允许文件服务器连接到客户端(从 X 的观点来看就是 X 服务器. X的关键词是客户和服务器). 如果按照(很不好)大多数的文档的建议, 在您的机器上键入xhost +. 这将允许任何 X 客户端连接您的机器. 基于安全的考虑, 您则应当使用xhost +hostname命令, 仅允许指定的主机连接.
一种更安全的方案, 就是 X 使用 ssh 通道并加密 整个会话. 当您ssh到其他机器时, 这一切都是自动完成的. 为了取得这样的效果, 您必需同时配置 ssh 的客户端和服务器端. ssh客户端, 在 /etc/ssh/ssh_config 中将 ForwardX11 设为 yes. 服务器端,在/etc/ssh/sshd_config文件中, 将 X11Forwarding 设为 yes, 并且安装 xbase-clients 软件包, 因为设定伪X显示时, ssh 服务器要使用/usr/X11R6/bin/xauth. 使用SSH时, 您应当完全丢弃基于 xhost 的访问控制.
为取得最佳的安全性, 如果您不需要从其它机器的 X 登录, 简单的键入以下命令, 以关掉对于tcp端口6000的绑定:
$ startx -- -nolisten tcp
在 Xfree 4.1.0 中这是缺省的( Debian 3.0 提供的 Xserver). 如果您运行的是 Xfree 3.3.6 (即您安装的是 Debian2.2 )您可以编辑/etc/X11/xinit/xserverrcc以获取这种功能:
#!/bin/sh
exec /usr/bin/X11/X -dpi 100 -nolisten tcp
如果您使用 XDM, 设定 /etc/X11/xdm/Xservers 为: :0 local /usr/bin/X11/X vt7 -dpi 100 -nolisten tcp. 如果您使用Gdm, 确保 /etc/gdm/gdm.conf 中 -nolisten tcp 选项类似如下设置(在 Debian中, 这是默认设置):
[server-Standard]
name=Standard Server
command=/usr/bin/X11/X -nolisten tcp
您还可以为xscreensaver锁设置默认系统超时. 既使用户能忽略它, 您应该编辑 /etc/X11/app-defaults/XScreenSaver 配置文件, 修改锁定行:
*lock: False
(在Debian中是默认设置) 为:
*lock: True
FIXME: 增加关于如何禁用用户桌面的屏幕保护程序的信息(这也许包含敏感信息).
更多 X 窗口安全的信息参阅 XWindow-User-HOWTO (/usr/share/doc/HOWTO/en-txt/XWindow-User-HOWTO.txt.gz).
FIXME: 增加debian-security 线程关于修改 XFree 3.3.6 的配置文件信息.
5.4.1 检查您的显示管理器
如果您只想安装一个用于本地应用的显示管理器(拥有友好的图形登录界面), 应确保 XDMCP (X管理控制协议)被禁用. 在XDM中您可以在 /etc/X11/xdm/xdm-config 中加入如下行:
DisplayManager.requestPort: 0
通常, 在 Debian 中所有显示管理器缺省被配置成不启用始XDMCP.
5.5 安全打印控制(lpd 和lprng 的问题)
想象一下, 您刚开始工作, 打印机就开始无休止的往外吐纸, 这是因为某些人控制了打印守护进程. 很讨厌,不是吗?
任何 Unix 打印构架, 都必需有一个方法获取客户端数据并传送给主机的打印服务器, 传统的 lpr 和 lp, 客户命令拷贝或将数据建立符号链接到 spool 目录 (这就是这些程序通常是SUID 或SGID的原因).
为了避免出现问题, 您应该保持打印机服务器特别的安全. 这意味着需要将打印服务器配置为只允许由被信任的服务器连接. 在您的 /etc/hosts.lpd 文件中加入允许的服务器, 即可实现这一点.
但是, 即便如此, lpr 守护进程仍会接收任何对 515 端口的连接. 您应当考虑屏蔽来自 networks/hosts 的连接, 他们是不允许使用打印服务的(lpr 守护进程不能设定为只监听指定 IP 地址).
和lpr相比, Lprng 应当是更好的选择,因为它可以配置为遵从IP存取控制. 并且可以指定绑定端口(虽然有些古怪).
如果您的系统配有一台打印机, 但是您并不想将其网络共享. 那么您可以考虑使用其他的打印系统比如cups提供的系统或基于用户权限的/dev/lp0设备提供的PDQ.
cups, 通过http协议将打印数据传送至服务器. 这就意味着客户端程序并不需要任何特殊的权限, 而是仅需要服务器监听端口就可以了.
但是, 如果您仅希望在本地使用cups, 则可以通过修改/etc/cups/cupsd.conf 以将其绑定到回送端口:
Listen 127.0.0.1:631
此配置文件有许多诸如允许或禁止网络和主机的其他安全选项. 然而, 如果您并不需要这些, 则仅需要限制监听端口即可. Cups 也是通过 HTTP 端口来传送文档数据, 如果您不想对外部攻击者透露潜在有用信息的话(端口是开放的), 可以增加如下行:
<Location />
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
</Locationi>
也可以修改此配置文件以增加诸如 SSL/TLS 证书和加密的特性. 可以在 http://localhost:631/ 或 cups.org 处获取操作手册.
FIXME: 增加更多内容(文章 Amateur Fortress Building 提供一些非常有趣的观点).
FIXME: 检查在 Debian 中PDG的可用性, 如果可以, 建议其做好更好的打印系统.
FIXME: 检查 Farmer/Wietse 是否可以作为打印守护进程的替代, 和其是否在Debian系统中可用.
5.6 邮件服务的安全化
如果您的服务器并不是一个邮件系统, 那么您并不需要一个邮件守护进程监听传入连接, 但是也许您希望本地邮件能够有序的分发,比如,为 root 用户接收从报警系统传来的邮件.
如果您安装了exim, 并不需要其作为守护进程, 因为标准 cron 任务可以刷新邮件队列. 配置方法, 参阅禁用守护进程服务, 第 3.6.1 节.
5.6.1 配置 Nullmailer
也许您需要一个本地邮件守护进程, 以便可以将本地邮件发送到其他系统. 当您管理几个系统, 并且不想连到每个系统去阅读本地邮件时, 那么这是很普通的需求. 所有单个系统的登录可以通过一台中央 syslog 服务器集中起来, 邮件被发送到一台中央邮件服务器.
这就需要正确的配置一个只读系统. 守护进程配置为仅监听回送地址.
在 Debian 系统中, 您必须将 smtp 守护进程从inetd中删除:
$ update-inetd --disable smtp
并将邮件守护进程配置为仅监听回送接口. 在exim中(缺省的MTA) 您可以通过编辑/etc/exim.conf加入如下行来完成配置:
local_interfaces = "127.0.0.1"
重起两个守护进程(inetd 和exim)后, exim 将只对 127.0.0.1:25 监听. 注意, 要首先禁用inted, 否则 exim 将不能启用, 因为inetd守护进程仍然处理传入连接.
对于 postfix 来说应当编辑 /etc/postfix/main.conf:
inet_interfaces = localhost
如果您只是希望处理本地邮件, 这种方法比 tcp-wrapping 邮件或增加防火墙规则来限制访问更好. 但是, 如果您仍需要监听其他接口, 则应当考虑由 inetd 装载并增加一个 tcp wrapper, 并用 /etc/hosts.allow 和 /etc/hosts.deny 来限制访问. 并且, 如果你正确的设置了日志纪录, 则当未被授权的访问试图攻击您的邮件守护进程时,将会被告知.
无论如何, 在 SMTP 级别拒绝邮件转发, 您应当编辑/etc/exim/exim.conf 加入如下行:
receiver_verify = true
既使您的邮件服务器不会转发信息, 这种配置对于中转测试器来说也是必须的, 可以通过 http://www.abuse.net/relay.html 来检测您的服务器有无中转能力.
如果您希望设定为 只读 , 那么您可以考虑修改邮件守护进程, 使其只完成将邮件转发到远端邮件服务器的功能. 对此, Debian同时提供了 ssmtp 和 nullmailer. 无论如何, 您可以自己评估一下每个Debian提供的邮件传输代理 [27]. 来确定哪个更适合自己的系统用途.
5.6.2 提供对邮箱的安全访问
有一些P OP3 和 IMAP 守护进程可以满足您远程访问邮箱的需求 [28]. 但是, 如果您要提供IMAP访问, 那么应当注意这是一个普通文件存储协议, 通过它可以获取 shell 权限, 因为用户可以检索所有文件.
例如, 可以尝试配置您的 inbox 路径为 {server.com}/etc/passwd, 如果可以成功, 则说明您的 IMAP 守护进程没有正确的配置以阻止此类访问.
在Debian中, cyrus的IMAP服务器(在 cyrus-imapd 软件包中) 通过将所有存取权限存储在文件系统里的一个访问限制的数据库中来避免这种漏洞. 并且, uw-imapd(或者安装 uw-imapd, 如果您的IMAP客户端支持,安装uw-imapd-ssl更好)可以配置为chroot用户的邮件路径, 但默认没有启用. 所提供文档对如何配置有更详细的说明.
再有, 也许您想运行一个不必在本地系统创建合法用户(需要授予 shell 访问权限)的IMAP服务器, courier-imap(用于IMAP) 和 courier-pop(用于 POP3)还有 cyrus-imapd(用于POP3 和 IMAP) 都可以提供包括本地账号的认证方法. cyrus 可以使用任何一种可由 PAM whileas teapop 配置的认证方法来通过数据库(譬如 postgresql 和 mysql)完成用户认证.
FIXME: 检查: uw-imapd也可以配置为通过PAM完成用户认证.
5.6.3 安全的接收邮件
阅读/接收邮件通常是使用明文协议. 如果您使用 POP3 或 IMAP 来接收邮件, 则将会在网络上明文传送您的密码, 那么, 从现在起几乎所有的人都可以阅读您的邮件了. 故而, 应当使用 SSL(安全套接字层)来接收邮件. 另一种选择是ssh, 如果您在作为POP或IMAP服务器的主机上拥有一个shell账号的话. 这里有一个简单的fetchmailrc范例:
poll my-imap-mailserver.org via "localhost"
with proto IMAP port 1236
user "ref" there with password "hackme" is alex here warnings 3600
folders
.Mail/debian
preconnect 'ssh -f -P -C -L 1236:my-imap-mailserver.org:143 -l ref
my-imap-mailserver.org sleep 15 </dev/null > /dev/null'
其中 preconnect 是重要的一行. 其生成一个ssh 会话, 并创建必要的通道, 自动将本地 1236 端口连接至 IMA P服务器, 并且是加密的. 另一种可行的方案是使用带有ssl特性的fetchmail.
如果您想象POP和IMAP一样提供加密邮件, apt-get install stunnel, 然后用如下方式启动您的守护进程:
stunnel -p /etc/ssl/certs/stunnel.pem -d pop3s -l /usr/sbin/popd
这个命令将为端口(-d)提供守护进程(-l)并使用指定ssl证书(-p).
5.7 增强 BIND 的安全性
有很多不同的方式用于完成域名服务器守护进程的安全化, 这仅与考虑方式有关:
* 正确的配置守护进程, 使其不会被外部误用(参见配置Bind以防误用, 第 5.7.1 节). 这包括限制来可能自客户端的查询: 区域转换和递归查询.
* 限制守护进程对服务器自身的访问, 这样即使其被破坏, 对系统的损害也是有限的. 这包括以无特权用户的身份来运行守护进程(参见管理 BIND 用户, 第 5.7.2 节) 和对其进行chroot(参见使名称服务器运行于chroot环境, 第 5.7.3 节)
5.7.1 配置Bind以防误用
您应当限制一些 DNS 服务器对外部提供的信息。 以防止一些您不想透露的关于您的组织的信息被外部检索. 这包括增加以下内容: allow-transfer, allow-query, allow-recursion 和 version. 您可以在全局部分(作用域为整个域服务)或者每个基本域来做此限制. 这些信息在bind-doc软件包中提供, 安装后就可从 /usr/share/doc/bind/html/index.html获取更多相关信息.
设想一下, 您的服务器同时与互联网和您的内部(您的内部IP是192.168.1.2)网(一台基本的multi-homed 服务器)相连, 您不想为互联网提供任何服务, 而只是为内部主机提供 DNS 查询服务. 您可以在/etc/bind/named.conf 中加入如下内容, 以实现这种限制:
options {
allow-query { 192.168.1/24; } ;
allow-transfer { none; } ;
allow-recursion { 192.168.1/24; } ;
listen-on { 192.168.1.2; } ;
forward { only; } ;
forwarders { A.B.C.D; } ;
};
listen-on 选项使 DNS 仅绑定到内部地址接口, 但即使此接口和与互联网相连的相同(例如, 您正在使用NAT), 也只会接收源自您的内部网络的主机的查询. 如果系统有多个接口, 并且没有指定listen-on项, 以确保只有内部用户可以查询, 那么因为此端口外部攻击者也可以访问,所以他们将设法对 DNS 服务器攻击(或利用缓冲溢出攻击). 因此如果 DNS 服务器只为自身提供服务, 则应当配置其只监听127.0.0.1.
version.bind 记录了当前所运行 bind 程序的版本. 这个信息经常被自动扫描器和寻找脆弱的bind攻击对象的恶意个人所利用. 通过在version.bind 中提供错误的或不提供信息, 来减少可能的针对其发布版本的攻击.以如下方式,使用version来指定您要提供的版本信息:
options { ... various options here ...
version "Not available."; };
改变 version.bind 的记录并不能对避免攻击提供实质性的保护. 但是可以被认为是一个有用的保障.
下边是一个 named.conf 配置文件的例子:
acl internal {
127.0.0.1/32; // localhost
10.0.0.0/8; // internal
aa.bb.cc.dd; // eth0 IP
};
acl friendly {
ee.ff.gg.hh; // slave DNS
aa.bb.cc.dd; // eth0 IP
127.0.0.1/32; // localhost
10.0.0.0/8; // internal
};
options {
directory "/var/cache/bind";
allow-query { internal; };
allow-recursion { internal; };
allow-transfer { none; };
};
// From here to the mysite.bogus zone
// is basically unmodified from the debian default
logging {
category lame-servers { null; };
category cname { null; };
};
zone "." {
type hint;
file "/etc/bind/db.root";
};
zone "localhost" {
type master;
file "/etc/bind/db.local";
};
zone "127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};
zone "0.in-addr.arpa" {
type master;
file "/etc/bind/db.0";
};
zone "255.in-addr.arpa" {
type master;
file "/etc/bind/db.255";
};
// zones I added myself
zone "mysite.bogus" {
type master;
file "/etc/bind/named.mysite";
allow-query { any; };
allow-transfer { friendly; };
};
请(再次)检查关于 Bind 的错误跟踪系统, 特别是Bug #94760 (有关区域转换的授权控制列表).如果您认为自己能增加有用信息, 请为错误报告贡献您的力量.
5.7.2 管理 BIND 用户
关于限制BIND的权限, 您必须清楚, 如果由非 root 用户运行 BIND, 则 BIND 无法自动监测新的接口, 例如在您的笔记本上插入一个 PCMCIA 卡. 关于这个问题的更多信息参见named文档目录下的 README.Debian 文件 (/usr/share/doc/bind/README.Debian). 最近发现很多关于 BIND 的安全方面的问题, 因此在可能的时候切换用户是比较有用的. 我们将在这里做详细的讲解, 然而如果您想自动完成这些设置, 可以尝试一下修改Bind默认安装的示例脚本., 附录 E提供的脚本.
为了可以使用其它用户来运行BIND, 首先应为此创建一个单独的用户和组 (每个非root运行的服务都使用 nobody 或 bogroup 不是一个好主意). 在下边的例子中, 将会使用named这个用户和组. 键入如下内容:
addgroup named
adduser --system --home /home/named --no-create-home --ingroup named \--disabled-password --disabled-login named
注意, 用户 named 将会是一个限制. 如果您需要, 或者其它的原因, 有一个较少的限制的设定:
adduser --system --ingroup named named
使用您喜欢的编辑器编辑/etc/init.d/bind, 修改开始行
start-stop-daemon --start
为[29]
start-stop-daemon --start --quiet --exec /usr/sbin/named -- -g named -u named
修改Bind所使用文件的权限, 这包括 /etc/bind/rndc.key:
-rw-r----- 1 root named 77 Jan 4 01:02 rndc.key
在 bind 创建pidfile的地方,使用, 例如 /var/run/named 来替代 /var/run:
$ mkdir /var/run/named
$ chown named.named /var/run/named
$ vi /etc/named.conf
[ ... update the configuration file to use this new location ...]
options { ...
pid-file "/var/run/named/named.pid";
};
[ ... ]
同时, 为避免作为 root 运行,修改reload行:
reload)
/usr/sbin/ndc reload
为:
reload)
$0 stop
sleep 1
$0 start
注意: 您也许还需要修改restart行, 这与您的 Debian 的版本有关. 这在Debian的bind 1:8.3.1-2版中对此做了修正.
现在您所需要做的是通过 '/etc/init.d/bind restart' 重启 bind, 并检查您的 syslog 中的类似如下两条的内容:
Sep 4 15:11:08 nexus named[13439]: group = named
Sep 4 15:11:08 nexus named[13439]: user = named
Voil�! 您的 named 现在不是以 root运行的了. 如果要了解有关为什么bind作为非root用户无法运行的信息, 请检查关于bind的错误跟踪系统, 具体见Bug #50013: bind不应当作为root运行和 Bug #132582: 缺省安装的潜在危险, Bug #53550, Bug #128120, 和 Bug #128120 如果您认为自己能增加有用信息, 请为错误报告贡献您的力量.
5.7.3 使名称服务器运行于chroot环境
为了达到 BIND 的最佳安全性, 现在在您的守护进程周围创建一个chroot jail(参阅 常用 chroot 和 suid, 第 5.10 节. 有一个简单的办法: -t 选项(参阅 named(8) 联机手册,或Bind's 9 documentation (PDF)的第100页). 这样 bind 将被 chroot 到一个指定目录, 而不需为设定chroot jail 或为动态库担心. chroot涉及到的文件是:
dev/null
etc/bind/ - 保存 named.conf文件和所有的服务区域文件
sbin/named-xfer - 如果您做名称转换的话
var/run/named/ - 保存pid和名称服务缓存, 此目录对 named 用户应当可写
var/log/named - 如果配置将日志写入一个文件, 需要对 named 用户可写
dev/log - 如果 named 配置为通过它记录日志,syslogd 将在此处监听
Bind 守护进程必须对 named 文件有访问权限才能正常运行. 因为这些配置文件通常都在 /etc/named/ 目录下, 所以这很容易办到. 应当考虑到,对于区域文件只需要有只读权限,除非这是第二或缓存名称服务器. 如果是这样,您则需要给必要的区域以写权限(以便从主服务器进行区域转换).
您也可以在 Chroot-BIND-HOWTO (关于 Bind 9)和 Chroot-BIND8-HOWTO (关于 Bind 8)处找到有关Bind chrooting的信更多息. 通过安装 doc-linux-text(text 版) 或 doc-linux-html(html版) 也可以得到同样的文档. 其它一些有价值的文档http://www.psionic.com/papers/dns/dns-linux.
如果您想在Debian(potato)中为 Bind 8.2.3 设定完全的 chroot jail(即,不仅仅是用-t), 应确保您有以下文件:
dev/log - syslogd在此处监听
dev/null
etc/bind/named.conf
etc/localtime
etc/group - 只有一行: "named:x:GID:"
etc/ld.so.cache - 由 ldconfig 生成
lib/ld-2.1.3.so
lib/libc-2.1.3.so
lib/ld-linux.so.2 - ld-2.1.3.so 的符号连接
lib/libc.so.6 - libc-2.1.3.so 的符号连接
sbin/ldconfig - 设定 chroot 完成后将被删除
sbin/named-xfer - 如果做名称转换
var/run/
并修改 syslogd 监听 #CHROOT/dev/log, 并使 named 服务器可将 syslog 写入本地系统日志.
如果您想避免动态链接库的问题, 您可以静态编译bind. 可以使用apt-get带source选项下载. 这样可以下载所需正确编译的软件包. 您需要做类似如下操作:
$ apt-get --download-only source bind build-dep bind
$ cd bind-8.2.5-2
(edit the Makefile.in so CFLAGS includes the '-static' option
before the @CFLAGS@ definition substituted by autoconf)
$ dpkg-buildpackage -rfakeroot
$ cd ..
$ dpkg -i bind-8.2.5-2*deb
安装后完成后, 您需要将文件移到chroot jail [30] 下,在/etc/init.d目录下维护一个init.d脚本, 这样系统就会自动启动名称服务器, 并脚本中调用start-stop-daemon处加入 --chroot /location_of_chroot.
有关如何设定chroot的更多信息,参见常用 chroot 和 suid, 第 5.10 节.
FIXME, 合并源自以下地址的信息 http://people.debian.org/~pzn/howto/chroot-bind.sh.txt, http://people.pdxlinux.org/~karlheg/ (Bind9 on Debian), http://www.cryptio.net/~ferlatte/config/ (Debian-specific), http://www.psionic.com/papers/whitep01.html, http://csrc.nist.gov/fasp/FASPDocs/NISTSecuringDNS.htm 和 http://www.acmebw.com/papers/securing.pdf.
5.8 增加 Apache 的安全性
FIXME: 增加内容: 有关 Apache 正常安装时提供的模块(在 /usr/lib/apache/X.X/mod_* 处) 和可能被安装的在 ibapache-mod-XXX 软件包中的模块.
如果只是想在内部使用(为了测试, 对doc-central的访问, 等等) 而不想对外部提供服务, 您可以限制对Apache服务器的访问. 在 /etc/apache/http.conf 中设定Listen或直接BindAddress.
使用监听:
Listen 127.0.0.1:80
使用地址绑定:
BindAddress 127.0.0.1
然后通过 /etc/init.d/apache restart 重启 Apache, 您会发现它只监听回送接口.
无论如何, 如果您并不使用 Apache 提供的全部功能, 您可以考虑一下 Debian 中提供的其它 web 服务器, 如dhttpd.
Apache 文档提供了有关 Apache web 服务器的许多安全措施的信息 (在 Debian 的 apache-doc 包中提供了同样的文档). InterSect Alliance提供的Apache 安全配置文档也同样非常有用.
Apache 的 chroot 环境, 附录 H 提供了更多的有关设置 chroot jail 以对 Apache 实现更多限制的信息.
5.8.1 禁止用户发布 web 内容
在 Debian 中缺省的 Apache 安装允许用户在 $HOME/public_html 目录下发布 web内容. 此内容可以远程通过形如 http://your_apache_server/~user 的URL检索到.
如果您不想使用此项功能, 则必须修改配置文件 /etc/apache/http.conf 注释掉以下内容:
LoadModule userdir_module /usr/lib/apache/1.3/mod_userdir.so
但是如果模块是静态连接(运行 apache -l 来检测 ), 则您必须增加如下内容:
Userdir disabled
注: disabled 关键字功能在 Apache 1.3 以后才有. 如果您使用了一个老版本的 Apache, 则需要修改配置文件, 加入如下内容:
<Directory /home/*/public_html>
AllowOverride None
Order deny,allow
Deny from all
</Directory>
攻击者仍然可以使用用户枚举, 因为web服务器的回答是 403 访问拒绝, 而不是 404 网页不存在.
5.8.2 日志文件权限
Apache 日志文件 从 1.3.22-1 开始, 其拥有者是'root'用户和组'adm', 权限为640, 这允许 rotation 后对其进行修改. 这意味着入侵者通过 web 服务器访问系统, 不能(未做权限提升)删除旧的日志文件记录.
5.8.3 发布 web 文件
Apache 的文件位于 /var/www 目录下. 安装完成后, 缺省的文件提供一些关于系统的信息(主要是在一个Debian系统运行的Apache). 缺省 web 页面默认属于 root 用户和 root 组. 同时 Apache 进程以 www-data 用户和 www-data 组身份运行. 这样应该可以减轻通过网络服务器摧毁站点的攻击者对系统的损害程度. 当然, 您应当用自己的网页替换默认页面(或许它提供了你不想对外公布的信息).
5.9 增强 finger 的安全性
如果您想要运行finger服务, 首先考虑一下这是不是必须的. 检查一下, 您会发现 Debain 提供了很多finger守护进程 (主要源自apt-cache search fingerd的输出):
* cfingerd - 可配置的 finger 守护进程
* efingerd - unix 下的另一个 finger守护进程, 对输出做了优化.
* ffingerd - 一个安全的 finger 守护进程
* fingerd - 远程用户信息服务器.
* BSD-like 带有 qmail 支持的 finger 守护进程.
如果您打算将 finger 守护进程用于公共服务, 推荐使用ffingerd. 无论如何, 当您通过inetd, xinetd 或 tcpserver 配置它时, 建议您: 限制同时运行进程数, 限制指定主机(使用 tcp wrappers)对 finger 守护进程的访问, 使它只监听您需要的接口.
5.10 常用 chroot 和 suid
chroot 是一个最强大的限制守护进程或用户或其它服务的工具. 设想一下, 在您的目标附近设置屏障, 使目标无法逃脱(通常, 在许多条件下, 仍然允许逃逸). 如果您对某个用户和服务并不信任, 您可以为其建立一个root交换环境. 当您需要拷贝所有的可执行文件和库到屏障中去时, 需要使用一些磁盘空间. 这样即使用户进行了恶意破坏, 其损害范围也被限制在屏障中.
许多服务作为守护进程运行, 就受益于这样的设置. 您使用的 Debian 发行版所安装的守护进程不尽相同, 然而, chrooted [31] 必然是缺省安装.
这包括: 名称服务器(譬如 bind),web服务器(譬如 apache), 邮件服务器(譬如 sendmail)以及ftp 服务器(譬如 wu-ftpd). 近年来通常认为 BIND 的复杂性在于其暴露在攻击之下(参见 增强 BIND 的安全性, 第 5.7 节).
但是, Debian 确实提供了一些用于设置 chroot 环境的软件, 参阅 自动配置 chroot 环境, 第 5.10.1 节.
无论如何, 如果您在您的系统上运行一项服务, 都需要尽可能的保证其安全性, 这包括取消其 root 权限, 在限制的环境下运行(如 chroot jail)或者用更安全的方法.
但是, 应当注意的是, 以root用户运行的 chroot jail 是有可能被破坏的. 因此, 应当确保服务以非特权用户运行. 通过限制其环境, 您可以限制服务可访问文件的读/执行权限, 因此您也就限制了利用本地系统的漏洞提升权限的可能性. 即使如此您也无法确保一个聪明的攻击者以某种方法突破chroot jail. 只有使用公认的安全性好的服务器, 才是增加安全性的很好的手段. 即使一个很小的漏洞, 如开放文件句柄, 也可能被熟练的攻击者利用来攻破系统. 最后,chroot 并不是设计作为一个安全工具, 而是一个测试工具.
5.10.1 自动配置 chroot 环境
有几个程序可以完成 chroot 服务器和服务的自动配置. Debian(2002年3月)当前在 chrootuid 软件包中提供的是 Wietse Venema 的compartment和makejail 以及 chrootuid. 这些程序可以用来设定任何可执行程序的限制环境 (即使一个限制用户也可以运行chrootuid).
使用这些工具可以很容易的设置 chroot 环境. 例如 makejail 程序, 可以使用很小的一个配置文件创建和更新一个 chroot jail (它提供了bind, apache, postgresql 和 mysql 的示例配置文件). 它试图猜测并在屏障中装入守护进程strace, stat 所需的所有文件, 以及 Debian 的依赖包. 更多信息参见: http://www.floc.net/makejail/. Jailer 是一个http://www.balabit.hu/downloads/jailer/ 提供的一个小工具.
FIXME: 我已经做了一个 jailer 的软件包, 接收后就会被更新.
deb.pl 对于创建 chroot(或jail)也很有用, 这是一个用于分析依赖文件的脚本 .
5.11 明文密码
您应当设法避免在网络中象 FTP/Telnet/NIS/RPC 一样接收和发送明文密码. 作者建议大家使用 ssh 代替 telnet 和 ftp.
记住, 从 telnet 转到 ssh, 但是仍然使用其它的明文协议并不能为您增加任何安全性! 最好的办法是删除 ftp, telnet, pop, imap, http, 而是用他们各自的使用加密的服务. 您可以考虑将它们删除, 而使用它们的 SSL 版本, ftp-ssl, telnet-ssl, pop-ssl, https ...
以上的大多数提示适用于每个unix系统(您会在阅读其它的Linux 和类Unix 的安全文档时发现您会发现这些提示).
5.12 禁用 NIS
如有可能尽量不要使用NIS, 网络信息服务, 因为它允许密码分享. 如果您的对应设置遭到破坏, 这将是非常危险的.
如果需要在不同的机器之间使用密码共享, 您也许需要考虑其它的选择. 例如, 您可以配置一个 LDAP 服务器, 并在您的系统上配置PAM, 用于连接 LDA P服务器进行用户身份认证. 在LDAP-HOWTO (/usr/share/doc/HOWTO/en-txt/LDAP-HOWTO.txt.gz)中您可以找到详细的配置.
更多 NIS 安全方面的内容参见NIS-HOWTO (/usr/share/doc/HOWTO/en-txt/NIS-HOWTO.txt.gz).
FIXME (jfs): 增加有关在 Debian中如何做相应设置的内容.
5.13 禁用 RPC 服务
当不需要 RPC 服务时, 您应当将其禁用.[32] portmapper 服务和基于 RPC 的服务存在很多已知的漏洞并且很容易被攻破. 另一方面, NFS 在一些网络中也是相当重要的服务, 这就修要在您的网络中寻求安全性和实用性的平衡. 一些DDoS(分布式拒绝服务)攻击就是利用RPC以客户端/处理者的身份进入系统的. 更多NIS安全方面的信息, 参见 NFS-HOWTO (/usr/share/doc/HOWTO/en-txt/NFS-HOWTO.txt.gz).
禁用 portmap 相当简单. 有几种方法可以做到. 在 Debian 3.0 系统中最简单的办法就是不安装portmap软件包, 如果您使用的是其它版本则可以参照禁用守护进程服务, 第 3.6.1 节操作, 这源于程序是作为net-base 包存在的(在不破坏系统的前提下无法将其删除).
这实际上是删除在 /etc/rc${runlevel}.d/ 下的每个与 portmap 相关的符号连接, 其中一些需要您手动删除. 另一种可行的方法是chmod 644 /etc/init.d/portmap, 但是这在启动时会抛出错误信息. 您也可以在 /etc/init.d/portmap 脚本中剔除 start-stop-daemon 部分.
5.14 增加防火墙
Debian GNU/Linux 操作系统拥有 Linux 内核提供的此内置功能. 这就意味着如果你安装是一个 potato(Debian 2.2 ) 系统(缺省内核是2.2) 你就已经拥有了内核中的 ipchains 防火墙, 前提是您安装了 ipchains 软件包, 因为优先级的缘故, 它应该是已经被安装了. 如果你安装的是 woody(Debian 3.0)系统(缺省内核是2.4), 您将拥有 iptables(netfilter)防火墙. ipchains 和 iptables 之间主要的差别是后者基于安全的小包检测, 这将提供更加安全(并更加容易构建)的过滤配置.
5.14.1 为本地系统构建放火墙
您可以使用防火墙规则来完成本地系统访问的安全化, 甚至可以用它来限制对外部的通讯. 防火墙规则还可以用于保护那些没有正确配置, 不能对某一网络, IP地址等等提供服务的进程..
然而, 本手册中, 此方法的提出, 主要是因为其保护一个系统并不仅仅是基于防火墙的性能, 一个系统的安全源于多个层面, 一旦所有的服务完成安全化设置, 防火墙应该是最后一层. 您应该很容易的设想, 如果一个系统的保护仅仅基于一个内置防火墙, 一旦管理员不管出于什么原因, 删除了防火墙规则(可能因为设置, 喜好, 人为错误), 如果在此系统中没有其它保护措施的话, 这个系统将完全对攻击者敞开.
另一方面, 本地系统拥有防火墙规则还能防止其它一些破坏性事情发生. 即使提供的服务做了安全化配置, 一个防火墙也能为错误的配置或者新安装的还未来得及配置的服务提供保护, 并且一个紧凑的配置, 除非防火墙的代码被删除, 将会防止木马侵害. 注意, 入侵者并不一定要超级用户权限才能控制装有木马的系统(因为对于绑定端口, 如果它不是私有端口, 并且没有被禁用, 这将是允许的.
因而,一个合适的防火墙设置应该带有默认的拒绝策略,即:
* 只允许许可的机器访问本地许可的服务.
* 只允许通过您的系统访问外部服务(DNS, web browsing, pop, email....) [33]
* forward规则设为拒绝(除非您有其它系统的保护, 参阅下边).
* 其它的连入连出都是禁止的.
5.14.2 使用防火墙保护其它系统
安装带有防火墙规则的 Debian 防火墙还以用来保护对于其后边的系统的访问, 限制其暴露于 Internet. 防火墙可以配置用于阻止外部系统对本地非公开服务(端口)的访问. 例如, 对于一个邮件服务器, 只有端口25(提供邮件服务)需要提供外部访问. 即使是包括公共服务的其它服务, 放火墙也可配置来接收传送给它的数据包(这就是众所周知的filtering).
您甚至可以将一台 Debian GNU/Linux 机器设置为网桥防火墙. 即, 对于网络来说完全透明的过滤防火墙, 因为其缺少IP地址, 无法对其直接攻击. 根据安装的内核, 当配置内核和一个新的网络过滤器选项时, 您可能需要安装网桥防火墙补丁以支持802.1d以太网桥, 具体的网桥防火墙设置参阅设定网桥防火墙, 附录 D.
5.14.3 配置防火墙
当然, 放火墙的配置和其依赖的系统和网络有关. 系统管理员在着手配置以前, 必须知道其要连入的网络和要保护的系统, 需要被访问的服务, 是否有其它网络 (如NAT和路由)也要需要考虑. 在配置防火墙时要小心谨慎, 就如 Laurence J. Lane 在iptables软件包中所讲:
工具很容易被误用, 可能导致一个不健全的网络对于一个电脑系统的不正常的访问. 一个远程系统管理员将被屏蔽在数百或数千英里之外的系统之外并不罕见. 甚至有可能将自己屏蔽在自己身边的系统之外. 请谨慎使用.
记住: 仅仅安装 iptables(或者旧版的防火墙代码)并不能给您任何保护, 只不过是提供了一个软件. 要想拥有一个防火墙, 您就必须配置它!
如果您对防火墙了解不多, 你可以参阅 doc-linux-text 软件包(其它格式的文档也有提供)中提供的 Firewalling-HOWTO . 更多要点,参见 应当知道的一般性安全问题, 第 2.2 节.
5.14.3.1 以 Debian 的方式
如果您使用的是 Debian 3.0, 请注意, 系统中已经安装了 iptables 软件包. 2.4.4 以上内核 netfilter 都提供了支持. 因为刚刚完成安装, 系统并不知道任何防火墙规则(防火墙规则和具体的系统有关), 您必须起用iptables. 然而,系统提供了配置好了的脚本以便管理员设定防火墙规则, 然后仿照它生成初始化脚本, 并用它设定防火墙.
为此, 您必须:
* 配置软件随系统启动. 新的版本(从1.2.6.a-1开始)安装时会做寻问. 以后您可以使用dpkg-reconfigure -plow iptables重新配置. 注: 老的版本通过编辑 /etc/default/iptables 设置变量 enable_iptables_initd 为 true 来完成.
* 使用 iptables 创建防火墙设置, 您可以使用命令行(参见iptables(8)) 或者使用Debian防火墙软件包(参见使用防火墙软件包, 第 5.14.3.2 节)提供的一些工具. 您需要创建一套防火墙规则在防火墙处于激活状态时使用, 另一套在防火墙非激活状态下使用(可能是空规则).
* 将您创建的规则保存到 /etc/init.d/iptables save_active 和 /etc/init.d/iptables save_inactive 中 以备使用.
一旦您将防火墙设置保存到了 /var/lib/iptables/ 目录下, 在系统启动时(或者使用 start 和 stop 参数运行 initd 脚本时)将被执行. 请注意缺省的 Debian 设置在多用户级别(2到5)启动防火墙. 并且, 其在单用户级别(1)是停止的, 这如果和您的安全策略不匹配,可以进行修改.
如果你对于如何手动设定防火墙没有什么概念, 可以参照 iptables 在/usr/share/doc/iptables/html/下提供的Packet Filtering HOWTO and NAT HOWTO. 并且, 配置文件 /etc/default/iptables 提供了更多的关于这个软件包的信息.
5.14.3.2 使用防火墙软件包
手工设定防火墙对于一个管理员新手(有时甚至是专家)可能有点复杂. 然而, 自由软件社区开发了很多可以用来轻松设置本地防火墙的工具. 警告: 其中某些工具仅用于本地(即所谓的个人防火墙)安全保护设置. 而另一些则更具多样性, 可用于复杂规则配置用于保护整个网络.
Debian 系统中可用于设定防火墙规则的一些软件:
* firestarter, 适用于最终用户, 其包括一个向导, 可以快速定义一个防火墙规则.
* knetfilter
* fwbuilder, 提供图形界面, 包括复杂的策略, 可用于包括 iptables 在内的各种防火墙平台, 和路由访问列表.
* shorewall 提供了IPsec支持, 流量控制支持, 防火墙规则定义.
* mason, 可根据您的系统"可见"的网络流量生成防火墙规则.
* bastille (among the hardening steps that can make new versions of bastille is the possibility of adding firewall rules to the system to be executed on startup)
* guarddog, 一个基于 KDE 防火墙配置软件包(可用于替代 knetfilter 软件包)
* ferm
* fwctl
* easyfw
* firewall-easy
* ipac-ng
* gfcc
* lokkit 或 gnome-lokkit
后边的这些软件包: gfcc,firestarter 或 knetfilter 提供使用GNOME(前两个)或KDE(最后一个)的管理用户图形界面, 与列表中的其它可能更面向管理员的软件包相比, 其更加面向用户(即, 最终用户).
事先警告, 一些软件包在概述部分通常介绍防火墙脚本会在系统启动时运行, 这无容置疑会和通常的配置(如果配置了的话)相冲突, 可能出现无法预料的后果. 通常, 防火墙脚本是您配置的系统最后一个运行的脚本(这也许不是您所希望的). 参考软件包的文档, 并使用其中一个设置. 通常, 其它程序可以帮助您配置防火墙脚本的程序是一个不错的办法.
FIXME: 增加更多有关这些软件包的信息
FIXME: 检查有关 Debian 防火墙的信息, 以及和其它发行版相比做了何种修改.
FIXME: Where should the custom firewalling code be enabled (有关 debian 防火墙的常见问题解答?)
FIXME: 增加有关 Debian 中 Zorp 的信息 (参阅 Bug #88347). 提供了 Debian 软件包, 但是其基于 Debian 发行版中尚未提供的libqlib1.3.