一、Tcp Wrapper相关介绍
Tcp Wrapper也是一种网络资源访问控制器,与iptables(工作在网络层)这种网络资源控制器不同的是,Tcp Wrapper 是一种简单化的访问控制机制,可以认为它工作在Tcp层。通常只能对基于Tcp协议的相关访问请求做访问控制。严格说,它本身不是一个服务,是一个重要的库文件。
我们也可以吧Tcp Wrapper 理解为一个工作在用户请求和服务所监听的套接字之间的一种检查过滤机制。它可以实现拦截对某种特定服务的访问请求,并根据所定义的规制,决定是否允许此请求访问的一种访问控制机制。
查看某一个应用程序是否受Tcp Wrapper的访问控制,可以使用下面的命令,如:
#ldd `which sshd`
如果显示的库文件中有libwrap.so.o => /lib/libwrap.so.o ,则说明此应用程序受Tcp Wrapper访问控制。
Tcp Wrapper 要实现对某一个服务的访问控制要依赖于两个配置文件:/etc/hosts.allow 和/etc/hosts.deny .其中/etc/hosts.allow 是用来定义允许访问的配置文件,/etc/hosts.deny 是用来定义不允许访问的配置文件。
用户请求和Tcp Wrapper 进行访问控制的验证过程。
上图具体描述为:当一个用户请求到达某个服务时,Tcp Wrapper 就开始检查/etc/hosts.allow配置文件,如果其中定义了与此请求相匹配的规则,则用户的请求就可以访问;如果没有相匹配的规则,则检查/etc/hosts.deny 配置文件,如果定义了与此请求相匹配的规则,则用户的请求就不允许访问;如果这两个配置文件中定义的规则都没有被匹配到,则系统默认规则是允许此次请求的。
1. /etc/hosts.allow 和/etc/hosts.deny 的语法格式:
daemon_list: client_list [:options]
daemon_list 是进程列表,是某个服务的可执行程序的二进制文件的名字
client_list 是客户端列表
[:options] 是选项
(1)daemon_list: 格式:
sshd:IP |ALL 可执行程序后面可以跟具体的IP地址,也可以跟ALL
如:sshd:192.168.100.1 或者 sshd:ALL
也可以写成这样:sshd@IP
如:vsftpd@192.168.100.2
(2)client_list :格式
IP 如: 172.16.
network/mask 只接受完整长度的格式 如 :
HostName:
FQDN 如: www.discuz.com
.discuz.com 这样定义也是可以的
MACRO(宏定义):
ALL 表示所有的
EXCEPT 除了某一个IP地址
LOCAL 和本地主机同一网段的IP地址
KNOWN 主机名称可以被正常解析的
UNKNOWN 主机名称无法被正常解析的
PARANOID 正向解析与反向解析不匹配的
(3 ) [:options] 格式:
spawn echo “ ” 可以实现记录主机访问请求日志
如in.telnetd: 192.16. :spawn echo “ Someone Entered ,`date` ” >> /var/log/tcpwarpper.log
(4) Tcp Warpper 中定义的macro(宏)
%c client information (user@host)
%s service information (server@host)
%h client hostname
%p server pid
如:in.telnetd: 192.168. :spawn echo “Login attempt from %c to %s ” >> /var/log/tcpwrapper.log
2.练习:
(1) sshd 仅允许172.16.0.0/16网段访问
在/etc/hosts.allow 中定义:
sshd: 172.16.
在/etc/hosts.deny 中定义
sshd: ALL
(2)telnet服务不允许192.168.0.0/16访问,但是允许192.168.100.1访问,其他客户端不做限制
方法一:在/etc/hosts.allow中定义
in.telnetd: 192.168.100.1
在/etc/hosts.deny中定义
in.telnetd: 192.168.
方法二:在/etc/hosts.allow中定义
in.telnetd: ALL EXCEPT 192.168. EXCEPT 192.168.100.1
或者在/etc/hosts.deny中定义
in.telnetd: 192.168. EXCEPT 192.168.100.1
方法三:在/etc/hosts.allow中定义
in.telnetd: ALL EXCEPT 192.168. EXCEPT 192.168.100.1
在/etc/hosts.deny中定义
in.telnetd: ALL
二、Linux中进程类型和xinetd介绍
在Linux中进程通常分为两类,一类是:standalone ,称为独立守护进程;一类是:transient,称为非独立守护进程。独立守护进程是能够独立运行的进程,它的运行与否完全取决于自己,不受其他进程的控制;而非独立守护进程都由一个超级守护进程来代为管理,他们没有运行级别,靠继承管理他们的那个超级守护进程的运行级别来运行。独立守护进程响应服务的速度快,但是占用资源较多 ,而非独立守护进程响应服务的速度较慢,占用资源较少 。
xinetd 就是一个超级守护进程,可管理多个非独立的守护进程,其主配置文件在/etc/xinetd.conf 其管理的非独立守护进程配置文件在/etc/xinetd.d/*目录之下,分为若干个配置文件片段来存储的。
/etc/xinetd.conf配置文件主要有两部分:
(1)全局配置 对/etc/xinetd/*目录下所定义的服务都生效,是服务的默认配置
(2)服务配置 对/etc/xinetd/目录下的某一个具体服务进行定义
服务配置的格式:
service <service_name>
{
<attribute> <assign_op> <value> …….
}
其中<attribute>表示属性,<assign_op>是赋值操作符,<value>是值
#cd /etc/xinetd.d/目录下,会看到如下图所示的文件
1、我们以telnet为例进行介绍:
#vim telnet 显示内容如下
2、然后我们就可以在里面添加相应的访问控制规则了,规则主要有:
(1)定义日志文件
log_type = FILE /var/log/xinetd.log
(2)定义IP地址控制
only_from =
IP 仅允许哪一个IP地址
NETWORK 允许哪一个网段
HOSTNAME FQND 如:www.discuz.com
DOAMIN .discuz.com
no_access = 不允许哪一个IP地址访问
(3)定义时间控制
access_times = hh:mm-hh:mm
(4)定义监听的地址(提供某种服务的server的IP地址)
bind = IP 只让server的某一个IP提供服务
interface = eth# 定义接口
(5)定义资源访问控制
cps = argument1 argument2 用来控制每秒入站连接的个数
argument1 用来定义client每秒入站连接次数的最大值 ,默认值为50
argument2 如果超出连接的最大数,会临时禁用服务一段时间,argument2 就是用来定义临时禁用时长 ,默认时长为10s
per_source = 定义每个单独的客户端IP允许连接某个服务的最大请求数
instances = 定义某个服务的最大同时连接数
server_args = -c|-d|….. 向启动服务传递参数
banner = /path 可以将登陆服务后显示的信息定义在某一个文件中
如:banner = /etc/ssh.banner 在ssh.banner文件中写入要使用的信息即可
port = 指定端口
我们就可以在vim /etc/xinetd.d/telnet 中定义访问控制规则了,如下