阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

tcp_wrapper:简单的基于主机的访问控制工具

129次阅读
没有评论

共计 2690 个字符,预计需要花费 7 分钟才能阅读完成。

一、常用的主机访问控制工具

独立 (stand alone) 守护进程 (httpd,vsftpd)、瞬时(transient) 守护进程(rsync,tftp,telnet), 这两类守护进程都支持基于 iptables 进行控制。哪一端口运行客户端访问,哪一端口不允许客户端访问,基于主机做防火墙时,都能进行控制。

做主机防火墙时,有些瞬时守护进程,甚至是某些独立独立守护进程,还能够接受另一种方式,tcp_wrapper,来控制。

在众多的基于主机的安全访问控制中,tcp-wrapper 是简单而易于配置的一种。

在 linux 下能实现基于主机访问控制的常用工具有三个:iptables、tcp_wrapper、xinetd(超级守护进程)。

二、tcp_wrapper 简介

显而易见,只能控制 tcp 协议下的软件。

一般翻译为 tcp 包装器,能够实现监听在某一 tcp 服务上,对于进出某本主机区访问某一套接字的应用做检查,而且能够实现所谓授权访问。

简单来说,tcpwrapper 本身是一个守护进程,工作于 tcp 协议上。iptables 工作于内核的 tcp/ip 协议栈上,而 tcp_wrapper 工作于内核的 tcp/ip 协议栈的 tcp 协议上,而且是在 tcp 的入口处启动一个进程,监视每一个 tcp 服务的相关请求,同时把这个报文本身跟 tcp_wrapper 的配置文件中的放行规则或拒绝规则中的规则进行对比。若果一旦匹配,则给予放行或拒绝访问。

工作进程为:tcpd

工作在 tcp 包文所要经过的位置上,有且只有一个位置。工作于 tcp 协议层,比工作在网络层的 iptables 更高一层,因此可以和 iptables 结合使用。但 tcp_wrapper 的控制完成之后,iptables 就无需控制了,同理,iptables 控制完成之后,tcp_wrapper 也就无需控制了。二者可以有一个能完成控制就可以了。

iptables 既然能完成工作,为什么还需要 tcp_wrapper 呢?因为 tcp_wrapper 的配置非常简单。

配置文件:/etc/hosts.allow,/etc/hosts.deny

但是并非所有服务都能接受 tcp_wrapper 的控制,事实上,tcp_wrapper 与其说是一个服务,不如说是一个库更合适。因为所有的守护进程,都是工作在用户空间的,所以与其说 tcp_wrapper 是一个守护进程,不如说是一个库更合适。

所有的服务都能接受 iptables 控制,但并非所有都接受 tcp_wrapper 控制。只有用户在开发某个程序时,如果链接到这个库上,或者说依赖于这个库,就意味着他他是接受 tcp_wrapper 控制的。

三、使用 tcp_wrapper 控制

a). 只需将受控制程序名写入配置文件即可实现控制:

允许访问:/etc/hosts.allow

拒绝访问:/etc/hosts.deny

b). 控制原理

程序链接的库文件,会自动在用户访问服务时,基于 tcpd 检测

/etc/hosts.allow、/etc/hosts.deny 两个配置文件,并判断某一主机是否能够访问服务。

c). 匹配机制

1. 先检查 /etc/hosts.allow, 如果被允许,则直接放行;

2. 如果 /etc/hosts.allow 没有匹配项,则检查 /etc/hosts.deny;如果有匹配项则禁止访问;

3. 如果均无匹配,则默认放行。

d). 配置文件语法格式

daemo_list:client_list [:options]

daemon_list:

一定是应用程序名,不是进程名;

如果有多个,则用逗号隔开;

如果匹配所有,则用 ALL;

client_list:

IP 地址:172.16.100.100

主机名称:www.linuxmi.com

网络地址 / 子网掩码:(子网掩码只能使用长格式)

简短格式:

如:172.16. 表示 172.16.0.0/255.255.0.0

[:options]

deny 使在 hosts.allow 中选项 deny

allow 使在 hosts.deny 中选项 allow

这样的机制可以让我们只需写一个配置文件就可以将所有配置搞定

例:vim /etc/hosts.allow

in.telnetd: ALL EXCEPT 172.16.251.105 :deny

spawn 发起执行一条命令,比如:如果有人访问访问服务器,别拒绝了,这通常是一种恶意访问,或非正常访问,就可以使用 spawn echo 一些命令保存至日志中

vim /etc/hosts.allow

in.telnetd: 172.16 EXCEPT 172.16.251.105

vim /etc/hosts.deny

in.telnetd: ALL : spawn echo `date` login attempt from %c to %s >> /var/log/tcp_wrapper.log

%c:user@host

%s:server@host

%h: 客户端主机名

%p: 服务器上的进程 PID

获取完整帮助信息:man 5 hosts_access

注意:echo 的信息无需加引号,否则命令替换不会进行

e).tcp_wrapper 有几个内置的宏(Macro)

用于 client_list 的有:ALL,NONE,UNKNOW(主机名无法解析的地址),

PARANOID(正反向解析不匹配的地址)

用于 daemon_list 的有:ALL

两者都可以都可以用:EXCEPT(排除)

例:vim /etc/hosts.allow

in.telnetd: 172.16. EXCEPT 172.16.251.105

f). 事例

如果我们要定义仅放行某一网段,则定义 /etc/hosts.allow 放行网段,在 /etc/hosts.deny 定义拒绝所有主机。

演示控制:telnet

yum install telnet-server

ldd `which in.telnetd` 没有显示

ldd `which xinetd` 显示有,telnet 自己本身不监听程序,而是由 xinetd 监听,所有它是接受 tcp_wrapper 控制的。

chkconfig telnet on

service xinetd start

ss -tnl | grep 23

仅放行 172.16 网段:

vim /etc/hosts.allow

in.telnetd: 172.16.

vim /etc/hosts.deny

in.telnetd: ALL

不用重启,立即生效,因为工作在内核中的,和 iptables 一样立即生效

总结:

tcp_wrapper 确实非常简单而又易于配置。尤其是控制 ftp 服务时,强烈推荐,因为基于 iptables 的访问控制与 tcp_wrapper 相比,真的太复杂了。

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计2690字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中