tcp_wraper&xinetd 和telnet
一、xinetd简介
1、什么是xinetd
xinetd:eXtended InterNET Daemon 扩展的互联网守护程序
xinetd是新一代的网络守护进程服务程序,又叫超级守护进程,常用来管理多种轻量级Internet服务。xinetd提供类似于inetd + tcp_wrapper的功能,但是更加强大和安全。
2、Xinetd的缺点
当前最大的缺点是对RPC支持的不稳定,但是可以启动protmap,使它与xinetd共存来解决这个问题。
3、使用xinetd启动守护进程
原则上任何系统服务都可以使用xinetd,然而最适合的应该是那些常用的网络服务,同时,这个服务的请求数目和频繁程度不会太高。像DNS和Apache就不适合采用这种方式,而像FTP、Telnet、SSH等就适合使用xinetd模式。
二、xinetd的使用
llinux上有两类服务:
standalone : 独立守护进程
transient :非独立守护进程 依赖于超级进程 xinetd
xinetd为接收用户请求较少的服务专门提供监听功能,有请求时,xinetd临时地启动相应服务并响应请求,结束后又关掉相应的服务。
这种被xinetd管理的服务叫非独立守护进程又被称为瞬时守护进程:他们无需定义在运行级别下,只需要一次性地定义xinetd的运行级别
能自我管理,无需xinetd提供监听服务的进程叫独立(standalone)守护进程
1、那如何启动基于xinetd的服务?
例如,我想启动rsync服务
在/etc/inetd.d/目录下每个被xinetd管理的服务都有一个配置文件:
配置文件主要有两部分 :
1、全局配置(服务的默认配置)
2、服务配置
service <service_name>
{
<attribute> <assign_op> <value> <value> ...
...
}
向启动的server传递参数 :
server_args =
欢迎语 :
banner =
我们可以总结出:
非独立守护进程和独立守护进程不一样,非独立守护进程使用chkconfig既然设置开机是否运行,也设置服务当前开启和关闭,而独立守护进程chkconfig是仅设置开机在哪些运行级别下是否运行
瞬时守护进程依赖于xinetd监听端口,当xinetd服务没启动时,非独立守护进程启动着也没用
三、tcp_wrapper
1、tcp_wrapper简介
tcp_wrapper tcp包装器,
是一种访问控制工具,类似于iptables,可以作访问控制。
tcp_wrapper只能对基于tcp协议的服务作访问控制,但并不是所有基于tcp协议的服务都能实现用tcp wraper作访问控制。
2、tcp_wrapper工作机制
守护进程:tcpd,也可以说tcp_wrapper是一个库,程序依赖于tcp_wrapper就表明接受tcp_wrapper控制
配置文件:/etc/hosts.allow,/etc/hosts.deny
注意:
并非所有服务均能由tcp_wrapper控制
判断某服务程序是否能由tcp_wrap控制
动态编译:
ldd命令检测其是否链接至libwrap库上即可
libwarp.so.0 =>/lib64/libwarp.so.0
静态编译:
string /path/to/program
strings `which porgram` | grep host
如果出现以下某项说明也接受tcp_wrapper控制
hosts.allow
hosts.deny
tcp_wrapper实现访问控制主要依靠两个文件,一个是/etc.hosts.allow文件,另一个是/etc/hosts.deny文件从文件的名字上可以理解:一个是定义允许的,一个是定义拒绝的。那这两个文件生效的次序是怎样的呢?
说明:如图所示,N表示没有匹配的规则,Y表示有匹配的规则,OK表示允许访问,DENY表示拒绝访问。
匹配机制:
1.先检查/etc/hosts.allow,如果被允许,则直接放心
2.如果/etc/hosts.allow没有匹配项,则检查/etc/hosts.deny,如果被拒绝,则禁止访问;
3.如果二者均无匹配,则放行
3、tcp_wrapper配置
配置文件语法格式:
daemon_list:client_list [:options]
进程列表:客户端列表
daemon_list的格式:
Daemon_list 要写的可执行程序的二进制文件名。例ssh的二进制文件名sshd,http的二进制文件名为httpd
应用程序名称(不是进程名),如果有多个,用逗号分隔即可
ALL:匹配所有的列表
client_list:
ip地址:172.16.100.100
etwork address 不能使用长度格式,只能使用完整长度格式。例:172.16. 172.16.0.1/255.255.0.0 但不能使用172.16.0.1/16
主机名:www.magedu.com
网络地址/子网掩码:掩码仅允许使用长格式,不允许使用CIDR格式
172.16. 表示172.16.0.0/255.255.0.0
[:options]
在hosts.allow文件中使用deny选项:表示在hosts.allow文件中定义拒绝规则
在hosts.deny文件中使用allow选项:表示在hosts.deny文件中定义放行规则
tcp_wrapper有几个内置的宏:
用于client_list的有:ALL,KNOWN(主机名能正常解析的),UNKNOWN(主机名不能正常解析),PARANOID(主机名正反项解析不匹配的)
用于daemon_list的有:ALL
EXCEPT:除了不包含的意思。可以用户client和daemon之中,起到排除功能
例子: in.telnetd: 172.16. EXCEPT 172.16.251.105 in.telnetd: 172.16. :deny # 表示在deny这个172.16.0.0网段中的主机
spawn :启动
发起执行一条命令的意思,可以用来记录日志
%c:客户端信息 user@host
%s:服务端信息 server@host
%h:客户端主机名
%p:服务器上的进程PID
例:ssh允许172.16.0.0/16网段访问,记录日志。
sshd:172.16. :spawn echo ”someone login attempt from%c to %s” >> /var/log/tcpwrapper.log
man 5 hosts_access:获取其完整帮助信息
注意:
spaw要定义在客户端被哪个文件拒绝的那个文件里才生效
echo的信息无需加引号,否则,命令替换可能不会进行
练习:
使用tcp_wrapper控制vsftp服务仅允许172.16.0.0网络中的主机访问,但要拒绝172.16.200.中的所有主机,对所有的拒绝访问尝试使用记录日志