CentOS7服务访问控制列表(TCP Wrappers)

简介:

TCP_Wrappers工作在第四层(传输层)的安全工具,对有状态连接的特定服务进行安全检测并实现访问控制,对包含有libwrap.so库文件的程序就可以受TCP_Wrappers的安全控制。可以控制谁可以访问,常见的程序有rpcbind、vsftpd、sshd、telnet。

1、说明

Tcp_wrappers是红帽RHEL7系统中默认已经启用的一款流量监控程序、它能够根据来访主机地址与本机目标服务程序做允许或拒绝操作。换句话说,Linux系统中其实有两个层面的防火墙,第一种是前面讲到的基于TCP/IP协议的流量过滤防护工具,而Tcp_wrappers服务则是能够对系统服务进行允许和禁止的防火墙,从而在更高层面保护了Linux系统的安全运行。

2、工作原理

TCP_Wrappers有TCP的守护进程为tcpd,以ssh为例,当有ssh请求连接时,tcpd会截获请求,先读取系统管理员所设置的访问控制文件,符合要求,则会把这次连接请求转给真正的ssh进程,ssh进程完成后续工作,如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,并拒绝提供ssh服务。

f293eb35c6d5ab3e0f10cec3d4b8c0b8.png

3、使用TCP Wrappers服务访问控制列表生效的前提


sshd服务没有libwrap库文件,就无法实现tcp_wrapper控制,检查是否能支持tcp_wrapper控制关键是需要有libwrap库文件。

查询是否有libwrap库文件:

①若版本号支持,使用ldd $(which sshd)命令,查看sshd有无支持TCP Wrappers提供的libwrap.so函数库文件,查找执行结果里是否有libwrap.so.0=>/usr/lib64/libwrap.so.0这一行,通常应该没有

②ldd查看服务是否支持libwrap:

ldd `which sshd` |grep libwrap
ldd `which vsftpd` |grep libwrap

③strings命令列出服务是否支持libwrap:

strings `which sshd` |grep libwrap
strings `which vsftpd` |grep libwrap

④ldd /usr/bin/sshd |grep libwrap

如果没有就无法实现tcp_wrapper控制,原因是取决于它在编译的时候是否对libwrap库进行了编译,一般是安装的openssh版本太高了导致,openssh 6.7以后版本不再支持TCP Wrappers,可以使用rpm -qa openssh命令查看版本号,如果版本过高,建议卸载后安装较低的版本。网上也可以找支持TCP Wrappers的第三方补丁包。

解决方法:

卸载openssh,卸载命令yum remove openssh。卸载前最好先把openssh的rpm安装包事先放在服务器本地,几低于openssh6.7版本的rpm安装包,否则一旦卸载完并断开连接后,ssh无法使用,会比较麻烦。

先卸载原来高版本的openssh,但是要注意的是在生产环境中否确认卸载高版本,安装低版本,是否存在生产环境中依赖高版本的ssh服务。

rpm -e openssh-6.xp1-1.el7.x86_64.rpm --nodeps
rpm -e openssh-clients-6.xp1-1.el7.x86_64.rpm --nodeps
rpm -e openssh-server-6.xp1-1.el7.x86_64.rpm  --nodeps


使用rpm -ivh命令重新安装openssh低于6.7版本的软件。然后使用systemctl sshd start命令启动sshd服务
 

rpm -ivh openssh-6.xp1-1.el7.x86_64.rpm openssh-clients-6.xp1-1.el7.x86_64.rpm openssh-server-6.xp1-1.el7.x86_64.rpm --nodeps --force

再次查找sshd是否支持libwrap 

ldd `which sshd` |grep libwrap
ldd `which vsftpd` |grep libwrap
ldd /usr/bin/sshd |grep libwrap
ldd $(which sshd)

重启sshd服务,查看ssh的版本

systemctl restart sshd

ssh -V

4、控制列表文件(/etc/hosts.allow、/etc/hosts.deny)修改后会立即生效,系统将会先检查允许策略规则文件(/etc/hosts.allow),如果匹配到相应的允许策略则直接放行请求,如果没有匹配则会去进一步匹配拒绝策略规则文件(/etc/hosts.deny)的内容,有匹配到相应的拒绝策略就会直接拒绝该请求流量,如果两个文件全都没有匹配到的话也会默认放行这次的请求流量。

示例系统服务客户端类型示例满足示例的客户端列表
sshd单一主机192.168.8.1ip地址为192.168.8.1的主机
sshd指定网段192.169.8.ip段为192.168.8.0/24的主机
sshd指定网段192.168.8.0/255.255.255.0ip段为192.168.8.0/24的主机
指定DNS后缀.baidu.com所有DNS后缀为.baidu.com的主机
指定主机名称www.baidu.com主机名称为www.baidu.com的主机
sshd指定所有客户端ALL所有主机全部包括在内

注意!!!

在配置Tcp_wrappers服务前需要注意:

1.在写禁止项目时候一定要写上服务名称,而不是某种协议名称

2.建议先写拒绝规则(/etc/hosts.deny),再编写允许规则(/etc/hosts.allow)

5.TCP_Wrappers使用

TCP_Wrappers使用主要是两个配置文件/etc/hosts.allow、/etc/hosts.deny用于接收和拒绝TCP_Wrapers控制全的程序,可使用man帮助查看(man 5 hosts_access, man 5 hosts_options)

配置/etc/hosts.allow、/etc/hosts.deny两个文件

语法为:daemon_list@host: client_list  [:options :options....]

deamon_list:是程序的列表,可以是多个,是多个时,用,隔开

@host:可以没有,是我们的限制的网卡访问接口(自己的),设置允许或禁止别人从自己那个网口进入。这项不写,代表全部。

clients_list:访问者地址,如果需要控制用户很多,可以私用空格或,隔开

基于IP地址:192.168.8.1 192.168.8.

基于主机名:www.hedge.com .hedge.com较少用

基于网络/掩码:192.168.0.0/255.255.255.0

基于net/prefixlen:192.168.8.0/24(CentOS7)

基于网络组(NIS域):@mynetwork

内置ACL:ALL,LOCAL,KNOWN,UNKNOWN、PARANOID

ALL:所有主机

LOCAL:本地主机

KNOWN:主机名可解析为IP的

UNKNOWN:主机名无法解析为IP的

PARANOID:正向解析与反向解析不对应的主机

如:三台虚拟机示例:

CentOS7:192.168.1.1

CentOS6:192.168.1.2

CentOS5:192.168.1.3

示例1:

CentOS6拒绝CentOS7的ssh访问:

在centos6中可在/etc/hosts.deny中配置:

sshd@192.168.1.2:192.168.1.1

这样配置后,CnetOS7就无法ssh连接CentOS6了

示例2:

或者可以在centos6这样写(hosts.deny),即使用ssh,或者telnetd访问这个机器都是无法访问的,然后,我们就可以在hosts.allow中添加如下一行:

/etc/hosts.deny配置

in.telnetd,sshd:ALL

/etc/hosts.allow配置

sshd:192.168.1.2

这样配置后,CnetOS7就可以ssh连接CentOS6了

连接过程中,对方机器会按照顺序先检查/etc/hosts.allow,再检查/etc/hosts.deny。如果在allow中允许连接,就可以连接,即便是又在deny中添加了也可以连接,但是在allow中没有添加你的机器,在deny中设置了你的主机无法连接,那是无法连接上对方主机的。

示例3:

可以禁止后允许某个网段进行连接,以禁止为例:在centos6中的hosts.deny配置

即192.168.36.网段所有机器无法通过sshd这个连接程序访问到我的机器

in.telnetd,sshd@192.168.1.2:192.168.36.

示例4:

使用一个关键连词,EXCEPT,hosts.deny文件配置:

in.telnetd,sshd:ALL

hosts.allow文件配置如下:

sshd:192.168.1. EXCEPT 192.168.1.1

此时,cnetos7是不能访问centos6的,因为虽然在hosts.allow文件中设置了整个192.168.1.这个网段可以访问,但是使用了EXCEPT关键字将192.168.1.1排除了,所以centos7是不能访问centos6的

重写写一下hosts.allow文件:

sshd:192.168.1. EXCEPT 192.168.1.

再使用CentOS5和CentOS7连接CentOS6,是无法连接的,因为允许里面虽然允许了192.168.1.但是也排除了192.168.1.所以无法连接。

一些选项:

man 5 hosts_options查看更多使用方法

deny用在/etc/hosts/allow定义'拒绝'规则

如:vsftpd:192.168.:deny

allow用在/etc/hosts/deny定义'允许规则'

如:vsftpd:192.168.:allow

spawn启动一个外部程序完成执行的操作

twist实际动作是拒绝访问,使用指定的操作替换当前服务,标准I/O和ERROR发送到客户端默认至/dev/null

示例1:

在hosts.allow拒绝连接:

sshd:192.168.1.2:deny

虽然在hosts.allow文件中添加可用规则,但是使用了:deny,即将该地址拒绝掉。CentOS7访问不了CentOS6

示例2:

在hosts.deny拒绝连接:

sshd:192.168.1.2:allow

虽然在hosts.deny文件中添加可用规则,但是使用了:allow,即允许该地址访问ssh服务。CentOS7可以访问CentOS6

示例3:

使用spawn启用外部命令,就可以使用外部命令写日志文件

在hosts.allow中:

sshd,in.telnetd:192.168.111.:spawn echo "`date +'%%F %%T'` login from client\: %c to %d">>/var/log/tcpwrap.log

使用CentOS7访问CentOS6后,查看日志

tail /var/log/tcpwrap.log

在/etc/hosts.allow中添加,允许登录,并记录日志
在/etc/hosts.deny中添加,拒绝登录, 并记录日志

%c 客户端信息
%s 服务器端信息
%d 服务名
%p 守护进程的PID
%% 代表%
: 符号转译

示例4:

使用twist拒绝用户访问,并返回一个信息

sshd,in.telnetd:192.168.111.:twist echo "Hello I am T_T !"

输入命令ssh -V 192.168.1.1可以查看

调试工具:

tcpdmatch  [-d]  daemon[@host]  client -d 测试当前目录下的 hosts.allow和hosts.deny,在别人没连接时候,可以知道我们设置的那些IP是否可以连接我们的主机

如:tcpdmatch -d ssh 192.168.1.2

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值