说明:Linux和UNIX TCP包装器找出程序是否与TCP包装器一起编译

时间:2020-01-09 10:43:50  来源:igfitidea点击:

什么是TCP包装器?
如何确定是否使用TCP包装程序编译了程序或者服务器(服务)?

TCP Wrappers与Netfilter或者PF等防火墙相比有哪些优缺点?
如何使用TCP包装器保护Mac OS X或者Sun Solaris或者Linux工作站?

TCP包装程序是一个库,它为接受通过网络的连接的受支持应用程序提供简单的访问控制和标准化的日志记录。

Linux和其他类似Unix的操作系统使用TCP包装器(也称为TCPD)进行编译。
例如,Solaris,Linux,* BSD和Mac OS X将TCP Wrappers配置为直接运行。

TCP Wrapper是基于主机的网络访问控制列表(ACL)系统,用于过滤对Internet的网络访问。

TCP Wrappers最初用于监视和停止1990年代UNIX工作站上的破解活动。
这是90年代通过Internet保护UNIX工作站的最佳解决方案。
但是,它有几个缺点:

  • 所有UNIX应用程序必须使用libwrap库进行编译。
  • 包装程序不适用于TCP上的RPC服务。
  • TCP Wrappers的用户名查找功能使用identd标识远程主机的用户名。默认情况下,此功能是禁用的,因为当存在大量TCP连接时,identd可能会挂起。

尽管如此,TCP Wrappers还是比防火墙具有一个强大的优势:它可以在应用程序层上运行。
使用加密时,它可以过滤请求。
基本上,用户需要同时使用基于主机的安全性和基于网络的安全性。

TCP包装器支持pop3,ftp,sshd,telnet和r服务等常用服务。

TCPD(TCP包装器)的好处

  • 通过syslog工具报告TCPD监视的"记录"连接。
  • "访问控制" TCPD支持基于模式匹配的简单形式的访问控制。您甚至可以在模式匹配时挂接shell命令/脚本的执行。
  • 主机名验证TCPD通过查看由名称->地址DNS服务器返回的主机名和地址,来验证由地址->名称DNS服务器返回的客户端主机名。
  • 欺骗保护。

如何确定程序是否使用TCP包装程序编译?

要确定给定的可执行守护程序/路径/到/守护程序是否支持TCP包装程序,请执行:

$ ldd /path/to/daemon | grep libwrap.so

如果此命令返回任何输出,则该守护程序可能支持TCP包装程序。
在此示例中,找出SSHD是否支持TCP Wrappers。
首先,找到磁盘上的SSHD程序位置:

$ whereis sshd

输出示例:

sshd: /usr/sbin/sshd /usr/share/man/man8/sshd.8.gz

接下来,按如下所示运行旧的" ldd"命令,以找出SSHD守护程序是否支持TCP包装器:

$ ldd /usr/sbin/sshd | grep libwrap.so

输出示例:

libwrap.so.0 -  /lib64/libwrap.so.0 (0x00002b759b381000)

ldd命令用于查看libwrap.so是否为依赖项。

TCP包装程序支持的替代方法是使用iptables进行数据包筛选。

重要档案

  • tcpd守护程序Internet服务的访问控制工具。
  • /etc/hosts.allow该文件描述了由/usr/sbin/tcpd服务器决定允许使用本地INET服务的主机的名称。
  • /etc/hosts.deny这个文件描述了由/usr/sbin/tcpd服务器决定的不允许使用本地INET服务的主机名。
  • 如果在hosts.allow和hosts.deny中都列出了相同的客户端/用户/ip,则hosts.allow具有优先权,并且允许访问。如果客户端在hosts.allow中列出,则允许访问。如果客户端在hosts.deny中列出,则访问被拒绝。
  • tcpdchk和tcpdmatch命令测试tcpd程序。

主机访问控制文件的语法(格式)

/etc/hosts.allow和/etc/hosts.deny都使用以下格式:

daemon_list : client_list [ : shell_command ]

其中:

  • daemon_list是一个或者多个守护进程名称的列表。
  • client_list将与客户端主机名或者地址匹配的一个或者多个主机名,主机地址,模式或者通配符的列表。

通配符

访问控制语言支持显式通配符(从手册页中引用):

ALL    The universal wildcard, always matches.

       LOCAL  Matches any host whose name does not contain a dot character.

       UNKNOWN
	      Matches  any  user  whose  name is unknown, and matches any host
	      whose name or address are unknown.  This pattern should be  used
	      with  care:  host names Jan be unavailable due to temporary name
	      server problems. A network address will be unavailable when  the
	      software	cannot	figure	out what type of network it is talking
	      to.

       KNOWN  Matches any user whose name is known, and matches any host whose
	      name  and  address  are  known. This pattern should be used with
	      care: host names Jan be unavailable due to temporary name server
	      problems.   A network address will be unavailable when the soft
	      ware cannot figure out what type of network it is talking to.

       PARANOID
	      Matches any host whose name does not match  its  address.   When
	      tcpd  is built with -DPARANOID (default mode), it drops requests
	      from such clients even before  looking  at  the  access  control
	      tables.	Build  without	-DPARANOID  when you want more control
	      over such requests.

TCPD配置示例

在此示例中,我将默认策略设置为拒绝访问。
仅允许明确授权的主机访问。
更新/etc/hosts.deny文件,如下所示:

# The default policy (no access) is implemented with a trivial deny file
ALL: ALL

" ALL:ALL"配置将拒绝所有主机的所有服务,除非允许文件中的条目允许它们访问。
例如,允许通过/etc/hosts.allow文件进行如下访问题描述:

ALL: LOCAL @devels
  ALL: .theitroad.com EXCEPT boobytrap.theitroad.com

记录和拒绝访问(诱杀陷阱),我们不允许来自crackers.com的连接:

ALL : .crackers.com \
    : spawn (/bin/echo %a from %h attempted to access %d >> \
      /var/log/connections.log) \
    : deny

一个典型的UNIX示例

只允许通过/etc/hosts.allow访问局域网内的各种服务:allow:

popd : 192.168.1.200 192.168.1.104
imapd : 192.168.1.0/255.255.255.0
sendmail : 192.168.1.0/255.255.255.0
sshd : 192.168.1.2 172.16.23.12

通过/etc/hosts.deny拒绝所有内容:

ALL : ALL

拒绝所有连接

将与非公共服务的所有连接仅限制为localhost。
假设SSHD和FTPD是必须远程访问的服务的名称。
编辑/etc/hosts.allow。
为sshd和ftpd添加以下行:

sshd ,ftpd : ALL
ALL: localhost

保存并关闭文件。
编辑/etc/hosts.deny。
添加以下行:

ALL: ALL

默认日志文件

TCP Wrappers将根据/etc/syslog.conf文件通过syslog进行所有日志记录。
下表列出了来自TCP包装程序的消息将出现的标准位置:

  • AIX/var/adm/messages
  • HP-UX/usr/spool/mqueue/syslog
  • Linux/var/log/messages
  • FreeBSD/OpenBSD/NetBSD/var/log/messages
  • Mac OS X /var/log/system.log
  • Solaris/var/log/syslog

使用以下命令查看日志:

# tail -f /path/to/log/file
# grep 'ip' /path/to/log/file
# egrep -i 'ip|hostname' /path/to/log/file

如何预测TCP包装器将如何处理特定的服务请求?

使用tcpdmatch命令来预测TCPD如何处理来自本地系统的SSHD请求:

tcpdmatch sshd localhost

相同的请求,假装主机名查找失败:

tcpdmatch sshd 192.168.1.5

要预测当客户端名称与客户端地址不匹配时TCPD将执行的操作:

tcpdmatch sshd paranoid

用in.telnetd或者ftpd等替换sshd。
您可以使用inetd.conf或者xinetd.conf文件中指定的所有守护程序名称。

如何检查TCP包装器配置文件?

使用" tcpdchk"命令检查您的TCP包装器配置,并报告其可能发现的所有潜在和实际问题。

tcpdchk
tcpdchk -v

有关TCP包装程序和防火墙的说明

  • 您需要同时使用(防火墙和tcpd)来对抗饼干。
  • TCP包装程序最常用于匹配IP地址和主机级别保护。
  • 切勿在防火墙主机上配置TCP包装程序。
  • 将TCP包装器放在所有UNIX/Linux/BSD工作站上。
  • 不要在TCP Wrappers规则中使用NIS(YP)网络组。
  • 将TCP Wrappers放在防火墙系统后面,因为TCP Wrappers不能替代netfilter或者pf防火墙。
  • TCP封装确实提供了更高的安全性,因为防火墙无法检查加密的连接(作为数据包读取)。

有关TCP包装程序和防火墙的说明

  • 您需要同时使用(防火墙和TCPD)来对抗饼干。
  • TCP包装程序最常用于匹配IP地址和主机级别保护。
  • 切勿在防火墙主机上配置TCP包装程序。
  • 将TCP包装器放在所有UNIX/Linux/BSD工作站上。
  • 不要在TCP Wrappers规则中使用NIS(YP)网络组。
  • 将TCP Wrappers放在防火墙系统后面,因为TCP Wrappers不能替代Netfilter或者PF防火墙。
  • 由于防火墙无法检查加密的连接(称为数据包),因此TCP Wrappers提供了更高的安全性。